Imported Upstream version 7.48.0 46/67046/1 upstream/7.48.0
authortaesubkim <taesub.kim@samsung.com>
Mon, 25 Apr 2016 01:21:23 +0000 (10:21 +0900)
committertaesubkim <taesub.kim@samsung.com>
Mon, 25 Apr 2016 01:27:58 +0000 (10:27 +0900)
Change-Id: Ibca5368d95ef0b73c945bb0df8b7ef9fc3e3bd82
Signed-off-by: Taesub Kim <taesub.kim@samsung.com>
2226 files changed:
CHANGES
CMake/CurlTests.c
CMake/FindGSS.cmake
CMake/OtherTests.cmake
CMakeLists.txt
COPYING
MacOSX-Framework
Makefile
Makefile.am
Makefile.in
README
RELEASE-NOTES
acinclude.m4
aclocal.m4
buildconf
buildconf.bat [new file with mode: 0644]
compile
config.guess
config.sub
configure
configure.ac
curl-config.in
depcomp
docs/BINDINGS
docs/BUGS
docs/CODE_OF_CONDUCT.md [new file with mode: 0644]
docs/CODE_STYLE.md [new file with mode: 0644]
docs/CONTRIBUTE
docs/DISTRO-DILEMMA [deleted file]
docs/FAQ
docs/FEATURES
docs/HISTORY
docs/HTTP-COOKIES
docs/HTTP2.md [new file with mode: 0644]
docs/INSTALL
docs/INSTALL.devcpp
docs/INTERNALS
docs/KNOWN_BUGS
docs/LIBCURL-STRUCTS [deleted file]
docs/LICENSE-MIXING
docs/MAIL-ETIQUETTE
docs/MANUAL
docs/Makefile.am
docs/Makefile.in
docs/RELEASE-PROCEDURE
docs/RESOURCES
docs/ROADMAP.md [new file with mode: 0644]
docs/SECURITY
docs/SSL-PROBLEMS
docs/SSLCERTS
docs/THANKS
docs/TODO
docs/TheArtOfHttpScripting
docs/VERSIONS
docs/curl-config.1
docs/curl-config.html
docs/curl-config.pdf
docs/curl.1
docs/curl.html
docs/curl.pdf
docs/examples/10-at-a-time.c
docs/examples/Makefile.am
docs/examples/Makefile.example
docs/examples/Makefile.in
docs/examples/Makefile.inc
docs/examples/Makefile.m32
docs/examples/Makefile.netware
docs/examples/README
docs/examples/anyauthput.c
docs/examples/asiohiper.cpp
docs/examples/cacertinmem.c
docs/examples/certinfo.c
docs/examples/chkspeed.c
docs/examples/cookie_interface.c
docs/examples/curlgtk.c
docs/examples/curlx.c
docs/examples/debug.c
docs/examples/evhiperfifo.c
docs/examples/externalsocket.c
docs/examples/fileupload.c
docs/examples/fopen.c
docs/examples/ftp-wildcard.c
docs/examples/ftpget.c
docs/examples/ftpgetinfo.c
docs/examples/ftpgetresp.c
docs/examples/ftpsget.c
docs/examples/ftpupload.c
docs/examples/ftpuploadresume.c
docs/examples/getinfo.c
docs/examples/getinmemory.c
docs/examples/getredirect.c [new file with mode: 0644]
docs/examples/ghiper.c
docs/examples/hiperfifo.c
docs/examples/href_extractor.c
docs/examples/htmltidy.c
docs/examples/htmltitle.cpp
docs/examples/http-post.c
docs/examples/http2-download.c [new file with mode: 0644]
docs/examples/http2-serverpush.c [new file with mode: 0644]
docs/examples/http2-upload.c [new file with mode: 0644]
docs/examples/httpcustomheader.c
docs/examples/httpput.c
docs/examples/https.c
docs/examples/imap-append.c
docs/examples/imap-copy.c
docs/examples/imap-create.c
docs/examples/imap-delete.c
docs/examples/imap-examine.c
docs/examples/imap-fetch.c
docs/examples/imap-list.c
docs/examples/imap-lsub.c
docs/examples/imap-multi.c
docs/examples/imap-noop.c
docs/examples/imap-search.c
docs/examples/imap-ssl.c
docs/examples/imap-store.c
docs/examples/imap-tls.c
docs/examples/makefile.dj
docs/examples/multi-app.c
docs/examples/multi-debugcallback.c
docs/examples/multi-double.c
docs/examples/multi-post.c
docs/examples/multi-single.c
docs/examples/multi-uv.c
docs/examples/multithread.c
docs/examples/opensslthreadlock.c
docs/examples/persistant.c
docs/examples/pop3-dele.c
docs/examples/pop3-list.c
docs/examples/pop3-multi.c
docs/examples/pop3-noop.c
docs/examples/pop3-retr.c
docs/examples/pop3-ssl.c
docs/examples/pop3-stat.c
docs/examples/pop3-tls.c
docs/examples/pop3-top.c
docs/examples/pop3-uidl.c
docs/examples/post-callback.c
docs/examples/postinmemory.c
docs/examples/postit2.c
docs/examples/progressfunc.c
docs/examples/resolve.c
docs/examples/rtsp.c
docs/examples/sampleconv.c
docs/examples/sendrecv.c
docs/examples/sepheaders.c
docs/examples/sessioninfo.c
docs/examples/sftpget.c
docs/examples/simple.c
docs/examples/simplepost.c
docs/examples/simplessl.c
docs/examples/smooth-gtk-thread.c
docs/examples/smtp-expn.c
docs/examples/smtp-mail.c
docs/examples/smtp-multi.c
docs/examples/smtp-ssl.c
docs/examples/smtp-tls.c
docs/examples/smtp-vrfy.c
docs/examples/synctime.c
docs/examples/threaded-ssl.c
docs/examples/url2file.c
docs/examples/usercertinmem.c
docs/examples/version-check.pl
docs/examples/xmlstream.c
docs/libcurl/ABI
docs/libcurl/Makefile.am
docs/libcurl/Makefile.in
docs/libcurl/curl_easy_cleanup.3
docs/libcurl/curl_easy_cleanup.html
docs/libcurl/curl_easy_cleanup.pdf
docs/libcurl/curl_easy_duphandle.3
docs/libcurl/curl_easy_duphandle.html
docs/libcurl/curl_easy_duphandle.pdf
docs/libcurl/curl_easy_escape.3
docs/libcurl/curl_easy_escape.html
docs/libcurl/curl_easy_escape.pdf
docs/libcurl/curl_easy_getinfo.3
docs/libcurl/curl_easy_getinfo.html
docs/libcurl/curl_easy_getinfo.pdf
docs/libcurl/curl_easy_init.3
docs/libcurl/curl_easy_init.html
docs/libcurl/curl_easy_init.pdf
docs/libcurl/curl_easy_pause.3
docs/libcurl/curl_easy_pause.html
docs/libcurl/curl_easy_pause.pdf
docs/libcurl/curl_easy_perform.3
docs/libcurl/curl_easy_perform.html
docs/libcurl/curl_easy_perform.pdf
docs/libcurl/curl_easy_recv.3
docs/libcurl/curl_easy_recv.html
docs/libcurl/curl_easy_recv.pdf
docs/libcurl/curl_easy_reset.3
docs/libcurl/curl_easy_reset.html
docs/libcurl/curl_easy_reset.pdf
docs/libcurl/curl_easy_send.3
docs/libcurl/curl_easy_send.html
docs/libcurl/curl_easy_send.pdf
docs/libcurl/curl_easy_setopt.3
docs/libcurl/curl_easy_setopt.html
docs/libcurl/curl_easy_setopt.pdf
docs/libcurl/curl_easy_strerror.3
docs/libcurl/curl_easy_strerror.html
docs/libcurl/curl_easy_strerror.pdf
docs/libcurl/curl_easy_unescape.3
docs/libcurl/curl_easy_unescape.html
docs/libcurl/curl_easy_unescape.pdf
docs/libcurl/curl_escape.3
docs/libcurl/curl_escape.html
docs/libcurl/curl_escape.pdf
docs/libcurl/curl_formadd.3
docs/libcurl/curl_formadd.html
docs/libcurl/curl_formadd.pdf
docs/libcurl/curl_formfree.3
docs/libcurl/curl_formfree.html
docs/libcurl/curl_formfree.pdf
docs/libcurl/curl_formget.3
docs/libcurl/curl_formget.html
docs/libcurl/curl_formget.pdf
docs/libcurl/curl_free.3
docs/libcurl/curl_free.html
docs/libcurl/curl_free.pdf
docs/libcurl/curl_getdate.3
docs/libcurl/curl_getdate.html
docs/libcurl/curl_getdate.pdf
docs/libcurl/curl_getenv.3
docs/libcurl/curl_getenv.html
docs/libcurl/curl_getenv.pdf
docs/libcurl/curl_global_cleanup.3
docs/libcurl/curl_global_cleanup.html
docs/libcurl/curl_global_cleanup.pdf
docs/libcurl/curl_global_init.3
docs/libcurl/curl_global_init.html
docs/libcurl/curl_global_init.pdf
docs/libcurl/curl_global_init_mem.3
docs/libcurl/curl_global_init_mem.html
docs/libcurl/curl_global_init_mem.pdf
docs/libcurl/curl_mprintf.3
docs/libcurl/curl_mprintf.html
docs/libcurl/curl_mprintf.pdf
docs/libcurl/curl_multi_add_handle.3
docs/libcurl/curl_multi_add_handle.html
docs/libcurl/curl_multi_add_handle.pdf
docs/libcurl/curl_multi_assign.3
docs/libcurl/curl_multi_assign.html
docs/libcurl/curl_multi_assign.pdf
docs/libcurl/curl_multi_cleanup.3
docs/libcurl/curl_multi_cleanup.html
docs/libcurl/curl_multi_cleanup.pdf
docs/libcurl/curl_multi_fdset.3
docs/libcurl/curl_multi_fdset.html
docs/libcurl/curl_multi_fdset.pdf
docs/libcurl/curl_multi_info_read.3
docs/libcurl/curl_multi_info_read.html
docs/libcurl/curl_multi_info_read.pdf
docs/libcurl/curl_multi_init.3
docs/libcurl/curl_multi_init.html
docs/libcurl/curl_multi_init.pdf
docs/libcurl/curl_multi_perform.3
docs/libcurl/curl_multi_perform.html
docs/libcurl/curl_multi_perform.pdf
docs/libcurl/curl_multi_remove_handle.3
docs/libcurl/curl_multi_remove_handle.html
docs/libcurl/curl_multi_remove_handle.pdf
docs/libcurl/curl_multi_setopt.3
docs/libcurl/curl_multi_setopt.html
docs/libcurl/curl_multi_setopt.pdf
docs/libcurl/curl_multi_socket.3
docs/libcurl/curl_multi_socket.html
docs/libcurl/curl_multi_socket.pdf
docs/libcurl/curl_multi_socket_action.3
docs/libcurl/curl_multi_socket_action.html
docs/libcurl/curl_multi_socket_action.pdf
docs/libcurl/curl_multi_strerror.3
docs/libcurl/curl_multi_strerror.html
docs/libcurl/curl_multi_strerror.pdf
docs/libcurl/curl_multi_timeout.3
docs/libcurl/curl_multi_timeout.html
docs/libcurl/curl_multi_timeout.pdf
docs/libcurl/curl_multi_wait.3
docs/libcurl/curl_multi_wait.html
docs/libcurl/curl_multi_wait.pdf
docs/libcurl/curl_share_cleanup.3
docs/libcurl/curl_share_cleanup.html
docs/libcurl/curl_share_cleanup.pdf
docs/libcurl/curl_share_init.3
docs/libcurl/curl_share_init.html
docs/libcurl/curl_share_init.pdf
docs/libcurl/curl_share_setopt.3
docs/libcurl/curl_share_setopt.html
docs/libcurl/curl_share_setopt.pdf
docs/libcurl/curl_share_strerror.3
docs/libcurl/curl_share_strerror.html
docs/libcurl/curl_share_strerror.pdf
docs/libcurl/curl_slist_append.3
docs/libcurl/curl_slist_append.html
docs/libcurl/curl_slist_append.pdf
docs/libcurl/curl_slist_free_all.3
docs/libcurl/curl_slist_free_all.html
docs/libcurl/curl_slist_free_all.pdf
docs/libcurl/curl_strequal.3
docs/libcurl/curl_strequal.html
docs/libcurl/curl_strequal.pdf
docs/libcurl/curl_unescape.3
docs/libcurl/curl_unescape.html
docs/libcurl/curl_unescape.pdf
docs/libcurl/curl_version.3
docs/libcurl/curl_version.html
docs/libcurl/curl_version.pdf
docs/libcurl/curl_version_info.3
docs/libcurl/curl_version_info.html
docs/libcurl/curl_version_info.pdf
docs/libcurl/index.html
docs/libcurl/libcurl-easy.3
docs/libcurl/libcurl-easy.html
docs/libcurl/libcurl-easy.pdf
docs/libcurl/libcurl-errors.3
docs/libcurl/libcurl-errors.html
docs/libcurl/libcurl-errors.pdf
docs/libcurl/libcurl-multi.3
docs/libcurl/libcurl-multi.html
docs/libcurl/libcurl-multi.pdf
docs/libcurl/libcurl-share.3
docs/libcurl/libcurl-share.html
docs/libcurl/libcurl-share.pdf
docs/libcurl/libcurl-symbols.3 [new file with mode: 0644]
docs/libcurl/libcurl-symbols.html [new file with mode: 0644]
docs/libcurl/libcurl-symbols.pdf [new file with mode: 0644]
docs/libcurl/libcurl-thread.3 [new file with mode: 0644]
docs/libcurl/libcurl-thread.html [new file with mode: 0644]
docs/libcurl/libcurl-thread.pdf [new file with mode: 0644]
docs/libcurl/libcurl-tutorial.3
docs/libcurl/libcurl-tutorial.html
docs/libcurl/libcurl-tutorial.pdf
docs/libcurl/libcurl.3
docs/libcurl/libcurl.html
docs/libcurl/libcurl.m4
docs/libcurl/libcurl.pdf
docs/libcurl/mksymbolsmanpage.pl [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_ACTIVESOCKET.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_ACTIVESOCKET.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CERTINFO.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CERTINFO.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CERTINFO.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONDITION_UNMET.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONNECT_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONNECT_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONNECT_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_TYPE.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_COOKIELIST.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_COOKIELIST.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_COOKIELIST.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_FILETIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_FILETIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_FILETIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HEADER_SIZE.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HEADER_SIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LASTSOCKET.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LASTSOCKET.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LASTSOCKET.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_IP.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_IP.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_PORT.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_PORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_LOCAL_PORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NUM_CONNECTS.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_NUM_CONNECTS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_OS_ERRNO.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_OS_ERRNO.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_IP.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_IP.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_PORT.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIMARY_PORT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIVATE.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIVATE.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PRIVATE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_URL.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_URL.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REDIRECT_URL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REQUEST_SIZE.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RESPONSE_CODE.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RESPONSE_CODE.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SSL_ENGINES.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SSL_ENGINES.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SSL_ENGINES.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TLS_SESSION.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TLS_SESSION.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TLS_SESSION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TOTAL_TIME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TOTAL_TIME.html [new file with mode: 0644]
docs/libcurl/opts/CURLINFO_TOTAL_TIME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html
docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf
docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html
docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf
docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3
docs/libcurl/opts/CURLMOPT_MAXCONNECTS.html
docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf
docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3
docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.html
docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf
docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3
docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.html
docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf
docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3
docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.html
docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf
docs/libcurl/opts/CURLMOPT_PIPELINING.3
docs/libcurl/opts/CURLMOPT_PIPELINING.html
docs/libcurl/opts/CURLMOPT_PIPELINING.pdf
docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3
docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.html
docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf
docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3
docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.html
docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf
docs/libcurl/opts/CURLMOPT_PUSHDATA.3 [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PUSHDATA.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PUSHDATA.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3 [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.html [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLMOPT_SOCKETDATA.3
docs/libcurl/opts/CURLMOPT_SOCKETDATA.html
docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf
docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3
docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.html
docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf
docs/libcurl/opts/CURLMOPT_TIMERDATA.3
docs/libcurl/opts/CURLMOPT_TIMERDATA.html
docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf
docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3
docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.html
docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf
docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3
docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.html
docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf
docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3
docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.html
docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf
docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3
docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.html
docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf
docs/libcurl/opts/CURLOPT_APPEND.3
docs/libcurl/opts/CURLOPT_APPEND.html
docs/libcurl/opts/CURLOPT_APPEND.pdf
docs/libcurl/opts/CURLOPT_AUTOREFERER.3
docs/libcurl/opts/CURLOPT_AUTOREFERER.html
docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf
docs/libcurl/opts/CURLOPT_BUFFERSIZE.3
docs/libcurl/opts/CURLOPT_BUFFERSIZE.html
docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf
docs/libcurl/opts/CURLOPT_CAINFO.3
docs/libcurl/opts/CURLOPT_CAINFO.html
docs/libcurl/opts/CURLOPT_CAINFO.pdf
docs/libcurl/opts/CURLOPT_CAPATH.3
docs/libcurl/opts/CURLOPT_CAPATH.html
docs/libcurl/opts/CURLOPT_CAPATH.pdf
docs/libcurl/opts/CURLOPT_CERTINFO.3
docs/libcurl/opts/CURLOPT_CERTINFO.html
docs/libcurl/opts/CURLOPT_CERTINFO.pdf
docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3
docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.html
docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_CHUNK_DATA.3
docs/libcurl/opts/CURLOPT_CHUNK_DATA.html
docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf
docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3
docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.html
docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3
docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.html
docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf
docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3
docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.html
docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.html
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.html
docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf
docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3
docs/libcurl/opts/CURLOPT_CONNECT_ONLY.html
docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf
docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3
docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.html
docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3
docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.html
docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3
docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.html
docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_COOKIE.3
docs/libcurl/opts/CURLOPT_COOKIE.html
docs/libcurl/opts/CURLOPT_COOKIE.pdf
docs/libcurl/opts/CURLOPT_COOKIEFILE.3
docs/libcurl/opts/CURLOPT_COOKIEFILE.html
docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf
docs/libcurl/opts/CURLOPT_COOKIEJAR.3
docs/libcurl/opts/CURLOPT_COOKIEJAR.html
docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf
docs/libcurl/opts/CURLOPT_COOKIELIST.3
docs/libcurl/opts/CURLOPT_COOKIELIST.html
docs/libcurl/opts/CURLOPT_COOKIELIST.pdf
docs/libcurl/opts/CURLOPT_COOKIESESSION.3
docs/libcurl/opts/CURLOPT_COOKIESESSION.html
docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf
docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3
docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.html
docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf
docs/libcurl/opts/CURLOPT_CRLF.3
docs/libcurl/opts/CURLOPT_CRLF.html
docs/libcurl/opts/CURLOPT_CRLF.pdf
docs/libcurl/opts/CURLOPT_CRLFILE.3
docs/libcurl/opts/CURLOPT_CRLFILE.html
docs/libcurl/opts/CURLOPT_CRLFILE.pdf
docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3
docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.html
docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf
docs/libcurl/opts/CURLOPT_DEBUGDATA.3
docs/libcurl/opts/CURLOPT_DEBUGDATA.html
docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf
docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3
docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.html
docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf
docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_DIRLISTONLY.3
docs/libcurl/opts/CURLOPT_DIRLISTONLY.html
docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf
docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3
docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.html
docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf
docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3
docs/libcurl/opts/CURLOPT_DNS_INTERFACE.html
docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.html
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.html
docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf
docs/libcurl/opts/CURLOPT_DNS_SERVERS.3
docs/libcurl/opts/CURLOPT_DNS_SERVERS.html
docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf
docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3
docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.html
docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf
docs/libcurl/opts/CURLOPT_EGDSOCKET.3
docs/libcurl/opts/CURLOPT_EGDSOCKET.html
docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf
docs/libcurl/opts/CURLOPT_ERRORBUFFER.3
docs/libcurl/opts/CURLOPT_ERRORBUFFER.html
docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf
docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3
docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.html
docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf
docs/libcurl/opts/CURLOPT_FAILONERROR.3
docs/libcurl/opts/CURLOPT_FAILONERROR.html
docs/libcurl/opts/CURLOPT_FAILONERROR.pdf
docs/libcurl/opts/CURLOPT_FILETIME.3
docs/libcurl/opts/CURLOPT_FILETIME.html
docs/libcurl/opts/CURLOPT_FILETIME.pdf
docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3
docs/libcurl/opts/CURLOPT_FNMATCH_DATA.html
docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf
docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3
docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.html
docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3
docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.html
docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf
docs/libcurl/opts/CURLOPT_FORBID_REUSE.3
docs/libcurl/opts/CURLOPT_FORBID_REUSE.html
docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf
docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3
docs/libcurl/opts/CURLOPT_FRESH_CONNECT.html
docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf
docs/libcurl/opts/CURLOPT_FTPPORT.3
docs/libcurl/opts/CURLOPT_FTPPORT.html
docs/libcurl/opts/CURLOPT_FTPPORT.pdf
docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3
docs/libcurl/opts/CURLOPT_FTPSSLAUTH.html
docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf
docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3
docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.html
docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf
docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3
docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.html
docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf
docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3
docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.html
docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf
docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3
docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.html
docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf
docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.3
docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.html
docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf
docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3
docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.html
docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf
docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3
docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.html
docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf
docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3
docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.html
docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf
docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3
docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.html
docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf
docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3
docs/libcurl/opts/CURLOPT_FTP_USE_PRET.html
docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf
docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3
docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.html
docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf
docs/libcurl/opts/CURLOPT_HEADER.3
docs/libcurl/opts/CURLOPT_HEADER.html
docs/libcurl/opts/CURLOPT_HEADER.pdf
docs/libcurl/opts/CURLOPT_HEADERDATA.3
docs/libcurl/opts/CURLOPT_HEADERDATA.html
docs/libcurl/opts/CURLOPT_HEADERDATA.pdf
docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3
docs/libcurl/opts/CURLOPT_HEADERFUNCTION.html
docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf
docs/libcurl/opts/CURLOPT_HEADEROPT.3
docs/libcurl/opts/CURLOPT_HEADEROPT.html
docs/libcurl/opts/CURLOPT_HEADEROPT.pdf
docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3
docs/libcurl/opts/CURLOPT_HTTP200ALIASES.html
docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf
docs/libcurl/opts/CURLOPT_HTTPAUTH.3
docs/libcurl/opts/CURLOPT_HTTPAUTH.html
docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf
docs/libcurl/opts/CURLOPT_HTTPGET.3
docs/libcurl/opts/CURLOPT_HTTPGET.html
docs/libcurl/opts/CURLOPT_HTTPGET.pdf
docs/libcurl/opts/CURLOPT_HTTPHEADER.3
docs/libcurl/opts/CURLOPT_HTTPHEADER.html
docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf
docs/libcurl/opts/CURLOPT_HTTPPOST.3
docs/libcurl/opts/CURLOPT_HTTPPOST.html
docs/libcurl/opts/CURLOPT_HTTPPOST.pdf
docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3
docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.html
docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf
docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3
docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.html
docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf
docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3
docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.html
docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf
docs/libcurl/opts/CURLOPT_HTTP_VERSION.3
docs/libcurl/opts/CURLOPT_HTTP_VERSION.html
docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf
docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3
docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.html
docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf
docs/libcurl/opts/CURLOPT_INFILESIZE.3
docs/libcurl/opts/CURLOPT_INFILESIZE.html
docs/libcurl/opts/CURLOPT_INFILESIZE.pdf
docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3
docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.html
docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf
docs/libcurl/opts/CURLOPT_INTERFACE.3
docs/libcurl/opts/CURLOPT_INTERFACE.html
docs/libcurl/opts/CURLOPT_INTERFACE.pdf
docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3
docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.html
docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf
docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3
docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.html
docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf
docs/libcurl/opts/CURLOPT_IOCTLDATA.3
docs/libcurl/opts/CURLOPT_IOCTLDATA.html
docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf
docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3
docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.html
docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf
docs/libcurl/opts/CURLOPT_IPRESOLVE.3
docs/libcurl/opts/CURLOPT_IPRESOLVE.html
docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf
docs/libcurl/opts/CURLOPT_ISSUERCERT.3
docs/libcurl/opts/CURLOPT_ISSUERCERT.html
docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf
docs/libcurl/opts/CURLOPT_KEYPASSWD.3
docs/libcurl/opts/CURLOPT_KEYPASSWD.html
docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf
docs/libcurl/opts/CURLOPT_KRBLEVEL.3
docs/libcurl/opts/CURLOPT_KRBLEVEL.html
docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf
docs/libcurl/opts/CURLOPT_LOCALPORT.3
docs/libcurl/opts/CURLOPT_LOCALPORT.html
docs/libcurl/opts/CURLOPT_LOCALPORT.pdf
docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3
docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.html
docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf
docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3
docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.html
docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf
docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3
docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.html
docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf
docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3
docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.html
docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf
docs/libcurl/opts/CURLOPT_MAIL_AUTH.3
docs/libcurl/opts/CURLOPT_MAIL_AUTH.html
docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf
docs/libcurl/opts/CURLOPT_MAIL_FROM.3
docs/libcurl/opts/CURLOPT_MAIL_FROM.html
docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf
docs/libcurl/opts/CURLOPT_MAIL_RCPT.3
docs/libcurl/opts/CURLOPT_MAIL_RCPT.html
docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf
docs/libcurl/opts/CURLOPT_MAXCONNECTS.3
docs/libcurl/opts/CURLOPT_MAXCONNECTS.html
docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf
docs/libcurl/opts/CURLOPT_MAXFILESIZE.3
docs/libcurl/opts/CURLOPT_MAXFILESIZE.html
docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf
docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3
docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.html
docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf
docs/libcurl/opts/CURLOPT_MAXREDIRS.3
docs/libcurl/opts/CURLOPT_MAXREDIRS.html
docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf
docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3
docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.html
docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf
docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3
docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.html
docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf
docs/libcurl/opts/CURLOPT_NETRC.3
docs/libcurl/opts/CURLOPT_NETRC.html
docs/libcurl/opts/CURLOPT_NETRC.pdf
docs/libcurl/opts/CURLOPT_NETRC_FILE.3
docs/libcurl/opts/CURLOPT_NETRC_FILE.html
docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf
docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3
docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.html
docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf
docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3
docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.html
docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf
docs/libcurl/opts/CURLOPT_NOBODY.3
docs/libcurl/opts/CURLOPT_NOBODY.html
docs/libcurl/opts/CURLOPT_NOBODY.pdf
docs/libcurl/opts/CURLOPT_NOPROGRESS.3
docs/libcurl/opts/CURLOPT_NOPROGRESS.html
docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf
docs/libcurl/opts/CURLOPT_NOPROXY.3
docs/libcurl/opts/CURLOPT_NOPROXY.html
docs/libcurl/opts/CURLOPT_NOPROXY.pdf
docs/libcurl/opts/CURLOPT_NOSIGNAL.3
docs/libcurl/opts/CURLOPT_NOSIGNAL.html
docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf
docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3
docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.html
docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf
docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3
docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.html
docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf
docs/libcurl/opts/CURLOPT_PASSWORD.3
docs/libcurl/opts/CURLOPT_PASSWORD.html
docs/libcurl/opts/CURLOPT_PASSWORD.pdf
docs/libcurl/opts/CURLOPT_PATH_AS_IS.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PATH_AS_IS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PATH_AS_IS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PIPEWAIT.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PIPEWAIT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PORT.3
docs/libcurl/opts/CURLOPT_PORT.html
docs/libcurl/opts/CURLOPT_PORT.pdf
docs/libcurl/opts/CURLOPT_POST.3
docs/libcurl/opts/CURLOPT_POST.html
docs/libcurl/opts/CURLOPT_POST.pdf
docs/libcurl/opts/CURLOPT_POSTFIELDS.3
docs/libcurl/opts/CURLOPT_POSTFIELDS.html
docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.html
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.html
docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf
docs/libcurl/opts/CURLOPT_POSTQUOTE.3
docs/libcurl/opts/CURLOPT_POSTQUOTE.html
docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf
docs/libcurl/opts/CURLOPT_POSTREDIR.3
docs/libcurl/opts/CURLOPT_POSTREDIR.html
docs/libcurl/opts/CURLOPT_POSTREDIR.pdf
docs/libcurl/opts/CURLOPT_PREQUOTE.3
docs/libcurl/opts/CURLOPT_PREQUOTE.html
docs/libcurl/opts/CURLOPT_PREQUOTE.pdf
docs/libcurl/opts/CURLOPT_PRIVATE.3
docs/libcurl/opts/CURLOPT_PRIVATE.html
docs/libcurl/opts/CURLOPT_PRIVATE.pdf
docs/libcurl/opts/CURLOPT_PROGRESSDATA.3
docs/libcurl/opts/CURLOPT_PROGRESSDATA.html
docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf
docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3
docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.html
docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf
docs/libcurl/opts/CURLOPT_PROTOCOLS.3
docs/libcurl/opts/CURLOPT_PROTOCOLS.html
docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf
docs/libcurl/opts/CURLOPT_PROXY.3
docs/libcurl/opts/CURLOPT_PROXY.html
docs/libcurl/opts/CURLOPT_PROXY.pdf
docs/libcurl/opts/CURLOPT_PROXYAUTH.3
docs/libcurl/opts/CURLOPT_PROXYAUTH.html
docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf
docs/libcurl/opts/CURLOPT_PROXYHEADER.3
docs/libcurl/opts/CURLOPT_PROXYHEADER.html
docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf
docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3
docs/libcurl/opts/CURLOPT_PROXYPASSWORD.html
docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf
docs/libcurl/opts/CURLOPT_PROXYPORT.3
docs/libcurl/opts/CURLOPT_PROXYPORT.html
docs/libcurl/opts/CURLOPT_PROXYPORT.pdf
docs/libcurl/opts/CURLOPT_PROXYTYPE.3
docs/libcurl/opts/CURLOPT_PROXYTYPE.html
docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf
docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3
docs/libcurl/opts/CURLOPT_PROXYUSERNAME.html
docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf
docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3
docs/libcurl/opts/CURLOPT_PROXYUSERPWD.html
docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf
docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3
docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.html
docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf
docs/libcurl/opts/CURLOPT_PUT.3
docs/libcurl/opts/CURLOPT_PUT.html
docs/libcurl/opts/CURLOPT_PUT.pdf
docs/libcurl/opts/CURLOPT_QUOTE.3
docs/libcurl/opts/CURLOPT_QUOTE.html
docs/libcurl/opts/CURLOPT_QUOTE.pdf
docs/libcurl/opts/CURLOPT_RANDOM_FILE.3
docs/libcurl/opts/CURLOPT_RANDOM_FILE.html
docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf
docs/libcurl/opts/CURLOPT_RANGE.3
docs/libcurl/opts/CURLOPT_RANGE.html
docs/libcurl/opts/CURLOPT_RANGE.pdf
docs/libcurl/opts/CURLOPT_READDATA.3
docs/libcurl/opts/CURLOPT_READDATA.html
docs/libcurl/opts/CURLOPT_READDATA.pdf
docs/libcurl/opts/CURLOPT_READFUNCTION.3
docs/libcurl/opts/CURLOPT_READFUNCTION.html
docs/libcurl/opts/CURLOPT_READFUNCTION.pdf
docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3
docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.html
docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf
docs/libcurl/opts/CURLOPT_REFERER.3
docs/libcurl/opts/CURLOPT_REFERER.html
docs/libcurl/opts/CURLOPT_REFERER.pdf
docs/libcurl/opts/CURLOPT_RESOLVE.3
docs/libcurl/opts/CURLOPT_RESOLVE.html
docs/libcurl/opts/CURLOPT_RESOLVE.pdf
docs/libcurl/opts/CURLOPT_RESUME_FROM.3
docs/libcurl/opts/CURLOPT_RESUME_FROM.html
docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf
docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3
docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.html
docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf
docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3
docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.html
docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf
docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3
docs/libcurl/opts/CURLOPT_RTSP_REQUEST.html
docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf
docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3
docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.html
docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf
docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3
docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.html
docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf
docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3
docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.html
docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf
docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3
docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.html
docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf
docs/libcurl/opts/CURLOPT_SASL_IR.3
docs/libcurl/opts/CURLOPT_SASL_IR.html
docs/libcurl/opts/CURLOPT_SASL_IR.pdf
docs/libcurl/opts/CURLOPT_SEEKDATA.3
docs/libcurl/opts/CURLOPT_SEEKDATA.html
docs/libcurl/opts/CURLOPT_SEEKDATA.pdf
docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3
docs/libcurl/opts/CURLOPT_SEEKFUNCTION.html
docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf
docs/libcurl/opts/CURLOPT_SERVICE_NAME.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SERVICE_NAME.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SERVICE_NAME.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SHARE.3
docs/libcurl/opts/CURLOPT_SHARE.html
docs/libcurl/opts/CURLOPT_SHARE.pdf
docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3
docs/libcurl/opts/CURLOPT_SOCKOPTDATA.html
docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf
docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3
docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.html
docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.html
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.html
docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf
docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3
docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.html
docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf
docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html
docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf
docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3
docs/libcurl/opts/CURLOPT_SSH_KEYDATA.html
docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf
docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3
docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.html
docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf
docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3
docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.html
docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf
docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3
docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.html
docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf
docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3
docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.html
docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf
docs/libcurl/opts/CURLOPT_SSLCERT.3
docs/libcurl/opts/CURLOPT_SSLCERT.html
docs/libcurl/opts/CURLOPT_SSLCERT.pdf
docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3
docs/libcurl/opts/CURLOPT_SSLCERTTYPE.html
docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf
docs/libcurl/opts/CURLOPT_SSLENGINE.3
docs/libcurl/opts/CURLOPT_SSLENGINE.html
docs/libcurl/opts/CURLOPT_SSLENGINE.pdf
docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3
docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.html
docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf
docs/libcurl/opts/CURLOPT_SSLKEY.3
docs/libcurl/opts/CURLOPT_SSLKEY.html
docs/libcurl/opts/CURLOPT_SSLKEY.pdf
docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3
docs/libcurl/opts/CURLOPT_SSLKEYTYPE.html
docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf
docs/libcurl/opts/CURLOPT_SSLVERSION.3
docs/libcurl/opts/CURLOPT_SSLVERSION.html
docs/libcurl/opts/CURLOPT_SSLVERSION.pdf
docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3
docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.html
docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf
docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3
docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.html
docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf
docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3
docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.html
docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf
docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3
docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.html
docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf
docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3
docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.html
docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf
docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_FALSESTART.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_FALSESTART.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3
docs/libcurl/opts/CURLOPT_SSL_OPTIONS.html
docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf
docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3
docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.html
docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf
docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3
docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.html
docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf
docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3
docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.html
docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf
docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STDERR.3
docs/libcurl/opts/CURLOPT_STDERR.html
docs/libcurl/opts/CURLOPT_STDERR.pdf
docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3
docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.html
docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf
docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3
docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.html
docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf
docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3
docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.html
docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf
docs/libcurl/opts/CURLOPT_TCP_NODELAY.3
docs/libcurl/opts/CURLOPT_TCP_NODELAY.html
docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf
docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3
docs/libcurl/opts/CURLOPT_TELNETOPTIONS.html
docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf
docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3
docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.html
docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf
docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3 [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.html [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.pdf [new file with mode: 0644]
docs/libcurl/opts/CURLOPT_TIMECONDITION.3
docs/libcurl/opts/CURLOPT_TIMECONDITION.html
docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf
docs/libcurl/opts/CURLOPT_TIMEOUT.3
docs/libcurl/opts/CURLOPT_TIMEOUT.html
docs/libcurl/opts/CURLOPT_TIMEOUT.pdf
docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3
docs/libcurl/opts/CURLOPT_TIMEOUT_MS.html
docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf
docs/libcurl/opts/CURLOPT_TIMEVALUE.3
docs/libcurl/opts/CURLOPT_TIMEVALUE.html
docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf
docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3
docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.html
docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf
docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3
docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.html
docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf
docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3
docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.html
docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf
docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3
docs/libcurl/opts/CURLOPT_TRANSFERTEXT.html
docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf
docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3
docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.html
docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf
docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3
docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.html
docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf
docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3
docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.html
docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf
docs/libcurl/opts/CURLOPT_UPLOAD.3
docs/libcurl/opts/CURLOPT_UPLOAD.html
docs/libcurl/opts/CURLOPT_UPLOAD.pdf
docs/libcurl/opts/CURLOPT_URL.3
docs/libcurl/opts/CURLOPT_URL.html
docs/libcurl/opts/CURLOPT_URL.pdf
docs/libcurl/opts/CURLOPT_USERAGENT.3
docs/libcurl/opts/CURLOPT_USERAGENT.html
docs/libcurl/opts/CURLOPT_USERAGENT.pdf
docs/libcurl/opts/CURLOPT_USERNAME.3
docs/libcurl/opts/CURLOPT_USERNAME.html
docs/libcurl/opts/CURLOPT_USERNAME.pdf
docs/libcurl/opts/CURLOPT_USERPWD.3
docs/libcurl/opts/CURLOPT_USERPWD.html
docs/libcurl/opts/CURLOPT_USERPWD.pdf
docs/libcurl/opts/CURLOPT_USE_SSL.3
docs/libcurl/opts/CURLOPT_USE_SSL.html
docs/libcurl/opts/CURLOPT_USE_SSL.pdf
docs/libcurl/opts/CURLOPT_VERBOSE.3
docs/libcurl/opts/CURLOPT_VERBOSE.html
docs/libcurl/opts/CURLOPT_VERBOSE.pdf
docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3
docs/libcurl/opts/CURLOPT_WILDCARDMATCH.html
docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf
docs/libcurl/opts/CURLOPT_WRITEDATA.3
docs/libcurl/opts/CURLOPT_WRITEDATA.html
docs/libcurl/opts/CURLOPT_WRITEDATA.pdf
docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3
docs/libcurl/opts/CURLOPT_WRITEFUNCTION.html
docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf
docs/libcurl/opts/CURLOPT_XFERINFODATA.3
docs/libcurl/opts/CURLOPT_XFERINFODATA.html
docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf
docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3
docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.html
docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf
docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3
docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.html
docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf
docs/libcurl/opts/Makefile.am
docs/libcurl/opts/Makefile.in
docs/libcurl/symbols-in-versions
docs/libcurl/symbols.pl
docs/mk-ca-bundle.html
docs/mk-ca-bundle.pdf
include/Makefile.in
include/curl/Makefile.am
include/curl/Makefile.in
include/curl/curl.h
include/curl/curlbuild.h
include/curl/curlbuild.h.cmake
include/curl/curlbuild.h.in
include/curl/curlrules.h
include/curl/curlver.h
include/curl/easy.h
include/curl/mprintf.h
include/curl/multi.h
include/curl/stdcheaders.h
include/curl/typecheck-gcc.h
install-sh
lib/CMakeLists.txt
lib/Makefile.Watcom
lib/Makefile.am
lib/Makefile.b32
lib/Makefile.in
lib/Makefile.inc
lib/Makefile.m32
lib/Makefile.netware
lib/Makefile.vc10
lib/Makefile.vc11 [new file with mode: 0644]
lib/Makefile.vc12 [new file with mode: 0644]
lib/Makefile.vc14 [new file with mode: 0644]
lib/Makefile.vc6
lib/Makefile.vc7 [new file with mode: 0644]
lib/Makefile.vc8
lib/Makefile.vc9
lib/README.ares [deleted file]
lib/README.curl_off_t [deleted file]
lib/README.curlx [deleted file]
lib/README.encoding [deleted file]
lib/README.hostip [deleted file]
lib/README.httpauth [deleted file]
lib/README.memoryleak [deleted file]
lib/README.multi_socket [deleted file]
lib/README.pingpong [deleted file]
lib/README.pipelining [deleted file]
lib/amigaos.c
lib/amigaos.h
lib/arpa_telnet.h
lib/asyn-ares.c
lib/asyn-thread.c
lib/asyn.h
lib/base64.c
lib/bundles.c [deleted file]
lib/bundles.h [deleted file]
lib/checksrc.pl
lib/checksrc.whitelist [new file with mode: 0644]
lib/config-amigaos.h
lib/config-dos.h
lib/config-mac.h
lib/config-os400.h
lib/config-riscos.h
lib/config-symbian.h
lib/config-tpf.h
lib/config-vxworks.h
lib/config-win32.h
lib/config-win32ce.h
lib/conncache.c
lib/conncache.h
lib/connect.c
lib/connect.h
lib/content_encoding.c
lib/content_encoding.h
lib/cookie.c
lib/cookie.h
lib/curl_addrinfo.c
lib/curl_addrinfo.h
lib/curl_base64.h
lib/curl_config.h.cmake
lib/curl_config.h.in
lib/curl_des.c [new file with mode: 0644]
lib/curl_des.h [new file with mode: 0644]
lib/curl_endian.c
lib/curl_endian.h
lib/curl_fnmatch.c
lib/curl_fnmatch.h
lib/curl_gethostname.c
lib/curl_gethostname.h
lib/curl_gssapi.c
lib/curl_gssapi.h
lib/curl_hmac.h
lib/curl_ldap.h
lib/curl_md4.h
lib/curl_md5.h
lib/curl_memory.h
lib/curl_memrchr.c
lib/curl_memrchr.h
lib/curl_multibyte.c
lib/curl_multibyte.h
lib/curl_ntlm.c
lib/curl_ntlm.h
lib/curl_ntlm_core.c
lib/curl_ntlm_core.h
lib/curl_ntlm_msgs.c
lib/curl_ntlm_msgs.h
lib/curl_ntlm_wb.c
lib/curl_ntlm_wb.h
lib/curl_printf.h [new file with mode: 0644]
lib/curl_rtmp.c
lib/curl_rtmp.h
lib/curl_sasl.c
lib/curl_sasl.h
lib/curl_sasl_gssapi.c
lib/curl_sasl_sspi.c
lib/curl_sec.h
lib/curl_setup.h
lib/curl_setup_once.h
lib/curl_sspi.c
lib/curl_sspi.h
lib/curl_threads.c
lib/curl_threads.h
lib/curlx.h
lib/dict.c
lib/dict.h
lib/dotdot.c
lib/dotdot.h
lib/easy.c
lib/easyif.h
lib/escape.c
lib/escape.h
lib/file.c
lib/file.h
lib/fileinfo.c
lib/fileinfo.h
lib/firefox-db2pem.sh
lib/formdata.c
lib/formdata.h
lib/ftp.c
lib/ftp.h
lib/ftplistparser.c
lib/ftplistparser.h
lib/getenv.c
lib/getinfo.c
lib/getinfo.h
lib/gopher.c
lib/gopher.h
lib/hash.c
lib/hash.h
lib/hmac.c
lib/hostasyn.c
lib/hostcheck.c
lib/hostcheck.h
lib/hostip.c
lib/hostip.h
lib/hostip4.c
lib/hostip6.c
lib/hostsyn.c
lib/http.c
lib/http.h
lib/http2.c
lib/http2.h
lib/http_chunks.c
lib/http_chunks.h
lib/http_digest.c
lib/http_digest.h
lib/http_negotiate.c
lib/http_negotiate.h
lib/http_negotiate_sspi.c
lib/http_proxy.c
lib/http_proxy.h
lib/idn_win32.c
lib/if2ip.c
lib/if2ip.h
lib/imap.c
lib/imap.h
lib/inet_ntop.c
lib/inet_ntop.h
lib/inet_pton.c
lib/inet_pton.h
lib/krb5.c
lib/ldap.c
lib/libcurl.plist
lib/libcurl.rc
lib/llist.c
lib/llist.h
lib/makefile.dj
lib/md4.c
lib/md5.c
lib/memdebug.c
lib/memdebug.h
lib/mk-ca-bundle.pl
lib/mk-ca-bundle.vbs
lib/mprintf.c
lib/multi.c
lib/multihandle.h
lib/multiif.h
lib/netrc.c
lib/netrc.h
lib/non-ascii.c
lib/non-ascii.h
lib/nonblock.c
lib/nonblock.h
lib/nwlib.c
lib/nwos.c
lib/objnames-test08.sh
lib/objnames-test10.sh
lib/objnames.inc
lib/openldap.c
lib/parsedate.c
lib/parsedate.h
lib/pingpong.c
lib/pingpong.h
lib/pipeline.c
lib/pipeline.h
lib/pop3.c
lib/pop3.h
lib/progress.c
lib/progress.h
lib/rawstr.c
lib/rawstr.h
lib/rtsp.c
lib/rtsp.h
lib/security.c
lib/select.c
lib/select.h
lib/sendf.c
lib/sendf.h
lib/setup-os400.h
lib/setup-vms.h
lib/share.c
lib/share.h
lib/sigpipe.h
lib/slist.c
lib/slist.h
lib/smb.c
lib/smb.h
lib/smtp.c
lib/smtp.h
lib/sockaddr.h
lib/socks.c
lib/socks.h
lib/socks_gssapi.c
lib/socks_sspi.c
lib/speedcheck.c
lib/speedcheck.h
lib/splay.c
lib/splay.h
lib/ssh.c
lib/ssh.h
lib/strdup.c
lib/strdup.h
lib/strequal.c
lib/strequal.h
lib/strerror.c
lib/strerror.h
lib/strtok.c
lib/strtok.h
lib/strtoofft.c
lib/strtoofft.h
lib/telnet.c
lib/telnet.h
lib/tftp.c
lib/tftp.h
lib/timeval.c
lib/timeval.h
lib/transfer.c
lib/transfer.h
lib/url.c
lib/url.h
lib/urldata.h
lib/version.c
lib/vtls/axtls.c
lib/vtls/axtls.h
lib/vtls/cyassl.c
lib/vtls/cyassl.h
lib/vtls/darwinssl.c [moved from lib/vtls/curl_darwinssl.c with 99% similarity]
lib/vtls/darwinssl.h [moved from lib/vtls/curl_darwinssl.h with 90% similarity]
lib/vtls/gskit.c
lib/vtls/gskit.h
lib/vtls/gtls.c
lib/vtls/gtls.h
lib/vtls/mbedtls.c [new file with mode: 0644]
lib/vtls/mbedtls.h [new file with mode: 0644]
lib/vtls/nss.c
lib/vtls/nssg.h
lib/vtls/openssl.c
lib/vtls/openssl.h
lib/vtls/polarssl.c
lib/vtls/polarssl.h
lib/vtls/polarssl_threadlock.c
lib/vtls/polarssl_threadlock.h
lib/vtls/schannel.c [moved from lib/vtls/curl_schannel.c with 69% similarity]
lib/vtls/schannel.h [moved from lib/vtls/curl_schannel.h with 94% similarity]
lib/vtls/vtls.c
lib/vtls/vtls.h
lib/warnless.c
lib/warnless.h
lib/wildcard.c
lib/wildcard.h
lib/x509asn1.c
lib/x509asn1.h
libcurl.pc.in
ltmain.sh
m4/curl-compilers.m4
m4/curl-confopts.m4
m4/curl-functions.m4
m4/curl-openssl.m4
m4/curl-reentrant.m4
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
m4/xc-lt-iface.m4
maketgz
missing
mkinstalldirs [deleted file]
packages/AIX/Makefile.in
packages/AIX/RPM/Makefile.in
packages/AIX/RPM/curl.spec.in
packages/EPM/Makefile.in
packages/Linux/Makefile.in
packages/Linux/RPM/Makefile.in
packages/Linux/RPM/curl-ssl.spec.in
packages/Linux/RPM/curl.spec.in
packages/Makefile.in
packages/NetWare/get_exp.awk
packages/NetWare/get_ver.awk
packages/OS400/README.OS400
packages/OS400/ccsidcurl.c
packages/OS400/ccsidcurl.h
packages/OS400/curl.inc.in
packages/OS400/initscript.sh
packages/OS400/make-lib.sh
packages/OS400/makefile.sh
packages/OS400/os400sys.c
packages/OS400/os400sys.h
packages/Solaris/Makefile.in
packages/Symbian/group/libcurl.mmp
packages/TPF/curl.mak
packages/Win32/Makefile.in
packages/Win32/README
packages/Win32/cygwin/Makefile.in
packages/Win32/cygwin/README
packages/vms/Makefile.in
packages/vms/build_gnv_curl_pcsi_desc.com
packages/vms/build_vms.com
packages/vms/curl_gnv_build_steps.txt
packages/vms/curlmsg.h
packages/vms/curlmsg_vms.h
packages/vms/gnv_link_curl.com
projects/README
projects/Windows/VC10/curl-all.sln [moved from projects/Windows/VC10/curl.sln with 86% similarity]
projects/Windows/VC10/lib/libcurl.sln
projects/Windows/VC10/lib/libcurl.vcxproj
projects/Windows/VC10/lib/libcurl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC10/src/curl.sln [moved from projects/Windows/VC10/src/curlsrc.sln with 86% similarity]
projects/Windows/VC10/src/curl.vcxproj [moved from projects/Windows/VC10/src/curlsrc.vcxproj with 81% similarity]
projects/Windows/VC10/src/curl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC11/curl-all.sln [moved from projects/Windows/VC11/curl.sln with 86% similarity]
projects/Windows/VC11/lib/libcurl.sln
projects/Windows/VC11/lib/libcurl.vcxproj
projects/Windows/VC11/lib/libcurl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC11/src/curl.sln [moved from projects/Windows/VC11/src/curlsrc.sln with 86% similarity]
projects/Windows/VC11/src/curl.vcxproj [moved from projects/Windows/VC11/src/curlsrc.vcxproj with 81% similarity]
projects/Windows/VC11/src/curl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC12/curl-all.sln [moved from projects/Windows/VC12/curl.sln with 86% similarity]
projects/Windows/VC12/lib/libcurl.sln
projects/Windows/VC12/lib/libcurl.vcxproj
projects/Windows/VC12/lib/libcurl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC12/src/curl.sln [moved from projects/Windows/VC12/src/curlsrc.sln with 86% similarity]
projects/Windows/VC12/src/curl.vcxproj [moved from projects/Windows/VC12/src/curlsrc.vcxproj with 81% similarity]
projects/Windows/VC12/src/curl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC14/curl-all.sln [new file with mode: 0644]
projects/Windows/VC14/lib/libcurl.sln [new file with mode: 0644]
projects/Windows/VC14/lib/libcurl.vcxproj [new file with mode: 0644]
projects/Windows/VC14/lib/libcurl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC14/src/curl.sln [new file with mode: 0644]
projects/Windows/VC14/src/curl.vcxproj [new file with mode: 0644]
projects/Windows/VC14/src/curl.vcxproj.filters [new file with mode: 0644]
projects/Windows/VC6/curl-all.dsw [moved from projects/Windows/VC6/curl.dsw with 87% similarity]
projects/Windows/VC6/lib/libcurl.dsp
projects/Windows/VC6/src/curl.dsp [moved from projects/Windows/VC6/src/curlsrc.dsp with 84% similarity]
projects/Windows/VC6/src/curl.dsw [moved from projects/Windows/VC6/src/curlsrc.dsw with 84% similarity]
projects/Windows/VC7.1/curl-all.sln [moved from projects/Windows/VC7.1/curl.sln with 99% similarity]
projects/Windows/VC7.1/lib/libcurl.vcproj
projects/Windows/VC7.1/src/curl.sln [moved from projects/Windows/VC7.1/src/curlsrc.sln with 98% similarity]
projects/Windows/VC7.1/src/curl.vcproj [moved from projects/Windows/VC7.1/src/curlsrc.vcproj with 92% similarity]
projects/Windows/VC7/curl-all.sln [moved from projects/Windows/VC7/curl.sln with 99% similarity]
projects/Windows/VC7/lib/libcurl.vcproj
projects/Windows/VC7/src/curl.sln [moved from projects/Windows/VC7/src/curlsrc.sln with 98% similarity]
projects/Windows/VC7/src/curl.vcproj [moved from projects/Windows/VC7/src/curlsrc.vcproj with 92% similarity]
projects/Windows/VC8/curl-all.sln [moved from projects/Windows/VC8/curl.sln with 99% similarity]
projects/Windows/VC8/lib/libcurl.sln
projects/Windows/VC8/lib/libcurl.vcproj
projects/Windows/VC8/src/curl.sln [moved from projects/Windows/VC8/src/curlsrc.sln with 99% similarity]
projects/Windows/VC8/src/curl.vcproj [moved from projects/Windows/VC8/src/curlsrc.vcproj with 86% similarity]
projects/Windows/VC9/curl-all.sln [moved from projects/Windows/VC9/curl.sln with 99% similarity]
projects/Windows/VC9/lib/libcurl.sln
projects/Windows/VC9/lib/libcurl.vcproj
projects/Windows/VC9/src/curl.sln [moved from projects/Windows/VC9/src/curlsrc.sln with 99% similarity]
projects/Windows/VC9/src/curl.vcproj [moved from projects/Windows/VC9/src/curlsrc.vcproj with 84% similarity]
projects/build-openssl.bat
projects/build-wolfssl.bat [new file with mode: 0644]
projects/checksrc.bat
scripts/Makefile.am [new file with mode: 0644]
scripts/Makefile.in [new file with mode: 0644]
scripts/zsh.pl [new file with mode: 0755]
src/CMakeLists.txt
src/Makefile.Watcom
src/Makefile.am
src/Makefile.b32
src/Makefile.in
src/Makefile.inc
src/Makefile.m32
src/Makefile.netware
src/Makefile.vc10
src/Makefile.vc11 [new file with mode: 0644]
src/Makefile.vc12 [new file with mode: 0644]
src/Makefile.vc14 [new file with mode: 0644]
src/Makefile.vc6
src/Makefile.vc7 [new file with mode: 0644]
src/Makefile.vc8
src/Makefile.vc9
src/checksrc.whitelist [new file with mode: 0644]
src/curl.rc
src/makefile.dj
src/mkhelp.pl
src/slist_wc.c [new file with mode: 0644]
src/slist_wc.h [new file with mode: 0644]
src/tool_binmode.c
src/tool_binmode.h
src/tool_bname.c
src/tool_bname.h
src/tool_cb_dbg.c
src/tool_cb_dbg.h
src/tool_cb_hdr.c
src/tool_cb_hdr.h
src/tool_cb_prg.c
src/tool_cb_prg.h
src/tool_cb_rea.c
src/tool_cb_rea.h
src/tool_cb_see.c
src/tool_cb_see.h
src/tool_cb_wrt.c
src/tool_cb_wrt.h
src/tool_cfgable.c
src/tool_cfgable.h
src/tool_convert.c
src/tool_convert.h
src/tool_dirhie.c
src/tool_dirhie.h
src/tool_doswin.c
src/tool_doswin.h
src/tool_easysrc.c
src/tool_easysrc.h
src/tool_formparse.c
src/tool_formparse.h
src/tool_getparam.c
src/tool_getparam.h
src/tool_getpass.c
src/tool_getpass.h
src/tool_help.c
src/tool_help.h
src/tool_helpers.c
src/tool_helpers.h
src/tool_homedir.c
src/tool_homedir.h
src/tool_hugehelp.c
src/tool_hugehelp.h
src/tool_libinfo.c
src/tool_libinfo.h
src/tool_main.c
src/tool_main.h
src/tool_metalink.c
src/tool_metalink.h
src/tool_mfiles.c
src/tool_mfiles.h
src/tool_msgs.c
src/tool_msgs.h
src/tool_operate.c
src/tool_operate.h
src/tool_operhlp.c
src/tool_operhlp.h
src/tool_panykey.c
src/tool_panykey.h
src/tool_paramhlp.c
src/tool_paramhlp.h
src/tool_parsecfg.c
src/tool_parsecfg.h
src/tool_sdecls.h
src/tool_setopt.c
src/tool_setopt.h
src/tool_setup.h
src/tool_sleep.c
src/tool_sleep.h
src/tool_strdup.c
src/tool_strdup.h
src/tool_urlglob.c
src/tool_urlglob.h
src/tool_util.c
src/tool_util.h
src/tool_version.h
src/tool_vms.c
src/tool_vms.h
src/tool_writeenv.c
src/tool_writeenv.h
src/tool_writeout.c
src/tool_writeout.h
src/tool_xattr.c
src/tool_xattr.h
test-driver [new file with mode: 0755]
tests/FILEFORMAT
tests/Makefile.am
tests/Makefile.in
tests/README
tests/certs/EdelCurlRoot-ca.cacert
tests/certs/EdelCurlRoot-ca.crt
tests/certs/EdelCurlRoot-ca.csr
tests/certs/EdelCurlRoot-ca.der
tests/certs/EdelCurlRoot-ca.key
tests/certs/EdelCurlRoot-ca.prm
tests/certs/Makefile.am
tests/certs/Makefile.in
tests/certs/Server-localhost-sv.crl
tests/certs/Server-localhost-sv.crt
tests/certs/Server-localhost-sv.csr
tests/certs/Server-localhost-sv.der
tests/certs/Server-localhost-sv.dhp
tests/certs/Server-localhost-sv.key
tests/certs/Server-localhost-sv.p12 [deleted file]
tests/certs/Server-localhost-sv.pem
tests/certs/Server-localhost-sv.prm
tests/certs/Server-localhost-sv.pub.der
tests/certs/Server-localhost-sv.pub.pem
tests/certs/Server-localhost.nn-sv.crl
tests/certs/Server-localhost.nn-sv.crt
tests/certs/Server-localhost.nn-sv.csr
tests/certs/Server-localhost.nn-sv.der
tests/certs/Server-localhost.nn-sv.dhp
tests/certs/Server-localhost.nn-sv.key
tests/certs/Server-localhost.nn-sv.pem
tests/certs/Server-localhost.nn-sv.prm
tests/certs/Server-localhost.nn-sv.pub.der
tests/certs/Server-localhost.nn-sv.pub.pem
tests/certs/Server-localhost0h-sv.crl
tests/certs/Server-localhost0h-sv.crt
tests/certs/Server-localhost0h-sv.csr
tests/certs/Server-localhost0h-sv.der
tests/certs/Server-localhost0h-sv.dhp
tests/certs/Server-localhost0h-sv.key
tests/certs/Server-localhost0h-sv.p12 [deleted file]
tests/certs/Server-localhost0h-sv.pem
tests/certs/Server-localhost0h-sv.prm
tests/certs/Server-localhost0h-sv.pub.der
tests/certs/Server-localhost0h-sv.pub.pem
tests/certs/scripts/Makefile.am
tests/certs/scripts/Makefile.in
tests/certs/scripts/genroot.sh
tests/certs/scripts/genserv.sh
tests/data/CMakeLists.txt [new file with mode: 0644]
tests/data/DISABLED
tests/data/Makefile.am
tests/data/Makefile.in
tests/data/Makefile.inc
tests/data/test1001
tests/data/test1002
tests/data/test1007
tests/data/test1008
tests/data/test1009
tests/data/test1021
tests/data/test1030
tests/data/test1032
tests/data/test1034
tests/data/test1035
tests/data/test1040
tests/data/test1041
tests/data/test1042
tests/data/test1043
tests/data/test1048
tests/data/test1049
tests/data/test1050
tests/data/test1058
tests/data/test1059
tests/data/test1060
tests/data/test1061
tests/data/test1071
tests/data/test1075
tests/data/test1077
tests/data/test1078
tests/data/test1079
tests/data/test1087
tests/data/test1088
tests/data/test1092
tests/data/test1093
tests/data/test1094
tests/data/test1095
tests/data/test1097
tests/data/test1098
tests/data/test1099
tests/data/test1100
tests/data/test1101
tests/data/test1104
tests/data/test1105
tests/data/test1106
tests/data/test1117
tests/data/test1121
tests/data/test1134
tests/data/test1135 [new file with mode: 0644]
tests/data/test1136 [new file with mode: 0644]
tests/data/test1137 [new file with mode: 0644]
tests/data/test1138 [new file with mode: 0644]
tests/data/test12
tests/data/test1204
tests/data/test1212
tests/data/test1213
tests/data/test1214
tests/data/test1215
tests/data/test1216
tests/data/test1218
tests/data/test1228
tests/data/test1229
tests/data/test1230
tests/data/test1232
tests/data/test1237
tests/data/test1238
tests/data/test1241 [new file with mode: 0644]
tests/data/test1242 [new file with mode: 0644]
tests/data/test1243 [new file with mode: 0644]
tests/data/test130
tests/data/test1310
tests/data/test1314
tests/data/test1319
tests/data/test1320
tests/data/test1321
tests/data/test1326
tests/data/test1331
tests/data/test1400
tests/data/test1401
tests/data/test1402
tests/data/test1403
tests/data/test1404
tests/data/test1405
tests/data/test1406
tests/data/test1407
tests/data/test1412
tests/data/test1415
tests/data/test1418
tests/data/test1420
tests/data/test1421 [new file with mode: 0644]
tests/data/test1422 [new file with mode: 0644]
tests/data/test1423 [new file with mode: 0644]
tests/data/test1424 [new file with mode: 0644]
tests/data/test1428
tests/data/test1434
tests/data/test1437 [new file with mode: 0644]
tests/data/test150
tests/data/test1509
tests/data/test1510
tests/data/test1513
tests/data/test1515
tests/data/test1525
tests/data/test1526
tests/data/test1527
tests/data/test1528
tests/data/test153
tests/data/test1530 [new file with mode: 0644]
tests/data/test1531 [new file with mode: 0644]
tests/data/test154
tests/data/test155
tests/data/test159
tests/data/test16
tests/data/test1600 [new file with mode: 0644]
tests/data/test1601 [new file with mode: 0644]
tests/data/test1602 [new file with mode: 0644]
tests/data/test1603 [new file with mode: 0644]
tests/data/test1604 [new file with mode: 0644]
tests/data/test162
tests/data/test164
tests/data/test165
tests/data/test167
tests/data/test168
tests/data/test169
tests/data/test17
tests/data/test170
tests/data/test171
tests/data/test172
tests/data/test176
tests/data/test179
tests/data/test1801
tests/data/test183
tests/data/test184
tests/data/test185
tests/data/test188
tests/data/test189
tests/data/test1902
tests/data/test194
tests/data/test2
tests/data/test2002
tests/data/test2003
tests/data/test2004
tests/data/test2023
tests/data/test2024
tests/data/test2025
tests/data/test2026
tests/data/test2027
tests/data/test2028
tests/data/test2029
tests/data/test2030
tests/data/test2031
tests/data/test2032
tests/data/test2033
tests/data/test2039 [new file with mode: 0644]
tests/data/test2040 [new file with mode: 0644]
tests/data/test2041 [new file with mode: 0644]
tests/data/test2042 [new file with mode: 0644]
tests/data/test2043 [new file with mode: 0644]
tests/data/test2044 [new file with mode: 0644]
tests/data/test2045 [new file with mode: 0644]
tests/data/test2046 [new file with mode: 0644]
tests/data/test2047 [new file with mode: 0644]
tests/data/test2048 [new file with mode: 0644]
tests/data/test206
tests/data/test208
tests/data/test209
tests/data/test213
tests/data/test217
tests/data/test233
tests/data/test234
tests/data/test239
tests/data/test242
tests/data/test243
tests/data/test245
tests/data/test246
tests/data/test252
tests/data/test253
tests/data/test254
tests/data/test255
tests/data/test256
tests/data/test257
tests/data/test258
tests/data/test259
tests/data/test263
tests/data/test264
tests/data/test265
tests/data/test267
tests/data/test27
tests/data/test271
tests/data/test273
tests/data/test275
tests/data/test278
tests/data/test279
tests/data/test283
tests/data/test284
tests/data/test285
tests/data/test286
tests/data/test287
tests/data/test299
tests/data/test3
tests/data/test301
tests/data/test31
tests/data/test320
tests/data/test33
tests/data/test38
tests/data/test400
tests/data/test401
tests/data/test402
tests/data/test403
tests/data/test404
tests/data/test405
tests/data/test406
tests/data/test407
tests/data/test408
tests/data/test409
tests/data/test43
tests/data/test46
tests/data/test5
tests/data/test503
tests/data/test506
tests/data/test519
tests/data/test522
tests/data/test523
tests/data/test539
tests/data/test540
tests/data/test547
tests/data/test548
tests/data/test549
tests/data/test550
tests/data/test551
tests/data/test552
tests/data/test554
tests/data/test555
tests/data/test56
tests/data/test561
tests/data/test563
tests/data/test565
tests/data/test590
tests/data/test598
tests/data/test61
tests/data/test62
tests/data/test63
tests/data/test64
tests/data/test65
tests/data/test67
tests/data/test68
tests/data/test69
tests/data/test70
tests/data/test706
tests/data/test707
tests/data/test72
tests/data/test73
tests/data/test79
tests/data/test8
tests/data/test80
tests/data/test81
tests/data/test82
tests/data/test824
tests/data/test828
tests/data/test83
tests/data/test837 [new file with mode: 0644]
tests/data/test838 [new file with mode: 0644]
tests/data/test839 [new file with mode: 0644]
tests/data/test84
tests/data/test840 [new file with mode: 0644]
tests/data/test841 [new file with mode: 0644]
tests/data/test842 [new file with mode: 0644]
tests/data/test843 [new file with mode: 0644]
tests/data/test844 [new file with mode: 0644]
tests/data/test845 [new file with mode: 0644]
tests/data/test85
tests/data/test87
tests/data/test870
tests/data/test874
tests/data/test88
tests/data/test883 [new file with mode: 0644]
tests/data/test884 [new file with mode: 0644]
tests/data/test885 [new file with mode: 0644]
tests/data/test886 [new file with mode: 0644]
tests/data/test887 [new file with mode: 0644]
tests/data/test888 [new file with mode: 0644]
tests/data/test889 [new file with mode: 0644]
tests/data/test89
tests/data/test890 [new file with mode: 0644]
tests/data/test90
tests/data/test908
tests/data/test91
tests/data/test92
tests/data/test922
tests/data/test93
tests/data/test938
tests/data/test94
tests/data/test942 [new file with mode: 0644]
tests/data/test943 [new file with mode: 0644]
tests/data/test944 [new file with mode: 0644]
tests/data/test945 [new file with mode: 0644]
tests/data/test946 [new file with mode: 0644]
tests/data/test947 [new file with mode: 0644]
tests/data/test948 [new file with mode: 0644]
tests/data/test949 [new file with mode: 0644]
tests/data/test95
tests/data/test96
tests/data/test99
tests/directories.pm
tests/extern-scan.pl [new file with mode: 0755]
tests/ftp.pm
tests/ftpserver.pl
tests/getpart.pm
tests/http_pipe.py
tests/httpserver.pl
tests/libtest/CMakeLists.txt [new file with mode: 0644]
tests/libtest/Makefile.am
tests/libtest/Makefile.in
tests/libtest/Makefile.inc
tests/libtest/chkhostname.c
tests/libtest/first.c
tests/libtest/lib1500.c
tests/libtest/lib1501.c
tests/libtest/lib1502.c
tests/libtest/lib1506.c
tests/libtest/lib1507.c
tests/libtest/lib1508.c
tests/libtest/lib1509.c
tests/libtest/lib1510.c
tests/libtest/lib1511.c
tests/libtest/lib1512.c
tests/libtest/lib1513.c
tests/libtest/lib1514.c
tests/libtest/lib1515.c
tests/libtest/lib1520.c
tests/libtest/lib1525.c
tests/libtest/lib1526.c
tests/libtest/lib1527.c
tests/libtest/lib1528.c
tests/libtest/lib1529.c
tests/libtest/lib1530.c [new file with mode: 0644]
tests/libtest/lib1531.c [new file with mode: 0644]
tests/libtest/lib1900.c
tests/libtest/lib500.c
tests/libtest/lib501.c
tests/libtest/lib502.c
tests/libtest/lib503.c
tests/libtest/lib504.c
tests/libtest/lib505.c
tests/libtest/lib506.c
tests/libtest/lib507.c
tests/libtest/lib508.c
tests/libtest/lib509.c
tests/libtest/lib510.c
tests/libtest/lib511.c
tests/libtest/lib512.c
tests/libtest/lib513.c
tests/libtest/lib514.c
tests/libtest/lib515.c
tests/libtest/lib516.c
tests/libtest/lib517.c
tests/libtest/lib518.c
tests/libtest/lib519.c
tests/libtest/lib520.c
tests/libtest/lib521.c
tests/libtest/lib523.c
tests/libtest/lib524.c
tests/libtest/lib525.c
tests/libtest/lib526.c
tests/libtest/lib530.c
tests/libtest/lib533.c
tests/libtest/lib536.c
tests/libtest/lib537.c
tests/libtest/lib539.c
tests/libtest/lib540.c
tests/libtest/lib541.c
tests/libtest/lib542.c
tests/libtest/lib543.c
tests/libtest/lib544.c
tests/libtest/lib547.c
tests/libtest/lib549.c
tests/libtest/lib552.c
tests/libtest/lib553.c
tests/libtest/lib554.c
tests/libtest/lib555.c
tests/libtest/lib556.c
tests/libtest/lib557.c
tests/libtest/lib558.c
tests/libtest/lib560.c
tests/libtest/lib562.c
tests/libtest/lib564.c
tests/libtest/lib566.c
tests/libtest/lib567.c
tests/libtest/lib568.c
tests/libtest/lib569.c
tests/libtest/lib570.c
tests/libtest/lib571.c
tests/libtest/lib572.c
tests/libtest/lib573.c
tests/libtest/lib574.c
tests/libtest/lib575.c
tests/libtest/lib576.c
tests/libtest/lib578.c
tests/libtest/lib579.c
tests/libtest/lib582.c
tests/libtest/lib583.c
tests/libtest/lib586.c
tests/libtest/lib590.c
tests/libtest/lib591.c
tests/libtest/lib597.c
tests/libtest/lib598.c
tests/libtest/lib599.c
tests/libtest/libauthretry.c
tests/libtest/libntlmconnect.c
tests/libtest/sethostname.c
tests/libtest/sethostname.h
tests/libtest/test.h
tests/libtest/testtrace.c
tests/libtest/testtrace.h
tests/libtest/testutil.c
tests/libtest/testutil.h
tests/mem-include-scan.pl
tests/memanalyze.pl
tests/rtspserver.pl
tests/runtests.1
tests/runtests.html
tests/runtests.pdf
tests/runtests.pl
tests/secureserver.pl
tests/server/CMakeLists.txt [new file with mode: 0644]
tests/server/Makefile.am
tests/server/Makefile.in
tests/server/fake_ntlm.c
tests/server/getpart.c
tests/server/getpart.h
tests/server/resolve.c
tests/server/rtspd.c
tests/server/server_setup.h
tests/server/server_sockaddr.h
tests/server/sockfilt.c
tests/server/sws.c
tests/server/testpart.c
tests/server/tftp.h
tests/server/tftpd.c
tests/server/util.c
tests/server/util.h
tests/serverhelp.pm
tests/sshhelp.pm
tests/sshserver.pl
tests/symbol-scan.pl
tests/testcurl.1
tests/testcurl.html
tests/testcurl.pdf
tests/testcurl.pl
tests/tftpserver.pl
tests/unit/Makefile.am
tests/unit/Makefile.in
tests/unit/Makefile.inc
tests/unit/curlcheck.h
tests/unit/unit1300.c
tests/unit/unit1301.c
tests/unit/unit1302.c
tests/unit/unit1303.c
tests/unit/unit1304.c
tests/unit/unit1305.c
tests/unit/unit1307.c
tests/unit/unit1308.c
tests/unit/unit1309.c
tests/unit/unit1330.c
tests/unit/unit1394.c
tests/unit/unit1395.c
tests/unit/unit1396.c
tests/unit/unit1397.c
tests/unit/unit1398.c
tests/unit/unit1600.c [new file with mode: 0644]
tests/unit/unit1601.c [new file with mode: 0644]
tests/unit/unit1602.c [new file with mode: 0644]
tests/unit/unit1603.c [new file with mode: 0644]
tests/unit/unit1604.c [new file with mode: 0644]
tests/valgrind.pm
winbuild/BUILD.WINDOWS.txt
winbuild/Makefile.msvc.names
winbuild/Makefile.vc
winbuild/MakefileBuild.vc

diff --git a/CHANGES b/CHANGES
index ddcd07e..da5ded9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
                                   Changelog
 
-Version 7.40.0 (7 Jan 2015)
+Version 7.48.0 (23 Mar 2016)
 
-Daniel Stenberg (7 Jan 2015)
-- RELEASE-NOTES: version 7.40.0
+Daniel Stenberg (23 Mar 2016)
+- RELEASE-NOTES: curl 7.48.0
 
-- darwinssl: fix session ID keys to only reuse identical sessions
-  
-  ...to avoid a session ID getting cached without certificate checking and
-  then after a subsequent _enabling_ of the check libcurl could still
-  re-use the session done without cert checks.
-  
-  Bug: http://curl.haxx.se/docs/adv_20150108A.html
-  Reported-by: Marc Hesse
+- THANKS: 15 new contributors from 7.48.0 release
 
-- tests: make sure CRLFs can't be used in URLs passed to proxy
+Jay Satiro (23 Mar 2016)
+- CURLINFO_TLS_SSL_PTR.3: Warn about limitations
   
-  Bug: http://curl.haxx.se/docs/adv_20150108B.html
+  Bug: https://github.com/curl/curl/issues/685
 
-- url-parsing: reject CRLFs within URLs
+Daniel Stenberg (22 Mar 2016)
+- Revert "sshserver: remove use of AuthorizedKeysFile2"
   
-  Bug: http://curl.haxx.se/docs/adv_20150108B.html
-  Reported-by: Andrey Labunets
-
-Steve Holme (7 Jan 2015)
-- ldap: Convert attribute output to UTF-8 when Unicode
-
-- ldap: Convert DN output to UTF-8 when Unicode
-
-Daniel Stenberg (7 Jan 2015)
-- hostip: remove 'stale' argument from Curl_fetch_addr proto
+  It seems we may have some autobuild problems after this commit went
+  in. Trying to see if a revert helps to get them back.
   
-  Also, remove the log output of the resolved name is NOT in the cache in
-  the spirit of only telling when something is actually happening.
+  This reverts commit 2716350d1f3edc8e929f6ceeee05051090f6d642.
 
-Steve Holme (7 Jan 2015)
-- ldap/imap: Fixed spelling mistake in comments and variable names
+- maketgz: add -j to make dist
   
-  Reported-by: Michael Osipov
+  ... makes it a lot faster
 
-Daniel Stenberg (7 Jan 2015)
-- RELEASE-NOTES: updated with ./contributors.sh output
+- libcurl-thread.3: minor nroff format fix
 
-Dan Fandrich (5 Jan 2015)
-- curl_multibyte.h: Eliminated some trailing whitespace
+- CURLINFO_TLS_SSL_PTR.3: minor nroff format fix
 
-Steve Holme (4 Jan 2015)
-- RELEASE-NOTES: Synced with ea93252ef1
-
-- ldap: Fixed Unicode usage for all Win32 builds
+- CODE_STYLE: indend example code
   
-  Otherwise, the fixes in the previous commits would only be applicable
-  to IDN and SSPI based builds and not others such as OpenSSL with LDAP
-  enabled.
-
-- ldap: Fixed memory leak from commit efb64fdf80
+  ... to make it look nicer in markdown outputa
 
-- ldap: Fix memory leak from commit 3a805c5cc1
+Jay Satiro (22 Mar 2016)
+- build-wolfssl: Update VS properties for wolfSSL v3.9.0
+  
+  - Do not use wolfSSL's sample user-setting files.
+  
+  wolfSSL starting in v3.9.0 has added their own sample user settings that
+  are applied by default, but we don't use them because we have our own
+  settings.
+  
+  - Do not use wolfSSL's Visual Studio Unicode character setting.
+  
+  wolfSSL Visual Studio projects use the Unicode character set however our
+  settings and options imitate mingw build which does not use the Unicode
+  character set. This does not appear to have any effect at the moment but
+  better safe than sorry.
+  
+  
+  These changes are backwards compatible with earlier versions.
 
-- ldap: Fixed attribute variable warnings when Unicode is enabled
+Steve Holme (22 Mar 2016)
+- hostip6: Fixed compilation warnings when verbose strings disabled
   
-  Use 'TCHAR *' for local attribute variable rather than 'char *'.
+  warning C4189: 'data': local variable is initialized but not referenced
+  
+  ...and some minor formatting/spacing changes.
 
-- ldap: Fixed DN variable warnings when Unicode is enabled
+Daniel Stenberg (21 Mar 2016)
+- sshserver: remove use of AuthorizedKeysFile2
+  
+  Support for the (undocumented) AuthorizedKeysFile2 was removed in
+  OpenSSH 5.9, released in September 2011
   
-  Use 'TCHAR *' for local DN variable rather than 'char *'.
+  Closes #715
 
-- ldap: Remove the unescape_elements() function
+Steve Holme (20 Mar 2016)
+- connect/ntlm/http: Fixed compilation warnings when verbose strings disabled
   
-  Due to the recent modifications this function is no longer used.
+  warning C4189: 'data': local variable is initialized but not referenced
 
-- ldap.c: Fixed compilation warning
+- openssl: Fixed compilation warning when /Wall enabled
   
-  ldap.c:98: warning: extra tokens at end of #endif directive
+  warning C4706: assignment within conditional expression
 
-- ldap: Fixed support for Unicode filter in Win32 search call
+- CODE_STYLE: Use boolean conditions
+  
+  Rather than use TRUE, FALSE, NULL, 0 or != 0 in if/while conditions.
+  
+  Additionally, corrected some example code to adhere to the recommended
+  coding style.
 
-- ldap.c: Fixed compilation warning
+- inet_pton.c: Fixed compilation warnings
   
-  ldap.c:802: warning: comparison between signed and unsigned integer
-              expressions
+  warning: conversion to 'unsigned char' from 'int' may alter its value
 
-- ldap: Fixed support for Unicode attributes in Win32 search call
+Daniel Stenberg (19 Mar 2016)
+- RELEASE-NOTES: synced with 80851028efc2fa9
 
-- ldap: Fixed memory leak from commit efb64fdf80
+- mbedtls: fix compiler warning
   
-  The unescapped DN was not freed after a successful character conversion.
+  vtls/mbedtls.h:67:36: warning: implicit declaration of function
+  ‘mbedtls_sha256’ [-Wimplicit-function-declaration]
 
-- ldap.c: Fixed compilation error
+Steve Holme (19 Mar 2016)
+- easy: Minor coding standard and style updates
   
-  ldap.c:738: error: macro "LDAP_TRACE" passed 2 arguments, but takes
-              just 1
+  Following commit c5744340db. Additionally removes the need for a second
+  'result code' variable as well.
 
-- ldap.c: Fixed compilation warning
+Jay Satiro (19 Mar 2016)
+- easy: Remove poll failure check in easy_transfer
+  
+  .. because curl_multi_wait can no longer signal poll failure.
+  
+  follow-up to 77e1726
   
-  ldap.c:89: warning: extra tokens at end of #endif directive
+  Bug: https://github.com/curl/curl/issues/707
 
-- ldap: Fixed support for Unicode DN in Win32 search call
+Steve Holme (19 Mar 2016)
+- build: Added missing Visual Studio filter files for VC10 onwards
+  
+  As these files don't need to contain references to the source files,
+  although typically do, added basic files which only include three
+  filters and don't require the project file generator to be modified.
+  
+  These files allow the source code to be viewed in the Solution Explorer
+  in versions of Visual Studio from 2010 onwards in the same manner as
+  previous versions did rather than one large view of files.
 
-- ldap: Fixed Unicode user and password in Win32 bind calls
+- ftp/imap/pop3/smtp: Fixed compilation warning when /Wall enabled
+  
+  warning C4706: assignment within conditional expression
 
-- ldap: Fixed Unicode host name in Win32 initialisation calls
+- config-w32.h: Fixed compilation warning when /Wall enabled
+  
+  warning C4668: 'USE_IPV6' is not defined as a preprocessor macro,
+                 replacing with '0' for '#if/#elif'
 
-- ldap: Use host.dispname for infof() connection failure messages
+- imap.c: Fixed compilation warning with /Wall enabled
   
-  As host.name may be encoded use dispname for infof() failure messages.
+  warning C4701: potentially uninitialized local variable 'size' used
+  
+  Technically this can't happen, as the usage of 'size' is protected by
+  'if(parsed)' and 'parsed' is only set after 'size' has been parsed.
+  
+  Anyway, lets keep the compiler happy.
 
-- ldap: Prefer 'CURLcode result' for curl result codes
+- KNOWN_BUGS: #93 Issue with CURLFORM_CONTENTLEN in arrays on 32-bit platforms
 
-- ldap: Pass write length in all Curl_client_write() calls
-  
-  As we get the length for the DN and attribute variables, and we know
-  the length for the line terminator, pass the length values rather than
-  zero as this will save Curl_client_write() from having to perform an
-  additional strlen() call.
+Daniel Stenberg (18 Mar 2016)
+- bump: the coming release is 7.48.0
 
-- ldap: Fixed attribute memory leaks on failed client write
+- configure: use cpp -P when needed
   
-  Fixed memory leaks from commit 086ad79970 as was noted in the commit
-  comments.
-
-- ldap: Fixed DN memory leaks on failed client write
+  Since gcc 5, the processor output can get split up on multiple lines
+  that made the configure script fail to figure out values from
+  definitions. The fix is to use cpp -P, and this fix now first checks if
+  cpp -P is necessary and then if cpp -P works before it uses that to
+  extract defined values.
   
-  Fixed memory leaks from commit 086ad79970 as was noted in the commit
-  comments.
+  Fixes #719
 
-- curl_ntlm_core.c: Fixed compilation warning from commit 1cb17b2a5d
+Steve Holme (18 Mar 2016)
+- formdata.c: Fixed compilation warning
   
-  curl_ntlm_core.c:146: warning: passing 'DES_cblock' (aka 'unsigned char
-                        [8]') to parameter of type 'char *' converts
-                        between pointers to integer types with different
-                        sign
-
-- ntlm: Use extend_key_56_to_64() for all cryptography engines
+  formdata.c:390: warning: cast from pointer to integer of different size
+  
+  Introduced in commit ca5f9341ef this happens because a char*, which is
+  32-bits wide in 32-bit land, is being cast to a curl_off_t which is
+  64-bits wide where 64-bit integers are supported by the compiler.
   
-  Rather than duplicate the code in setup_des_key() for OpenSSL and in
-  extend_key_56_to_64() for non-OpenSSL based crypto engines, as it is
-  the same, use extend_key_56_to_64() for all engines.
+  This doesn't happen in 64-bit land as a pointer is the same size as a
+  curl_off_t.
+  
+  This fix doesn't address the fact that a 64-bit value cannot be used
+  for CURLFORM_CONTENTLEN when set in a form array and compiled on a
+  32-bit platforms, it does at least suppress the compilation warning.
 
-- RELEASE-NOTES: Synced with 34f0bd110f
+Daniel Stenberg (18 Mar 2016)
+- FAQ: 2.5 Install libcurl for both 32bit and 64bit?
 
-- curl_ntlm_core.c: Fixed compilation warning
-  
-  curl_ntlm_core.c:458: warning: 'ascii_uppercase_to_unicode_le' defined
-                        but not used
+- [Gisle Vanem brought this change]
 
-- endian: Fixed bit-shift in 64-bit integer read functions
+  openssl: adapt to API breakage in ERR_remove_thread_state()
   
-  From commit 43792592ca and 4bb5a351b2.
+  The OpenSSL API change that broke this is "Convert ERR_STATE to new
+  multi-threading API": openssl commit 8509dcc.
   
-  Reported-by: Michael Osipov
+  Closes #713
 
-- smb: Use endian functions for reading NBT and message size values
+- version: init moved to private name space, added protos
+  
+  follow-up to 80015cdd52145
 
-- endian: Added big endian read functions
+- openssl: verbose: show matching SAN pattern
+  
+  ... to allow users to see which specfic wildcard that matched when such
+  is used.
+  
+  Also minor logic cleanup to simplify the code, and I removed all tabs
+  from verbose strings.
 
-- endian: Added 64-bit integer read function
+Jay Satiro (16 Mar 2016)
+- version: thread safety
 
-- COPYING: Bumped copyright year to 2015
+Steve Holme (16 Mar 2016)
+- transfer: Removed redundant HTTP authentication include files
+  
+  It would also seem that share.h is not required here either as there
+  are no references to the Curl_share structure or functions.
 
-- version: Bump copyright year to 2015
+- easy: Removed redundant HTTP authentication include files
 
-- smb.c: Fixed compilation warnings
+Jay Satiro (15 Mar 2016)
+- CURLOPT_SSLENGINE.3: Only for OpenSSL built with engine support
   
-  smb.c:780: warning: passing 'char *' to parameter of type 'unsigned
-             char *' converts between pointers to integer types with
-             different sign
-  smb.c:781: warning: passing 'char *' to parameter of type 'unsigned
-             char *' converts between pointers to integer types with
-             different sign
-  smb.c:804: warning: passing 'char *' to parameter of type 'unsigned
-             char *' converts between pointers to integer types with
-             different sign
+  Bug: https://curl.haxx.se/mail/lib-2016-03/0150.html
+  Reported-by: Oliver Graute
 
-- smb: Use endian functions for reading length and offset values
+Steve Holme (15 Mar 2016)
+- curl_sasl: Minor code indent fixes
 
-- endian: Added 16-bit integer write function
+Daniel Stenberg (14 Mar 2016)
+- runtests: mention when run event-based
 
-- endian: Fixed Linux compilation issues
+- easy: add check to malloc() when running event-based
   
-  Having files named endian.[c|h] seemed to cause issues under Linux so
-  renamed them both to have the curl_ prefix in the filenames.
+  ... to allow torture tests then too.
+
+- memdebug: skip logging the limit countdown, fflush when reached
 
-- [Julien Nabet brought this change]
+- CODE_STYLE: Space around operators
+  
+  As just discussed on the mailing list, also document how we prefer
+  spacing in expressions.
 
-  lib1900.c: Fixed cppcheck error
+- curl: glob_range: no need to check unsigned variable for negative
   
-  lib1900.c:182: (style) Array index 'handlenum' is used before limits
-                 check
+  cppcheck warned:
   
-  Bug: https://github.com/bagder/curl/pull/133
+  [src/tool_urlglob.c:283]: (style) Checking if unsigned variable 'step_n'
+  is less than zero.
 
-- endian: Added standard function descriptions
+- CODE_STYLE: add example for indent style as well
 
-- endian: Renamed functions for curl API naming convention
+- CODE_STYLE: mention braces for functions too
 
-- endian: Moved write functions to new module
+- docs/Makefile.am: include CODE_STYLE in tarball too
 
-- endian: Moved read functions to new module
+- CONTRIBUTE: moved out code style to a separate document
 
-- endian: Introduced endian module
+- CODE_STYLE: initial version
   
-  To allow the little endian functions, currently used in two of the NTLM
-  source files, to be used by other modules such as the SMB module.
-
-- sepheaders.c: Applied curl oding standards
+  Ripped out from CONTRIBUTE into its own document, but also extended from
+  there.
 
-- [Julien Nabet brought this change]
+- curl_sasl.c: minor code indent fixes
 
-  sepheaders.c: Fixed resource leak on failure
-
-- vtls: Use '(void) arg' for unused parameters
+- multi: simplified singlesocket
   
-  Prefer void for unused parameters, rather than assigning an argument to
-  itself as a) unintelligent compilers won't optimize it out, b) it can't
-  be used for const parameters, c) it will cause compilation warnings for
-  clang with -Wself-assign and d) is inconsistent with other areas of the
-  curl source code.
+  Since sh_getentry() now checks for invalid sockets itself and by
+  narrowing the scope of the remove_sock_from_hash variable.
 
-- smb.c: Fixed compilation warning
+- multi: introduce sh_getentry() for looking up sockets in the sockhash
   
-  smb.c:586: warning: conversion to 'short unsigned int' from 'int' may
-             alter its value
+  Simplify the code by using a single entry that looks for a socket in the
+  socket hash. As indicated in #712, the code looked for CURL_SOCKET_BAD
+  at some point and that is ineffective/wrong and this makes it easier to
+  avoid that.
 
-- [Bill Nagel brought this change]
+- [Jaime Fullaondo brought this change]
 
-  smb: Use the connection's upload buffer
+  multi hash: ensure modulo performed on curl_socket_t
   
-  Use the connection's upload buffer instead of allocating our own send
-  buffer.
+  Closes #712
 
-- RELEASE-NOTES: Synced with 1933f9d33c
+Steve Holme (13 Mar 2016)
+- base64: Minor coding standard and style updates
 
-- schannel: Moved the ISC return flag definitions to the SSPI module
-  
-  Moved our Initialize Security Context return attribute definitions to
-  the SSPI module, as a) these can be used by other SSPI based providers
-  and b) the ISC required attributes are defined there.
+- base64: Use 'CURLcode result' for curl result codes
 
-- [Bill Nagel brought this change]
+- negotiate: Use 'CURLcode result' for curl result codes
 
-  smb: Close the connection after a failed client write
+Daniel Stenberg (13 Mar 2016)
+- [Maksim Kuzevanov brought this change]
 
-- darwinssl: Fixed compilation warning
+  multi_runsingle: avoid loop in CURLM_STATE_WAITPROXYCONNECT
   
-  vtls.c:683:43: warning: unused parameter 'data'
+  Closes #703
 
-- sockfilt.c: Fixed compilation warnings
-  
-  sockfilt.c:288: warning: conversion to 'DWORD' from 'size_t' may alter
-                  its value
-  sockfilt.c:291: warning: conversion to 'DWORD' from 'size_t' may alter
-                  its value
-  sockfilt.c:323: warning: conversion to 'DWORD' from 'size_t' may alter
-                  its value
-  sockfilt.c:326: warning: conversion to 'DWORD' from 'size_t' may alter
-                  its value
+- TODO: Use the RFC6265 test suite
 
-- test1509: Fixed compilation warning
-  
-  lib1509.c:93:18: warning: conversion to 'long int' from 'size_t' may
-                   alter its value
+Steve Holme (13 Mar 2016)
+- checksrc.bat: Added the ability to scan src and lib source independently
 
-- test556: Fixed compilation warning
+- digest: Use boolean based success code for Curl_sasl_digest_get_pair()
   
-  lib556.c:90: warning: conversion to 'unsigned int' from 'size_t' may
-               alter its value
+  Rather than use a 0 and 1 integer base result code use a TRUE / FALSE
+  based success code.
 
-- sasl_gssapi: Fixed use of dummy username with real username
+- digest: Corrected some typos in comments
 
-- vtls: Fixed compilation warning and an ignored return code
-  
-  curl_schannel.h:123: warning: right-hand operand of comma expression
-                       has no effect
-  
-  Some instances of the curlssl_close_all() function were declared with a
-  void return type whilst others as int. The schannel version returned
-  CURLE_NOT_BUILT_IN and others simply returned zero, but in all cases the
-  return code was ignored by the calling function Curl_ssl_close_all().
-  
-  For the time being and to keep the internal API consistent, changed all
-  declarations to use a void return type.
-  
-  To reduce code we might want to consider removing the unimplemented
-  versions and use a void #define like schannel does.
+- krb5: Corrected some typos in function descriptions
+
+- ntlm: Corrected some typos in function descriptions
 
-Daniel Stenberg (28 Dec 2014)
-- TODO: 2.3 Better support for same name resolves
+- url: Corrected indentation when calling idna_to_ascii_lz()
 
-Steve Holme (28 Dec 2014)
-- test1520: Fixed initial teething problems
+- idn_win32: Use boolean based success codes
   
-  * Missing initialisation of upload status caused a seg fault
-  * Missing data termination caused corrupt data to be uploaded
-  * Data verification should be performed in <upload> element
-  * Added missing recipient list cleanup
+  Rather than use 0 and 1 integer base result codes use a FALSE / TRUE
+  based success code.
 
-- test1520: Fixed compilation errors
+Daniel Stenberg (10 Mar 2016)
+- idn_win32.c: warning: Trailing whitespace
 
-- tests: Added test for bug #1456
+Steve Holme (10 Mar 2016)
+- idn_win32.c: Fixed compilation warning from commit 9e7fcd4291
+  
+  warning C4267: 'function': conversion from 'size_t' to 'int',
+                 possible loss of data
 
-- checksrc.bat: Fixed a problem opening files with spaces in the filename
+Daniel Stenberg (10 Mar 2016)
+- THANKS-filter: unify Michael König
 
-- openldap: Prefer use of 'CURLcode result'
+- RELEASE-NOTES: synced with 863c5766dd
 
-- openldap: Use 'LDAPMessage *msg' for messages
+- ftp: remove a check for NULL(!)
   
-  This frees up the 'result' variable for CURLcode based result codes.
-
-- nss: Don't ignore Curl_extract_certinfo() OOM failure
+  ... as it implies we need to check for that on all the other variable
+  references as well (as Coverity otherwise warns us for missing NULL
+  checks), and we're alredy making sure that the pointer is never NULL.
 
-- nss: Don't ignore Curl_ssl_init_certinfo() OOM failure
-
-- nss: Use 'CURLcode result' for curl result codes
+- cookies: first n/v pair in Set-Cookie: is the cookie, then parameters
+  
+  RFC 6265 section 4.1.1 spells out that the first name/value pair in the
+  header is the actual cookie name and content, while the following are
+  the parameters.
   
-  ...and don't use CURLE_OK in failure/success comparisons.
+  libcurl previously had a more liberal approach which causes significant
+  problems when introducing new cookie parameters, like the suggested new
+  cookie priority draft.
+  
+  The previous logic read all n/v pairs from left-to-right and the first
+  name used that wassn't a known parameter name would be used as the
+  cookie name, thus accepting "Set-Cookie: Max-Age=2; person=daniel" to be
+  a cookie named 'person' while an RFC 6265 compliant parser should
+  consider that to be a cookie named 'Max-Age' with an (unknown) parameter
+  'person'.
+  
+  Fixes #709
 
-- getinfo: Code style policing
+- krb5: improved type handling to avoid clang compiler warnings
 
-- getinfo: Use 'CURLcode result' for curl result codes
+- url.c: fix clang warning: no newline at end of file
+
+- curl_multi_wait: never return -1 in 'numfds'
+  
+  Such a return value isn't documented but could still happen, and the
+  curl tool code checks for it. It would happen when the underlying
+  Curl_poll() function returns an error. Starting now we mask that error
+  as a user of curl_multi_wait() would have no way to handle it anyway.
+  
+  Reported-by: Jay Satiro
+  Closes #707
 
-- darwinssl: Use 'CURLcode result' for curl result codes
+- HTTP2.md: add CURL_HTTP_VERSION_2TLS and updated alt-svc link
 
-- polarssl: Use 'CURLcode result' for curl result codes
+- curl_multi_wait.3: add example
 
-- docs: Updated following the addition of SASL GSSAPI via GSS-API libraries
+Steve Holme (8 Mar 2016)
+- imap/pop3/smtp: Fixed connections upgraded with TLS are not reused
   
-  As this feature has been implemented for 7.40.0.
-
-- asiohiper.cpp: No need to initialise members of ConnInfo
+  Regression since commit 710f14edba.
   
-  ...as calloc() automatically clears the area of memory with zeros.
+  Bug: https://github.com/curl/curl/issues/422
+  Reported-by: Justin Ehlert
 
-- asiohiper.cpp: Updated for curl coding standards
+Jay Satiro (8 Mar 2016)
+- opt-docs: fix heading macros
   
-  ...with the exception of the start of block statement curly brackets.
-
-- code/docs: Use correct case for IPv4 and IPv6
+  ..SH should be .SH
   
-  For consistency, as we seem to have a bit of a mixed bag, changed all
-  instances of ipv4 and ipv6 in comments and documentations to use the
-  correct case.
+  Bug: https://github.com/curl/curl/issues/705
+  Reported-by: Eric S. Raymond
 
-- runtests: Fixed detection of Unix Sockets feature
-  
-  ...following change in curl --version output.
+Kamil Dudka (8 Mar 2016)
+- [Tim Rühsen brought this change]
 
-- code/docs: Use Unix rather than UNIX to avoid use of the trademark
+  cookie: do not refuse cookies for localhost
   
-  Use Unix when generically writing about Unix based systems as UNIX is
-  the trademark and should only be used in a particular product's name.
+  Closes #658
 
-- ip2ip.c: Fixed compilation warning when IPv6 Scope ID not supported
+Daniel Stenberg (8 Mar 2016)
+- ftp_done: clear tunnel_state when secondary socket closes
   
-  if2ip.c:119: warning: unused parameter 'remote_scope_id'
+  Introducing a function for closing the secondary connection to make this
+  bug less likely to happen again.
   
-  ...and some minor code style policing in the same function.
+  Reported-by: daboul
+  Closes #701
 
-- vtls: Don't set cert info count until memory allocation is successful
-  
-  Otherwise Curl_ssl_init_certinfo() can fail and set the num_of_certs
-  member variable to the requested count, which could then be used
-  incorrectly as libcurl closes down.
+- [Gisle Vanem brought this change]
+
+  openssl: use the correct OpenSSL/BoringSSL/LibreSSL in messages
+
+- HTTP2.md: HTTP/2 by default for curl's HTTPS connections
 
-- vtls: Use CURLcode for Curl_ssl_init_certinfo() return type
+- [Anders Bakken brought this change]
+
+  pipeline: Sanity check pipeline pointer before accessing it.
   
-  The return type for this function was 0 on success and 1 on error. This
-  was then examined by the calling functions and, in most cases, used to
-  return CURLE_OUT_OF_MEMORY.
+  I got a crash with this stack:
   
-  Instead use CURLcode for the return type and return the out of memory
-  error directly, propagating it up the call stack.
-
-- configure: Use camel case for UNIX sockets feature output
+  curl/lib/url.c:2873 (Curl_removeHandleFromPipeline)
+  curl/lib/url.c:2919 (Curl_getoff_all_pipelines)
+  curl/lib/multi.c:561 (curl_multi_remove_handle)
+  curl/lib/url.c:415 (Curl_close)
+  curl/lib/easy.c:859 (curl_easy_cleanup)
   
-  To match the curl --version output.
+  Closes #704
 
-Marc Hoersken (26 Dec 2014)
-- sockfilt.c: Reduce the number of individual memory allocations
+- HTTP2.md: mention the disable ALPN and NPN options
+
+- TODO: 17.12 keep running, read instructions from pipe/socket
   
-  Merge multiple internal arrays into one, even if some variables
-  will not not be used. They are all created with the number of
-  file descriptors as their size.
+  And delete trailing whitespace
+  And rename section 17 to "command line tool" from "client"
   
-  Also fix possible thread handle leak in CloseHandle-loop.
+  Closes #702
 
-- sockfilt.c: Replace 100ms sleep with thread throttle
-  
-  Improves performance of test cases 574 and 575 by 50%.
+- README.md: linkified
   
-  A value of zero causes the thread to relinquish the remainder
-  of its time slice to any other thread of equal priority that is
-  ready to run. If there are no other threads of equal priority
-  ready to run, the function returns immediately, and the thread
-  continues execution.
+  It also makes it less readable as plain text, so let's keep this
+  primarily for github use.
   
-  http://msdn.microsoft.com/library/windows/desktop/ms686307.aspx
+  Removed the top ascii art logo, as it looks weird when markdownified.
 
-Steve Holme (25 Dec 2014)
-- tool_help: Use camel case for UNIX sockets feature output
+- README.md: markdown version of README
   
-  In line with the other features listed in the --version output,
-  capitalise the UNIX socket feature.
+  Attempt to make it look more appealing on github
 
-- vtls: Use bool for Curl_ssl_getsessionid() return type
-  
-  The return type of this function is a boolean value, and even uses a
-  bool internally, so use bool in the function declaration as well as
-  the variables that store the return value, to avoid any confusion.
+Jay Satiro (6 Mar 2016)
+- mprintf: update trio project link
 
-- schannel: Minor code style policing for casts
+Daniel Stenberg (6 Mar 2016)
+- CURLOPT_ACCEPTTIMEOUT_MS.3: added example
 
-- schannel: Prefer 'CURLcode result' for curl result codes
+- CURLOPT_ACCEPT_ENCODING.3: added example
 
-- cyassl: Prefer 'CURLcode result' for curl result codes
+- CURLOPT_APPEND.3: added example
 
-- tool_xattr: Use 'CURLcode result' for curl result codes
+- CURLOPT_NOPROGRESS.3: added example, conform to stardard style
 
-- curl_ntlm_core.c: Fixed compilation warnings
+Steve Holme (6 Mar 2016)
+- build-openssl/checksrc.bat: Fixed prepend vs append of Perl path
   
-  curl_ntlm_core.c:301: warning: pointer targets in passing argument 2 of
-                        'CryptImportKey' differ in signedness
-  curl_ntlm_core.c:310: warning: passing argument 6 of 'CryptEncrypt' from
-                        incompatible pointer type
-  curl_ntlm_core.c:540: warning: passing argument 4 of 'CryptGetHashParam'
-                        from incompatible pointer type
+  Fixed inconsistency from commit 1eae114065 and 0ad6c72227 of the order
+  in which Perl was added to the PATH.
 
-- RELEASE-NOTES: Synced with 8830df8b66
+Daniel Stenberg (6 Mar 2016)
+- opts: added two examples
 
-- gtls: Use preferred 'CURLcode result'
+- CURLOPT_SSL_CTX_FUNCTION.3: use .NF for example
 
-- openldap: Use standard naming for setup connection function
+- CURLOPT_SSL_CTX_FUNCTION.3: added example
   
-  Renamed ldap_setup() to ldap_setup_connection() to follow more widely
-  used function naming.
+  and removed erroneous reference to test case lib509
 
-- rtmp: Use standard naming for setup connection function
-  
-  Renamed rtmp_setup() to rtmp_setup_connection() to follow more widely
-  used function naming.
+- curlx.c: use more curl style code
 
-- smb: Use standard naming for setup connection function
+- test46: change cookie expiry date
   
-  Renamed smb_setup() to smb_setup_connection() to follow more widely
-  used function naming.
+  Since two of the cookies would now otherwise expire and cause the test
+  to fail after commit 20de9b4f09
+  
+  Discussed in #697
 
-- config-win32.h: Fixed line length > 79 columns
+Jay Satiro (5 Mar 2016)
+- [Viktor Szakats brought this change]
 
-- openssl: Prefer we don't use NULL in comparisons
+  makefile.m32: add missing libs for static -winssl-ssh2 builds
+  
+  Bug: https://github.com/curl/curl/pull/693
 
-- build: Removed WIN32 definition from the Visual Studio projects
+- mbedtls: fix user-specified SSL protocol version
   
-  As this pre-processor definition is defined in curl_setup.h there is no
-  need to include it in the Visual Studio project files.
+  Prior to this change when a single protocol CURL_SSLVERSION_ was
+  specified by the user that version was set only as the minimum version
+  but not as the maximum version as well.
+
+Steve Holme (5 Mar 2016)
+- .gitignore: Added *.VC.opendb and *.vcxproj.user files for VC14
+
+- build-openssl.bat: Fixed cannot find perl if installed but not in path
+
+- checksrc.bat: Fixed cannot find perl if installed but not in path
+
+Jay Satiro (5 Mar 2016)
+- [Viktor Szakats brought this change]
 
-- build: Removed WIN64 definition from the libcurl Visual Studio projects
+  makefile.m32: fix to allow -ssh2-winssl combination
   
-  Removed the WIN64 pre-processor definition from the libcurl project
-  files as:
+  In makefile.m32, option -ssh2 (libssh2) automatically implied -ssl
+  (OpenSSL) option, with no way to override it with -winssl. Since both
+  libssh2 and curl support using Windows's built-in SSL backend, modify
+  the logic to allow that combination.
+
+- cookie: Don't expire session cookies in remove_expired
   
-  * WIN64 is not used in our source code
-  * The curl projects files don't define it
-  * It isn't required by or used in the platform SDK
-  * For backwards compatability curl_setup.h defines WIN32
-  * The compiler automatically defines _WIN64 for x64 builds
+  Prior to this change cookies with an expiry date that failed parsing
+  and were converted to session cookies could be purged in remove_expired.
   
-  Historically Visual Studio projects have defined WIN32, in addition to
-  the compiler defined _WIN32 definition, and I had incorrectly changed
-  that to WIN64 for the x64 libcurl builds but not in the curl projects.
+  Bug: https://github.com/curl/curl/issues/697
+  Reported-by: Seth Mos
+
+Daniel Stenberg (3 Mar 2016)
+- cookie: remove redundant check
   
-  As such, it is questionable whether this should be defined or not. For
-  more information see the following cache of a discussion that took
-  place on the microsoft.public.vc.mfc newsgroup:
+  ... as it was already checked previously within the function.
   
-  http://www.tech-archive.net/Archive/VC/microsoft.public.vc.mfc/2008-06/msg00074.html
+  Reported-by: Dmitry-Me
+  Closes #695
 
-- openssl.c Fix for compilation errors with older versions of OpenSSL
+Jay Satiro (1 Mar 2016)
+- [Anders Bakken brought this change]
+
+  url: if Curl_done is premature then pipeline not in use
+  
+  Prevent a crash if 2 (or more) requests are made to the same host and
+  pipelining is enabled and the connection does not complete.
   
-  openssl.c:1408: error: 'TLS1_1_VERSION' undeclared
-  openssl.c:1411: error: 'TLS1_2_VERSION' undeclared
+  Bug: https://github.com/curl/curl/pull/690
 
-Daniel Stenberg (22 Dec 2014)
-- [John Malmberg brought this change]
+- [Viktor Szakats brought this change]
 
-  Fix comment edit in vms/backup_gnv_curl_src.com
+  makefile.m32: allow to pass .dll/.exe-specific LDFLAGS
+  
+  using envvars `CURL_LDFLAG_EXTRAS_DLL` and
+  `CURL_LDFLAG_EXTRAS_EXE` respectively. This
+  is useful f.e. to pass ASLR-related extra
+  options, that are required to make this
+  feature work when using the mingw toolchain.
   
-  packages/vms/backup_gnv_curl_src.com: Originally copied from Bash port.
+  Ref: https://github.com/curl/curl/pull/670#issuecomment-190863985
+  
+  Closes https://github.com/curl/curl/pull/689
 
-- curl: show size of inhibited data when using -v
+Daniel Stenberg (29 Feb 2016)
+- formpost: fix memory leaks in AddFormData error branches
   
-  To offer some more info and yet it doesn't use more lines.
+  Reported-by: Dmitry-Me
+  Fixes #688
 
-- openssl: fix SSL/TLS versions in verbose output
+Jay Satiro (28 Feb 2016)
+- getinfo: Fix syntax error when mbedTLS
+  
+  The assignment of the mbedTLS TLS session info in the parent commit was
+  incorrect. Change the assignment to a pointer to the session structure.
 
-- openssl: make it compile against openssl 1.1.0-DEV master branch
+- getinfo: Add support for mbedTLS TLS session info
+  
+  .. and preprocessor check TLS session info is defined for all backends.
 
-Marc Hoersken (22 Dec 2014)
-- sshserver.pl: clarify and streamline variable names
+Daniel Stenberg (26 Feb 2016)
+- ROADMAP: clarify on the TLS proxy, mention HTTP cookies to work on
 
-Daniel Stenberg (21 Dec 2014)
-- openssl: warn for SRP set if SSLv3 is used, not for TLS version
+- file: try reading from files with no size
   
-  ... as it requires TLS and it was was left to warn on the default from
-  when default was SSL...
-
-- smb: use memcpy() instead of strncpy()
+  Some systems have special files that report as 0 bytes big, but still
+  contain data that can be read (for example /proc/cpuinfo on
+  Linux). Starting now, a zero byte size is considered "unknown" size and
+  will be read as far as possible anyway.
   
-  ... as it never copies the trailing zero anyway and always just the four
-  bytes so let's not mislead anyone into thinking it is actually treated
-  as a string.
+  Reported-by: Jesse Tan
   
-  Coverity CID: 1260214
+  Closes #681
 
-- [John E. Malmberg brought this change]
-
-  VMS: Updates for 0740-0D1220
+Jay Satiro (25 Feb 2016)
+- configure: warn on invalid ca bundle or path
   
-  lib/setup-vms.h : VAX HP OpenSSL port is ancient, needs help.
-                    More defines to set symbols to uppercase.
+  - Warn if --with-ca-bundle file does not exist.
   
-  src/tool_main.c : Fix parameter to vms_special_exit() call.
+  - Warn if --with-ca-path directory does not contain certificates.
   
-  packages/vms/ :
-    backup_gnv_curl_src.com : Fix the error message to have the correct package.
+  - Improve help messages for both.
   
-    build_curl-config_script.com : Rewrite to be more accurate.
+  Example configure output:
   
-    build_libcurl_pc.com : Use tool_version.h now.
+    ca cert bundle:   /some/file   (warning: certs not found)
+    ca cert path:     /some/dir   (warning: certs not found)
   
-    build_vms.com : Fix to handle lib/vtls directory.
+  Bug: https://github.com/curl/curl/issues/404
+  Reported-by: Jeffrey Walton
+
+Daniel Stenberg (24 Feb 2016)
+- Curl_read: check for activated HTTP/1 pipelining, not only requested
   
-    curl_gnv_build_steps.txt : Updated build procedure documentation.
+  ... as when pipelining is used, we read things into a unified buffer and
+  we don't do that with HTTP/2. This could then easily make programs that
+  set CURLMOPT_PIPELINING = CURLPIPE_HTTP1|CURLPIPE_MULTIPLEX to get data
+  intermixed or plain broken between HTTP/2 streams.
   
-    generate_config_vms_h_curl.com :
-         * VAX does not support 64 bit ints, so no NTLM support for now.
-         * VAX HP SSL port is ancient, needs some help.
-         * Disable NGHTTP2 for now, not ported to VMS.
-         * Disable UNIX_SOCKETS, not available on VMS yet.
-         * HP GSSAPI port does not have gss_nt_service_name.
+  Reported-by: Anders Bakken
+
+Patrick Monnerat (24 Feb 2016)
+- os400: Fix ILE/RPG definition of CURLOPT_TFTP_NO_OPTIONS
+
+Jay Satiro (23 Feb 2016)
+- getinfo: CURLINFO_TLS_SSL_PTR supersedes CURLINFO_TLS_SESSION
   
-    gnv_link_curl.com : Update for new curl structure.
+  The two options are almost the same, except in the case of OpenSSL:
   
-    pcsi_product_gnv_curl.com : Set up to optionally do a complete build.
-
-Marc Hoersken (21 Dec 2014)
-- sockfilt.c: use non-Ex functions that are available before WinXP
+  CURLINFO_TLS_SESSION OpenSSL session internals is SSL_CTX *.
   
-  It was initially reported by Guenter that GetFileSizeEx
-  requires (_WIN32_WINNT >= 0x0500) to be true.
-
-- tests: use Cygwin-style paths in SSH, SSHD and SFTP config files
+  CURLINFO_TLS_SSL_PTR OpenSSL session internals is SSL *.
   
-  Second patch to enable Windows support using Cygwin-based OpenSSH.
+  For backwards compatibility we couldn't modify CURLINFO_TLS_SESSION to
+  return an SSL pointer for OpenSSL.
   
-  Tested with CopSSH 5.0.0 free edition using an msys shell on Windows 7.
-
-- tests: support spaces in paths to SSH, SSHD and SFTP binaries
+  Also, add support for the 'internals' member to point to SSL object for
+  the other backends axTLS, PolarSSL, Secure Channel, Secure Transport and
+  wolfSSL.
   
-  First patch to enable Windows support using Cygwin-based OpenSSH.
-
-Steve Holme (20 Dec 2014)
-- non-ascii: Reduce variable usage
+  Bug: https://github.com/curl/curl/issues/234
+  Reported-by: dkjjr89@users.noreply.github.com
   
-  Removed 'next' variable in Curl_convert_form(). Rather than setting it
-  from 'form->next' and using that to set 'form' after the conversion
-  just use 'form = form->next' instead.
+  Bug: https://curl.haxx.se/mail/lib-2015-09/0127.html
+  Reported-by: Michael König
 
-- non-ascii: Prefer while loop rather than a do loop
+Daniel Stenberg (23 Feb 2016)
+- multi_remove_handle: keep the timeout list until after disconnect
   
-  This also removes the need to check that the 'form' argument is valid.
-
-- non-ascii: Reduce variable scope
+  The internal Curl_done() function uses Curl_expire() at times and that
+  uses the timeout list. Better clean up the list once we're done using
+  it. This caused a segfault.
   
-  As 'result' isn't used out side the conversion callback code and
-  previously caused variable shadowing in the libiconv based code.
+  Reported-by: 蔡文凱
+  Bug: https://curl.haxx.se/mail/lib-2016-02/0097.html
 
-- non-ascii: We prefer 'CURLcode result'
+Kamil Dudka (23 Feb 2016)
+- tests/sshserver.pl: use RSA instead of DSA for host auth
   
-  This also fixes a variable shadowing issue when HAVE_ICONV is defined
-  as rc was declared for the result code of libiconv based functions.
-
-Marc Hoersken (19 Dec 2014)
-- secureserver.pl: clean up formatting of config and fix verbose output
+  DSA is no longer supported by OpenSSH 7.0, which causes all SCP/SFTP
+  test cases to be skipped.  Using RSA for host authentication works with
+  both old and new versions of OpenSSH.
   
-  Verbose output was not matching the actual configuration file,
-  because FIPS and Windows conditions were ignored.
-
-- secureserver.pl: update Windows detection and fix path conversion
-
-- secureserver.pl: make OpenSSL CApath and cert absolute path values
+  Reported-by: Karlson2k
   
-  Recent stunnel versions (5.08) seem to have trouble with relative
-  paths on Windows. This turns the relative paths into absolute ones.
-
-Patrick Monnerat (18 Dec 2014)
-- if2ip: dummy scope parameter for Curl_if2ip() call in SIOCGIFADDR-enabled code.
-
-- [Kyle J. McKay brought this change]
+  Closes #676
 
-  parseurlandfillconn(): fix improper non-numeric scope_id stripping.
-  Fixes SF bug 1149: http://sourceforge.net/p/curl/bugs/1449/
-
-- IPV6: address scope != scope id
-  There was a confusion between these: this commit tries to disambiguate them.
-  - Scope can be computed from the address itself.
-  - Scope id is scope dependent: it is currently defined as 1-based local
-    interface index for link-local scoped addresses, and as a site index(?) for
-    (obsolete) site-local addresses. Linux only supports it for link-local
-    addresses.
-  The URL parser properly parses a scope id as an interface index, but stores it
-  in a field named "scope": confusion. The field has been renamed into "scope_id".
-  Curl_if2ip() used the scope id as it was a scope. This caused failures
-  to bind to an interface.
-  Scope is now computed from the addresses and Curl_if2ip() matches them.
-  If redundantly specified in the URL, scope id is check for mismatch with
-  the interface index.
+Jay Satiro (23 Feb 2016)
+- TFTP: add option to suppress TFTP option requests (Part 2)
   
-  This commit should fix SF bug #1451.
-
-- connect: singleipconnect(): properly try other address families after failure
-
-Daniel Stenberg (16 Dec 2014)
-- SFTP: work-around servers that return zero size on STAT
+  - Add tests.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-12/0103.html
-  Pathed-by: Marc Renault
-
-- glob_next_url: make the loop count upwards
+  - Add an example to CURLOPT_TFTP_NO_OPTIONS.3.
   
-  As the former contruct apparently caused a compiler warning, mentioned
-  in d8efde07e556c.
+  - Add --tftp-no-options to expose CURLOPT_TFTP_NO_OPTIONS.
+  
+  Bug: https://github.com/curl/curl/issues/481
 
-- tool_operate: we prefer 'CURLcode result'
+- [Michael Koenig brought this change]
 
-- tool_urlglob: unify return codes to use CURLcode
+  TFTP: add option to suppress TFTP option requests (Part 1)
+  
+  Some TFTP server implementations ignore the "TFTP Option extension"
+  (RFC 1782-1784, 2347-2349), or implement it in a flawed way, causing
+  problems with libcurl. Another switch for curl_easy_setopt
+  "CURLOPT_TFTP_NO_OPTIONS" is introduced which prevents libcurl from
+  sending TFTP option requests to a server, avoiding many problems caused
+  by faulty implementations.
   
-  There was a mix of GlobCode, CURLcode and ints and they were mostly
-  passing around CURLcode errors. This change makes the functions use only
-  CURLcode and removes the GlobCode type completely.
+  Bug: https://github.com/curl/curl/issues/481
 
-- tool_urlglob.c: partly reverse dc19789444
+Daniel Stenberg (22 Feb 2016)
+- [Karlson2k brought this change]
+
+  runtests: Fixed usage of %PWD on MinGW64
   
-  The loop in glob_next_url() needs to be done backwards to maintain the
-  logic. dc19789444 caused test 1235 to fail.
+  Closes #672
 
-- KNOWN_BUGS: the SFTP code doesn't support CURLINFO_FILETIME
+Jay Satiro (20 Feb 2016)
+- CURLOPT_DEBUGFUNCTION.3: Fix example
 
-- [Jay Satiro brought this change]
+- [Viktor Szakats brought this change]
 
-  opts: Warn CURLOPT_TIMEOUT overrides when set after CURLOPT_TIMEOUT_MS
+  src/Makefile.m32: add CURL_{LD,C}FLAGS_EXTRAS support
   
-  Change CURLOPT_TIMEOUT doc to warn that if CURLOPT_TIMEOUT and
-  CURLOPT_TIMEOUT_MS are both set whichever one is set last is the one
-  that will be used.
+  Sync with lib/Makefile.m32 which already uses those variables.
   
-  Prior to this change that behavior was only noted in the
-  CURLOPT_TIMEOUT_MS doc.
+  Bug: https://github.com/curl/curl/pull/670
 
-Nick Zitzmann (15 Dec 2014)
-- darwinssl: fix incorrect usage of aprintf()
-  
-  Commit b13923f changed an snprintf() to use aprintf(), but the API usage
-  wasn't correct, and was causing a crash to occur. This fixes it.
+Dan Fandrich (20 Feb 2016)
+- Enabled test 1437 after the bug fix in commit 3fa220a6
 
-Steve Holme (14 Dec 2014)
-- copyright: Updated the copyright year following recent updates
+Jay Satiro (19 Feb 2016)
+- [Emil Lerner brought this change]
 
-Daniel Stenberg (14 Dec 2014)
-- tool_urlglob.c: reverse two loops
+  curl_sasl: Fix memory leak in digest parser
   
-  By counting from 0 and up instead of backwards like before, we remove
-  the need for the "funny" check of the unsigned variable when decreased
-  passed zero. Easier to read and less risk for compiler warnings.
-
-Marc Hoersken (14 Dec 2014)
-- tool_urlglob.c: Added braces to clarify the conditions
-
-- tool_urlglob.c: Silence warning C6293: Ill-defined for-loop
+  If any parameter in a HTTP DIGEST challenge message is present multiple
+  times, memory allocated for all but the last entry should be freed.
   
-  The >= 0 is actually not required, since i underflows and
-  the for-loop is stopped using the < condition, but this
-  makes the VS2012 compiler and code analysis happy.
+  Bug: https://github.com/curl/curl/pull/667
 
-- tool_binmode.c: Explicitly ignore the return code of setmode
+Dan Fandrich (19 Feb 2016)
+- Added test 1437 to verify a memory leak
   
-  Fixes code analysis warning C6031:
-  return value ignored: <function> could return unexpected value
+  Reported-by: neex@users.noreply.github.com
 
-- lib: Fixed multiple code analysis warnings if SAL are available
+Jay Satiro (18 Feb 2016)
+- CURLOPT_COOKIEFILE.3: HTTP headers must be Set-Cookie style
   
-  warning C28252: Inconsistent annotation for function:
-  parameter has another annotation on this instance
+  Bug: https://github.com/curl/curl/issues/666
+  Reported-by: baumanj@users.noreply.github.com
 
-Steve Holme (14 Dec 2014)
-- smb.c: Fixed code analysis warning
+- curl.1: HTTP headers for --cookie must be Set-Cookie style
   
-  smb.c:320: warning C6297: Arithmetic overflow: 32-bit value is shifted,
-             then cast to 64-bit value. Result may not be an expected
-             value
+  Bug: https://github.com/curl/curl/issues/666
+  Reported-by: baumanj@users.noreply.github.com
 
-Marc Hoersken (14 Dec 2014)
-- tool_util.c: Use GetTickCount64 if it is available
+Daniel Stenberg (18 Feb 2016)
+- curl.1: add a missing dash
 
-Steve Holme (14 Dec 2014)
-- smb: Use HAVE_PROCESS_H for process.h inclusion
-  
-  Rather than testing against _WIN32 use the preferred HAVE_PROCESS_H
-  pre-processor define when including process.h.
+- CONTRIBUTING.md: fix links
 
-Daniel Stenberg (14 Dec 2014)
-- darwinssl: aprintf() to allocate the session key
+- ISSUE_TEMPLATE: github issue template
   
-  ... to avoid using a fixed memory size that risks being too large or too
-  small.
+  First version, try this out!
 
-Marc Hoersken (14 Dec 2014)
-- curl_schannel: Improvements to memory re-allocation strategy
+- CONTRIBUTING.md: move into .github
   
-  - do not grow memory by doubling its size
-  - do not leak previously allocated memory if reallocation fails
-  - replace while-loop with a single check to make sure
-    that the requested amount of data fits into the buffer
-  
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1450
-  Reported-by: Warren Menzer
+  To hide github specific files somewhat from the rest.
 
-Steve Holme (14 Dec 2014)
-- asyn-ares: We prefer use of 'CURLcode result'
+- opts: add references
 
-Marc Hoersken (14 Dec 2014)
-- curl_schannel.c: Data may be available before connection shutdown
+- examples/make: add 'checksrc' target
 
-Steve Holme (14 Dec 2014)
-- http2: Use 'CURLcode result' for curl result codes
+- 10-at-a-time: typecast the argument passed to sleep()
 
-- asyn-thread:  We prefer 'CURLcode result'
+- externalsocket.c: fix compiler warning for fwrite return type
 
-- smb: Fixed unnecessary initialisation of struct member variables
-  
-  There is no need to set the 'state' and 'result' member variables to
-  SMB_REQUESTING (0) and CURLE_OK (0) after the allocation via calloc()
-  as calloc() initialises the contents to zero.
+- anyauthput.c: fix compiler warnings
 
-- ntlm: Fixed return code for bad type-2 Target Info
-  
-  Use CURLE_BAD_CONTENT_ENCODING for bad type-2 Target Info security
-  buffers just like we do for bad decodes.
+- simplessl.c: warning: while with space
 
-- ntlm: Remove unnecessary casts in readshort_le()
+- curlx.c: i2s_ASN1_IA5STRING() clashes with an openssl function
   
-  I don't think both of my fix ups from yesterday were needed to fix the
-  compilation warning, so remove the one that I think is unnecessary and
-  let the next Android autobuild prove/disprove it.
+  Reported-By: Gisle Vanem
 
-- curl_ntlm_msgs.c: Another attempt to fix compilation warning
+- http2: don't decompress gzip decoding automatically
   
-  curl_ntlm_msgs.c:170: warning: conversion to 'short unsigned int' from
-                        'int' may alter its value
-
-Guenter Knauf (13 Dec 2014)
-- synctime.c: added own user-agent string.
+  At one point during the development of HTTP/2, the commit 133cdd29ea0
+  introduced automatic decompression of Content-Encoding as that was what
+  the spec said then. Now however, HTTP/2 should work the same way as
+  HTTP/1 in this regard.
+  
+  Reported-by: Kazuho Oku
+  
+  Closes #661
 
-Steve Holme (13 Dec 2014)
-- smb.c: Fixed line longer than 79 columns
+Jay Satiro (16 Feb 2016)
+- [Tatsuhiro Tsujikawa brought this change]
 
-- curl_ntlm_msgs.c: Fixed compilation warning from commit 783b5c3b11
+  http: Don't break the header into chunks if HTTP/2
+  
+  nghttp2 callback deals with TLS layer and therefore the header does not
+  need to be broken into chunks.
   
-  curl_ntlm_msgs.c:169: warning: conversion to 'short unsigned int' from
-                        'int' may alter its value
+  Bug: https://github.com/curl/curl/issues/659
+  Reported-by: Kazuho Oku
 
-Guenter Knauf (13 Dec 2014)
-- mk-ca-bundle.pl: restored forced run again.
+Daniel Stenberg (16 Feb 2016)
+- [Viktor Szakats brought this change]
 
-- synctime.c: removed another timeserver URL.
-  
-  worldtimeserver.com seems also no longer available.
+  openssl: use macro to guard the opaque EVP_PKEY branch
 
-- synctime.c: fixed timeserver URLs.
-  
-  For getting the date header its not necessary to access special
-  pages or even CGI scripts - all pages including the main index
-  reply with the date header, therefore shortened URLs to domain.
-  Removed worldtime.com; added pool.ntp.org.
+- [Viktor Szakats brought this change]
 
-Steve Holme (13 Dec 2014)
-- ftp.c: Fixed compilation warning when no verbose string support
+  openssl: avoid direct PKEY access with OpenSSL 1.1.0
   
-  ftp.c:819: warning: unused parameter 'lineno'
-
-- smb: Added state change functions to assist with debugging
+  by using API instead of accessing an internal structure.
+  This is required starting OpenSSL 1.1.0-pre3.
   
-  For debugging purposes, and as per other protocols within curl, added
-  state change functions rather than changing the states directly.
+  Closes #650
 
-- ntlm: Use short integer when decoding 16-bit values
+- RELEASE-NOTES: synced with ede0bfc079da
 
-- RELEASE-NOTES: Synced with 6291a16b20
+- [Clint Clayton brought this change]
 
-- smtp.c: Fixed compilation warnings
+  CURLOPT_CONNECTTIMEOUT_MS.3: Fix example to use milliseconds option
   
-  smtp.c:2357 warning: adding 'size_t' (aka 'unsigned long') to a string
-              does not append to the string
-  smtp.c:2375 warning: adding 'size_t' (aka 'unsigned long') to a string
-              does not append to the string
-  smtp.c:2386 warning: adding 'size_t' (aka 'unsigned long') to a string
-              does not append to the string
+  Change the example in the docs for CURLOPT_CONNECTTIMEOUT_MS to use
+  CURLOPT_CONNECTTIMEOUT_MS instead of CURLOPT_CONNECTTIMEOUT.
   
-  Used array index notation instead.
+  Closes #653
 
-- smb: Disable SMB when 64-bit integers are not supported
-  
-  This fixes compilation issues with compilers that don't support 64-bit
-  integers through long long or __int64.
+- opt-docs: add more references
 
-- ntlm: Disable NTLM v2 when 64-bit integers are not supported
-  
-  This fixes compilation issues with compilers that don't support 64-bit
-  integers through long long or __int64 which was introduced in commit
-  07b66cbfa4.
+- [David Byron brought this change]
 
-- ntlm: Allow NTLM2Session messages when USE_NTRESPONSES manually defined
+  SCP: use libssh2_scp_recv2 to support > 2GB files on windows
+  
+  libssh2_scp_recv2 is introduced in libssh2 1.7.0 - to be released "any
+  day now.
   
-  Previously USE_NTLM2SESSION would only be defined automatically when
-  USE_NTRESPONSES wasn't already defined. Separated the two definitions
-  so that the user can manually set USE_NTRESPONSES themselves but
-  USE_NTLM2SESSION is defined automatically if they don't define it.
+  Closes #451
 
-- smtp.c: Fixed line longer than 79 columns
+Jay Satiro (13 Feb 2016)
+- [Shine Fan brought this change]
 
-- config-win32.h: Don't enable Windows Crypt API if using OpenSSL
+  gtls: fix for builds lacking encrypted key file support
   
-  As the OpenSSL and NSS Crypto engines are prefered by the core NTLM
-  routines, to the Windows Crypt API, don't define USE_WIN32_CRYPT
-  automatically when either OpenSSL or NSS are in use - doing so would
-  disable NTLM2Session responses in NTLM type-3 messages.
+  Bug: https://github.com/curl/curl/pull/651
 
-- smtp: Fixed inappropriate free of the scratch buffer
-  
-  If the scratch buffer was allocated in a previous call to
-  Curl_smtp_escape_eob(), a new buffer not allocated in the subsequent
-  call and no action taken by that call, then an attempt would be made to
-  try and free the buffer which, by now, would be part of the data->state
-  structure.
-  
-  This bug was introduced in commit 4bd860a001.
+Dan Fandrich (13 Feb 2016)
+- test1604: Add to Makefile.inc so it gets run
 
-- smtp: Fixed dot stuffing when EOL characters were at end of input buffers
+Jay Satiro (12 Feb 2016)
+- generate.bat: Fix comment bug by removing old comments
   
-  Fixed a problem with the CRLF. detection when multiple buffers were
-  used to upload an email to libcurl and the line ending character(s)
-  appeared at the end of each buffer. This meant any lines which started
-  with . would not be escaped into .. and could be interpreted as the end
-  of transmission string instead.
+  Remove NOTES section, it's no longer needed since we aren't setting the
+  errorlevel and more importantly the recently updated URL in the comments
+  is causing some unusual behavior that breaks the script.
   
-  This only affected libcurl based applications that used a read function
-  and wasn't reproducible with the curl command-line tool.
-  
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1456
-  Assisted-by: Patrick Monnerat
-
-Daniel Stenberg (11 Dec 2014)
-- telnet: fix "cast increases required alignment of target type"
+  Closes https://github.com/curl/curl/issues/649
 
-- ntlm_wb_response: fix "statement not reached"
+Kamil Dudka (12 Feb 2016)
+- curl.1: --disable-{eprt,epsv} are ignored for IPv6 hosts
   
-  ... and I could use a break instead of a goto to end the loop.
+  The behavior has been clarified in CURLOPT_FTP_USE_{EPRT,EPSV}.3 man
+  pages since curl-7_12_3~131.  This patch makes it clear in the curl.1
+  man page, too.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-12/0089.html
-  Reported-by: Tor Arntsen
+  Bug: https://bugzilla.redhat.com/1305970
 
-Steve Holme (10 Dec 2014)
-- RELEASE-NOTES: Synced with 1cc5194337
+Daniel Stenberg (12 Feb 2016)
+- dist: ship buildconf.bat too
   
-  Added some bug fixes that I had missed in previous synchronisations.
+  As the winbuild/* stuff uses it!
 
-Daniel Stenberg (10 Dec 2014)
-- Curl_unix2addr: avoid using the variable name 'sun'
+- curlx_tvdiff: handle 32bit time_t overflows
   
-  I suspect this causes compile failures on Solaris:
+  On 32bit systems, make sure we don't overflow and return funky values
+  for very large time differences.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-12/0081.html
-
-Steve Holme (10 Dec 2014)
-- url.c: Fixed compilation warning when USE_NTLM is not defined
+  Reported-by: Anders Bakken
   
-  url.c:3078: warning: variable 'credentialsMatch' set but not used
+  Closes #646
+
+- examples: fix some compiler warnings
 
-- parsedate.c: Fixed compilation warning
+- simplessl.c: fix my breakage
+
+- examples: adhere to curl code style
   
-  parsedate.c:548: warning: 'parsed' may be used uninitialized in this
-                   function
+  All plain C examples now (mostly) adhere to the curl code style. While
+  they are only examples, they had diverted so much and contained all
+  sorts of different mixed code styles by now. Having them use a unified
+  style helps users and readability. Also, as they get copy-and-pasted
+  widely by users, making sure they're clean and nice is a good idea.
   
-  As curl_getdate() returns -1 when parsedate() fails we can initialise
-  parsed to -1.
+  573 checksrc warnings were addressed.
 
-Daniel Stenberg (10 Dec 2014)
-- TODO: Cache negative name resolves
+- examples/cookie_interface.c: add cleanup call
   
-  Worth exploring
-
-- ldap: check Curl_client_write() return codes
+  cleaning up handles is a good idea as we leak memory otherwise
   
-  There might be one or two memory leaks left in the error paths.
-
-- ldap: rename variables to comply to curl standards
-
-Dan Fandrich (10 Dec 2014)
-- sws.c: Fixed 'rc' may be used uninitialized warning
+  Also, line wrapped before 80 columns.
 
-- cookies: Improved OOM handling in cookies
+Kamil Dudka (10 Feb 2016)
+- nss: search slash in forward direction in dup_nickname()
   
-  This fixes the test 506 torture test. The internal cookie API really
-  ought to be improved to separate cookie parsing errors (which may be
-  ignored) with OOM errors (which should be fatal).
+  It is wasteful to search it backwards if we look for _any_ slash.
 
-Guenter Knauf (9 Dec 2014)
-- synctime.c: fixed user-agent setting.
+- nss: do not count enabled cipher-suites
   
-  Some websites meanwhile refuse to reply to requests from ancient
-  browsers like IE6, therefore I've comment out this setting, but
-  also fixed the string to now fake IE8 if someone enables it.
+  We only care if at least one cipher-suite is enabled, so it does
+  not make any sense to iterate till the end and count all enabled
+  cipher-suites.
 
-Daniel Stenberg (9 Dec 2014)
-- smb: fix unused return code warning
+Daniel Stenberg (10 Feb 2016)
+- contributors.sh: make 79 the max column width (from 80)
 
-Patrick Monnerat (9 Dec 2014)
-- Curl_client_write() & al.: chop long data, convert data only once.
+- RELEASE-NOTES: synced with c276aefee3995
 
-Guenter Knauf (9 Dec 2014)
-- VC build: added sspi define for winssl-zlib builds.
+- mbedtls.c: re-indent to better match curl standards
 
-Daniel Stenberg (9 Dec 2014)
-- schannel_recv: return the correct code
+- [Rafael Antonio brought this change]
+
+  mbedtls: fix memory leak when destroying SSL connection data
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1462
-  Reported-by: Tae Hyoung Ahn
+  Closes #626
 
-- http2: avoid logging neg "failure" if h2 was not requested
+- mbedtls: fix ALPN usage segfault
+  
+  Since we didn't keep the input argument around after having called
+  mbedtls, it could end up accessing the wrong memory when figuring out
+  the ALPN protocols.
+  
+  Closes #642
 
-- openldap: do not ignore Curl_client_write() return codes
+Jay Satiro (9 Feb 2016)
+- [Timotej Lazar brought this change]
 
-- compile: warn on unused return code from Curl_client_write()
+  opts: update references to renamed options
 
-Patrick Monnerat (8 Dec 2014)
-- SMB: Fix a data size mismatch that broke SMB on big-endian platforms
+- KNOWN_BUGS: Update #92 - Windows device prefix
 
-Steve Holme (7 Dec 2014)
-- smb: Fixed Windows autoconf builds following commit eb88d778e7
-  
-  As Windows based autoconf builds don't yet define USE_WIN32_CRYPTO
-  either explicitly through --enable-win32-cypto or automatically on
-  _WIN32 based platforms, subsequent builds broke with the following
-  error message:
+- tool_doswin: Support for literal path prefix \\?\
   
-  "Can't compile NTLM support without a crypto library."
+  For example something like --output \\?\C:\foo
 
-- RELEASE-NOTES: Synced with 526603ff05
+Daniel Stenberg (9 Feb 2016)
+- configure: state "BoringSSL" in summary when that was detected
 
-- [Bill Nagel brought this change]
+- [David Benjamin brought this change]
 
-  smb: Build with SSPI enabled
+  openssl: remove most BoringSSL #ifdefs.
   
-  Build SMB/CIFS protocol support when SSPI is enabled.
-
-- [Bill Nagel brought this change]
-
-  ntlm: Use Windows Crypt API
+  As of https://boringssl-review.googlesource.com/#/c/6980/, almost all of
+  BoringSSL #ifdefs in cURL should be unnecessary:
   
-  Allow the use of the Windows Crypt API for NTLMv1 functions.
-
-Dan Fandrich (7 Dec 2014)
-- cookie.c: Refactored cleanup code to simplify
+  - BoringSSL provides no-op stubs for compatibility which replaces most
+    #ifdefs.
   
-  Also, fixed the outdated comments on the cookie API.
-
-- get_url_file_name: Fixed crash on OOM on debug build
+  - DES_set_odd_parity has been in BoringSSL for nearly a year now. Remove
+    the compatibility codepath.
   
-  This caused a null-pointer dereference which caused a few dozen
-  torture tests to fail.
-
-Steve Holme (6 Dec 2014)
-- sws.c: Fixed compilation warning
+  - With a small tweak to an extend_key_56_to_64 call, the NTLM code
+    builds fine.
   
-  sws.c:2191 warning: 'rc' may be used uninitialized in this function
-
-- ftp.c: Fixed compilation warnings when proxy support disabled
+  - Switch OCSP-related #ifdefs to the more generally useful
+    OPENSSL_NO_OCSP.
   
-  ftp.c:1827 warning: unused parameter 'newhost'
-  ftp.c:1827 warning: unused parameter 'newport'
-
-- smb: Fixed a problem with large file transfers
+  The only #ifdefs which remain are Curl_ossl_version and the #undefs to
+  work around OpenSSL and wincrypt.h name conflicts. (BoringSSL leaves
+  that to the consumer. The in-header workaround makes things sensitive to
+  include order.)
   
-  Fixed an issue with the message size calculation where the raw bytes
-  from the buffer were interpreted as signed values rather than unsigned
-  values.
+  This change errs on the side of removing conditionals despite many of
+  the restored codepaths being no-ops. (BoringSSL generally adds no-op
+  compatibility stubs when possible. OPENSSL_VERSION_NUMBER #ifdefs are
+  bad enough!)
   
-  Reported-by: Gisle Vanem
-  Assisted-by: Bill Nagel
-
-- smb: Moved the URL decoding into a separate function
+  Closes #640
 
-- smb: Fixed URL encoded URLs not working
+Jay Satiro (8 Feb 2016)
+- KNOWN_BUGS: Windows device prefix is required for devices
 
-- Makefile.inc: Added our standard header and updated file formatting
-
-- Makefile.inc: Updated file formatting
+- tool_urlglob: Allow reserved dos device names (Windows)
   
-  Aligned continuation character and used space as the separator
-  character as per other makefile files.
-
-- curl_md4.h: Updated copyright year following recent edit
+  Allow --output to reserved dos device names without the device prefix
+  for backwards compatibility.
   
-  ...and minor layout adjustment.
-
-Patrick Monnerat (5 Dec 2014)
-- SMB: Fix big endian problems. Make it OS/400 aware.
-
-- OS400: enable NTLM authentication
-
-Steve Holme (5 Dec 2014)
-- multi.c: Fixed compilation warning
+  Example: --output NUL can be used instead of --output \\.\NUL
   
-  multi.c:2695: warning: declaration of `exp' shadows a global declaration
-
-Guenter Knauf (5 Dec 2014)
-- build: updated dependencies in makefiles.
-
-Steve Holme (5 Dec 2014)
-- sasl: Corrected formatting of function descriptions
-
-- sasl_gssapi: Added missing function description
+  Bug: https://github.com/curl/curl/commit/4520534#commitcomment-15954863
+  Reported-by: Gisle Vanem
 
-- RELEASE-NOTES: Provided better descriptions
+Daniel Stenberg (8 Feb 2016)
+- cookies: allow spaces in cookie names, cut of trailing spaces
   
-  As it is often difficult to choose the best description for a single
-  feature when it spans many commits, updated the descriptions for the
-  recent SMB/CIFS protocol and GSS-API additions.
-
-- sasl_sspi: Corrected some typos
-
-- sasl_sspi: Don't use hard coded sizes in Kerberos V5 security data
+  It turns out Firefox and Chrome both allow spaces in cookie names and
+  there are sites out there using that.
   
-  Don't use a hard coded size of 4 for the security layer and buffer size
-  in Curl_sasl_create_gssapi_security_message(), instead, use sizeof() as
-  we have done in the sasl_gssapi module.
-
-- sasl_sspi: Free the Kerberos V5 challenge as soon as we're done with it
+  Turned out the code meant to strip off trailing space from cookie names
+  didn't work. Fixed now.
   
-  Reduced the amount of free's required for the decoded challenge message
-  in Curl_sasl_create_gssapi_security_message() as a result of coding it
-  differently in the sasl_gssapi module.
+  Test case 8 modified to verify both these changes.
+  
+  Closes #639
 
-- gssapi: Corrected typo in comments
+Patrick Monnerat (8 Feb 2016)
+- Merge branch 'master' of github.com:curl/curl
 
-- sasl_gssapi: Added body to Curl_sasl_create_gssapi_security_message()
+- os400: sync ILE/RPG definitions with latest public header files.
 
-Daniel Stenberg (4 Dec 2014)
-- [Stefan Bühler brought this change]
+Daniel Stenberg (8 Feb 2016)
+- [Ludwig Nussel brought this change]
 
-  http_perhapsrewind: don't abort CONNECT requests
-  
-  ...they never have a body
+  SSLCERTS: update wrt SSL CA certificate store
 
-- [Stefan Bühler brought this change]
+- [Ludwig Nussel brought this change]
 
-  HTTP: Free (proxy)userpwd for NTLM/Negotiate after sending a request
+  configure: --with-ca-fallback: use built-in TLS CA fallback
   
-  Sending NTLM/Negotiate header again after successful authentication
-  breaks the connection with certain Proxies and request types (POST to MS
-  Forefront).
-
-- [Stefan Bühler brought this change]
-
-  HTTP: don't abort connections with pending Negotiate authentication
+  When trying to verify a peer without having any root CA certificates
+  set, this makes libcurl use the TLS library's built in default as
+  fallback.
   
-  ... similarly to how NTLM works as Negotiate is in fact often NTLM with
-  another name.
-
-- [Stefan Bühler brought this change]
+  Closes #569
 
-  fix gdb libtool invocation path
+- Proxy-Connection: stop sending this header by default
+  
+  RFC 7230 says we should stop. Firefox already stopped.
+  
+  Bug: https://github.com/curl/curl/issues/633
+  Reported-By: Brad Fitzpatrick
+  
+  Closes #633
 
-Steve Holme (4 Dec 2014)
-- sasl_gssapi: Fixed missing include from commit d3cca934ee
+- bump: work toward the next release
 
-Daniel Stenberg (4 Dec 2014)
-- [Jay Satiro brought this change]
+- THANKS: 2 contributors from the 7.47.1 release
 
-  examples: remove sony.com from 10-at-a-time
+- RELEASE-PROCEDURE: remove the github upload part
   
-  Prior to this change the 10-at-a-time example showed CURLE_RECV_ERROR
-  for the sony website because it ends the connection when the request is
-  missing a user agent.
-
-Steve Holme (4 Dec 2014)
-- sasl_gssapi: Fixed missing decoding debug failure message
+  ... as we're HTTPS on the main site now, there's no point in that
+  extra step
 
-- sasl_gssapi: Fixed honouring of no mutual authentication
+Version 7.47.1 (8 Feb 2016)
 
-- sasl_sspi: Added more Kerberos V5 decoding debug failure messages
+Daniel Stenberg (8 Feb 2016)
+- RELEASE-NOTES: curl 7.47.1 time!
 
-Daniel Stenberg (4 Dec 2014)
-- [Anthon Pang brought this change]
-
-  docs: Fix FAILONERROR typos
+Jay Satiro (8 Feb 2016)
+- tool_operhlp: Check for backslashes in get_url_file_name
+  
+  Extract the filename from the last slash or backslash. Prior to this
+  change backslashes could be part of the filename.
   
-  It returns error for >= 400 HTTP responses.
+  This change needed for the curl tool built for Cygwin. Refer to the
+  CYGWIN addendum in advisory 20160127B.
   
-  Bug: https://github.com/bagder/curl/pull/129
+  Bug: https://curl.haxx.se/docs/adv_20160127B.html
 
-- [Peter Wu brought this change]
+Daniel Stenberg (7 Feb 2016)
+- RELEASE-NOTES: synced with d6a8869ea34
 
-  tool: fix CURLOPT_UNIX_SOCKET_PATH in --libcurl output
+Jay Satiro (6 Feb 2016)
+- openssl: Fix signed/unsigned mismatch warning in X509V3_ext
   
-  Mark CURLOPT_UNIX_SOCKET_PATH as string to ensure that it ends up as
-  option in the file generated by --libcurl.
+  sk_X509_EXTENSION_num may return an unsigned integer, however the value
+  will fit in an int.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Bug: https://github.com/curl/curl/commit/dd1b44c#commitcomment-15913896
+  Reported-by: Gisle Vanem
+
+Daniel Stenberg (7 Feb 2016)
+- TODO: 17.11 -w output to stderr
 
-- [Peter Wu brought this change]
+Jay Satiro (6 Feb 2016)
+- [Michael Kaufmann brought this change]
 
-  opts: fix CURLOPT_UNIX_SOCKET_PATH formatting
+  idn_win32: Better error checking
   
-  Add .nf and .fi such that the code gets wrapped in a pre on the web.
-  Fixed grammar, fixed formatting of the "See also" items.
+  .. also fix a conversion bug in the unused function
+  curl_win32_ascii_to_idn().
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-
-Patrick Monnerat (4 Dec 2014)
-- OS400: enable Unix sockets.
-
-Daniel Stenberg (3 Dec 2014)
-- RELEASE-NOTES: synced with b216427e73b5e9
+  And remove wprintfs on error (Jay).
+  
+  Bug: https://github.com/curl/curl/pull/637
 
-- opts: added CURLOPT_UNIX_SOCKET_PATH to Makefile.am
+- [Gisle Vanem brought this change]
 
-- updateconninfo: clear destination struct before getsockname()
+  examples/asiohiper: Avoid function name collision on Windows
   
-  Otherwise we may read uninitialized bytes later in the unix-domain
-  sockets case.
+  closesocket => close_socket
+  Winsock already has the former.
+  
+  Bug: https://curl.haxx.se/mail/lib-2016-02/0016.html
 
-- curl.1: added --unix-socket
+- [Gisle Vanem brought this change]
 
-- [Peter Wu brought this change]
+  examples/htmltitle: Use _stricmp on Windows
+  
+  Bug: https://curl.haxx.se/mail/lib-2016-02/0017.html
 
-  tool: add --unix-socket option
+Daniel Stenberg (6 Feb 2016)
+- COPYING: clarify that Daniel is not the sole author
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  ... done on request and as it is a fair point.
 
-- [Peter Wu brought this change]
+Jay Satiro (5 Feb 2016)
+- unit1604: Fix unit setup return code
 
-  libcurl: add UNIX domain sockets support
-  
-  The ability to do HTTP requests over a UNIX domain socket has been
-  requested before, in Apr 2008 [0][1] and Sep 2010 [2]. While a
-  discussion happened, no patch seems to get through. I decided to give it
-  a go since I need to test a nginx HTTP server which listens on a UNIX
-  domain socket.
+- tool_doswin: Use type SANITIZEcode in sanitize_file_name
+
+- tool_doswin: Improve sanitization processing
   
-  One patch [3] seems to make it possible to use the
-  CURLOPT_OPENSOCKETFUNCTION function to gain a UNIX domain socket.
-  Another person wrote a Go program which can do HTTP over a UNIX socket
-  for Docker[4] which uses a special URL scheme (though the name contains
-  cURL, it has no relation to the cURL library).
+  - Add unit test 1604 to test the sanitize_file_name function.
   
-  This patch considers support for UNIX domain sockets at the same level
-  as HTTP proxies / IPv6, it acts as an intermediate socket provider and
-  not as a separate protocol. Since this feature affects network
-  operations, a new feature flag was added ("unix-sockets") with a
-  corresponding CURL_VERSION_UNIX_SOCKETS macro.
+  - Use -DCURL_STATICLIB when building libcurltool for unit testing.
   
-  A new CURLOPT_UNIX_SOCKET_PATH option is added and documented. This
-  option enables UNIX domain sockets support for all requests on the
-  handle (replacing IP sockets and skipping proxies).
+  - Better detection of reserved DOS device names.
   
-  A new configure option (--enable-unix-sockets) and CMake option
-  (ENABLE_UNIX_SOCKETS) can disable this optional feature. Note that I
-  deliberately did not mark this feature as advanced, this is a
-  feature/component that should easily be available.
+  - New flags to modify sanitize behavior:
   
-   [0]: http://curl.haxx.se/mail/lib-2008-04/0279.html
-   [1]: http://daniel.haxx.se/blog/2008/04/14/http-over-unix-domain-sockets/
-   [2]: http://sourceforge.net/p/curl/feature-requests/53/
-   [3]: http://curl.haxx.se/mail/lib-2008-04/0361.html
-   [4]: https://github.com/Soulou/curl-unix-socket
+  SANITIZE_ALLOW_COLONS: Allow colons
+  SANITIZE_ALLOW_PATH: Allow path separators and colons
+  SANITIZE_ALLOW_RESERVED: Allow reserved device names
+  SANITIZE_ALLOW_TRUNCATE: Allow truncating a long filename
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-
-- [Peter Wu brought this change]
-
-  tests: add two HTTP over UNIX socket tests
+  - Restore sanitization of banned characters from user-specified outfile.
   
-  test1435: a simple test that checks whether a HTTP request can be
-  performed over the UNIX socket. The hostname/port are interpreted
-  by sws and should be ignored by cURL.
+  Prior to this commit sanitization of a user-specified outfile was
+  temporarily disabled in 2b6dadc because there was no way to allow path
+  separators and colons through while replacing other banned characters.
+  Now in such a case we call the sanitize function with
+  SANITIZE_ALLOW_PATH which allows path separators and colons to pass
+  through.
   
-  test1436: test for the ability to do two requests to the same host,
-  interleaved with one to a different hostname.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-
-- [Peter Wu brought this change]
+  Closes https://github.com/curl/curl/issues/624
+  Reported-by: Octavio Schroeder
 
-  tests: add HTTP UNIX socket server testing support
-  
-  The variable `$ipvnum` can now contain "unix" besides the integers 4
-  and 6 since the variable. Functions which receive this parameter
-  have their `$port` parameter renamed to `$port_or_path` to support a
-  path to the UNIX domain socket (as a "port" is only meaningful for TCP).
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+- [Viktor Szakats brought this change]
 
-- [Peter Wu brought this change]
+  URLs: change more http to https
 
-  sws: try to remove socket and retry bind
+- sasl_sspi: Fix memory leak in domain populate
   
-  If sws is killed it might leave a stale socket file on the filesystem
-  which would cause an EADDRINUSE error. After this patch, it is checked
-  whether the socket is really stale and if so, the socket file gets
-  removed and another bind is executed.
+  Free an existing domain before replacing it.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Bug: https://github.com/curl/curl/issues/635
+  Reported-by: silveja1@users.noreply.github.com
 
-- [Peter Wu brought this change]
+Daniel Stenberg (4 Feb 2016)
+- [Viktor Szakats brought this change]
 
-  sws: add UNIX domain socket support
+  URLs: follow GitHub project rename (also Travis CI)
   
-  This extends sws with a --unix-socket option which causes the port to
-  be ignored (as the server now listens on the path specified by
-  --unix-socket). This feature will be available in the following patch
-  that enables checking for UNIX domain socket support.
-  
-  Proxy support (CONNECT) is not considered nor tested. It does not make
-  sense anyway, first connecting through a TCP proxy, then let that TCP
-  proxy connect to a UNIX socket.
+  Closes #632
+
+- CHANGES.o: fix references to curl.haxx.nu
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  I removed the scheme prefix from the URLs references this host name, as
+  we don't own/run that anymore but the name is kept for historic reasons.
 
-- [Peter Wu brought this change]
+- HISTORY: add some info about when we used which host names
 
-  sws: restrict TCP_NODELAY to IP sockets
-  
-  TCP_NODELAY does not make sense for Unix sockets, so enable it only if
-  the socket is using IP.
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+Jay Satiro (2 Feb 2016)
+- [Viktor Szakats brought this change]
 
-Dan Fandrich (3 Dec 2014)
-- [Dave Reisner brought this change]
+  URLs: change more http to https
 
-  curl.1: fix trivial typo
+Dan Fandrich (3 Feb 2016)
+- URLs: Change more haxx.se URLs from http: to https:
 
-Steve Holme (3 Dec 2014)
-- sasl_gssapi: Added body to Curl_sasl_create_gssapi_user_message()
+Daniel Stenberg (3 Feb 2016)
+- RELEASE-NOTES: synced with 4af40b364
 
-- sasl_gssapi: Added body to Curl_sasl_gssapi_cleanup()
+- URLs: change all http:// URLs to https://
 
-- sasl_gssapi: Added Curl_sasl_build_gssapi_spn() function
-  
-  Added helper function for returning a GSS-API compatible SPN.
+- configure: update the copyright year range in output
 
-Daniel Stenberg (3 Dec 2014)
-- NSS: enable the CAPATH option
+- dotdot: allow an empty input string too
+  
+  It isn't used by the code in current conditions but for safety it seems
+  sensible to at least not crash on such input.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1457
-  Patch-by: Tomasz Kojm
+  Extended unit test 1395 to verify this too as well as a plain "/" input.
 
-Steve Holme (3 Dec 2014)
-- sasl_gssapi: Enable USE_KERBEROS5 for GSS-API based builds
+- HTTPS: update a bunch of URLs from HTTP to HTTPS
 
-- sasl_gssapi: Added GSS-API based Kerberos V5 variables
+- [Sergei Nikulov brought this change]
 
-- sws.c: Fixed compilation warning when IPv6 is disabled
+  AppVeyor: updated to handle OpenSSL/WinSSL builds
   
-  sws.c:69: warning: comma at end of enumerator list
+  Closes #621
 
-- sasl_gssapi: Made log_gss_error() a common GSS-API function
+Jay Satiro (1 Feb 2016)
+- tool_operate: Don't sanitize --output path (Windows)
   
-  Made log_gss_error() a common function so that it can be used in both
-  the http_negotiate code as well as the curl_sasl_gssapi code.
-
-- sasl_gssapi: Introduced GSS-API based SASL module
+  Due to path separators being incorrectly sanitized in --output
+  pathnames, eg -o c:\foo => c__foo
   
-  Added the initial version of curl_sasl_gssapi.c and updated the project
-  files in preparation for adding GSS-API based Kerberos V5 support.
-
-- smb: Don't try to connect with empty credentials
+  This is a partial revert of 3017d8a until I write a proper fix. The
+  remote-name will continue to be sanitized, but if the user specified an
+  --output with string replacement (#1, #2, etc) that data is unsanitized
+  until I finish a fix.
   
-  On some platforms curl would crash if no credentials were used. As such
-  added detection of such a use case to prevent this from happening.
+  Bug: https://github.com/bagder/curl/issues/624
+  Reported-by: Octavio Schroeder
+
+- curl.1: Explain remote-name behavior if file already exists
   
-  Reported-by: Gisle Vanem
+  .. also warn about letting the server pick the filename.
 
-- smb.c: Coding policing of pointer usage
+- [Gisle Vanem brought this change]
 
-- configure: Fixed inclusion of SMB when no crypto engines available
+  urldata: Error on missing SSL backend-specific connect info
 
-Guenter Knauf (1 Dec 2014)
-- build: in Makefile.m32 simplified autodetection.
+Daniel Stenberg (28 Jan 2016)
+- bump: towards the next (7.47.1 ?)
 
-Daniel Stenberg (30 Nov 2014)
-- [Peter Wu brought this change]
+- [Sergei Nikulov brought this change]
 
-  sws: move away from IPv4/IPv4-only assumption
-  
-  Instead of depending the socket domain type on use_ipv6, specify the
-  domain type (AF_INET / AF_INET6) as variable. An enum is used here with
-  switch to avoid compiler warnings in connect_to, complaining that rc
-  is possibly undefined (which is not possible as socket_domain is
-  always set).
+  cmake: fixed when OpenSSL enabled on Windows and schannel detected
   
-  Besides abstracting the socket type, make the debugging messages be
-  independent on IP (introduce location_str which points to "port XXXXX").
-  Rename "ipv_inuse" to "socket_type" and tighten the scope (main).
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes #617
 
-- [Peter Wu brought this change]
+Jay Satiro (28 Jan 2016)
+- [Sergei Nikulov brought this change]
 
-  lib/connect: restrict IP/TCP options to said sockets
+  urldata: moved common variable out of ifdef
   
-  This patch prepares for adding UNIX domain sockets support.
+  Closes https://github.com/bagder/curl/pull/618
+
+- [Viktor Szakats brought this change]
+
+  tool_doswin: silence unused function warning
   
-  TCP_NODELAY and TCP_KEEPALIVE are specific to TCP/IP sockets, so do not
-  apply these to other socket types. bindlocal only works for IP sockets
-  (independent of TCP/UDP), so filter that out too for other types.
+  tool_doswin.c:185:14: warning: 'msdosify' defined but not used
+  [-Wunused-function]
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes https://github.com/bagder/curl/pull/616
 
-- smb.c: use size_t as input argument types for msg sizes
+Daniel Stenberg (27 Jan 2016)
+- getredirect.c: fix variable name
   
-  This fixes warnings about conversions to int
+  Reported-by: Bernard Spil
 
-Steve Holme (30 Nov 2014)
-- version: The next release will become 7.40.0
+Version 7.47.0 (27 Jan 2016)
 
-- [Bill Nagel brought this change]
+Daniel Stenberg (27 Jan 2016)
+- examples/Makefile.inc: specify programs without .c!
 
-  docs: Updated for the SMB protocol
-  
-  This patch updates the documentation for the SMB/CIFS protocol.
+- THANKS: 6 new contributors from 7.47.0 release notes
 
-- curl tool: Exclude SMB from the protocol redirect
+- [Isaac Boukris brought this change]
+
+  NTLM: Fix ConnectionExists to compare Proxy credentials
+  
+  Proxy NTLM authentication should compare credentials when
+  re-using a connection similar to host authentication, as it
+  authenticate the connection.
   
-  As local files could be accessed through \\localhost\c$.
+  Example:
+  curl -v -x http://proxy:port http://host/ -U good_user:good_pwd
+    --proxy-ntlm --next -x http://proxy:port http://host/
+      [-U fake_user:fake_pwd --proxy-ntlm]
+  
+  CVE-2016-0755
+  
+  Bug: http://curl.haxx.se/docs/adv_20160127A.html
 
-- [Bill Nagel brought this change]
+- [Ray Satiro brought this change]
 
-  curl tool: Enable support for the SMB protocol
+  curl: avoid local drive traversal when saving file (Windows)
   
-  This patch enables SMB/CIFS support in the curl command-line tool.
-
-- smb.c: Fixed compilation warnings
+  curl does not sanitize colons in a remote file name that is used as the
+  local file name. This may lead to a vulnerability on systems where the
+  colon is a special path character. Currently Windows/DOS is the only OS
+  where this vulnerability applies.
   
-  smb.c:398: warning: comparison of integers of different signs:
-             'ssize_t' (aka 'long') and 'unsigned long'
-  smb.c:443: warning: comparison of integers of different signs:
-             'ssize_t' (aka 'long') and 'unsigned long'
-
-- libcurl: Exclude SMB from the protocol redirect
+  CVE-2016-0754
   
-  As local files could be accessed through \\localhost\c$.
+  Bug: http://curl.haxx.se/docs/adv_20160127B.html
 
-- [Bill Nagel brought this change]
+- RELEASE-NOTES: 7.47.0
 
-  libcurl: Enable support for the SMB protocol
-  
-  This patch enables SMB/CIFS support in libcurl.
+- FAQ: language fix in 4.19
 
-- smb.c: Fixed compilation warnings
-  
-  smb.c:322: warning: conversion to 'short unsigned int' from 'unsigned
-             int' may alter its value
-  smb.c:323: warning: conversion to 'short unsigned int' from 'unsigned
-             int' may alter its value
-  smb.c:482: warning: conversion to 'short unsigned int' from 'int' may
-             alter its value
-  smb.c:521: warning: conversion to 'unsigned int' from 'curl_off_t' may
-             alter its value
-  smb.c:549: warning: conversion to 'unsigned int' from 'curl_off_t' may
-             alter its value
-  smb.c:550: warning: conversion to 'short unsigned int' from 'int' may
-             alter its value
-
-- smb.c: Renamed SMB command message variables to avoid compiler warnings
-  
-  smb.c:489: warning: declaration of 'close' shadows a global declaration
-  smb.c:511: warning: declaration of 'read' shadows a global declaration
-  smb.c:528: warning: declaration of 'write' shadows a global declaration
+- [paulehoffman brought this change]
 
-- smb.c: Fixed compilation warnings
+  FAQ: Update to point to GitHub
   
-  smb.c:212: warning: unused parameter 'done'
-  smb.c:380: warning: ISO C does not allow extra ';' outside of a function
-  smb.c:812: warning: unused parameter 'premature'
-  smb.c:822: warning: unused parameter 'dead'
-
-- smb.c: Fixed compilation warnings
+  Current FAQ didn't make it clear where the main repo is.
   
-  smb.c:311: warning: conversion from 'unsigned __int64' to 'u_short',
-             possible loss of data
-  smb.c:425: warning: conversion from '__int64' to 'unsigned short',
-             possible loss of data
-  smb.c:452: warning: conversion from '__int64' to 'unsigned short',
-             possible loss of data
+  Closes #612
 
-- smb.c: Fixed compilation warnings
+- maketgz: generate date stamp with LC_TIME=C
   
-  smb.c:162: error: comma at end of enumerator list
-  smb.c:469: warning: conversion from 'size_t' to 'unsigned short',
-             possible loss of data
-  smb.c:517: warning: conversion from 'curl_off_t' to 'unsigned int',
-             possible loss of data
-  smb.c:545: warning: conversion from 'curl_off_t' to 'unsigned int',
-             possible loss of data
+  bug: http://curl.haxx.se/mail/lib-2016-01/0123.html
 
-- [Bill Nagel brought this change]
+- curl_multi_socket_action.3: line wrap
 
-  smb: Added initial SMB functionality
-  
-  Initial implementation of the SMB/CIFS protocol.
+- RELEASE-NOTES: synced with d58ba66eeceb
 
-- [Bill Nagel brought this change]
+Steve Holme (21 Jan 2016)
+- TODO: "Create remote directories" for SMB
 
-  smb: Added SMB handler interfaces
+Jay Satiro (18 Jan 2016)
+- mbedtls: Fix pinned key return value on fail
   
-  Added the SMB and SMBS handler interface structures and associated
-  functions required for SMB/CIFS operation.
-
-- transfer: Code style policing
+  - Switch from verifying a pinned public key in a callback during the
+  certificate verification to inline after the certificate verification.
   
-  Prefer ! rather than NULL in if statements, added comments and updated
-  function spacing, argument spacing and line spacing to be more readble.
-
-- transfer: Fixed existing scratch buffer being checked for NULL twice
+  The callback method had three problems:
   
-  If the scratch buffer already existed when the CRLF conversion was
-  performed then the buffer pointer would be checked twice for NULL. This
-  second check is only necessary if the call to malloc() was performed by
-  the first check.
-
-- smtp: Fixed dot stuffing being performed when no new data read
+  1. If a pinned public key didn't match, CURLE_SSL_PINNEDPUBKEYNOTMATCH
+  was not returned.
+  
+  2. If peer certificate verification was disabled the pinned key
+  verification did not take place as it should.
   
-  Whilst I had moved the dot stuffing code from being performed before
-  CRLF conversion takes place to after it, in commit 4bd860a001, I had
-  moved it outside the 'when something read' block of code when meant
-  it could perform the dot stuffing twice on partial send if nread
-  happened to contain the right values. It also meant the function could
-  potentially read past the end of buffer. This was highlighted by the
-  following warning:
+  3. (related to #2) If there was no certificate of depth 0 the callback
+  would not have checked the pinned public key.
   
-  warning: `nread' might be used uninitialized in this function
+  Though all those problems could have been fixed it would have made the
+  code more complex. Instead we now verify inline after the certificate
+  verification in mbedtls_connect_step2.
+  
+  Ref: http://curl.haxx.se/mail/lib-2016-01/0047.html
+  Ref: https://github.com/bagder/curl/pull/601
 
-Daniel Stenberg (29 Nov 2014)
-- smb.h: fixed picky compiler warning
+- tests: Add a test for pinnedpubkey fail even when insecure
   
-  smb.h:30:16: error: comma at end of enumerator list [-Werror=pedantic]
+  Because disabling the peer verification (--insecure) must not disable
+  the public key pinning check (--pinnedpubkey).
 
-Steve Holme (29 Nov 2014)
-- tests: Disable test 1013 until SMB is fully added
+- [Daniel Schauenberg brought this change]
 
-- [Bill Nagel brought this change]
+  CURLINFO_RESPONSE_CODE.3: add example
 
-  smb: Added SMB protocol and port definitions
+Kamil Dudka (15 Jan 2016)
+- ssh: make CURLOPT_SSH_PUBLIC_KEYFILE treat "" as NULL
   
-  Added the necessary protocol and port definitions in order to support
-  SMB/CIFS.
-
-- [Bill Nagel brought this change]
-
-  smb: Added internal SMB definitions and structures
+  The CURLOPT_SSH_PUBLIC_KEYFILE option has been documented to handle
+  empty strings specially since curl-7_25_0-31-g05a443a but the behavior
+  was unintentionally removed in curl-7_38_0-47-gfa7d04f.
   
-  Added the internal definitions and structures necessary for SMB/CIFS
-  support.
-
-- [Bill Nagel brought this change]
-
-  smb: Added SMB connection structure
+  This commit restores the original behavior and clarifies it in the
+  documentation that NULL and "" have both the same meaning when passed
+  to CURLOPT_SSH_PUBLIC_KEYFILE.
   
-  Added the connection structure that will be required in urldata.h for
-  SMB/CIFS based connections.
+  Bug: http://curl.haxx.se/mail/lib-2016-01/0072.html
 
-- [Bill Nagel brought this change]
+Daniel Stenberg (14 Jan 2016)
+- RELEASE-NOTES: synced with 35083ca60ed035a
 
-  smb: Added initial source files for SMB
+- openssl: improved error detection/reporting
   
-  Added the initial source files and updated the relevant project files in
-  order to support SMB/CIFS.
+  ... by extracting the LIB + REASON from the OpenSSL error code. OpenSSL
+  1.1.0+ returned a new func number of another cerfificate fail so this
+  required a fix and this is the better way to catch this error anyway.
+
+- openssl: for 1.1.0+ they now provide a SSLeay() macro of their own
 
-- [Bill Nagel brought this change]
+- CURLOPT_RESOLVE.3: minor language polish
 
-  smb: Added configuration options for SMB
+- configure: assume IPv6 works when cross-compiled
   
-  Added --enable-smb and --disable-smb configuration options for the
-  upcoming SMB/CIFS protocol support.
+  The configure test uses AC_TRY_RUN to figure out if an ipv6 socket
+  works, and testing like that doesn't work for cross-compiles. These days
+  IPv6 support is widespread so a blind guess is probably more likely to
+  be 'yes' than 'no' now.
+  
+  Further: anyone who cross-compiles can use configure's --disable-ipv6 to
+  explicitly disable IPv6 and that also works for cross-compiles.
+  
+  Made happen after discussions in issue #594
 
-Daniel Stenberg (28 Nov 2014)
-- [Peter Wu brought this change]
+- TODO: "Try to URL encode given URL"
+  
+  Closes #514
 
-  runtests.pl: fix startup of IPv6 servers
+- ConnectionExists: only do pipelining/multiplexing when asked
   
-  Commit curl-7_23_1-143-g8218064 changed the parameter of
-  responsive_http_server to accept types other than IPv6 (converting
-  from a boolean to a string), but only considered the lower-case "ipv6"
-  and not the "IPv6" variant. This caused all servers to start in IPv4
-  mode instead.
+  When an HTTP/2 upgrade request fails (no protocol switch), it would
+  previously detect that as still possible to pipeline on (which is
+  acorrect) and do that when PIPEWAIT was enabled even if pipelining was
+  not explictily enabled.
   
-  This patch converts the remaining cases to "ipv6". While not strictly
-  necessary for the run*server variants, these got also converted for
-  consistency and to prevent future errors.
+  It should only pipelined if explicitly asked to.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes #584
 
-- [Peter Wu brought this change]
+- [Mohammad AlSaleh brought this change]
 
-  runtests.pl: fix warning message, remove duplicate value
+  lib: Prefix URLs with lower-case protocol names/schemes
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-
-Steve Holme (27 Nov 2014)
-- http.c: Fixed compilation warnings from features being disabled
+  Before this patch, if a URL does not start with the protocol
+  name/scheme, effective URLs would be prefixed with upper-case protocol
+  names/schemes. This behavior might not be expected by library users or
+  end users.
   
-  warning: unused variable 'data'
-  warning: variable 'addcookies' set but not used
+  For example, if `CURLOPT_DEFAULT_PROTOCOL` is set to "https". And the
+  URL is "hostname/path". The effective URL would be
+  "HTTPS://hostname/path" instead of "https://hostname/path".
   
-  ...and some very minor coding style policing.
+  After this patch, effective URLs would be prefixed with a lower-case
+  protocol name/scheme.
+  
+  Closes #597
+  
+  Signed-off-by: Mohammad AlSaleh <CE.Mohammad.AlSaleh@gmail.com>
 
-- RELEASE-NOTES: Synced with c5399c827d
+- [Alessandro Ghedini brought this change]
 
-- tests: Added SMTP with --crlf test case
+  scripts: don't generate and install zsh completion when cross-compiling
 
-- docs: Updated for commit 4bd860a001 and SMTP Unix line ending conversion
+- [Alessandro Ghedini brought this change]
 
-- smtp: Fixed const'ness of nread parameter in Curl_smtp_escape_eob()
+  scripts: fix zsh completion generation
   
-  ...and some comment typos!
+  The script should use the just-built curl, not the system one. This fixes
+  zsh completion generation when no system curl is installed.
 
-- smtp: Added support for the conversion of Unix newlines during mail send
-  
-  Added support for the automatic conversion of Unix newlines to CRLF
-  during mail uploads.
+- [Alessandro Ghedini brought this change]
+
+  zsh.pl: fail if no curl is found
   
-  Feature: http://curl.haxx.se/bug/view.cgi?id=1456
+  Instead of generation a broken completion file.
 
-- CURLOPT_CRLF.3: Fixed inclusion of SMTP in listed protocols
+- [Michael Kaufmann brought this change]
 
-Daniel Stenberg (25 Nov 2014)
-- curl*3: added small examples
+  IDN host names: Remove the port number before converting to ACE
   
-  and some minor edits
+  Closes #596
 
-- libcurl.3: fix formatting
+Jay Satiro (10 Jan 2016)
+- runtests: Add mbedTLS to the SSL backends
   
-  refer to functions with the man page section properly
+  .. and enable SSLpinning tests for mbedTLS, BoringSSL and LibreSSL.
 
-- man pages: SEE ALSO curl_multi_wait
+Daniel Stenberg (10 Jan 2016)
+- [Thomas Glanzmann brought this change]
 
-- curl_multi_wait.3: clarify numfds being used if not NULL
+  mbedtls: implement CURLOPT_PINNEDPUBLICKEY
 
-- multi-single.c: switch to use curl_multi_wait
-  
-  Makes the example much easier and straight-forward!
+Jay Satiro (9 Jan 2016)
+- [Tatsuhiro Tsujikawa brought this change]
 
-- testcurl: bump the version of this script!
+  url: Fix compile error with --enable-werror
 
-- testcurl: skip reading the setup file if given enough cmdline info
-  
-  This makes it much easier to run multiple tests in the same directory,
-  just altering the command lines used.
+- [Tatsuhiro Tsujikawa brought this change]
 
-- select.c: fix compilation for VxWorks
+  http2: Ensure that http2_handle_stream_close is called
+  
+  Previously, when HTTP/2 is enabled and used, and stream has content
+  length known, Curl_read was not called when there was no bytes left to
+  read. Because of this, we could not make sure that
+  http2_handle_stream_close was called for every stream. Since we use
+  http2_handle_stream_close to emit trailer fields, they were
+  effectively ignored. This commit changes the code so that Curl_read is
+  called even if no bytes left to read, to ensure that
+  http2_handle_stream_close is called for every stream.
   
-  Reported-by: Brian
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1455
+  Discussed in https://github.com/bagder/curl/pull/564
 
-Patrick Monnerat (24 Nov 2014)
-- [moparisthebest brought this change]
-
-  SSL: Add PEM format support for public key pinning
+Daniel Stenberg (8 Jan 2016)
+- http2: handle the received SETTINGS frame
+  
+  This regression landed in 5778e6f5 and made libcurl not act on received
+  settings and instead stayed with its internal defaults.
+  
+  Bug: http://curl.haxx.se/mail/lib-2016-01/0031.html
+  Reported-by: Bankde
 
-Kamil Dudka (24 Nov 2014)
-- Revert "repository: ignore patch files generated by git"
+- Revert "multiplex: allow only once HTTP/2 is actually used"
   
-  This reverts commit 217024a687ce86eb6d2317822ed81c7e5abc4b61.
+  This reverts commit 46cb70e9fa81c9a56de484cdd7c5d9d0d9fbec36.
   
-  Bug: https://github.com/bagder/curl/commit/217024a6#commitcomment-8693738
+  Bug: http://curl.haxx.se/mail/lib-2016-01/0031.html
 
-Steve Holme (23 Nov 2014)
-- multi.c: Fixed compilation warnings when no verbose string support
+Jay Satiro (8 Jan 2016)
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Fix PUSH_PROMISE headers being treated as trailers
   
-  warning: variable 'connection_id' set but not used
-  warning: unused parameter 'lineno'
+  Discussed in https://github.com/bagder/curl/pull/564
 
-- RELEASE-NOTES: Synced with 1450712e76
+Daniel Stenberg (8 Jan 2016)
+- [Michael Kaufmann brought this change]
 
-- sasl: Tidied up some parameter comments
+  connection reuse: IDN host names fixed
+  
+  Use the ACE form of IDN hostnames as key in the connection cache.  Add
+  new tests.
+  
+  Closes #592
 
-- sasl: Reduced the need for two sets of NTLM functions
+- tests: mark IPv6 FTP and FTPS tests with the FTP keyword
 
-- ntlm: Moved NSS initialisation to base decode function
+Jay Satiro (7 Jan 2016)
+- mbedtls: Fix ALPN support
+  
+  - Fix ALPN reply detection.
+  
+  - Wrap nghttp2 code in ifdef USE_NGHTTP2.
+  
+  
+  Prior to this change ALPN and HTTP/2 did not work properly in mbedTLS.
 
-- http_ntlm: Fixed additional NSS initialisation call when decoding type-2
+- http2: Fix client write for trailers on stream close
   
-  After commit 48d19acb7c the HTTP code would call Curl_nss_force_init()
-  twice when decoding a NTLM type-2 message, once directly and the other
-  through the call to Curl_sasl_decode_ntlm_type2_message().
+  Check that the trailer buffer exists before attempting a client write
+  for trailers on stream close.
+  
+  Refer to comments in https://github.com/bagder/curl/pull/564
 
-- ntlm: Fixed static'ness of local decode function
+Daniel Stenberg (7 Jan 2016)
+- COPYING: update general copyright year range
 
-- ntlm: Corrected some parameter names and comments
+- ConnectionExists: add missing newline in infof() call
+  
+  Mistake from commit a464f33843ee1
 
-- runtests.pl: Re-aligned feature support comments
+- multiplex: allow only once HTTP/2 is actually used
+  
+  To make sure curl doesn't allow multiplexing before a connection is
+  upgraded to HTTP/2 (like when Upgrade: h2c fails), we must make sure the
+  connection uses HTTP/2 as well and not only check what's wanted.
+  
+  Closes #584
+  
+  Patch-by: c0ff
 
-- runtests.pl: Use Kerberos and SPNEGO as proxies for the crypto feature
+Jay Satiro (4 Jan 2016)
+- curl_global_init.3: Add Windows-specific info for init via DLL
   
-  In addition to NTLM, use Kerberos and SPNEGO as proxies to the crypto
-  feature.
+  - Add to both curl_global_init.3 and libcurl.3 the caveat for Windows
+  that initializing libcurl via a DLL's DllMain or static initializer
+  could cause a deadlock.
   
-  ...and converted tab characters, from commit 4b4e8a5853, to spaces.
+  Bug: https://github.com/bagder/curl/issues/586
+  Reported-by: marc-groundctl@users.noreply.github.com
 
-- runtests.pl: Added support for SPNEGO
+Daniel Stenberg (4 Jan 2016)
+- FAQ: clarify who to mail about ECCN clarifications
 
-- runtests.pl: Added Kerberos detection
+- progressfunc.c: spellfix description
 
-- runtests.pl: Added GSS-API detection
+- docs/examples/multi-app.c: fix bad desc formatting
 
-- FILEFORMAT: Added SSPI, GSS-API and Kerberos to the features list
+- examples: added descriptions
 
-- FILEFORMAT: Added test requires feature not present information
-  
-  Such as !SSPI as we do for the NTLM and Digest tests.
+- example/simple.c: add description
 
-Daniel Stenberg (20 Nov 2014)
-- http.c: log if it notices HTTP 1.1 after a upgrade to http2
+- getredirect.c: a new example
 
-- test1801: first real http2 test case
+Marc Hoersken (27 Dec 2015)
+- RELEASE-NOTES: add 5e0e81a9c4e35f04ca
 
-- sws: initial tiny steps toward http2 support
+Daniel Stenberg (26 Dec 2015)
+- RELEASE-NOTES: synced with 2aec4359db1088b10d
 
-- FILEFORMAT: mention the new upgrade support
+Marc Hoersken (26 Dec 2015)
+- test 1515: add data check
 
-- test1800: first plain-text http2 test case
+- test 1515: add MSYS support by passing a relative path
   
-  Verifies the upgrade request, but gets a plain 1.1 response
-
-- [Tatsuhiro Tsujikawa brought this change]
+  MSYS would otherwise turn a /-style path into a C:\-style path.
 
-  http: Disable pipelining for HTTP/2 and upgraded connections
+- test 539: use datacheck mode text for ASCII-mode LISTings
   
-  This commit disables pipelining for HTTP/2 or upgraded connections.  For
-  HTTP/2, we do not support multiplexing.  In general, requests cannot be
-  pipelined in an upgraded connection, since it is now different protocol.
+  While still using datacheck mode binary for the inline reply data.
 
-- [Brad Harder brought this change]
+- runtests.pl: check up to 5 data parts with different text modes
+  
+  Move the text-mode conversion for reply/replycheck from the verify
+  section into the load section and add support for 4 more check parts.
 
-  CURLOPT_POSTFIELDS.3: mention the COPYPOSTFIELDS option
+Daniel Stenberg (24 Dec 2015)
+- CURLOPT_RANGE: for HTTP servers, range support is optional
 
-Steve Holme (19 Nov 2014)
-- multi-uv.c: Updated for curl coding standards
+Marc Hoersken (24 Dec 2015)
+- tests 1048 and 1050: use datacheck mode text for ASCII-mode LISTings
 
-- conncache: Fixed specifiers in infof() for long and size_t variables
+- tests 706 and 707: use datacheck mode text for ASCII-mode LISTings
 
-- [Peter Wu brought this change]
+- tests 400,403,406: use datacheck mode text for ASCII-mode LISTings
 
-  cmake: add Kerberos to the supported features
+- sockfilt.c: fix calculation of sleep timeout on Windows
   
-  Updated following commit eda919f and a4b7f71.
+  Not converting to double caused small timeouts to be skipped.
+
+- tests first.c: fix calculation of sleep timeout on Windows
   
-  Acked-by: Brad King <brad.king@kitware.com>
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Not converting to double caused small timeouts to be skipped.
 
-- [Peter Wu brought this change]
+- test 573: add more debug output
 
-  cmake: fix NTLM detection when CURL_DISABLE_HTTP defined
+- ftplistparser.c: fix handling of file LISTings using Windows EOL
   
-  Updated following changes in commit f0d860d.
+  Previously file.txt[CR][LF] would have been returned as file.tx
+  (without the last t) if filetype is symlink. Now the t is
+  included and the internal item_length includes the zero byte.
   
-  Acked-by: Brad King <brad.king@kitware.com>
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-
-Daniel Stenberg (19 Nov 2014)
-- RELEASE-NOTES: synced with cb13fad733e
-
-- [Jay Satiro brought this change]
+  Spotted using test 576 on Windows.
 
-  examples: Wait recommended 100ms when no file descriptors are ready
-  
-  Prior to this change when no file descriptors were ready on platforms
-  other than Windows the multi examples would sleep whatever was in
-  timeout, which may or may not have been less than the minimum
-  recommended value [1] of 100ms.
+- test 16: fix on Linux (and Windows) by using plain ASCII characters
   
-  [1]: http://curl.haxx.se/libcurl/c/curl_multi_fdset.html
+  Follow up on b064ff0c351bb287557228575ef4c1d079b866fb, thanks Daniel.
 
-- [Waldek Kozba brought this change]
+- tftpd server: add Windows support by writing files in binary mode
 
-  multi-uv.c: close the file handle after download
+- tests 252-255: use datacheck mode text for ASCII-mode LISTings
 
-- [Jon Spencer brought this change]
+- test 16: fix on Windows by converting data file from ANSI to UTF-8
 
-  multi: inform about closed sockets before they are closed
+Daniel Stenberg (23 Dec 2015)
+- Makefile.inc: s/curl_SOURCES/CURL_FILES
   
-  When the connection code decides to close a socket it informs the multi
-  system via the Curl_multi_closed function. The multi system may, in
-  turn, invoke the CURLMOPT_SOCKETFUNCTION function with
-  CURL_POLL_REMOVE. This happens after the socket has already been
-  closed. Reorder the code so that CURL_POLL_REMOVE is called before the
-  socket is closed.
-
-Guenter Knauf (19 Nov 2014)
-- build: in Makefile.m32 moved target autodetection.
+  This allows the root Makefile.am to include the Makefile.inc without
+  causing automake to warn on it (variables named *_SOURCES are
+  magic). curl_SOURCES is then instead assigned properly in
+  src/Makefile.am only.
   
-  Moved target autodetection block after defining CC macro.
+  Closes #577
 
-- build: in Makefile.m32 simplify platform flags.
+- [Anders Bakken brought this change]
 
-- build: in Makefile.m32 try to detect 64bit target.
+  ConnectionExists: with *PIPEWAIT, wait for connections
+  
+  Try harder to prevent libcurl from opening up an additional socket when
+  CURLOPT_PIPEWAIT is set. Accomplished by letting ongoing TCP and TLS
+  handshakes complete first before the decision is made.
+  
+  Closes #575
 
-Daniel Stenberg (19 Nov 2014)
-- [Brad King brought this change]
+- [Anders Bakken brought this change]
 
-  CMake: Simplify if() conditions on check result variables
+  Add .dir-locals and set c-basic-offset to 2.
   
-  Remove use of an old hack that takes advantage of the auto-dereference
-  behavior of the if() command to detect if a variable is defined.  The
-  hack has the form:
+  This makes it easier for emacs users to automatically get the right
+  2-space indentation when they edit curl source files.
   
-   if("${VAR} MATCHES "^${VAR}$")
+  c++-mode is in there as well because Emacs can't easily know if
+  something is a C or C++ header.
   
-  where "${VAR}" is a macro argument reference.  Use if(DEFINED) instead.
-  This also avoids warnings for CMake Policy CMP0054 in CMake 3.1.
+  Closes #574
 
-- TODO-RELEASE: removed
+- [Johannes Schindelin brought this change]
 
-- [Carlo Wood brought this change]
-
-  debug: added new connection cache output, plus fixups
-  
-  Debug output 'typo' fix.
+  configure: detect IPv6 support on Windows
   
-  Don't print an extra "0x" in
-    * Pipe broke: handle 0x0x2546d88, url = /
+  This patch was "nicked" from the MINGW-packages project by Daniel.
   
-  Add debug output.
-  Print the number of connections in the connection cache when
-    adding one, and not only when one is removed.
-  
-  Fix typos in comments.
+  https://github.com/Alexpux/MINGW-packages/commit/9253d0bf58a1486e91f7efb5316e7fdb48fa4007
+  Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
 
-- multi: move the ending condition into the loop as well
+- configure: allow static builds on mingw
   
-  ... as it was before I changed the loop in commit e04ccbd50. It caused
-  test 2030 and 2032 to fail.
-
-Steve Holme (18 Nov 2014)
-- multi: Prefer we don't use CURLE_OK and NULL in comparisons
-
-Daniel Stenberg (18 Nov 2014)
-- multi_runsingle: use 'result' for local CURLcode storage
+  This patch is adopted from the MINGW-packages project. It makes it
+  possible to build curl both shared and static again.
   
-  ... and assign data->result only at the end. Makes the code more compact
-  (easier to read) and more similar to other code.
+  URL: https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-curl
 
-- multi_runsingle: rename result to rc
-  
-  save 'result' for CURLcode types
+Marc Hoersken (17 Dec 2015)
+- test 1326: fix file check since curl is outputting binary data
 
-- multi: make multi_runsingle loop internally
+- test 1326: fix getting stuck on Windows due to incomplete request
   
-  simplifies the use of this function at little cost.
+  The request needs to be read and send in binary mode in order to use
+  CRLF instead of LF. Adding --upload-file - causes curl to read stdin
+  in binary mode.
 
-- [Carlo Wood brought this change]
+Daniel Stenberg (17 Dec 2015)
+- RELEASE-NOTES: command line option recount
 
-  multi: when leaving for timeout, close accordingly
-  
-  Fixes the problem when a transfer in a pipeline times out.
+Dan Fandrich (16 Dec 2015)
+- scripts/Makefile: build zsh script even in an out-of-tree build
 
-Guenter Knauf (18 Nov 2014)
-- build: in Makefile.m32 add -m32 flag for 32bit.
+Marc Hoersken (16 Dec 2015)
+- sockfilt.c: added some debug output to select_ws
 
-- mk-ca-bundle.vbs: update copyright year.
+- sockfilt.c: keep lines shorter than 80 chars
 
-- build: in Makefile.m32 pass -F flag to windres.
+- sockfilt.c: do not wait on unreliable file or pipe handle
+  
+  The previous implementation caused issues on modern MSYS2 runtimes.
 
-Steve Holme (17 Nov 2014)
-- config-win32: Fixed build targets for the VS2012+ Windows XP toolset
+Daniel Stenberg (16 Dec 2015)
+- cyassl: deal with lack of *get_peer_certificate
+  
+  The function is only present in wolfssl/cyassl if it was built with
+  --enable-opensslextra. With these checks added, pinning support is disabled
+  unless the TLS lib has that function available.
+  
+  Also fix the mistake in configure that checks for the wrong lib name.
   
-  Even though commit 23e70e1cc6 mentioned the v110_xp toolset, I had
-  forgotten to include the relevant pre-processor definitions.
+  Closes #566
 
-- sasl_sspi: Removed note about the NTLM functions being a wrapper
+- wolfssl: handle builds without SSLv3 support
 
-- connect.c: Fixed compilation warning when no verbose string support
-  
-  warning: unused parameter 'reason'
+- [Tatsuhiro Tsujikawa brought this change]
 
-- easy.c: Fixed compilation warning when no verbose string support
+  http2: Support trailer fields
   
-  warning: unused parameter 'easy'
-
-- win32: Updated some legacy APIs to use the newer extended versions
+  This commit adds trailer support in HTTP/2.  In HTTP/1.1, chunked
+  encoding must be used to send trialer fields.  HTTP/2 deprecated any
+  trandfer-encoding, including chunked.  But trailer fields are now
+  always available.
   
-  Updated the usage of some legacy APIs, that are preventing curl from
-  compiling for Windows Store and Windows Phone build targets.
+  Since trailer fields are relatively rare these days (gRPC uses them
+  extensively though), allocating buffer for trailer fields is done when
+  we detect that HEADERS frame containing trailer fields is started.  We
+  use Curl_add_buffer_* functions to buffer all trailers, just like we
+  do for regular header fields.  And then deliver them when stream is
+  closed.  We have to be careful here so that all data are delivered to
+  upper layer before sending trailers to the application.
   
-  Suggested-by: Stefan Neis
-  Feature: http://sourceforge.net/p/curl/feature-requests/82/
-
-- config-win32: Introduce build targets for VS2012+
+  We can deliver trailer field one by one using NGHTTP2_ERR_PAUSE
+  mechanism, but current method is far more simple.
   
-  Visual Studio 2012 introduced support for Windows Store apps as well as
-  supporting Windows Phone 8. Introduced build targets that allow more
-  modern APIs to be used as certain legacy ones are not available on these
-  new platforms.
+  Another possibility is use chunked encoding internally for HTTP/2
+  traffic.  I have not tested it, but it could add another overhead.
+  
+  Closes #564
 
-- sasl_sspi: Fixed compilation warnings when no verbose string support
+- RELEASE-NOTES: synced with 6c2c019654e658a
 
-- sasl_sspi: Added base64 decoding debug failure messages
+Jay Satiro (15 Dec 2015)
+- x509asn1: Fix host altname verification
+  
+  - In Curl_verifyhost check all altnames in the certificate.
   
-  Just like in the NTLM code, added infof() failure messages for
-  DIGEST-MD5 and GSSAPI authentication when base64 decoding fails.
+  Prior to this change only the first altname was checked. Only the GSKit
+  SSL backend was affected by this bug.
+  
+  Bug: http://curl.haxx.se/mail/lib-2015-12/0062.html
+  Reported-by: John Kohl
 
-- ntlm: Moved the SSPI based Type-3 message generation into the SASL module
+Daniel Stenberg (15 Dec 2015)
+- curl --expect100-timeout: added
+  
+  This is the new command line option to set the value for the existing
+  libcurl option CURLOPT_EXPECT_100_TIMEOUT_MS
 
-- ntlm: Moved the SSPI based Type-2 message decoding into the SASL module
+- cyassl: fix compiler warning on type conversion
 
-- ntlm: Moved the SSPI based Type-1 message generation into the SASL module
+- curlver: the pending release will become 7.47.0
 
-- [Michael Osipov brought this change]
+- [Anders Bakken brought this change]
 
-  kerberos: Use symbol qualified with _KERBEROS5
+  setstropt: const-correctness
   
-  For consistency renamed USE_KRB5 to USE_KERBEROS5.
+  Closes #565
 
-Daniel Stenberg (15 Nov 2014)
-- [Jay Satiro brought this change]
+- ROADMAP: implemented HTTP2 for HTTPS-only
 
-  examples: Don't call select() to sleep on windows
-  
-  Windows does not support using select() for sleeping without a dummy
-  socket. Instead use Windows' Sleep() and sleep for 100ms which is the
-  minimum suggested value in the curl_multi_fdset() doc.
-  
-  Prior to this change the multi examples would exit prematurely since
-  select() would error instead of sleeping when called without an fd.
-  
-  Reported-by: Johan Lantz
-  Bug: http://curl.haxx.se/mail/lib-2014-11/0221.html
+- HTTP2.md: spell fix and remove TODO now implemented
 
-- [Tatsuhiro Tsujikawa brought this change]
+- libressl: the latest openssl x509 funcs are not in libressl
 
-  http2: Don't send Upgrade headers when we already do HTTP/2
+- curl: use 2TLS by default
+  
+  Make this the default for the curl tool (if built with HTTP/2 powers
+  enabled) unless a specific HTTP version is requested on the command
+  line.
+  
+  This should allow more users to get HTTP/2 powers without having to
+  change anything.
 
-Steve Holme (15 Nov 2014)
-- sasl: Corrected Curl_sasl_build_spn() function description
+- http: add libcurl option to allow HTTP/2 for HTTPS only
   
-  There was a mismatch in function parameter names.
+  ... and stick to 1.1 for HTTP. This is in line with what browsers do and
+  should have very little risk.
 
-- tool: Removed krb4 from the supported features
+- openssl: adapt to openssl >= 1.1.0 X509 opaque structs
   
-  Although libcurl would never return CURL_VERSION_KERBEROS4 after 7.33,
-  so would not be output with --version, removed krb4 from the supported
-  features output.
+  Closes #491
 
-- [Michael Osipov brought this change]
+- openssl: avoid BIO_reset() warnings since it returns a value
+
+- openssl: adapt to 1.1.0+ name changes
 
-  tool: Use Kerberos for supported features
+- scripts/makefile: add standard header
 
-- urldata: Don't define sec_complete when no GSS-API support present
+- scripts/Makefile: fix GNUism and survive no perl
   
-  This variable is only used with HAVE_GSSAPI is defined by the FTP code
-  so let's place the definition with the other GSS-API based variables.
+  Closes #555
+  
+  Reported-by: Thomas Klausner
 
-- [Michael Osipov brought this change]
+- fix b6d5cb40d7038fe
 
-  docs: Use consistent naming for Kerberos
+- [Tatsuhiro Tsujikawa brought this change]
 
-- TODO: Lets support QOP options in GSSAPI authentication
+  http2: Fix hanging paused stream
+  
+  When NGHTTP2_ERR_PAUSE is returned from data_source_read_callback, we
+  might not process DATA frame fully.  Calling nghttp2_session_mem_recv()
+  again will continue to process DATA frame, but if there is no incoming
+  frames, then we have to call it again with 0-length data.  Without this,
+  on_stream_close callback will not be called, and stream could be hanged.
+  
+  Bug: http://curl.haxx.se/mail/lib-2015-11/0103.html
+  Reported-by: Francisco Moraes
 
-- sasl_sspi: Corrected a couple of comment typos
+- [Christian Stewart brought this change]
 
-- sasl: Moved Curl_sasl_gssapi_cleanup() definition into header file
+  build: fix compilation error with CURL_DISABLE_VERBOSE_STRINGS
   
-  Rather than define the function as extern in the source files that use
-  it, moved the function declaration into the SASL header file just like
-  the Digest and NTLM clean-up functions.
+  With curl disable verbose strings in http.c the compilation fails due to
+  the data variable being undefined later on in the function.
   
-  Additionally, added a function description comment block.
+  Closes #558
+
+Jay Satiro (7 Dec 2015)
+- [Gisle Vanem brought this change]
 
-- sasl_sspi: Added missing RFC reference for HTTP Digest authentication
+  config-win32: Fix warning HAVE_WINSOCK2_H undefined
 
-- ntlm: Clean-up and standardisation of base64 decoding
+- [Gisle Vanem brought this change]
 
-- ntlm: We prefer 'CURLcode result'
+  openssl: BoringSSL doesn't have CONF_modules_free
 
-Daniel Stenberg (13 Nov 2014)
-- [Brad King brought this change]
+- [Gisle Vanem brought this change]
 
-  CMake: Restore order-dependent library checks
+  lwip: Fix compatibility issues with later versions
   
-  Revert commit 2257deb502 (Cmake: Avoid cycle directory dependencies,
-  2014-08-22) and add a comment explaining the purpose of the original
-  code.
+  The name of the header guard in lwIP's <lwip/opt.h> has changed from
+  '__LWIP_OPT_H__' to 'LWIP_HDR_OPT_H' (bug #35874 in May 2015).
   
-  The check_library_exists_concat macro is intended to be called multiple
-  times on a sequence of possibly dependent libraries.  Later libraries
-  may depend on earlier libraries when they are static.  They cannot be
-  safely linked in reverse order on some platforms.
+  Other fixes:
   
-  Signed-off-by: Brad King <brad.king@kitware.com>
-
-- [Brad King brought this change]
-
-  CMake: Restore order-dependent header checks
+  - In curl_setup.h, the problem with an old PSDK doesn't apply if lwIP is
+  used.
   
-  Revert commit 1269df2e3b (Cmake: Don't check for all headers each
-  time, 2014-08-15) and add a comment explaining the purpose of the
-  original code.
+  - In memdebug.h, the 'socket' should be undefined first due to lwIP's
+  lwip_socket() macro.
   
-  The check_include_file_concat macro is intended to be called multiple
-  times on a sequence of possibly dependent headers.  Later headers
-  may depend on earlier headers to provide declarations.  They cannot
-  be safely included independently on some platforms.
+  - In curl_addrinfo.c lwIP's getaddrinfo() + freeaddrinfo() macros need
+  special handling because they were undef'ed in memdebug.h.
   
-  For example, many POSIX APIs document including sys/types.h before some
-  other headers.  Also on some OS X versions sys/socket.h must be included
-  before net/if.h or the check for the latter will fail.
+  - In select.c we can't use preprocessor conditionals inside select if
+  MSVC and select is a macro, as it is with lwIP.
   
-  Signed-off-by: Brad King <brad.king@kitware.com>
+  http://curl.haxx.se/mail/lib-2015-12/0023.html
+  http://curl.haxx.se/mail/lib-2015-12/0024.html
+
+Patrick Monnerat (7 Dec 2015)
+- os400: define CURL_VERSION_PSL in ILE/RPG binding
 
-- [Peter Wu brought this change]
+Jay Satiro (7 Dec 2015)
+- [Gisle Vanem brought this change]
+
+  version: Add flag CURL_VERSION_PSL for libpsl
 
-  test22: expand a backtick command
+- formdata: Check if length is too large for memory
   
-  This is the only user of the backtick operator in the command. As the
-  commands will soon not be executed by a shell anymore (but by perl),
-  replace the command with its output.
+  - If the size of the length type (curl_off_t) is greater than the size
+  of the size_t type then check before allocating memory to make sure the
+  value of length will fit in a size_t without overflow. If it doesn't
+  then return CURLE_BAD_FUNCTION_ARGUMENT.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Bug: https://github.com/bagder/curl/issues/425#issuecomment-154518679
+  Reported-by: Steve Holme
 
-- RELEASE-NOTES: synced with 2ee3c63b13
+Steve Holme (3 Dec 2015)
+- tests: Corrected copy and pasted comments from commit e643c5c908
 
-- http2: fix switched macro when http2 is not enabled
+Daniel Stenberg (3 Dec 2015)
+- curl: remove keepalive #ifdef checks done on libcurl's behalf
+  
+  They didn't match the ifdef logic used within libcurl anyway so they
+  could indeed warn for the wrong case - plus the tool cannot know how the
+  lib actually performs at that level.
 
-- [Tatsuhiro Tsujikawa brought this change]
+Steve Holme (2 Dec 2015)
+- test947: Corrected typo in test name
 
-  http2: Deal with HTTP/2 data inside response header buffer
+- tests: Disable the OAUTHBEARER tests when using a non-default port number
   
-  Previously if HTTP/2 traffic is appended to HTTP Upgrade response header
-  (thus they are in the same buffer), the trailing HTTP/2 traffic is not
-  processed and lost.  The appended data is most likely SETTINGS frame.
-  If it is lost, nghttp2 library complains server does not obey the HTTP/2
-  protocol and issues GOAWAY frame and curl eventually drops connection.
-  This commit fixes this problem and now trailing data is processed.
-
-Steve Holme (11 Nov 2014)
-- configure: Fixed inclusion of krb5 when CURL_DISABLE_CRYPTO_AUTH is defined
+  Tests 842, 843, 844, 845, 887, 888, 889, 890, 946, 947, 948 and 949 fail
+  if a custom port number is specified via the -b option of runtests.pl.
   
-  Commit fe0f8967bf fixed a problem with krb5 not being defined as a
-  supported feature when HAVE_GSSAPI is defined, however, it should
-  only be included if CURL_DISABLE_CRYPTO_AUTH is not set, like when
-  SPNEGO is listed as a feature.
+  Suggested by: Kamil Dudka
+  Bug: http://curl.haxx.se/mail/lib-2015-12/0003.html
 
-Daniel Stenberg (10 Nov 2014)
-- multi: removed Curl_multi_set_easy_connection
-  
-  It isn't used anywhere!
+Daniel Stenberg (2 Dec 2015)
+- bump: towards next release
   
-  Reported-by: Carlo Wood
+  for all we know now, it might be called 7.46.1
 
-- [Peter Wu brought this change]
+Version 7.46.0 (1 Dec 2015)
 
-  symbol-scan.pl: do not require autotools
-  
-  Makes test1119 pass when building with cmake.
-  
-  configurehelp.pm is generated by configure (autotools). As cmake does
-  not provide a separate variable for the C preprocessor, default to cpp.
-  Before commit ef24ecde68a5f577a7f0f423a767620f09a0ab16 ("symbol-scan:
-  use configure script knowledge about how to run the C preprocessor"),
-  this tool would also use 'cpp'.
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+Daniel Stenberg (1 Dec 2015)
+- RELEASE-NOTES: updated contributor count for 7.46.0
 
-- [Peter Wu brought this change]
+- THANKS: new contributors from the 7.46.0 release
 
-  cmake: add ENABLE_THREADED_RESOLVER, rename ARES
-  
-  Fix detection of the AsynchDNS feature which not just depends on
-  pthreads support, but also on whether USE_POSIX_THREADS is set or not.
-  Caught by test 1014.
-  
-  This patch adds a new ENABLE_THREADED_RESOLVER option (corresponding to
-  --enable-threaded-resolver of autotools) which also needs a check for
-  HAVE_PTHREAD_H.
-  
-  For symmetry with autotools, CURL_USE_ARES is renamed to ENABLE_ARES
-  (--enable-ares). Checks that test for the availability actually use
-  USE_ARES instead as that is the result of whether a-res is available or
-  not (in practice this does not matter as CARES is marked as required
-  package, but nevertheless it is better to write the intent).
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+- THANKS-filter: single Tim Rühsen spelling
 
-- [Peter Wu brought this change]
+- docs/examples: gitignore some more built examples
 
-  cmake: build libhostname for test suite
-  
-  Used by some test cases via LD_PRELOAD in order to fake the host name.
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+- RELEASE-NOTES; this bug was never released
 
-- [Peter Wu brought this change]
+- RELEASE-NOTES: synced with e55f15454efacb0
 
-  cmake: fix HAVE_GETHOSTNAME definition
-  
-  Otherwise Curl_gethostname always fails. Windows has gethostname
-  since Vista according to
-  http://msdn.microsoft.com/en-us/library/ms738527%28VS.85%29.aspx, but
-  accordings to byte_bucket's VC 2005 documentation, it is available even
-  in Windows 95. (possibly after installing a Platform SDK, the
-  Windows Server 2003 SP1 Platform SDK should be sufficient).
+- [Flavio Medeiros brought this change]
+
+  Curl_read_plain: clean up ifdefs that break statements
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes #546
 
-- [Peter Wu brought this change]
+- http2: convert some verbose output into debug-only output
 
-  tests: fix libhostname visibility
+- http2 push: add missing inits of new stream
   
-  I noticed that a patched cmake build would pass tests with a fake local
-  hostname, but the autotools build skips them:
+  - set the correct stream_id for pushed streams
+  - init maxdownload and size properly
+
+- http2 push: set weight for new stream
   
-      got unexpected host name back, LD_PRELOAD failed
+  give the new stream the old one's stream_weight internally to avoid
+  sending a PRIORITY frame unless asked for it
+
+- curl_setup.h: undef freeaddrinfo in c-ares block to fix build
   
-  It turns out that -fvisibility=hidden hides the symbol, and since the
-  tests are not part of libcurl, it fails too. Just remove the LIBCURL
-  guard.
+  Fixes warnings 78c25c854a added.
+
+- nonblock: fix setting non-blocking mode for Amiga
   
-  Broken since cURL 7.30 (commit 83a42ee20ea7fc25abb61c0b7ef56ebe712d7093,
-  "curl.h: stricter CURL_EXTERN linkage decorations logic").
+  IoctlSocket() apparently wants a pointer to a long, passed as a char *
+  in its third parameter. This bug was introduced already back in commit
+  c5fdeef41d from October 1 2001!
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
-
-- [Peter Wu brought this change]
+  Bug: http://curl.haxx.se/mail/lib-2015-11/0088.html
+  Reported-by: Norbert Kett
 
-  tests: fix memleak in server/resolve.c
+- zsh install: fix DESTDIR support
   
-  This makes LeakSanitizer happy.
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Reported-by: Mohammad AlSaleh
+
+Dan Fandrich (27 Nov 2015)
+- lib: Only define curl_dofreeaddrinfo if struct addrinfo is available
 
-- configure: assume krb5 when gss-api works
+Steve Holme (27 Nov 2015)
+- tool_paramhlp: Fixed display of URL index in password prompt for --next
   
-  To please test 1014 while we work out if this is truly the a correct
-  assumption.
+  Commit f3bae6ed73 added the URL index to the password prompt when using
+  --next. Unfortunately, because the size_t specifier (%zu) is not
+  supported by all sprintf() implementations we use the curl_off_t format
+  specifier instead. The display of an incorrect value arises on platforms
+  where size_t and curl_off_t are of a different size.
 
-Steve Holme (9 Nov 2014)
-- vtls.h: Fixed compiler warning when compiled without SSL
+Daniel Stenberg (25 Nov 2015)
+- timecond: do not add if-modified-since without timecondition
   
-  vtls.c:185:46: warning: unused parameter 'data'
+  The RTSP code path didn't skip adding the if-modified-since for certain
+  RTSP code paths, even if CURLOPT_TIMECONDITION was set to
+  CURL_TIMECOND_NONE.
+  
+  Also, an unknown non-zero CURLOPT_TIMECONDITION value no longer equals
+  CURL_TIMECOND_IFMODSINCE.
+  
+  Bug: http://stackoverflow.com/questions/33903982/curl-timecond-none-doesnt-work-how-to-remove-if-modified-since-header
 
-- RELEASE-NOTES: Synced with 2fbf23875f
+- RELEASE-NOTES: synced with 99d17a5e2ba77e58
 
-- ntlm: Added separate SSPI based functions
+- examples/README: cut out the incomplete list
   
-  In preparation for moving the NTLM message code into the SASL module,
-  and separating the native code from the SSPI code, added functions that
-  simply call the functions in curl_ntlm_msg.c.
+  ... and add a generic explanation for them instead. Each example file
+  should contain its own description these days.
+
+- test1513: make sure the callback is only called once
+
+- [Daniel Shahaf brought this change]
 
-- http_ntlm: Use the SASL functions instead
+  build: Install zsh completion
   
-  In preparation for moving the NTLM message code into the SASL module
-  use the SASL functions in the HTTP code instead.
+  Fixes #534
+  Closes #537
 
-Daniel Stenberg (9 Nov 2014)
-- libssh2: detect features based on version, not configure checks
+- done: make sure the final progress update is made
   
-  ... so that non-configure builds get the correct functions too based on
-  the libssh2 version used.
+  It would previously be skipped if an existing error was returned, but
+  would lead to a previous value being left there and later used.
+  CURLINFO_TOTAL_TIME for example.
+  
+  Still it avoids that final progress update if we reached DONE as the
+  result of a callback abort to avoid another callback to be called after
+  an abort-by-callback.
+  
+  Reported-by: Lukas Ruzicka
+  
+  Closes #538
 
-- [Nobuhiro Ban brought this change]
+- curl: expanded the -XHEAD warning text
+  
+  ... to also mention the specific options used.
 
-  SSH: use the port number as well for known_known checks
+- Revert "cleanup: general removal of TODO (and similar) comments"
   
-  ... if the libssh2 version is new enough.
+  This reverts commit 64e959ffe37c436503f9fed1ce2d6ee6ae50bd9a.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1448
+  Feedback-by: Dan Fandrich
+  URL: http://curl.haxx.se/mail/lib-2015-11/0062.html
 
-Steve Holme (9 Nov 2014)
-- INSTALL: Updated pre-processor references to the old VC6 project files
+- CURLOPT_HEADERFUNCTION.3: fix typo
   
-  Reworked the two sections that discuss modifying the Visual Studio pre-
-  processor settings, and vc6libcurl.dsw/vc6libcurl.dsp, to remove the
-  project files references as they have been superseded by a more thorough
-  set of project files for VC6 through VC12, but to also give the correct
-  reference to this setting in later versions of Visual Studio.
+  Refer to _HEADERDATA not _WRITEDATA.
+  
+  Reported-by: Michał Piechowski
 
-- INSTALL: Added email protocols to the "Disabling in Win32 builds" section
+- TODO: TCP Fast Open
 
-- configure: Fixed NTLM missing from features when CURL_DISABLE_HTTP defined
+Steve Holme (22 Nov 2015)
+- examples: Added website parse-able descriptions to the e-mail examples
 
-- build: Fixed no NTLM support for email when CURL_DISABLE_HTTP is defined
-  
-  USE_NTLM would only be defined if: HTTP support was enabled, NTLM and
-  cryptography weren't disabled, and either a supporting cryptography
-  library or Windows SSPI was being compiled against.
-  
-  This means it was not possible to build libcurl without HTTP support
-  and use NTLM for other protocols such as IMAP, POP3 and SMTP. Rather
-  than introduce a new SASL pre-processor definition, removed the HTTP
-  prerequisite just like USE_SPNEGO and USE_KRB5.
+- TODO: Added another 'multi-interface' idea
+
+- smb.c: Fixed compilation warnings
   
-  Note: Winbind support still needs to be dependent on CURL_DISABLE_HTTP
-  as it is only available to HTTP at present.
+  smb.c:134:3: warning: conversion to 'short unsigned int' from 'int' may
+               alter its value
+  smb.c:146:42: warning: conversion to 'unsigned int' from 'long long
+                unsigned int' may alter its value
+  smb.c:146:65: warning: conversion to 'unsigned int' from 'long long
+                unsigned int' may alter its value
+
+- schannel: Corrected copy/paste error in commit 8d17117683
+
+- schannel: Use GetVersionEx() when VerifyVersionInfo() isn't available
   
-  This bug dates back to August 2011 when I started to add support for
-  NTLM to SMTP.
+  Regression from commit 7a8e861a5 as highlighted in the msys autobuilds.
 
-- ntlm: Removed an unnecessary free of native Target Info
+- examples: Fixed compilation warnings
   
-  Due to commit 40ee1ba0dc the free in Curl_ntlm_decode_type2_target() is
-  longer required.
+  pop3-multi.c:96:5: warning: implicit declaration of function 'memset'
+  imap-multi.c:96:5: warning: implicit declaration of function 'memset'
+  http2-download.c:226:5: warning: implicit declaration of function 'memset'
+  http2-upload.c:290:5: warning: implicit declaration of function 'memset'
+  http2-upload.c:290:5: warning: implicit declaration of function 'memset'
 
-- ntlm: Moved the native Target Info clean-up from HTTP specific function
+- Makefile.inc: Fixed test run error
+  
+  test845 not present in tests/data/Makefile.inc
 
-- ntlm: Moved SSPI clean-up code into SASL module
+Daniel Stenberg (20 Nov 2015)
+- TODO: remove duplicated title
 
-- Makefile.dist: Added support for WinIDN
+- TODO: added two more libcurl ideas
+  
+  Moved some ideas from "next major" to just ordinary ideas since we can
+  always add new things while keeping the old without doing a "next
+  major".
 
-- Makefile.vc6: Added support for WinIDN
+Steve Holme (20 Nov 2015)
+- tests: Re-enabled tests 889 and 890 following POP3 fix
 
-- Makefile.dist: Added some missing SSPI configurations
+- pop3: Differentiate between success and continuation responses
 
-- Makefile.dist: Separated the groups of SSL configurations from each other
+- pop3: Added clarity on some server response codes
 
-- Makefile.dist: Grouped the x64 configurations next to their x86 counterparts
+Daniel Stenberg (20 Nov 2015)
+- [Daniel Shahaf brought this change]
 
-- curl.h: Tidy up of CURL_VERSION_* flags
+  build: Fix theoretical infinite loops
   
-  As the list has gotten a little messy and hard to read, especially with
-  the introduction of deprecated items, aligned the values and comments
-  into clean columns and reworked some of the comments in the process.
-
-- curl_tool: Added krb5 to the supported features
+  Add error-checking to 'cd' in a few cases where omitting the checks
+  might result in an infinite loop.
+  
+  Closes #535
 
-- configure: Added krb5 to the supported features
+Patrick Monnerat (19 Nov 2015)
+- curl.h: s/#defien/#define/
 
-- version info: Added Kerberos V5 to the supported features
+- os400: synchronize ILE/RPG header file
 
-Guenter Knauf (7 Nov 2014)
-- mk-ca-bundle.vbs: switch to new certdata.txt url.
+- os400: Provide options for libssh2 use in compile scripts. Adjust README.
 
-Steve Holme (7 Nov 2014)
-- RELEASE-NOTES: Synced with dcad09e125
+Daniel Stenberg (19 Nov 2015)
+- [danielsh@apache.org brought this change]
 
-- http_digest: Fixed some memory leaks introduced in commit 6f8d8131b1
+  zsh completion: Preserve single quotes in output
   
-  Fixed a couple of memory leaks as a result of moving code that used to
-  populate allocuserpwd and relied on it's clean up.
+  When an option's help string contains literal single quotes, those
+  single quotes would be stripped from the option's description in the
+  completion output (unless the zsh RC_QUOTES option were set while the
+  completion function was being sourced, which is not the default).  This
+  patch makes the completion output contain single quotes where the --help
+  output does.
+  
+  Closes #532
 
-- docs: Updated following the addition of SSPI based HTTP digest auth
+Jay Satiro (18 Nov 2015)
+- [MaxGiting brought this change]
 
-- sasl_sspi: Tidy up of the existing digest code
+  FAQ: Grammar changes
   
-  Following the addition of SSPI support for HTTP digest, synchronised
-  elements of the email digest code with that of the new HTTP code.
+  Closes https://github.com/bagder/curl/pull/533
 
-- http_digest: Post SSPI support tidy up
+Daniel Stenberg (17 Nov 2015)
+- http2: http_done: don't free already-freed push headers
+  
+  The push headers are freed after the push callback has been invoked,
+  meaning this code should only free the headers if the callback was never
+  invoked and thus the headers weren't freed at that time.
   
-  Post tidy up to ensure commonality of code style and variable names.
+  Reported-by: Davey Shafik
 
-Dan Fandrich (6 Nov 2014)
-- test552: Don't run HTTP digest tests for SSPI based builds
+- [Anders Bakken brought this change]
+
+  getconnectinfo: Don't call recv(2) if socket == -1
   
-  Technical difficulties prevented this from going into the
-  previous commit.
+  Closes #528
 
-Steve Holme (6 Nov 2014)
-- tests: Don't run HTTP digest tests for SSPI based builds
+- CURLMOPT_PUSHFUNCTION.3: *_byname() returns only the first header
   
-  Added !SSPI to the features list of the HTTP digest tests, as SSPI
-  based builds now use the Windows SSPI messaging API rather than the
-  internal functions, and we can't control the random numbers that get
-  used as part of the digest.
+  ... if there are more than one using the same name
 
-Daniel Stenberg (6 Nov 2014)
-- curl.1: show zone index use in a URL
+- http2: minor comment typo
 
-Steve Holme (6 Nov 2014)
-- http_digest: Fixed auth retry loop when SSPI based authentication fails
+- sasl; fix checksrc warnings
 
-- http_digest: Reworked the SSPI based input token storage
-  
-  Reworked the input token (challenge message) storage as what is passed
-  to the buf and desc in the response generation are typically blobs of
-  data rather than strings, so this is more in keeping with other areas
-  of the SSPI code, such as the NTLM message functions.
+Steve Holme (15 Nov 2015)
+- RELEASE-NOTES: Adjusted for the recent OAuth 2.0 activity
 
-- sasl_sspi: Fixed compilation warning from commit 2d2a62e3d9
+- tests: Disabled 889 and 890 until we support POP3 continuation responses
   
-  Added void reference to unused 'data' parameter back to fix compilation
-  warning.
+  As POP3 final and continuation responses both begin with a + character,
+  and both the finalcode and contcode variables in SASLprotoc are set as
+  such, we cannot tell the difference between them when we are expecting
+  an optional continuation from the server such as the following:
+  
+  + something else from the server
+  +OK final response
+  
+  Disabled these tests until such a time we can tell the responses apart.
 
-- sspi: Align definition values to even columns as we use 2 char spacing
+- tests: Corrected typos from commit ba4d8f7eba
 
-- sspi: Fixed missing definition of ISC_REQ_USE_HTTP_STYLE
-  
-  Some versions of Microsoft's sspi.h don't define this.
+- tests: Added OAUTHBEARER failure response tests
 
-- sasl: Removed non-SSPI Digest functions and defines from SSPI based builds
+- oauth2: Support OAUTHBEARER failures sent as continuation responses
+  
+  According to RFC7628 a failure message may be sent by the server in a
+  base64 encoded JSON string as a continuation response.
   
-  Introduced in commit 7e6d51a73c these functions and definitions are only
-  required by the internal challenge-response functions now.
+  Currently only implemented for OAUTHBEARER and not XAUTH2.
 
-- sasl_sspi: Added HTTP digest response generation code
+Daniel Stenberg (15 Nov 2015)
+- RELEASE-NOTES: synced with 808a17ee675
 
-- http_digest: Added SSPI based challenge decoding code
+Steve Holme (14 Nov 2015)
+- tests: Renamed existing OAuth 2.0 (XOAUTH) tests
 
-- http_digest: Added SSPI based clean-up code
+- tests: Added OAuth 2.0 (OAUTHBEARER) tests
 
-- http_digest: Added SSPI based authentication functions
+- oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP
   
-  This temporarily breaks HTTP digest authentication in SSPI based builds,
-  causing CURLE_NOT_BUILT_IN to be returned. A follow up commit will
-  resume normal operation.
+  OAUTHBEARER is now the official "registered" SASL mechanism name for
+  OAuth 2.0. However, we don't want to drop support for XOAUTH2 as some
+  servers won't support the new mechanism yet.
 
-- http_digest: Added required SSPI based variables to digest structure
+Daniel Stenberg (13 Nov 2015)
+- RELEASE-NOTES: recounted curl_easy_setopt() options
 
-Daniel Stenberg (6 Nov 2014)
-- [Frank Gevaerts brought this change]
+- typecheck-gcc.h: add missing slist-using options
+  
+  CURLOPT_RESOLVE and CURLOPT_PROXYHEADER were missing
+  
+  Also sorted the list.
 
-  contributors.sh: --releasenotes reads in names from RELEASE-NOTES
+- typecheck-gcc.h: added CURLOPT_CLOSESOCKETDATA
   
-  This is very handy when updating the RELEASE-NOTES as then we sometimes
-  have names added manually in the existing list and we use this script to
-  update the set.
+  ... and sorted curl_is_cb_data_option alphabetically
 
-- RELEASE-NOTES: synced with 68542e72a9
+Jay Satiro (13 Nov 2015)
+- [Sebastian Pohlschmidt brought this change]
 
-- curl_easy_setopt.3: add CURLOPT_PINNEDPUBLICKEY
+  openssl: Free modules on cleanup
   
-  Reported-by: Christian Hägele
-  Bug: http://curl.haxx.se/mail/lib-2014-11/0078.html
-
-Steve Holme (5 Nov 2014)
-- build: Fixed Visual Studio project file generation of strdup.[c|h]
+  Curl_ossl_init calls OPENSSL_load_builtin_modules() but
+  Curl_ossl_cleanup doesn't make a call to free these modules.
   
-  As the curl command-line tool now includes it's own version of strdup(),
-  for platforms that don't have it, fixed up the git respository Visual
-  Studio project file generator to not include the version from lib in the
-  tool project files, rather than having both lib\strdup.[c|h] and
-  src\tool_strdup.[c|h] present.
+  Bug: https://github.com/bagder/curl/issues/526
 
-Daniel Stenberg (5 Nov 2014)
-- tool_strdup.c: include the tool strdup.h
+Steve Holme (13 Nov 2015)
+- symbols-in-versions: Added new CURLOPTTYPE_STRINGPOINT alias
   
-  ... not the lib/ one that the tool no longer uses!
+  ...following commit aba281e762 to fix test 1119.
 
-- THANKS-filter: added another Michał Górny version we've used
+Daniel Stenberg (13 Nov 2015)
+- curl: mark two more options strings for --libcurl output
 
-- contributors.sh: split lists using " and "
+- typecheck-gcc.h: add some missing string types
   
-  ... and require the space after the filtering to make the filter able to
-  remove names.
-
-Steve Holme (5 Nov 2014)
-- http_digest: Fixed memory leaks from commit 6f8d8131b1
+  Also sorted that list alphabetically
 
-- sasl: Fixed compilation warning from commit 25264131e2
+- curl.h: introducing the STRINGPOINT alias
   
-  Added forward declaration of digestdata to overcome the following
-  compilation warning:
-  
-  warning: 'struct digestdata' declared inside parameter list
+  As an alias for OBJECTPOINT. Provided to allow us to grep for all string
+  options easier.
+
+- cleanup: general removal of TODO (and similar) comments
   
-  Additionally made the ntlmdata forward declaration dependent on
-  USE_NTLM similar to how digestdata and kerberosdata are.
+  They tend to never get updated anyway so they're frequently inaccurate
+  and we never go back to revisit them anyway. We document issues to work
+  on properly in KNOWN_BUGS and TODO instead.
+
+- ftplistparser: remove empty function
+
+- openssl: remove #if check for 0.9.7 for ENGINE_load_private_key
 
-- sasl: Fixed HTTP digest challenges with spaces between auth parameters
+- openssl: all supported versions have X509_STORE_set_flags
   
-  Broken as part of the rework, in commit 7e6d51a73c, to assist with the
-  addition of HTTP digest via Windows SSPI.
+  Simplify by removing #ifdefs and macros
 
-- http_digest: Fixed compilation errors from commit 6f8d8131b1
+- openssl: remove 0.9.3 check
+
+- openssl: remove #ifdefs for < 0.9.5 support
   
-  error: invalid operands to binary
-  warning: pointer targets in assignment differ in signedness
+  We only support >= 0.9.7
 
-- http_digest: Moved response generation into SASL module
+- lib/vtls/openssl: remove unused traces of yassl ifdefs
 
-- http_digest: Moved challenge decoding into SASL module
+Dan Fandrich (12 Nov 2015)
+- [dfandrich brought this change]
 
-- http_digest: Moved clean-up function into SASL module
+  unit1603: Demote hash mismatch failure to a warning
+  
+  The hashes can vary between architectures (e.g. Sparc differs from x86_64).
+  This is not a fatal problem but just reduces the coverage of these white-box
+  tests, as the assumptions about into which hash bucket each key falls are no
+  longer valid.
 
-- http_digest: Moved algorithm definitions to SASL module
+- [dfandrich brought this change]
 
-- [Gisle Vanem brought this change]
+  unit1603: Added unit tests for hash functions
 
-  ssh: Fixed build on platforms where R_OK is not defined
-  
-  Bug: http://curl.haxx.se/mail/lib-2014-11/0035.html
-  Reported-by: Jan Ehrhardt
+- [dfandrich brought this change]
 
-- strdup: Removed irrelevant comment
-  
-  ...as Curl_memdup() duplicates an area of fix size memory, that may be
-  binary, and not a null terminated string.
+  unit1602: Fixed failure in torture test
 
-- url.c: Fixed compilation warning
+Steve Holme (12 Nov 2015)
+- sasl: Re-introduced XOAUTH2 in the default enabled authentication mechanism
   
-  conversion from 'curl_off_t' to 'size_t', possible loss of data
-
-- http_digest: Use CURLcode instead of CURLdigest
+  Following the fix in commit d6d58dd558 it is necessary to re-introduce
+  XOAUTH2 in the default enabled authentication mechanism, which was
+  removed in commit 7b2012f262, otherwise users will have to specify
+  AUTH=XOAUTH2 in the URL.
   
-  To provide consistent behaviour between the various HTTP authentication
-  functions use CURLcode based error codes for Curl_input_digest()
-  especially as the calling code doesn't use the specific error code just
-  that it failed.
+  Note: OAuth 2.0 will only be used when the bearer is specified.
 
-Daniel Stenberg (5 Nov 2014)
-- contributors.sh: filter common alternative name spellings
-  
-  docs/THANKS-filter is a new filter file for converting contributor names
-  we get or have recorded in alternative formats to the one we already use
-  in THANKS. To help us show individual contributors using a single
-  presentation of their names.
+- [Stefan Bühler brought this change]
 
-- THANKS: added missing contributor from 2012
+  sasl_sspi: fix identity memory leak in digest authentication
 
-- [Frank Gevaerts brought this change]
+- [Stefan Bühler brought this change]
 
-  Remove duplicate names.
+  sasl_sspi: fixed unicode build for digest authentication
   
-  The removed names also appear as:
-  Andrés García, François Charlier, Gökhan Şengün, Michał Górny, Sébastien
-  Willemijns, Christopher Conroy, John E. Malmberg, Luca Altea, Peter Su,
-  S. Moonesamy, Samuel Listopad, Yasuharu Yamada, Karl Moerder
+  Closes #525
 
-Steve Holme (5 Nov 2014)
-- sspi: Define authentication package name constants
-  
-  These were previously hard coded, and whilst defined in security.h,
-  they may or may not be present in old header files given that these
-  defines were never used in the original code.
-  
-  Not only that, but there appears to be some ambiguity between the ANSI
-  and UNICODE NTLM definition name in security.h.
+- oauth2: Re-factored OAuth 2.0 state variable
 
-Patrick Monnerat (5 Nov 2014)
-- Adjust OS400-specific support to last release
+- sasl: Don't choose OAuth 2.0 if mechanism not advertised
+  
+  Regression from commit 9e8ced9890 which meant if --oauth2-bearer was
+  specified but the SASL mechanism wasn't supported by the server then
+  the mechanism would be chosen.
 
-Daniel Stenberg (5 Nov 2014)
-- THANKS: added two missing names and removed a duplicate
+Daniel Stenberg (12 Nov 2015)
+- runtests: more compact "System characteristics" output
   
-  ./contributors.sh found these extra ones that somehow had fallen
-  through the cracks and never gotten added here.
+  - no point in repeating curl features that is already listed as features
+    from the curl -V output
   
-  Reported-by: Frank Gevaerts
+  - remove the port numbers/unix domain path from the output unless
+    verbose is used, as that is rarely interesting to users.
 
-- bump: towards next release
-
-- THANKS: added names from 7.39.0 release notes
+- runtests: rename conditional curl-features to $has_[name]
 
-Version 7.39.0 (5 Nov 2014)
+Steve Holme (11 Nov 2015)
+- oauth2: Introduced support for host and port details
+  
+  Added support to the OAuth 2.0 message function for host and port, in
+  order to accommodate the official OAUTHBEARER SASL mechanism which is
+  to be added shortly.
 
-Daniel Stenberg (5 Nov 2014)
-- RELEASE-NOTES: 7.39.0 release (commit b3875606925)
+- curl_setup.h: Removed duplicate CURL_DISABLE_RTSP when HTTP_ONLY defined
 
-- curl_easy_duphandle: CURLOPT_COPYPOSTFIELDS read out of bounds
+- cmake: Add missing feature macros in config header (Part 2)
   
-  When duplicating a handle, the data to post was duplicated using
-  strdup() when it could be binary and contain zeroes and it was not even
-  zero terminated! This caused read out of bounds crashes/segfaults.
+  In addition to commit a215381c94 added the RTSP, RTMP and SMB protocols.
+
+Daniel Stenberg (10 Nov 2015)
+- [Douglas Creager brought this change]
+
+  cmake: Add missing feature macros in config header
   
-  Since the lib/strdup.c file no longer is easily shared with the curl
-  tool with this change, it now uses its own version instead.
+  The curl_config.h file can be generated either from curl_config.h.cmake
+  or curl_config.h.in, depending on whether you're building using CMake or
+  the autotools.  The CMake template header doesn't include entries for
+  all of the protocols that you can disable, which (I think) means that
+  you can't actually disable those protocols when building via CMake.
   
-  Bug: http://curl.haxx.se/docs/adv_20141105.html
-  CVE: CVE-2014-3707
-  Reported-By: Symeon Paraschoudis
+  Closes #523
+
+- [Douglas Creager brought this change]
 
-- lib544.c: use duphandle for test 545
+  BoringSSL: Work with stricter BIO_get_mem_data()
   
-  To verify that curl_easy_duphandle() works fine on a handle that has
-  gotten data stored with *_COPYPOSTFIELDS.
+  BoringSSL implements `BIO_get_mem_data` as a function, instead of a
+  macro, and expects the output pointer to be a `char **`.  We have to add
+  an explicit cast to grab the pointer as a `const char **`.
+  
+  Closes #524
 
-- tests: add new feature 'SSLpinning'
+- http2: rectify the http2 version #if check
   
-  ... and make test 2034 and 2035 require it, and have it set when built
-  with OpenSSL or GnuTLS.
+  We need 1.0.0 or later. Also verified by configure.
 
-- buildconf: update copyright year
+Steve Holme (9 Nov 2015)
+- oauth2: Don't use XAUTH2 in OAuth 2.0 function name
 
-Steve Holme (4 Nov 2014)
-- INSTALL: Consistent spacing in section headings, paragraphs and examples
+- oauth2: Don't use XOAUTH2 in OAuth 2.0 variables
 
-Daniel Stenberg (4 Nov 2014)
-- buildconf: stop checking for libtool
+- oauth2: Use OAuth 2.0 rather than XOAUTH2 in comments
   
-  As we only use libtoolize, only check for that!
-
-Steve Holme (4 Nov 2014)
-- INSTALL: Corrected MIT Kerberos and Heimdal package names
+  When referring to OAuth 2.0 we should use the official name rather the
+  SASL mechanism name.
 
-- README: Corrected inconsistent use of --help
-
-- INSTALL: Use GSS-API rather than GSSAPI
+Daniel Stenberg (9 Nov 2015)
+- imap: avoid freeing constant string
   
-  As implementations are refereed to GSS-API libraries as per the RFC and
-  GSSAPI typically refers to the SASL authentication mechanism.
+  The fix in 1a614c6c3 was wrong and would leed to free() of a fixed
+  string.
   
-  ...and minor rewording on the same paragraph.
+  Pointed-out-by: Kamil Dudka
 
-- README: Added note about using Visual Studio projects out of git repository
+- ROADMAP: remove two items already done
 
-Daniel Stenberg (4 Nov 2014)
-- [K. R. Walker brought this change]
+- RELEASE-NOTES: synced with 2200bf62054
 
-  cmake: fix ZLIB_INCLUDE_DIRS use
+Jay Satiro (9 Nov 2015)
+- acinclude: Remove check for 16-bit curl_off_t
   
-  CMake 2.8's FindZLIB.cmake documents ZLIB_INCLUDE_DIRS, see
-  http://www.cmake.org/cmake/help/v2.8.0/cmake.html#module:FindZLIB
+  Because it's illogical to check for a 16-bit curl_off_t.
   
-  Bug: https://github.com/bagder/curl/pull/123
+  Ref: https://github.com/bagder/curl/issues/425#issuecomment-154964205
 
-- [Jay Satiro brought this change]
+Dan Fandrich (8 Nov 2015)
+- tool: Fixed a memory leak on OOM introduced in 19cb0c4a
 
-  SSL: PolarSSL default min SSL version TLS 1.0
+Steve Holme (8 Nov 2015)
+- [Justin Ehlert brought this change]
+
+  imap: Don't check for continuation when executing a CUSTOMREQUEST
   
-  - Prior to this change no SSL minimum version was set by default at
-  runtime for PolarSSL. Therefore in most cases PolarSSL would probably
-  have defaulted to a minimum version of SSLv3 which is no longer secure.
+  Bug: https://github.com/bagder/curl/issues/486
+  Closes https://github.com/bagder/curl/pull/487
 
-- opts-Makefile: put more man pages into dist and make hmtl+pdf
+Daniel Stenberg (7 Nov 2015)
+- imap: checksrc: remove space after while before paren
 
-- curl_multi_setopt.3: refer to stand-alone pages
+- checksrc.whitelist: "missing space after close paren"
   
-  ... instead of duplicating info.
+  ... when it was within a string!
 
-- opts: more multi options as stand-alone man pages
+Steve Holme (7 Nov 2015)
+- opts: Corrected TLS protocols list to include POP3S rather than POP3
 
-- Makefile.am: two cmake files are gone
+- imap: Quote other 'atom-specials' and not just the space character
   
-  8cb010144 removed the CurlCheckCSourceCompiles.cmake and
-  CurlCheckCSourceRuns.cmake files
+  Closes #517
+
+- imap: Fixed double quote in LIST command when mailbox contains spaces
 
-- opts: made stand-alone man-pages for several multi options
+Daniel Stenberg (6 Nov 2015)
+- imap: fix compiler warning
+  
+  imap.c:657:13: error: assignment discards 'const' qualifier from pointer
+  target type [-Werror=discarded-qualifiers]
 
-- [Carlo Wood brought this change]
+Steve Holme (6 Nov 2015)
+- imap: Don't call imap_atom() when no mailbox specified in LIST command
 
-  Curl_single_getsock: fix hold/pause sock handling
+Daniel Stenberg (6 Nov 2015)
+- curl.1: remove the overlap --range example
   
-  The previous condition that checked if the socket was marked as readable
-  when also adding a writable one, was incorrect and didn't take the pause
-  bits properly into account.
+  ... it is just weird to include by default even if it still works.
 
-- [Peter Wu brought this change]
+- tftp tests: verify sent options too
+  
+  The tftpd test server now logs all received options and thus all TFTP
+  test cases need to match them exactly.
+  
+  Extended test 283 to use and verify --tftp-blksize.
 
-  cmake: fix struct sockaddr_storage check
+Jay Satiro (6 Nov 2015)
+- getinfo: CURLINFO_ACTIVESOCKET: fix bad socket value
   
-  CHECK_TYPE_SIZE_PREINCLUDE is an internal, undocumented variable which
-  was removed in cmake 2.8.1. According to the MSDN docs[1], inclusion
-  of winsock2.h is sufficient. WIN32_LEAN_AND_MEAN does not really seem
-  to affect the tests, so remove it too[2].
+  - Set user info param to the socket returned by Curl_getconnectinfo,
+  regardless of if the socket is bad. Effectively this means the user info
+  param now will receive CURL_SOCKET_BAD instead of -1 on bad socket.
   
-  For the non-windows case, remove inet headers as POSIX only requires
-  sys/socket.h.
+  - Remove incorrect comments.
   
-   [1]: http://msdn.microsoft.com/en-us/library/windows/desktop/ms740504%28v=vs.85%29.aspx
-   [2]: http://stackoverflow.com/questions/11040133/what-does-defining-win32-lean-and-mean-exclude-exactly
+  CURLINFO_ACTIVESOCKET is documented to write CURL_SOCKET_BAD to user
+  info param but prior to this change it wrote -1.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Bug: https://github.com/bagder/curl/pull/518
+  Reported-by: Marcel Raad
 
-- [Peter Wu brought this change]
+Patrick Monnerat (5 Nov 2015)
+- curl_ntlm_core: fix 2 curl_off_t constant overflows.
 
-  cmake: clean OtherTests, fixing -Werror
-  
-  There were several -Wunused warnings and one duplicate macro definition.
-  The EXTRA_DEFINES variable of the CurlCheckCSources macro was being
-  abused ("__unused1\n#undef inline\n#define __unused2", seriously?) to
-  insert extra C code. Avoid this broken abstraction and use cmake's
-  check_c_source_compiles directly (works fine with CMake 2.8, maybe
-  even cmake 2.6).
-  
-  After cleaning up all related variables (EXTRA_DEFINES,
-  HEADER_INCLUDES, auxiliary headers_hack), also remove a duplicate
-  add_headers_include macro and remove duplicate header additions before
-  the struct timeval check.
+- os400: adjust specific code to support new options.
+
+Daniel Stenberg (2 Nov 2015)
+- [Lauri Kasanen brought this change]
+
+  rawstr: Speed up Curl_raw_toupper by 40%
   
-  Oh, and now the code is converted to use CheckCSourceRuns and
-  CheckCSourceCompiles, the two curl-specific helpers can be removed.
-  Unfortunately, the cmake output is now slightly more verbose. Before:
+  Rationale: when starting up a curl-using app, all cookies from the jar
+  are checked against each other. This was causing a startup delay in the
+  Fifth browser.
   
-      Performing Test int send(int, const void *, size_t, int) (curl_cv_func_send_test)
-      Performing Test int send(int, const void *, size_t, int) (curl_cv_func_send_test) - Failed
+  All tests pass.
   
-  Since check_c_source_compiles prints the varname, now you see:
+  Signed-off-by: Lauri Kasanen <cand@gmx.com>
+
+- http redirects: %-encode bytes outside of ascii range
   
-      Performing Test curl_cv_func_send_test
-      Performing Test curl_cv_func_send_test - Failed
-      Tested: int send(int, const void *, size_t, int)
+  Apparently there are sites out there that do redirects to URLs they
+  provide in plain UTF-8 or similar. Browsers and wget %-encode such
+  headers when doing a subsequent request. Now libcurl does too.
   
-  Compared cmake output with each other using vimdiff, no functional
-  differences were found. Tested with GCC 4.9.1 and Clang 3.5.0.
+  Added test 1138 to verify.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes #473
 
-- [Peter Wu brought this change]
+- RELEASE-NOTES: synced with cba5bc585410
 
-  cmake: fix gethostby{addr,name}_r in CurlTests
-  
-  This patch cleans up the automatically-generated (?) code and fixes one
-  case that will always fail due to syntax error.
+- symbols-in-version: add all CURL_HTTPPOST_* symbols
+
+- formadd: support >2GB files on windows
   
-  HAVE_GETHOSTBYADDR_R_5_REENTRANT always failed because of a trailing
-  character ("int length;q"). Several parameter type and unused variable
-  warnings popped up. This causes a detection failure with -Werror.
+  Closes #425
+
+- curl.h: s/HTTPPOST_/CURL_HTTPOST_
   
-  Observe that the REENTRANT cases are exactly the same as their
-  non-REENTRANT cases except for a `_REENTRANT` macro definition.
-  Merge all these pieces and build one big main function with different
-  cases, but reusing variables where logical.
+  Fixes a name space pollution at the cost of programs using one of these
+  defines will no longer compile. However, the vast majority of libcurl
+  programs that do multipart formposts use curl_formadd() to build this
+  list.
   
-  For the cases where the parameters where NULL, I looked at
-  lib/hostip4.c to get an idea of the parameters types.
+  Closes #506
+
+- mbedtls: fix "Structurally dead code"
   
-  void-cast variables such as 'rc' to avoid -Wuninitialized errors.
+  CID 1332129
+
+- mbedtls: fix "Logically dead code"
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  CID 1332128
 
-- [Peter Wu brought this change]
+- Revert "openssl: engine: remove double-free"
+  
+  This reverts commit 370ee919b37cc9a46c36428b2bb1527eae5db2bd.
+  
+  Issue #509 has all the details but it was confirmed that the crash was
+  not due to this, so the previous commit was wrong.
 
-  cmake: drop _BSD_SOURCE macro usage
+- curl.1: -E: s/private certificate/client certificate
   
-  autotools does not use features.h nor _BSD_SOURCE. As this macro
-  triggers warnings since glibc 2.20, remove it. It should not have
-  functional differences.
+  ... as the certificate is strictly speaking not private.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Reported-by: John Levon
 
-Steve Holme (2 Nov 2014)
-- RELEASE-NOTES: Synced with d71ea7c01e
+- openssl: engine: remove double-free
   
-  Additionally, updated "GSSAPI" to "GSS-API" for a Cmake related change
-  as GSSAPI can be confused with the authentication mechanism rather than
-  a GSS-API implementation library such as MIT or Heimdal.
+  After a successful call to SSL_CTX_use_PrivateKey(), we must not call
+  EVP_PKEY_free() on the key.
+  
+  Reported-by: nased0
+  Closes #509
+
+Jay Satiro (27 Oct 2015)
+- socks: Fix incorrect port numbers in failed connect messages
 
-- build: Added WinIDN build configuration options
+Daniel Stenberg (26 Oct 2015)
+- DISTRO-DILEMMA: removed
   
-  Added support for WinIDN build configurations to the VC6 project files.
+  Out of date and not kept accurate. It was sort of a problem of the past
+  anyway.
 
-- build: Added WinIDN build configuration options
+- [xiangbin li brought this change]
+
+  MacOSX-Framework: sdk regex fix for sdk 10.10 and later
   
-  Added support for WinIDN build configurations to the VC7 and VC7.1
-  project files.
+  closes #507
 
-- build: Fixed the pre-processor separator in Visual Studio project files
+Jay Satiro (24 Oct 2015)
+- build: Fix support for PKG_CONFIG
   
-  A left over from the VC6 project files, so mainly cosmetic in Visual
-  Studio .NET as it can handle both comma and semi-colon characters for
-  separating multiple pre-processor definitions.
+  - Allow the user to use PKG_CONFIG but not PKGCONFIG.
   
-  However, the IDE uses semi-colons if the value is edited, and as such,
-  this may cause problems in future for anyone updating the files or
-  merging patches.
+  Background:
   
-  Used the Visual Studio IDE to correct the separator character.
-
-- build: Added optional specific version generation of VC project files
+  Last week in 14d5a86 a change was made to allow the user to set the
+  PKGCONFIG variable. Today in 72d99f2 I supplemented that to allow the
+  more common PKG_CONFIG as an alternative if PKGCONFIG is not set.
   
-  ..when working from the git repository. This is particularly useful
-  for single development environments where the project files for all
-  supported versions of Visual Studio may not be required.
+  Neither of those changes worked as expected because PKGCONFIG is
+  occasionally reset in configure and by the CURL_CHECK_PKGCONFIG macro.
+  Instead in this commit I take the approach that the user may set
+  PKG_CONFIG only.
 
-- [Jay Satiro brought this change]
-
-  build-openssl.bat: Fix x64 release build
+- build: Fix mingw ssl gdi32 order
+  
+  - If mingw ssl make sure -lgdi32 comes after ssl libs
+  
+  - Allow PKG_CONFIG to set pkg-config location and options
   
-  Prior to this change if x64 release was specified a failed attempt was
-  made to build x86 release instead.
+  Bug: https://github.com/bagder/curl/pull/501
+  Reported-by: Kang Lin
 
-- CURLOPT_XOAUTH2_BEARER.3: Corrected the OAuth version number
+Daniel Stenberg (23 Oct 2015)
+- RELEASE-NOTES: synced with 03b6e078163f
 
-- CURLOPT_SASL_IR.3: Added supported mechanism information
+- polarssl/mbedtls: fix name space pollution
   
-  ...and removed duplication of what protocols are supported from the
-  description text.
+  Global private symbols MUST start with Curl_!
 
-- opts: Use common wording for MAIL related names
+- [Dmitry S. Baikov brought this change]
 
-- opts: Use common wording for TLS user/password option names
+  mbedTLS: THREADING_SUPPORT compilation fix
   
-  ...and revised the proxy wording a little as well.
+  Closes #505
 
-- CURLOPT_MAXCONNECTS.3: Reworked the description to be less confusing
-  
-  ...and corrected a related typo in curl_easy_setopt.3.
+- test1137: verify --ignore-content-length for FTP
 
-Guenter Knauf (2 Nov 2014)
-- RELEASE-NOTES: removed obsolete entry; fixed entry.
+- curl.1: --ignore-content-length now works for FTP too
 
-Steve Holme (2 Nov 2014)
-- RELEASE-NOTES: Synced with e7da67f5d3
+- [Kurt Fankhauser brought this change]
 
-- docs: Added mention of Kerberos for CURL_VERSION_SSPI
+  ftp: allow CURLOPT_IGNORE_CONTENT_LENGTH to ignore size
   
-  As this has been present for SOCKSv5 proxy since v7.19.4 and for IMAP,
-  POP3 and SMTP authentication since v7.38.0.
-
-- CURL_VERSION_KERBEROS4: Mark as deprecated
+  This allows FTP transfers with growing (or shrinking) files without
+  causing a transfer error.
   
-  Support for Kerberos V4 was removed in v7.33.0.
+  Closes #480
 
-- sasl: Fixed Kerberos V5 inclusion when CURL_DISABLE_CRYPTO_AUTH is used
+- CURLOPT_STREAM_WEIGHT.3: call argument 'weight' too
   
-  Typically the USE_WINDOWS_SSPI definition would not be used when the
-  CURL_DISABLE_CRYPTO_AUTH define is, however, it is still a valid build
-  configuration and, as such, the SASL Kerberos V5 (GSSAPI) authentication
-  data structures and functions would incorrectly be used when they
-  shouldn't be.
-  
-  Introduced a new USE_KRB5 definition that takes into account the use of
-  CURL_DISABLE_CRYPTO_AUTH like USE_SPNEGO and USE_NTLM do.
+  ... and add a little example of what the weight actually means. "Relative
+  proportion of bandwidth".
+
+- http2: add stream options to dist and curl_easy_setopt.3
 
-- openssl: Use 'CURLcode result'
+- http2: s/priority/weight
+
+- http2: on_frame_recv: trust the conn/data input
+  
+  Removed wrong assert()s
   
-  More CURLcode fixes.
+  The 'conn' passed in as userdata can be used and there can be other
+  sessionhandles ('data') than the single one this checked for.
 
-Daniel Stenberg (1 Nov 2014)
-- resume: consider a resume from [content-length] to be OK
+- http2: added three stream prio/deps options
   
-  Basically since servers often then don't respond well to this and
-  instead send the full contents and then libcurl would instead error out
-  with the assumption that the server doesn't support resume. As the data
-  is then already transfered, this is now considered fine.
+  CURLOPT_STREAM_DEPENDS
   
-  Test case 1434 added to verify this. Test case 1042 slightly modified.
+  CURLOPT_STREAM_DEPENDS_E
   
-  Reported-by: hugo
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1443
+  CURLOPT_STREAM_PRIORITY
 
-Steve Holme (1 Nov 2014)
-- openssl: Use 'CURLcode result'
-  
-  More standardisation of CURLcode usage and coding style.
+- RELEASE-NOTES: synced with ace68fdc0cfed83d
+
+- [m-gardet brought this change]
 
-- openssl: Use 'CURLcode result'
+  mbedtls:new profile with RSA min key len = 1024.
   
-  ...and some minor code style changes.
+  Closes #502
 
-- ftplistparser: We prefer 'CURLcode result'
+- checksrc: add crude // detection
 
-- opts: Use common wording for user/password option names
+Jay Satiro (21 Oct 2015)
+- [Gisle Vanem brought this change]
 
-- CURLOPT_CONNECT_ONLY.3: Removed "This option is implemented for..." text
+  build: fix for MSDOS/djgpp
+  
+  - Add a VPATH-statement for the vtls/*.c files.
   
-  As this is covered by the PROTOCOLS section and saves having to update
-  two parts of the document with the same information in future.
+  - Due to 'vtls/*.c', remove that subdir part from $(OBJECTS).
 
-- CURLOPT_GSSAPI_DELEGATION.3: Use GSS-API rather than GSSAPI
+Daniel Stenberg (20 Oct 2015)
+- copyrights: update Gisle Vanem's email
+
+- vtls: fix compiler warning for TLS backends without sha256
   
-  As implementations are refereed to GSS-API libraries as per the RFC and
-  GSSAPI typically refers to an authentication mechanism.
+  ... noticed with mbedTLS.
+
+- [Jonas Minnberg brought this change]
 
-- CURLOPT_CONNECT_ONLY.3: Fixed incomplete protocol list
+  vtls: added support for mbedTLS
   
-  Added missing IMAP to the protocol list.
+  closes #496
 
-- code cleanup: Use 'CURLcode result'
+Jay Satiro (19 Oct 2015)
+- [Javier G. Sogo brought this change]
 
-- curl_easy_setopt.3: Fixed lots of typos
+  cmake: Fix for add_subdirectory(curl) use-case
+  
+  - Use CURL_BINARY_DIR instead of CMAKE_BINARY_DIR.
+  
+  When including CURL using add_subdirectory the variables
+  CMAKE_BINARY_DIR and CURL_BINARY_DIR hold different paths.
+  
+  Closes https://github.com/bagder/curl/pull/488
+  Closes https://github.com/bagder/curl/pull/498
+
+Daniel Stenberg (18 Oct 2015)
+- RELEASE-NOTES: synced with 4c773bcb474e
 
-- curl_easy_setopt.3: Moved CURLOPT_DIRLISTONLY into PROTOCOL OPTIONS
+- tests/FILEFORMAT: mention PSL as a valid feture to check for
   
-  ...as this option affects more that just FTP.
+  For example in test 1136
 
-Guenter Knauf (30 Oct 2014)
-- build: added Watcom support to build with WinSSL.
+- teste1136: only run when PSL is enabled
 
-Daniel Stenberg (30 Oct 2014)
-- CURLOPT_PINNEDPUBLICKEY.3: added details
+- curl: slist_wc: remove curl_memory.h inclusion
+  
+  ... that's for the library only.
 
-Steve Holme (30 Oct 2014)
-- CURLOPT_CUSTOMREQUEST.3: Fixed incomplete protocol list
+- configure: add PSL to the list of features
   
-  Whilst the description included information about SMTP, the protocol
-  list only showed "TTP, FTP, IMAP, POP3".
+  ... to make test 1014 work again after e77b5b7453.
 
-- CURLOPT_DIRLISTONLY.3: Added information about the usage in POP3
+- [Daniel Hwang brought this change]
 
-Daniel Stenberg (29 Oct 2014)
-- openssl: enable NPN separately from ALPN
+  tool: Generate easysrc with last cache linked-list
+  
+  Using a last cache linked-list improves the performance of easysrc
+  generation.
   
-  ... and allow building with nghttp2 but completely without NPN and ALPN,
-  as nghttp2 can still be used for plain-text HTTP.
+  Bug: https://github.com/bagder/curl/issues/444
+  Ref: https://github.com/bagder/curl/issues/429
   
-  Reported-by: Lucas Pardue
+  Closes #452
 
-- configure.ac: remove checks for OpenSSL NPN/ALPN funcs again
+- [Tim Rühsen brought this change]
+
+  cookies: Add support for Mozilla's Publix Suffix List
+  
+  Use libpsl to check the domain value of Set-Cookie headers (and cookie
+  jar entries) for not being a Publix Suffix.
   
-  ... since the conditional in the code are now based on OpenSSL versions
-  instead to better support non-configure builds.
+  The configure script checks for "libpsl" by default. Disable the check
+  with --without-libpsl.
+  
+  Ref: https://publicsuffix.org/
+  Ref: https://github.com/publicsuffix/list
+  Ref: https://github.com/rockdaboot/libpsl
 
-- opts: added some "SEE ALSO" references
+- [Richard Hosking brought this change]
 
-Steve Holme (29 Oct 2014)
-- RELEASE-NOTES: Synced with 32913182dc
+  curlbuild.h: Fix non-configure compiling to mips and sh4 targets
 
-- vtls.c: Fixed compilation warning
-  
-  conversion from 'size_t' to 'unsigned int', possible loss of data
+- [Anders Bakken brought this change]
 
-- sspi: Return CURLE_LOGIN_DENIED on AcquireCredentialsHandle() failure
+  http2: Don't pass unitialized name+len pairs to nghttp2_submit_request
   
-  Return a more appropriate error, rather than CURLE_OUT_OF_MEMORY when
-  acquiring the credentials handle fails. This is then consistent with
-  the code prior to commit f7e24683c4 when log-in credentials were empty.
+  bug introduced by 18691642931e5c7ac8af83ac3a84fbcb36000f96.
+  
+  Closes #493
+
+Dan Fandrich (16 Oct 2015)
+- test1601: fix compilation with --enable-debug and --disable-crypto-auth
 
-- sasl_sspi: Allow DIGEST-MD5 to use current windows credentials
+Daniel Stenberg (16 Oct 2015)
+- multi: fix off-by-one finit[] array size
   
-  Fixed the ability to use the current log-in credentials with DIGEST-MD5.
-  I had previously disabled this functionality in commit 607883f13c as I
-  couldn't get this to work under Windows 8, however, from testing HTTP
-  Digest authentication through Windows SSPI and then further testing of
-  this code I have found it works in Windows 7.
+  introduced in c6aedf680f6. It needs to be CURLM_STATE_LAST big since it
+  must hande the range 0 .. CURLM_STATE_MSGSENT (18) and CURLM_STATE_LAST
+  is 19 right now.
   
-  Some further investigation is required to see what the differences are
-  between Windows 7 and 8, but for now enable this functionality as the
-  code will return an error when AcquireCredentialsHandle() fails.
+  Reported-by: Dan Fandrich
+  Bug: http://curl.haxx.se/mail/lib-2015-10/0069.html
 
-Kamil Dudka (29 Oct 2014)
-- transfer: drop the code handling the ssl_connect_retry flag
+- fread_func: move callback pointer from set to state struct
   
-  Its last use has been removed by the previous commit.
-
-- nss: drop the code for libcurl-level downgrade to SSLv3
+  ... and assign it from the set.fread_func_set pointer in the
+  Curl_init_CONNECT function. This A) avoids that we have code that
+  assigns fields in the 'set' struct (which we always knew was bad) and
+  more importantly B) it makes it impossibly to accidentally leave the
+  wrong value for when the handle is re-used etc.
   
-  This code was already deactivated by commit
-  ec783dc142129d3860e542b443caaa78a6172d56.
-
-- openssl: fix a line length warning
-
-Guenter Knauf (29 Oct 2014)
-- Added NetWare support to build with nghttp2.
+  Introducing a state-init functionality in multi.c, so that we can set a
+  specific function to get called when we enter a state. The
+  Curl_init_CONNECT is thus called when switching to the CONNECT state.
+  
+  Bug: https://github.com/bagder/curl/issues/346
+  
+  Closes #346
 
-- Fixed error message since we require ALPN support.
+Dan Fandrich (14 Oct 2015)
+- test1531: case the size to fix the test on non-largefile builds
 
-- Check for ALPN via OpenSSL version number.
+Daniel Stenberg (13 Oct 2015)
+- acinclude: remove PKGCONFIG override
   
-  This check works also with to non-configure platforms.
-
-Steve Holme (28 Oct 2014)
-- sasl_sspi: Fixed typo in comment
+  ... and allow it to get set by a caller easier.
+  
+  Reported-by: Rainer Jung
+  Bug: http://curl.haxx.se/mail/lib-2015-10/0035.html
 
-- code cleanup: We prefer 'CURLcode result'
+Dan Fandrich (12 Oct 2015)
+- docs/INSTALL: Updated example minimal binary sizes
 
-Daniel Stenberg (28 Oct 2014)
-- TODO: consider supporting STAT
+Daniel Stenberg (11 Oct 2015)
+- [Erik Johansson brought this change]
 
-- mk-ca-bundle: spell fix "version"
+  openssl: Fix set up of pkcs12 certificate verification chain
+  
+  sk_X509_pop will decrease the size of the stack which means that the loop would
+  end after having added only half of the certificates.
+  
+  Also make sure that the X509 certificate is freed in case
+  SSL_CTX_add_extra_chain_cert fails.
 
-- HTTP: return larger than 3 digit response codes too
+- ntlm: error out without 64bit support as the code needs it
+  
+  It makes it a clearer message for developers reaching that point without
+  the necessary support.
   
-  HTTP 1.1 is clearly specified to only allow three digit response codes,
-  and libcurl used sscanf("%3d") for that purpose. This made libcurl
-  support smaller numbers but not larger. It does now, but we will not
-  make any specific promises nor document this further since it is going
-  outside of what HTTP is.
+  Thanks-by: Jay Satiro
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1441
-  Reported-by: Balaji
+  Closes #78
 
-- src/: remove version.h.dist from gitignore
+- curl_global_init: set the memory function pointers correct
   
-  It has not been used since commit f7bfdbab in 2011
+  follow-up from 6f8ecea0
 
-Steve Holme (26 Oct 2014)
-- ntlm: We prefer 'CURLcode result'
+- curl_global_init_mem: set function pointers before doing init
   
-  Continuing commit 0eb3d15ccb more return code variable name changes.
+  ... as in the polarssl TLS backend for example it uses memory functions.
 
-Guenter Knauf (26 Oct 2014)
-- Cosmetics: lowercase non-special subroutine names.
+Jay Satiro (9 Oct 2015)
+- http2: Fix http2_recv to return -1 if recv returned -1
+  
+  If the underlying recv called by http2_recv returns -1 then that is the
+  value http2_recv returns to the caller.
 
-Steve Holme (26 Oct 2014)
-- RELEASE-NOTES: Synced with 07ac29a058
+Daniel Stenberg (8 Oct 2015)
+- [Svyatoslav Mishyn brought this change]
 
-- http_negotiate: We prefer 'CURLcode result'
+  curl_easy_recv.3: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET
   
-  Continuing commit 0eb3d15ccb more return code variable name changes.
+  Closes #479
 
-- http_negotiate: Fixed missing check for USE_SPNEGO
+- [Svyatoslav Mishyn brought this change]
 
-- sspi: Synchronization of cleanup code between auth mechanisms
+  curl_easy_send.3: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET
 
-- sspi: Renamed max token length variables
-  
-  Code cleanup to try and synchronise code between the different SSPI
-  based authentication mechanisms.
+- [Svyatoslav Mishyn brought this change]
 
-- sspi: Renamed expiry time stamp variables
-  
-  Code cleanup to try and synchronise code between the different SSPI
-  based authentication mechanisms.
+  CURLOPT_CONNECT_ONLY.3: CURLINFO_LASTSOCKET => CURLINFO_ACTIVESOCKET
+
+- CURLOPT_CERTINFO.3: fix reference to CURLINFO_CERTINFO
 
-- sspi: Only call CompleteAuthToken() when complete is needed
+- ntlm: get rid of unconditional use of long long
   
-  Don't call CompleteAuthToken() after InitializeSecurityContext() has
-  returned SEC_I_CONTINUE_NEEDED as this return code only indicates the
-  function should be called again after receiving a response back from
-  the server.
+  ... since some compilers don't have it and instead use other types, such
+  as __int64.
   
-  This only affected the Digest and NTLM authentication code.
+  Reported by: gkinseyhpw
+  Closes #478
 
-Dan Fandrich (26 Oct 2014)
-- Added the "flaky" keyword to a number of tests
+Jay Satiro (8 Oct 2015)
+- [Anders Bakken brought this change]
+
+  des: Fix header conditional for Curl_des_set_odd_parity
   
-  Each shows evidence of flakiness on at least one platform on
-  the autobuilds. Users can use this keyword to skip these tests
-  if desired.
+  Follow up to 613e502.
 
-Steve Holme (26 Oct 2014)
-- ntlm: Return all errors from Curl_ntlm_core_mk_nt_hash()
+Daniel Stenberg (7 Oct 2015)
+- configure: build silently by default
   
-  For consistency with other areas of the NTLM code propagate all errors
-  from Curl_ntlm_core_mk_nt_hash() up the call stack rather than just
-  CURLE_OUT_OF_MEMORY.
+  'make V=1' will make the build verbose like before
 
-- ntlm: Return CURLcode from Curl_ntlm_core_mk_lm_hash()
+- bump: start climbing toward 7.46.0
 
-- ntlm: Use 'CURLcode result'
-  
-  Continuing commit 0eb3d15ccb more return code variable name changes.
+- RELEASE-PROCEDURE: add the github HTTPS download step
 
-- ntlm: Only define ntlm data structure when USE_NTLM is defined
+Version 7.45.0 (7 Oct 2015)
 
-- ntlm: Changed handles to be dynamic like other SSPI handles
-  
-  Code cleanup to try and synchronise code between the different SSPI
-  based authentication mechanisms.
+Daniel Stenberg (7 Oct 2015)
+- THANKS: 19 new contributors from the 7.45.0 announcement
 
-- ntlm: Renamed handle variables to match other SSPI structures
-  
-  Code cleanup to try and synchronise code between the different SSPI
-  based authentication mechanisms.
+- RELEASE-NOTES: synced with 69ea57970080
 
-- ntlm: Renamed SSPI based input token variables
+Jay Satiro (4 Oct 2015)
+- getinfo: Fix return code for unknown CURLINFO options
   
-  Code cleanup to try and synchronise code between the different SSPI
-  based authentication mechanisms.
-
-- ntlm: We prefer 'CURLcode result'
+  - If a CURLINFO option is unknown return CURLE_UNKNOWN_OPTION.
   
-  Continuing commit 0eb3d15ccb more return code variable name changes.
+  Prior to this change CURLE_BAD_FUNCTION_ARGUMENT was returned on
+  unknown. That return value is contradicted by the CURLINFO option
+  documentation which specifies a return of CURLE_UNKNOWN_OPTION on
+  unknown.
 
-- build: Added WinIDN build configuration options
-  
-  Added support for WinIDN build configurations to the VC8 and VC9
-  project files.
+- [rouzier brought this change]
 
-Nick Zitzmann (24 Oct 2014)
-- darwinssl: detect possible future removal of SSLv3 from the framework
+  hiperfifo: fix the pointer passed to WRITEDATA
   
-  If Apple ever drops SSLv3 support from the Security framework, we'll fail with an error if the user insists on using SSLv3.
+  Closes https://github.com/bagder/curl/pull/471
 
-Patrick Monnerat (24 Oct 2014)
-- gskit.c: remove SSLv3 from SSL default.
+- [Maksim Stsepanenka brought this change]
 
-- gskit.c: use 'CURLcode result'
+  tool_setopt: fix c_escape truncated octal
+  
+  Closes https://github.com/bagder/curl/pull/469
 
-Daniel Stenberg (24 Oct 2014)
-- [Jay Satiro brought this change]
+Daniel Stenberg (1 Oct 2015)
+- [Orange Tsai brought this change]
 
-  SSL: Remove SSLv3 from SSL default due to POODLE attack
+  gopher: don't send NUL byte
   
-  - Remove SSLv3 from SSL default in darwinssl, schannel, cyassl, nss,
-  openssl effectively making the default TLS 1.x. axTLS is not affected
-  since it supports only TLS, and gnutls is not affected since it already
-  defaults to TLS 1.x.
+  Closes #466
+
+Jay Satiro (29 Sep 2015)
+- runtests: Fix pid check in checkdied
   
-  - Update CURLOPT_SSLVERSION doc
+  Because the 'not' operator has a very low precedence and as a result the
+  entire statement was erroneously negated and could never be true.
 
-- pipelining: only output "is not blacklisted" in debug builds
+Daniel Stenberg (30 Sep 2015)
+- [Thorsten Schöning brought this change]
 
-- *.3: add/extend "SEE ALSO" sections
+  win32: make recent Borland compilers use long long
 
-- curl_easy_pause.3: minor wording edit
+- RELEASE-NOTES: synced with 69b89050d4
 
-- curl_getdate.3: provide a "SEE ALSO" section
+Jay Satiro (28 Sep 2015)
+- [Michael Kalinin brought this change]
 
-- curl_global_init.3: minor formatting fix, add version info
+  openssl: Fix algorithm init
+  
+  - Change algorithm init to happen after OpenSSL config load.
+  
+  Additional algorithms may be available due to the user's config so we
+  initialize the algorithms after the user's config is loaded.
+  
+  Bug: https://github.com/bagder/curl/issues/447
+  Reported-by: Denis Feklushkin
 
-- url.c: use 'CURLcode result'
+- [Svyatoslav Mishyn brought this change]
 
-- code cleanup: we prefer 'CURLcode result'
+  docs: fix unescaped '\n' in man pages
   
-  ... for the local variable name in functions holding the return
-  code. Using the same name universally makes code easier to read and
-  follow.
+  Closes https://github.com/bagder/curl/pull/459
+
+Daniel Stenberg (27 Sep 2015)
+- http2: set TCP_NODELAY unconditionally
   
-  Also, unify code for checking for CURLcode errors with:
+  For a single-stream download from localhost, we managed to increase
+  transfer speed from 1.6MB/sec to around 400MB/sec, mostly because of
+  this single fix.
+
+- http2: avoid superfluous Curl_expire() calls
   
-   if(result) or if(!result)
+  ... only call it when there is data arriving for another handle than the
+  one that is currently driving it.
   
-  instead of
+  Improves single-stream download performance quite a lot.
   
-   if(result == CURLE_OK), if(CURLE_OK == result) or if(result != CURLE_OK)
+  Thanks-to: Tatsuhiro Tsujikawa
+  Bug: http://curl.haxx.se/mail/lib-2015-09/0097.html
 
-- Curl_add_timecondition: skip superfluous varible assignment
+- readwrite_data: set a max number of loops
   
-  Detected by cppcheck.
+  ... as otherwise a really fast pipe can "lock" one transfer for some
+  protocols, like with HTTP/2.
 
-- Curl_pp_flushsend: skip superfluous assignment
-  
-  Detected by cppcheck.
+- [Sergei Nikulov brought this change]
 
-- Curl_pp_readresp: remove superfluous assignment
-  
-  Variable already assigned a few lines up.
+  CI: Added AppVeyor-CI for curl
   
-  Detected by cppcheck.
+  Closes #439
 
-- Curl_proxyCONNECT: remove superfluous statement
+- FTP: fix uploading ASCII with unknown size
   
-  The variable is already assigned, skip the duplicate assignment.
+  ... don't try to increase the supposed file size on newlines if we don't
+  know what file size it is!
   
-  Pointed out by cppcheck.
+  Patch-by: lzsiga
 
-Guenter Knauf (24 Oct 2014)
-- Added MinGW support to build with nghttp2.
+- [Tatsuhiro Tsujikawa brought this change]
 
-- Added VC ssh2 target to main Makefile.
+  build: fix failures with -Wcast-align and -Werror
+  
+  Closes #457
 
-- Some cosmetics and simplifies.
+- [Tatsuhiro Tsujikawa brought this change]
 
-- Remove dependency on openssl and cut.
+  curl-confopts.m4: Add missing ')'
   
-  Prefer usage of Perl modules for sha1 calculation since there
-  might be systems where openssl is not installed or not in path.
-  If openssl is used for sha1 calculation then dont rely on cut
-  since it is usually not available on other systems than Linux.
-
-Daniel Stenberg (23 Oct 2014)
-- RELEASE-NOTES: synced with e116d0a62
+  ... for CURL_CHECK_OPTION_RT
+  
+  Closes #456
 
-- CURLOPT_RESOLVE.3: add an example
+Jay Satiro (25 Sep 2015)
+- curl_easy_getinfo.3: Add brief description for each CURLINFO
 
-- gnutls: removed dead code
-  
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1437
-  Reported-by: Julien
+Daniel Stenberg (23 Sep 2015)
+- [Jakub Zakrzewski brought this change]
 
-- Curl_rand: Uninitialized variable: r
+  CMake: Ensure discovered include dirs are considered
   
-  This is not actually used uninitialized but we silence warnings.
+  ...during header checks. Otherwise some following header tests
+  (incorrectly) fail.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1437
-  Reported-by: Julien
+  Closes #436
 
-- opts: provide more and updated examples
+- [Jakub Zakrzewski brought this change]
 
-- CURLOPT_RANGE.3: works for SFTP as well
+  CMake: Put "winsock2.h" before "windows.h" during configure checks
   
-  ... and added a small example
+  "windows.h" includes "winsock.h" what causes many redefinition errors
+  if "winsock2.h" is included afterwards and can cause build to fail.
 
-- curl.1: edited for clarity
+- tests: disable 1510 due to CI-problems on github
 
-- CURLOPT_SSLVERSION.3: provide an example
+- [Mike Crowe brought this change]
 
-- docs/libcurl/ABI: more markdown friendly
-
-- docs: edited lots of libcurl docs for clarity
+  gnutls: Report actual GnuTLS error message for certificate errors
+  
+  If GnuTLS fails to read the certificate then include whatever reason it
+  provides in the failure message reported to the client.
+  
+  Signed-off-by: Mike Crowe <mac@mcrowe.com>
 
-- opts: added examples
+- RELEASE-NOTES: synced with 6b56901b56e
 
-- HISTORY: two glimpses in 2014
+- [Mike Crowe brought this change]
 
-Kamil Dudka (20 Oct 2014)
-- nss: reset SSL handshake state machine
+  gnutls: Support CURLOPT_KEYPASSWD
   
-  ... when the handshake succeeds
+  The gnutls vtls back-end was previously ignoring any password set via
+  CURLOPT_KEYPASSWD. Presumably this was because
+  gnutls_certificate_set_x509_key_file did not support encrypted keys.
   
-  This fixes a connection failure when FTPS handle is reused.
-
-Daniel Stenberg (20 Oct 2014)
-- [Peter Wu brought this change]
+  gnutls now has a gnutls_certificate_set_x509_key_file2 function that
+  does support encrypted keys. Let's determine at compile time whether the
+  available gnutls supports this new function. If it does then use it to
+  pass the password. If it does not then emit a helpful diagnostic if a
+  password is set. This is preferable to the previous behaviour of just
+  failing to read the certificate without giving a reason in that case.
+  
+  Signed-off-by: Mike Crowe <mac@mcrowe.com>
 
-  cmake: generate pkg-config and curl-config
+- CURLINFO_TLS_SESSION: always return backend info
   
-  Initial work to generate a pkg-config and curl-config script. Static
-  linking (`curl-config --static-libs` and `pkg-config --shared --libs
-  libcurl`) is broken and therefore disabled.
+  ... even for those that don't support providing anything in the
+  'internals' struct member since it offers a convenient way for
+  applications to figure this out.
+
+- [Daniel Hwang brought this change]
+
+  tool: remove redundant libcurl check
   
-  CONFIGURE_OPTIONS does not make sense for CMake, use an empty string
-  for now.
+  The easysrc generation is run only when --libcurl is initialized.
   
-  At least `curl-config --features` and `curl-config --protocols` work
-  which is needed by runtests.pl.
+  Ref: https://github.com/bagder/curl/issues/429
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes #448
 
-- [Peter Wu brought this change]
+- [Richard van den Berg brought this change]
 
-  cmake: use LIBCURL_VERSION from curlver.h
-  
-  This matches the behavior from autotools. The auxiliary major, minor
-  and patch components are not needed anymore and therefore removed.
+  CURLOPT_PROXY.3: A proxy given as env variable gets no special treatment
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Closes #449
 
-- [Peter Wu brought this change]
+- TODO: 5.7 More compressions
+  
+  Like for example brotli, as being implemented in Firefox now.
 
-  cmake: add SUPPORT_FEATURES and SUPPORT_PROTOCOLS
+Jay Satiro (21 Sep 2015)
+- tool_operate: Don't call easysrc cleanup unless --libcurl
   
-  For compatibility with autoconf, it will be used later for curl-config
-  and pkg-config. Not all features and or protocols can be enabled as
-  these are missing additional checks (see new TODOs).
+  - Review of 4d95491.
   
-  SUPPORT_PROTOCOLS is partially scripted (grep for SUPPORT_PROTOCOLS=)
-  and manually verified/modified. SUPPORT_FEATURES is manually added.
+  The author changed it so easysrc only initializes when --libcurl but did
+  not do the same for the call to easysrc cleanup.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Ref: https://github.com/bagder/curl/issues/429
 
-- cmake: add CMake/Macros.cmake to the release tarball
+Daniel Stenberg (20 Sep 2015)
+- [Viktor Szakats brought this change]
 
-- test545: make it not use a trailing zero
+  CURLOPT_PINNEDPUBLICKEY.3: replace test.com with example.com
   
-  CURLOPT_COPYPOSTFIELDS with a given CURLOPT_POSTFIELDSIZE does not
-  require a trailing zero of the data and by making sure this test doesn't
-  use one we know it works (combined with valgrind).
+  closes #443
 
-Steve Holme (16 Oct 2014)
-- ntlm: Fixed empty type-2 decoded message info text
+- KNOWN_BUGS: 91 "curl_easy_perform hangs with imap and PolarSSL"
   
-  Updated the info text when the base-64 decode of the type-2 message
-  returns a null buffer to be more specific.
-
-- ntlm: Fixed empty/bad base-64 decoded buffer return codes
+  Closes #334
 
-- ntlm: Avoid unnecessary buffer allocation for SSPI based type-2 token
+- KNOWN_BUGS: add link to #85
 
-Daniel Stenberg (16 Oct 2014)
-- httpcustomheader.c: make use of more CURLOPT_HTTPHEADER features
+- tests: disable 1801 until fixed
   
-  ... and only do a single request for clarity.
-
-Steve Holme (15 Oct 2014)
-- sasl_sspi: Fixed some typos
+  It is unreliable and causes CI problems on github
+  
+  Closes #380
 
-- sasl_sspi: Fixed Kerberos response buffer not being allocated when using SSO
+- RELEASE-NOTES: synced with 4d95491636ee
 
-Daniel Stenberg (15 Oct 2014)
-- [Bruno Thomsen brought this change]
+- [Daniel Lee Hwang brought this change]
 
-  mk-ca-bundle: added SHA-384 signature algorithm
+  tool: generate easysrc only on --libcurl
   
-  Certificates based on SHA-1 are being phased out[1].
-  So we should expect a rise in certificates based on SHA-2.
-  Adding SHA-384 as a valid signature algorithm.
+  Code should only be generated when --libcurl is used.
   
-  [1] https://blog.mozilla.org/security/2014/09/23/phasing-out-certificates-with-sha-1-based-signature-algorithms/
+  Bug: https://github.com/bagder/curl/issues/429
+  Reported-by: @greafhe, Jay Satiro
   
-  Signed-off-by: Bruno Thomsen <bth@kamstrup.dk>
+  Closes #429
+  Closes #442
 
-Patrick Monnerat (14 Oct 2014)
-- OS400: fix bugs in curl_*escape_ccsid() and reduce variables scope
+Jay Satiro (19 Sep 2015)
+- vtls: Change designator name for server's pubkey hash
+  
+  - Change the designator name we use to show the base64 encoded sha256
+  hash of the server's public key from 'pinnedpubkey' to
+  'public key hash'.
+  
+  Though the server's public key hash is only shown when comparing pinned
+  public key hashes, the server's hash may not match one of the pinned.
 
-- Implement pinned public key in GSKit backend
+Daniel Stenberg (19 Sep 2015)
+- [Isaac Boukris brought this change]
 
-Daniel Stenberg (14 Oct 2014)
-- CURLOPT_TLSAUTH_*.3: fix reference typos
-
-- cleanups: reduce variable scope
+  NTLM: Reset auth-done when using a fresh connection
   
-  cppcheck pointed these out.
+  With NTLM a new connection will always require authentication.
+  Fixes #435
 
-- singleipconnect: remove dead assignment never used
-  
-  cppcheck pointed this out.
+- [Daniel Hwang brought this change]
 
-- pinning: minor code style policing
+  ssl: add server cert's "sha256//" hash to verbose
+  
+  Add a "pinnedpubkey" section to the "Server Certificate" verbose
+  
+  Bug: https://github.com/bagder/curl/issues/410
+  Reported-by: W. Mark Kubacki
+  
+  Closes #430
+  Closes #410
 
-Patrick Monnerat (13 Oct 2014)
-- Factorize pinned public key code into generic file handling and backend specific
+- [Jakub Zakrzewski brought this change]
 
-- vtls: remove QsoSSL
+  openldap: only part of LDAP query results received
+  
+  Introduced with commit 65d141e6da5c6003a1592bbc87ee550b0ad75c2f
+  
+  Closes #440
 
-- gskit: supply dummy randomization function
+- [Alessandro Ghedini brought this change]
 
-- vtls/*: deprecate have_curlssl_md5sum and set-up default md5sum implementation
+  openssl: don't output certinfo data
 
-Daniel Stenberg (13 Oct 2014)
-- [Peter Wu brought this change]
+- [Alessandro Ghedini brought this change]
 
-  tests: move TESTCASES to Makefile.inc, add show for cmake
+  openssl: refactor certificate parsing to use OpenSSL memory BIO
   
-  This change allows runtests.pl to be run from the CMake builddir:
-  
-      export srcdir=/tmp/curl/tests;
-      perl -I$srcdir $srcdir/runtests.pl -l
+  Fixes #427
+
+Kamil Dudka (18 Sep 2015)
+- nss: prevent NSS from incorrectly re-using a session
   
-  In order to make this possible, all test cases have been moved from
-  Makefile.am to Makefile.inc.
+  Without this workaround, NSS re-uses a session cache entry despite the
+  server name does not match.  This causes SNI host name to differ from
+  the actual host name.  Consequently, certain servers (e.g. github.com)
+  respond by 400 to such requests.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Bug: https://bugzilla.mozilla.org/1202264
 
-- [Peter Wu brought this change]
+- nss: check return values of NSS functions
 
-  cmake: enable IPv6 by default if available
-  
-  ENABLE_IPV6 depends on HAVE_GETADDRINFO or you will get a
-  Curl_getaddrinfo_ex error. Enable IPv6 by default, disabling it if
-  struct sockaddr_in6 is not found in netinet/in.h.
-  
-  Note that HAVE_GETADDRINFO_THREADSAFE is still not set as it needs more
-  platform checks even though POSIX requires a thread-safe getaddrinfo.
+Daniel Stenberg (17 Sep 2015)
+- CURLOPT_PINNEDPUBLICKEY.3: mention error code
+
+- openssl: build with < 0.9.8
   
-  Verified on Arch Linux x86_64 with glibc 2.20-2 and Linux 3.16-rc7.
+  ... without sha256 support and no define saying so.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Reported-by: Rajkumar Mandal
 
-- [Peter Wu brought this change]
+- libcurl-errors.3: add two missing error codes
+  
+  CURLE_SSL_PINNEDPUBKEYNOTMATCH and CURLE_SSL_INVALIDCERTSTATUS
 
-  cmake: build tool_hugehelp (ENABLE_MANUAL)
+Jay Satiro (14 Sep 2015)
+- CURLOPT_PINNEDPUBLICKEY.3: Improve pubkey extraction example
   
-  Rather than always outputting an empty manual page for the '-M' option,
-  generate a full manual page as done by autotools. For simplicity in
-  CMake, always generate the gzipped page as it will not be used anyway
-  when zlib is not available.
+  - Show how a certificate can be obtained using OpenSSL.
   
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+  Bug: https://github.com/bagder/curl/pull/430
+  Reported-by: Daniel Hwang
 
-- [Peter Wu brought this change]
+Daniel Stenberg (13 Sep 2015)
+- http2: removed unused function
 
-  tests/http_pipe.py: Python 3 support
-  
-  The 2to3 tool converted socketserver (which I manually fixed up with an
-  import fallback) and the print(e) line. The xrange option was converted
-  to range, but it seems better to use the '*' operator here for
-  simplicity.
-  
-  Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+- CURLINFO_ACTIVESOCKET.3: mention it replaces *LASTSOCKET
+
+- opts: add CURLINFO_* man pages to dist
 
-- SECURITY: slightly nicer markdown format
+- opts: 19 more CURLINFO_* options made into stand-alone man pages
 
-- RELEASE-PROCEDURE: better markdown, more content
+- RELEASE-NOTES: synced with fad9604613
 
-- RELEASE-NOTES: synced with 6637b237e6eb
+- curl: customrequest_helper: deal with NULL custom method
+
+- [Svyatoslav Mishyn brought this change]
+
+  CURLOPT_FNMATCH_FUNCTION.3: fix typo
+  
+  s => is
   
-  ... and bumped the planned release version.
+  Closes #428
 
-- vtls: have vtls.h include the backend header files
+- curl: point out unnecessary uses of -X in verbose mode
   
-  It turned out some features were not enabled in the build since for
-  example url.c #ifdefs on features that are defined on a per-backend
-  basis but vtls.h didn't include the backend headers.
+  It uses 'Note:' as a prefix as opposed to the common 'Warning:' to take
+  down the tone a bit.
   
-  CURLOPT_CERTINFO was one such feature that was accidentally disabled.
+  It adds a warning for using -XHEAD on other methods becasue that may
+  lead to a hanging connection.
 
-- test2036: verify -O with no slash at all in the URL
+Jay Satiro (10 Sep 2015)
+- curl_sspi: fix possibly undefined CRYPT_E_REVOKED
   
-  Similar to test 76 but that test's URL has a slash just no file name
-  part.
+  Bug: https://github.com/bagder/curl/pull/411
+  Reported-by: Viktor Szakats
 
-- get_url_file_name: make no slash equal empty string
+- buildconf.bat: fix syntax error
 
-- get_url_file_name: never return a NULL string *and* OK
-  
-  Change 987a4a73 assumes that as it simplifies life in the calling
-  function.
-  
-  Reported-by: Fabian Keil
+- [Benjamin Kircher brought this change]
 
-- [Jakub Zakrzewski brought this change]
+  winbuild: run buildconf.bat if necessary
 
-  Cmake: Build with GSSAPI (MIT or Heimdal)
-  
-  It tries hard to recognise SDK's on different platforms. On windows MIT
-  Kerberos installs SDK with other things and puts path into registry.
-  Heimdal have separate zip archive. On linux pkg-config is tried, then
-  krb5-config script and finally old-style libs and headers detection.
+- [Svyatoslav Mishyn brought this change]
+
+  docs: fix argument type for CURLINFO_SPEED_*, CURLINFO_SIZE_*
   
-  Command line args:
-  * CMAKE_USE_GSSAPI - enables GSSAPI detection
-  * GSS_ROOT_DIR - if set, should point to the root of GSSAPI installation
-                   (the one with include and lib directories)
+  long => double
 
-- [Jakub Zakrzewski brought this change]
+Daniel Stenberg (8 Sep 2015)
+- [Sergei Nikulov brought this change]
 
-  Cmake: Got rid of setup_curl_dependencies
+  cmake: IPv6 : disable Unix header check on Windows platform
   
-  There is no need for such function. Include_directories propagate by
-  themselves and having a function with one simple link statement makes
-  little sense.
+  Closes #409
 
-- [Jakub Zakrzewski brought this change]
+- parse_proxy: reject illegal port numbers
+  
+  If the port number in the proxy string ended weirdly or the number is
+  too large, skip it. Mostly as a means to bail out early if a "bare" IPv6
+  numerical address is used without enclosing brackets.
+  
+  Also mention the bracket requirement for IPv6 numerical addresses to the
+  man page for CURLOPT_PROXY.
+  
+  Closes #415
+  
+  Reported-by: Marcel Raad
 
-  Cmake: Avoid cycle directory dependencies.
+- FTP: do_more: add check for wait_data_conn in upload case
+  
+  In some timing-dependnt cases when a 4xx response immediately followed
+  after a 150 when a STOR was issued, this function would wrongly return
+  'complete == true' while 'wait_data_conn' was still set.
+  
+  Closes #405
   
-  Because we prepended libraries to list, CMake had troubles resolving
-  link directory order as it detected some cycles. Appending to list ensures
-  that dependencies will preceed dependees.
+  Reported-by: Patricia Muscalu
 
-- [Jakub Zakrzewski brought this change]
+- [Svyatoslav Mishyn brought this change]
 
-  Cmake: Fix library list provided to cURL tests.
+  CURLOPT_TLSAUTH_TYPE.3: update description
   
-  The list must be set after those nice CMake tests as we mess with
-  CMAKE_REQUIRED_LIBRARIES there.
+  Closes #414
+  Closes #413
 
-- [Jakub Zakrzewski brought this change]
+- [Svyatoslav Mishyn brought this change]
 
-  Cmake: Check for OpenSSL before OpenLDAP.
+  CURLOPT_PATH_AS_IS.3: fix typo
   
-  OpenLDAP might have been build with OpenSSL. Checking for OpenLDAP first
-  may result in undefined symbols. Of course, the found OpenSSL libraries
-  must also be linked whenever OpenLDAP is.
+  leavit => leaveit
+  
+  closes #412
 
-- curl_multi_fdset.3: improved the formatting slightly
+- [Svyatoslav Mishyn brought this change]
 
-- curl_multi_fdset: explain the fd_set arguments
+  CURLINFO_SSL_VERIFYRESULT.3: add short description
 
-Kamil Dudka (8 Oct 2014)
-- nss: do not fail if a CRL is already cached
-  
-  This fixes a copy-paste mistake from commit 2968f957.
+- [Svyatoslav Mishyn brought this change]
 
-Patrick Monnerat (8 Oct 2014)
-- OS400: upgrade interface for pinned public key (no implementation yet)
+  CURLINFO_SSL_ENGINES.3: add short description
 
-Daniel Stenberg (8 Oct 2014)
-- FormAdd: precaution against memdup() of NULL pointer
-  
-  Coverity CID 252518. This function is in general far too complicated for
-  its own good and really should be broken down into several smaller
-  funcitons instead - but I'm adding this protection here now since it
-  seems there's a risk the code flow can end up here and dereference a
-  NULL pointer.
+- [Svyatoslav Mishyn brought this change]
 
-- operate: avoid NULL dereference
-  
-  Coverity CID 1241948. dumpeasysrc() would get called with
-  config->current set to NULL which could be dereferenced by a warnf()
-  call.
+  CURLINFO_CONTENT_LENGTH_UPLOAD.3: replace "receive" with "get" for consistency
 
-- do_sec_send: remove dead code
-  
-  Coverity CID 1241951. The condition 'len >= 0' would always be true at
-  that point and thus not necessary to check for.
+- [Svyatoslav Mishyn brought this change]
 
-- krb5_encode: remove unused argument
-  
-  Coverity CID 1241957. Removed the unused argument. As this struct and
-  pointer now are used only for krb5, there's no need to keep unused
-  function arguments around.
+  CURLINFO_REDIRECT_TIME.3: remove redundant '!'
 
-- operate_do: skip superfluous check for NULL pointer
+Kamil Dudka (4 Sep 2015)
+- Revert "has: generate the curl/has.h header"
   
-  Coverity CID 1243583. get_url_file_name() cannot fail and return a NULL
-  file name pointer so skip the check for that - it tricks coverity into
-  believing it can happen and it then warns later on when we use 'outfile'
-  without checking for NULL.
+  This reverts commit a60bde79f9adeb135d5c642a07f0d783fbfbbc25 I have
+  pushed by mistake.  Apologies for my incompetent use of the git repo!
 
-- curl_easy_getinfo.3: spell-fix
+- nss: do not directly access SSL_ImplementedCiphers[]
+  
+  It causes dynamic linking issues at run-time after an update of NSS.
   
-  Reported-By: Luan Cestari
+  Bug: https://lists.fedoraproject.org/pipermail/devel/2015-September/214117.html
 
-- [moparisthebest brought this change]
+- [Daniel Stenberg brought this change]
 
-  GnuTLS: Implement public key pinning
+  has: generate the curl/has.h header
+  
+  changed macro name, moved and renamed script to become docs/libcurl/has.pl,
+  generate code that is checksrc compliant
 
-- [moparisthebest brought this change]
+Daniel Stenberg (3 Sep 2015)
+- gitignore: ignore more generated VC Makefiles
 
-  SSL: implement public key pinning
-  
-  Option --pinnedpubkey takes a path to a public key in DER format and
-  only connect if it matches (currently only implemented with OpenSSL).
+- projects/Windows/.gitignore: ignore generated files for release
+
+- http2: don't pass on Connection: headers
   
-  Provides CURLOPT_PINNEDPUBLICKEY for curl_easy_setopt().
+  RFC 7540 section 8.1.2.2 states: "An endpoint MUST NOT generate an
+  HTTP/2 message containing connection-specific header fields; any message
+  containing connection-specific header fields MUST be treated as
+  malformed"
   
-  Extract a public RSA key from a website like so:
-  openssl s_client -connect google.com:443 2>&1 < /dev/null | \
-  sed -n '/-----BEGIN/,/-----END/p' | openssl x509 -noout -pubkey \
-  | openssl rsa -pubin -outform DER > google.com.der
+  Closes #401
 
-- multi_runsingle: fix possible memory leak
-  
-  Coverity CID 1202837. 'newurl' can in fact be allocated even when
-  Curl_retry_request() returns failure so free it if need be.
+- curl.1: update RFC references
 
-- ares::Curl_resolver_cancel: skip checking for NULL conn
-  
-  Coverity CID 1243581. 'conn' will never be NULL here, and if it would be
-  the subsequent statement would dereference it!
+- CURLOPT_POSTREDIR.3: update RFC number and section
 
-- parseconfig: skip a NULL check
+- CURLOPT_FOLLOWLOCATION.3: mention methods for redirects
   
-  Coverity CID 1154198. This NULL check implies that the pointer _can_ be
-  NULL at this point, which it can't. Thus it is dead code. It tricks
-  static analyzers to warn about dereferencing the pointer since the code
-  seems to imply it can be NULL.
+  and some general cleaning up
 
-- [Waldek Kozba brought this change]
+- [Marcel Raad brought this change]
 
-  multi-uv.c: call curl_multi_info_read() better
+  inet_pton.c: Fix MSVC run-time check failure (2)
   
-  Improves it for low-latency cases (like the communication with
-  localhost)
-
-- tool_go_sleep: use (void) to spell out we ignore the return value
+  This fixes another run-time check failure because of a narrowing cast on
+  Visual C++.
   
-  Coverity CID 1222080.
+  Closes #408
 
-- ssh_statemach_act: split out assignment from check
+Jay Satiro (3 Sep 2015)
+- docs: Warn about any-domain cookies and multiple transfers
   
-  just a minor code style thing to make the code clearer
-
-Marc Hoersken (4 Oct 2014)
-- curl_schannel.c: Fixed possible memory or handle leak
+  - Warn that cookies without a domain are sent to any domain:
+  CURLOPT_COOKIELIST, CURLOPT_COOKIEFILE, --cookie
   
-  First try to fix possible memory leaks, in this case:
-  Only connssl->ctxt xor onnssl->cred being initialized.
+  - Note that imported Set-Cookie cookies without a domain are no longer
+  exported:
+  CURLINFO_COOKIELIST, CURLOPT_COOKIEJAR, --cookie-jar
 
-Daniel Stenberg (4 Oct 2014)
-- getparameter: remove dead code
+Steve Holme (2 Sep 2015)
+- tool_sdecls.h: Fixed compilation warning from commit 4a889441d3
   
-  Coverity CID 1061126. 'parse' will always be non-NULL here.
+  tool_sdecls.h:139 warning: comma at end of enumerator list
+
+Daniel Stenberg (2 Sep 2015)
+- opts: 8 more CURLINFO* options as stand-alone man pages
+
+- RELEASE-NOTES: synced with c764cb4add1a8
 
-- getparameter: comment a switch FALLTHROUGH
+- man-pages: more SEE ALSO links
+
+- opts: more CURLINFO_* options as stand-alone man pages
+
+Steve Holme (31 Aug 2015)
+- sasl: Only define Curl_sasl_digest_get_pair() when CRYPTO_AUTH enabled
   
-  Coverity CID 1061118. Point out that it is on purpose.
+  Introduced in commit 59f3f92ba6 this function is only implemented when
+  CURL_DISABLE_CRYPTO_AUTH is not defined. As such we shouldn't define
+  the function in the header file either.
 
-- choose_mech: fix return code
+- sasl: Updated SPN variables and comments for consistency
   
-  Coverity CID 1241950. The pointer is never NULL but it might point to
-  NULL.
+  In places the "host name" and "realm" variable was referred to as
+  "instance" whilst in others it was referred to as "host".
 
-- Curl_sec_read_msg: spell out that we ignore return code
+Daniel Stenberg (30 Aug 2015)
+- configure: check for HMAC_Update in openssl
   
-  Coverity CID 1241947. Since if sscanf() fails, the previously set value
-  remains set.
+  Turns out HMAC_Init is now deprecated in openssl master (and I spelled
+  HMAC_Init_ex wrong in previous commit)
 
-- nonblock: call with (void) to show we ignore the return code
+Steve Holme (30 Aug 2015)
+- win32: Use DES_set_odd_parity() from OpenSSL/BoringSSL by default
   
-  Coverity pointed out several of these.
+  Set HAVE_DES_SET_ODD_PARITY when using OpenSSL/BoringSSL as native
+  Windows builds don't use the autoconf tools.
 
-- parse_proxy: remove dead code.
+- des: Fixed compilation warning from commit 613e5022fe
   
-  Coverity CID 982331.
+  curl_ntlm_core.c:150: warning 'Curl_des_set_odd_parity' undefined;
+                        assuming extern returning int
 
-- Curl_debug: document switch fallthroughs
+- buildconf.bat: Fixed double blank line in 'curl manual' warning output
 
-- curl_multi_remove_handle: remove dead code
+- makefiles: Added our standard copyright header
   
-  Coverify CID 1157776. Removed a superfluous if() that always evaluated
-  true (and an else clause that never ran), and then re-indented the
-  function accordingly.
+  But kept the original author, when they were specified in a comment, as
+  the initial copyright holder.
 
-- Curl_pipeline_server_blacklisted: handle a NULL server name
-  
-  Coverity CID 1215284. The server name is extracted with
-  Curl_copy_header_value() and passed in to this function, and
-  copy_header_value can actually can fail and return NULL.
+Jay Satiro (29 Aug 2015)
+- CURLOPT_FILETIME.3: CURLINFO_FILETIME has its own manpage now
+
+Daniel Stenberg (29 Aug 2015)
+- CURLINFO_RESPONSE_CODE.3: added short description
 
-- ssh: comment "fallthrough" in switch statement
+- opts: 7 initial CURLINFO_* options as stand-alone man pages
 
-- [Jeremy Lin brought this change]
+- [Nikolai Kondrashov brought this change]
 
-  ssh: improve key file search
+  libcurl.m4: Put braces around empty if body
   
-  For private keys, use the first match from: user-specified key file
-  (if provided), ~/.ssh/id_rsa, ~/.ssh/id_dsa, ./id_rsa, ./id_dsa
+  Put braces around empty "if" body in libcurl.m4 check to avoid warning:
   
-  Note that the previous code only looked for id_dsa files. id_rsa is
-  now generally preferred, as it supports larger key sizes.
+          suggest braces around empty body in an 'if' statement
   
-  For public keys, use the user-specified key file, if provided.
-  Otherwise, try to extract the public key from the private key file.
-  This means that passing --pubkey is typically no longer required,
-  and makes the key-handling behavior more like OpenSSH.
+  and make it work with -Werror builds.
+  
+  Closes #402
 
-- CURLOPT_HTTPHEADER.3: libcurl doesn't copy the whole list
+- [Svyatoslav Mishyn brought this change]
 
-- detect_proxy: fix possible single-byte memory leak
+  curl_easy_escape.3: escape '\n'
   
-  Coverity CID 1202836. If the proxy environment variable returned an empty
-  string, it would be leaked. While an empty string is not really a proxy, other
-  logic in this function already allows a blank string to be returned so allow
-  that here to avoid the leak.
+  Closes #398
+
+- [Svyatoslav Mishyn brought this change]
 
-- multi_runsingle: fix memory leak
+  curl_easy_{escape,setopt}.3: fix example
   
-  Coverity CID 1202837. There's a potential risk that 'newurl' gets
-  overwritten when it was already pointing to allocated memory.
+  remove redundant '}'
 
-- pop3_perform_authentication: fix memory leak
+- [Sergei Nikulov brought this change]
+
+  cmake: added Windows SSL support
   
-  Coverity CID 1215287. There's a potential risk for a memory leak in
-  here, and moving the free call to be unconditional seems like a cheap
-  price to remove the risk.
+  Closes #399
 
-- imap_perform_authentication: fix memory leak
+- curl: point out the conflicting HTTP methods if used
   
-  Coverity CID 1215296. There's a potential risk for a memory leak in
-  here, and moving the free call to be unconditional seems like a cheap
-  price to remove the risk.
+  It isn't always clear to the user which options that cause the HTTP
+  methods to conflict so by spelling them out it should hopefully be
+  easier to understand why curl complains.
+
+- curl: clarify that users can only specify one _METHOD_
 
-- wait_or_timeout: return failure when Curl_poll() fails
+- [Svyatoslav Mishyn brought this change]
+
+  curl_easy_{escape,unescape}.3: "char *" vs. "const char *"
   
-  Coverity detected this. CID 1241954. When Curl_poll() returns a negative value
-  'mcode' was uninitialized. Pretty harmless since this is debug code only and
-  would at worst cause an error to _not_ be returned...
+  Closes #395
+
+Patrick Monnerat (24 Aug 2015)
+- os400: include new options in wrappers and update ILE/RPG binding.
 
-- curl.1: mention quoting in the URL section
+Daniel Stenberg (24 Aug 2015)
+- KNOWN_BUGS: #2, not reading a HEAD response-body is not a bug
   
-  and separate the example URLs with newlines
+  ... since HTTP is forbidden to return any such.
 
-Steve Holme (30 Sep 2014)
-- [Bill Nagel brought this change]
+- KNOWN_BUGS: #78 zero-length files is already fixed!
 
-  smtp: Fixed intermittent "SSL3_WRITE_PENDING: bad write retry" error
+- [Razvan Cojocaru brought this change]
+
+  getinfo: added CURLINFO_ACTIVESOCKET
   
-  This patch fixes the "SSL3_WRITE_PENDING: bad write retry" error that
-  sometimes occurs when sending an email over SMTPS with OpenSSL. OpenSSL
-  appears to require the same pointer on a write that follows a retry
-  (CURLE_AGAIN) as discussed here:
+  This patch addresses known bug #76, where on 64-bit Windows SOCKET is 64
+  bits wide, but long is only 32, making CURLINFO_LASTSOCKET unreliable.
   
-  http://stackoverflow.com/questions/2997218/why-am-i-getting-error1409f07fssl-routinesssl3-write-pending-bad-write-retr
-
-Daniel Stenberg (30 Sep 2014)
-- RELEASE-NOTES: synced with 53cbea22310f15
+  Signed-off-by: Razvan Cojocaru <rcojocaru@bitdefender.com>
 
-- file: reject paths using embedded %00
+- http2: remove dead code
   
-  Mostly because we use C strings and they end at a binary zero so we know
-  we can't open a file name using an embedded binary zero.
+  Leftovers from when we removed the private socket hash.
   
-  Reported-by: research@g0blin.co.uk
+  Coverity CID 1317365, "Logically dead code"
 
-Dan Fandrich (26 Sep 2014)
-- test506: Fixed a couple of memory leaks in test
+- ntlm: mark deliberate switch case fall-through
+  
+  Coverity CID 1317367, "Missing break in switch"
 
-Daniel Stenberg (25 Sep 2014)
-- [Yousuke Kimoto brought this change]
+- http2: on_frame_recv: get a proper 'conn' for the debug logging
+  
+  "Explicit null dereferenced (FORWARD_NULL)"
+  
+  Coverity CID 1317366
 
-  CURLOPT_COOKIELIST: Added "RELOAD" command
+- RELEASE-NOTES: synced with 2acaf3c804
 
-- [Michael Wallner brought this change]
+Dan Fandrich (23 Aug 2015)
+- tool: fix memory leak with --proto-default option
 
-  CURLOPT_POSTREDIR.3: Added availability for CURL_REDIR_POST_303
+Jay Satiro (22 Aug 2015)
+- [Nathaniel Waisbrot brought this change]
 
-- threaded-resolver: revert Curl_expire_latest() switch
+  CURLOPT_DEFAULT_PROTOCOL: added
   
-  The switch to using Curl_expire_latest() in commit cacdc27f52b was a
-  mistake and was against the advice even mentioned in that commit. The
-  comparison in asyn-thread.c:Curl_resolver_is_resolved() makes
-  Curl_expire() the suitable function to use.
+  - Add new option CURLOPT_DEFAULT_PROTOCOL to allow specifying a default
+  protocol for schemeless URLs.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1426
-  Reported-By: graysky
+  - Add new tool option --proto-default to expose
+  CURLOPT_DEFAULT_PROTOCOL.
+  
+  In the case of schemeless URLs libcurl will behave in this way:
+  
+  When the option is used libcurl will use the supplied default.
+  
+  When the option is not used, libcurl will follow its usual plan of
+  guessing from the hostname and falling back to 'http'.
 
-- libcurl docs: improvements all over
+- runtests: Allow for spaces in server-verify curl custom path
 
-Steve Holme (19 Sep 2014)
-- build: Added WinIDN build configuration options
+Daniel Stenberg (22 Aug 2015)
+- NTLM: recent boringssl brought DES_set_odd_parity back
   
-  Added initial support for WinIDN build configurations to the VC10+
-  project files.
-
-Daniel Stenberg (19 Sep 2014)
-- tutorial: signals aren't used for the threaded resolver
+  ... so improve the #ifdefs for using our local implementation.
 
-- FAQ: update the pronunciation section
+- configure: detect latest boringssl
   
-  As we weren't using the correct phonetic description and doing it correctly
-  involves funny letters that I'm sure will cause problems for people in a text
-  document so I instead rephrased it and link to a WAV file with a person
-  actually saying 'curl'.
+  Since boringssl brought back DES_set_odd_parity again, it cannot be used
+  to differentiate from boringssl. Using the OPENSSL_IS_BORINGSSL define
+  seems better anyway.
   
-  Reported-By: Dimitar Boevski
-
-- CURLOPT_COOKIE*: added more cross-references
-
-- BINDINGS: add node-libcurl
+  URL: https://android.googlesource.com/platform/external/curl/+/f551028d5caab29d4b4a4ae8c159c76c3cfd4887%5E!/
+  Original-patch-by: Bertrand Simonnet
   
-  Reported-By: Jonathan Cardoso Machado
-  URL: http://curl.haxx.se/mail/lib-2014-09/0102.html
+  Closes #393
 
-- README.http2: updated to reflect current status
+- configure: change functions to detect openssl (clones)
+  
+  ... since boringssl moved the former ones and the check started to fail.
+  
+  URL: https://android.googlesource.com/platform/external/curl/+/f551028d5caab29d4b4a4ae8c159c76c3cfd4887%5E!/
+  Original-patch-by: Bertrand Simonnet
 
-- formdata: removed unnecessary USE_SSLEAY use
+- [Alessandro Ghedini brought this change]
 
-- curlssl: make tls backend symbols use curlssl in the name
+  openssl: handle lack of server cert when strict checking disabled
+  
+  If strict certificate checking is disabled (CURLOPT_SSL_VERIFYPEER
+  and CURLOPT_SSL_VERIFYHOST are disabled) do not fail if the server
+  doesn't present a certificate at all.
+  
+  Closes #392
 
-- url: let the backend decide CURLOPT_SSL_CTX_ support
+- ftp: clear the do_more bit when the server has connected
   
-  ... to further remove specific TLS backend knowledge from url.c
+  The multi state machine would otherwise go into the DO_MORE state after
+  DO, even for the case when the FTP state machine had already performed
+  those duties, which caused libcurl to get stuck in that state and fail
+  miserably. This occured for for active ftp uploads.
+  
+  Reported-by: Patricia Muscalu
+
+- [Jactry Zeng brought this change]
 
-- vtls: have the backend tell if it supports CERTINFO
+  travis.yml: Add OS X testbot.
 
-- [Catalin Patulea brought this change]
+- [Rémy Léone brought this change]
 
-  configure: allow --with-ca-path with PolarSSL too
+  travis: Upgrading to container based build
   
-  Missed this in af45542c.
+  http://docs.travis-ci.com/user/migrating-from-legacy
   
-  Signed-off-by: Catalin Patulea <cat@vv.carleton.ca>
+  Closes #388
 
-- CURLOPT_CAPATH: return failure if set without backend support
+- RELEASE-NOTES: synced with 14ff86256b13e
 
-- [Tatsuhiro Tsujikawa brought this change]
+- [Erik Janssen brought this change]
 
-  http2: Fix busy loop when EOF is encountered
+  rtsp: stop reading empty DESCRIBE responses
   
-  Previously we did not handle EOF from underlying transport socket and
-  wrongly just returned error code CURL_AGAIN from http2_recv, which
-  caused busy loop since socket has been closed.  This patch adds the
-  code to handle EOF situation and tells the upper layer that we got
-  EOF.
+  Based-on-patch-by: Jim Hollinger
 
-Steve Holme (13 Sep 2014)
-- build: Added batch wrapper to checksrc.pl
+- [Erik Janssen brought this change]
 
-- RELEASE-NOTES: Synced with bd3df5ec6d
+  rtsp: support basic/digest authentication
 
-- [Marcel Raad brought this change]
+- [Sam Roth brought this change]
 
-  sasl_sspi: Fixed Unicode build
+  CURLMOPT_PUSHFUNCTION.3: fix argument types
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1422
-  Verified-by: Steve Holme
+  Closes #389
+  Closes #386
 
-Daniel Stenberg (12 Sep 2014)
-- libcurl-tutorial.3: fix GnuTLS link to thread-safety guidelines
-  
-  The former link was turned into a 404 at some point.
-  
-  Reported-By: Askar Safin
+- [Marcel Raad brought this change]
 
-- contributors.sh: split list of names at comma
+  inet_pton.c: Fix MSVC run-time check failure
   
-  ... to support a list of names provided in a commit message.
-
-Steve Holme (12 Sep 2014)
-- [Ulrich Telle brought this change]
-
-  ntlm: Fixed HTTP proxy authentication when using Windows SSPI
+  Visual Studio complains with a message box:
   
-  Removed ISC_REQ_* flags from calls to InitializeSecurityContext to fix
-  bug in NTLM handshake for HTTP proxy authentication.
+  "Run-Time Check Failure #1 - A cast to a smaller data type has caused a
+  loss of data.  If this was intentional, you should mask the source of
+  the cast with the appropriate bitmask.
   
-  NTLM handshake for HTTP proxy authentication failed with error
-  SEC_E_INVALID_TOKEN from InitializeSecurityContext for certain proxy
-  servers on generating the NTLM Type-3 message.
+  For example:
+  char c = (i & 0xFF);
   
-  The flag ISC_REQ_CONFIDENTIALITY seems to cause the problem according
-  to the observations and suggestions made in a bug report for the
-  QT project (https://bugreports.qt-project.org/browse/QTBUG-17322).
+  Changing the code in this way will not affect the quality of the
+  resulting optimized code."
   
-  Removing all the flags solved the problem.
+  This is because only 'val' is cast to unsigned char, so the "& 0xff" has
+  no effect.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-08/0273.html
-  Reported-by: Ulrich Telle
-  Assisted-by: Steve Holme, Daniel Stenberg
+  Closes #387
 
-Daniel Stenberg (12 Sep 2014)
-- [Ray Satiro brought this change]
+Jay Satiro (18 Aug 2015)
+- docs: Update the redirect protocols disabled by default
+  
+  - Clarify that FILE and SCP are disabled by default since 7.19.4
+  - Add that SMB and SMBS are disabled by default since 7.40.0
+  - Add CURLPROTO_SMBS to the list of protocols
 
-  newlines: fix mixed newlines to LF-only
+- gitignore: Sort for readability
   
-  I use the curl repo mainly on Windows with the typical Windows git
-  checkout which converts the LF line endings in the curl repo to CRLF
-  automatically on checkout. The automatic conversion is not done on files
-  in the repo with mixed line endings. I recently noticed some weird
-  output with projects/build-openssl.bat that I traced back to mixed line
-  endings, so I scanned the repo and there are files (excluding the
-  test data) that have mixed line endings.
+  find . -name .gitignore -print0 | xargs -i -0 sort -o '{}' '{}'
+
+Daniel Stenberg (15 Aug 2015)
+- curl_easy_getinfo.3: fix superfluous space
   
-  I used this command below to do the scan. Unfortunately it's not as easy
-  as git grep, at least not on Windows. This gets the names of all the
-  files in the repo's HEAD, gets each of those files raw from HEAD, checks
-  for mixed line endings of both LF and CRLF, and prints the name if
-  mixed. I excluded path tests/data/test* because those can have mixed
-  line endings if I understand correctly.
+  ... and changed "oriented" to "related"
   
-  for f in `git ls-tree --name-only --full-tree -r HEAD`;
-  do if [ -n "${f##tests/data/test*}" ];
-      then git show "HEAD:$f" | \
-          perl -0777 -ne 'exit 1 if /([^\r]\n.*\r\n)|(\r\n.*[^\r]\n)/';
-      if [ $? -ne 0 ];
-          then echo "$f";
-      fi;
-  fi;
-  done
+  Closes #378
 
-- [Viktor Szakáts brought this change]
+- CURLOPT_HTTP_VERSION.3: connection re-use goes before version
 
-  mk-ca-bundle.pl: converted tabs to spaces, deleted trailing spaces
+- [Daniel Kahn Gillmor brought this change]
 
-- ROADMAP: markdown eats underscores
+  curl.1: Document weaknesses in SSLv2 and SSLv3
   
-  It interprets them as italic indictors unless we backtick the word.
+  Acknowledge that SSLv3 is also widely considered to be insecure.
+  
+  Also, provide references for people who want to know more about why it's
+  insecure.
 
-- ROADMAP: tiny formatting edit for nicer web output
+Steve Holme (14 Aug 2015)
+- generate.bat: Added support for generating only the prerequisite files
 
-Steve Holme (10 Sep 2014)
-- ROADMAP.md: Updated GSSAPI authentication following 7.38.0 additions
+- generate.bat: Only call buildconf.bat if it exists
 
-- INTERNALS: Added email and updated Kerberos details
+- generate.bat: Fixed issues when ran in directories with special chars
 
-- FEATURES: Updated Kerberos details
-  
-  Added support for Kerberos 5 to the email protocols following the recent
-  additions in 7.38.0.
-  
-  Removed Kerberos 4 as this has been gone for a while now.
-
-Daniel Stenberg (10 Sep 2014)
-- [Paul Howarth brought this change]
+Daniel Stenberg (14 Aug 2015)
+- [Brad King brought this change]
 
-  openssl: build fix for versions < 0.9.8e
+  cmake: Fix CurlTests check for gethostbyname_r with 5 arguments
   
-  Bug: http://curl.haxx.se/mail/lib-2014-09/0064.html
+  Fix the check code to pass 5 arguments instead of 6.  This typo was
+  introduced by commit aebfd4cfbf (cmake: fix gethostby{addr,name}_r in
+  CurlTests, 2014-10-31).
 
-- mk-ca-bundle.pl: first, try downloading HTTPS with curl
-  
-  As a sort of step forward, this script will now first try to get the
-  data from the HTTPS URL using curl, and only if that fails it will
-  switch back to the HTTP transfer using perl's native LWP functionality.
-  To reduce the risk of this script being tricked.
+Steve Holme (14 Aug 2015)
+- * buildconf.bat: Fixed issues when ran in directories with special chars
   
-  Using HTTPS to get a cert bundle introduces a chicken-and-egg problem so
-  we can't really ever completely disable HTTP, but chances are that most
-  users already have a ca cert bundle that trusts the mozilla.org site
-  that this script downloads from.
-  
-  A future version of this script will probably switch to require a
-  dedicated "insecure" command line option to allow downloading over HTTP
-  (or unverified HTTPS).
+  Bug: https://github.com/bagder/curl/pull/379
+  Reported-by: Daniel Seither
 
-- LICENSE-MIXING: removed krb4 info
+Jay Satiro (13 Aug 2015)
+- curl_global_init_mem.3: Stronger thread safety warning
   
-  krb4 has been dropped since a while now
+  Bug: http://curl.haxx.se/mail/lib-2015-08/0016.html
+  Reported-by: Eric Ridge
 
-- bump: on the 7.38.1-DEV train now!
+Daniel Stenberg (12 Aug 2015)
+- [Svyatoslav Mishyn brought this change]
 
-- SSLCERTS: minor updates
+  curl_multi_add_handle.3: fix a typo
+  
+  "can not" => "cannot"
   
-  Edited format to look better on the web, added a "it is about trust"
-  section.
+  closes #377
 
-Version 7.38.0 (10 Sep 2014)
+- [Alessandro Ghedini brought this change]
 
-Daniel Stenberg (10 Sep 2014)
-- dist: two cmake files are no more
+  docs: fix typos
   
-  CMake/FindOpenSSL.cmake and FindZLIB.cmake are gone since 14aa8f0c117b
+  closes #376
 
-- RELEASE-NOTES: final update for 7.38.0
+- bump: start working toward 7.45.0
 
-- cookies: reject incoming cookies set for TLDs
-  
-  Test 61 was modified to verify this.
-  
-  CVE-2014-3620
-  
-  Reported-by: Tim Ruehsen
-  URL: http://curl.haxx.se/docs/adv_20140910B.html
+- THANKS: remove duplicate name
 
-- [Tim Ruehsen brought this change]
+- THANKS-filter: merge Todd's names
 
-  cookies: only use full host matches for hosts used as IP address
-  
-  By not detecting and rejecting domain names for partial literal IP
-  addresses properly when parsing received HTTP cookies, libcurl can be
-  fooled to both send cookies to wrong sites and to allow arbitrary sites
-  to set cookies for others.
-  
-  CVE-2014-3613
-  
-  Bug: http://curl.haxx.se/docs/adv_20140910A.html
+- THANKS: 13 new contributors from the 7.44.0 RELEASE-NOTES
 
-- HISTORY: fix the 1998 title position
+Version 7.44.0 (11 Aug 2015)
 
-- HISTORY: extended and now markdown
+Daniel Stenberg (11 Aug 2015)
+- RELEASE-NOTES: synced with c75a1e775061
 
-- SSLCERTS: converted to markdown
-  
-  Only minor edits to make it generate nice HTML output using markdown, as
-  this document serves both in source release tarballs as on the web site.
-  
-  URL: http://curl.haxx.se/docs/sslcerts.html
+- [Svyatoslav Mishyn brought this change]
 
-- ftp-wildcard.c: spell fix
+  curl_formget.3: correct return code
   
-  Reported-By: Frank Gevaerts
-
-- RELEASE-NOTES: synced with 921a0c22a6f
+  Closes #375
 
-- THANKS: synced with RELEASE-NOTES for 921a0c22a6f
+- [Svyatoslav Mishyn brought this change]
 
-- polarassl: avoid memset() when clearing the first byte is enough
+  libcurl-tutorial.3: fix formatting
+  
+  Closes #374
 
-- [Catalin Patulea brought this change]
+- [Svyatoslav Mishyn brought this change]
 
-  polarssl: support CURLOPT_CAPATH / --capath
-  
-  Signed-off-by: Catalin Patulea <cat@vv.carleton.ca>
+  curl_easy_recv.3: fix formatting
 
-- SECURITY: eh, make more sense!
+- [Anders Bakken brought this change]
 
-- SECURITY: how to join the curl-security list
+  http2: discard frames with no SessionHandle
+  
+  Return 0 instead of NGHTTP2_ERR_CALLBACK_FAILURE if we can't locate the
+  SessionHandle. Apparently mod_h2 will sometimes send a frame for a
+  stream_id we're finished with.
+  
+  Use nghttp2_session_get_stream_user_data and
+  nghttp2_session_set_stream_user_data to identify SessionHandles instead
+  of a hash.
+  
+  Closes #372
 
-- RELEASE-NOTES: fix the required nghttp2 version typo
+- RELEASE-NOTES: synced with 9ee40ce2aba
 
-- [Brandon Casey brought this change]
+- [Viktor Szakats brought this change]
 
-  Ensure progress.size_dl/progress.size_ul are always >= 0
-  
-  Historically the default "unknown" value for progress.size_dl and
-  progress.size_ul has been zero, since these values are initialized
-  implicitly by the calloc that allocates the curl handle that these
-  variables are a part of.  Users of curl that install progress
-  callbacks may expect these values to always be >= 0.
+  build: refer to fixed libidn versions
   
-  Currently it is possible for progress.size_dl and progress.size_ul
-  to by set to a value of -1, if Curl_pgrsSetDownloadSize() or
-  Curl_pgrsSetUploadSize() are passed a "size" of -1 (which a few
-  places currently do, and a following patch will add more).  So
-  lets update Curl_pgrsSetDownloadSize() and Curl_pgrsSetUploadSize()
-  so they make sure that these variables always contain a value that
-  is >= 0.
+  closes #371
+
+- Revert "configure: disable libidn by default"
   
-  Updates test579 and test599.
+  This reverts commit e6749055d65398315fd77f5b5b8234c5552ac2d3.
   
-  Signed-off-by: Brandon Casey <drafnel@gmail.com>
+  ... since libidn has since been fixed.
 
-Steve Holme (7 Sep 2014)
-- tests: Added test1420 to the makefile
+- [Jakub Zakrzewski brought this change]
 
-- test1420: Removed unnecessary CURLOPT setting
+  CMake: s/HAVE_GSS_API/HAVE_GSSAPI/ to match header define
+  
+  Otherwise the build only pretended to use GSS-API
+  
+  Closes #370
 
-- tests: Added more "Clear Text" authentication keywords
+- SFTP: fix range request off-by-one in size check
+  
+  Reported-by: Tim Stack
+  
+  Closes #359
 
-- tests: Updated "based on" text due to email test renumbering
+- test46: update cookie expire time
+  
+  ... since it went old and thus was expired and caused the test to fail!
 
-- tests: For consistency added --libcurl to test name
+Steve Holme (9 Aug 2015)
+- generate.bat: Use buildconf.bat for prerequisite file generation
 
-- tests: Added --libcurl for IMAP test case
+- buildconf.bat: Tidy up of comments after recent commits
 
-- multi.c: Avoid invalid memory read after free() from commit 3c8c873252
+- buildconf.bat: Added full generation of src\tool_hugehelp.c
   
-  As the current element in the list is free()d by Curl_llist_remove(),
-  when the associated connection is pending, reworked the loop to avoid
-  accessing the next element through e->next afterward.
+  Added support for generating the full man page based on code from
+  generate.bat.
 
-- multi.c: Fixed compilation warning from commit 3c8c873252
+- buildconf.bat: Added detection of groff, nroff, perl and gzip
   
-  warning: implicit conversion from enumeration type 'CURLMcode' to
-  different enumeration type 'CURLcode'
+  To allow for the full generation of tool_hugehelp.c added detection of
+  the required programs - based on code from generate.bat.
 
-- url.c: Use CURLAUTH_NONE constant rather than 0
+- buildconf.bat: Move DOS variable clean-up code to separate function
   
-  Small follow up to commit 898808fa8c to use auth constants rather than
-  hard code value when clearing picked authentication mechanism.
+  Rather than duplicate future variables, during clean-up of both success
+  and error conditions, use a common function that can be called by both.
+
+- RELEASE-NOTES: Synced with 39dcf352d2
 
-- RELEASE-NOTES: Synced with fd1ce3856a
+- buildconf.bat: Added error messages on failure
 
-Nick Zitzmann (4 Sep 2014)
-- [Vilmos Nebehaj brought this change]
+- buildconf.bat: Generate and clean files in the same order
 
-  darwinssl: Use CopyCertSubject() to check CA cert.
+- buildconf.bat: Maintain compatibility with DOS based systems
   
-  SecCertificateCopyPublicKey() is not available on iPhone. Use
-  CopyCertSubject() instead to see if the certificate returned by
-  SecCertificateCreateWithData() is valid.
+  Commit f08e30d7bc broke compatibility with DOS and non Windows NT based
+  versions of Windows due to the use of the setlocal command.
+
+Jay Satiro (9 Aug 2015)
+- CURLOPT_RESOLVE.3: Note removal support was added in 7.42
   
-  Reported-by: Toby Peterson
+  Bug: http://curl.haxx.se/mail/lib-2015-08/0019.html
+  Reported-by: Inca R
 
-Steve Holme (4 Sep 2014)
-- RELEASE-NOTES: Clarify email Kerberos support is currently via Windows SSPI
+Steve Holme (8 Aug 2015)
+- checksrc.bat: Fixed error when missing *.c and *.h files
+  
+  File Not Found
 
-Daniel Stenberg (4 Sep 2014)
-- MAIL-ETIQUETTE: "1.8 I posted, now what?"
+- checksrc.bat: Fixed incorrect 'lib\vtls' path check in commit 333c36b276
 
-- CURLOPT_CA*: better refering between *CAINFO and *CAPATH
+- checksrc.bat: Fixed error when [directory] isn't a curl source directory
   
-  ... and a minor wording edit
+  The system cannot find the file specified.
+
+- checksrc.bat: Added check for unknown arguments
 
-- THANKS: added Dennis Clarke
+- scripts: Added missing comments
+
+- scripts: Always perform setlocal and endlocal calls in pairs
   
-  Dennis Clarke from Blastwave.org for ensuring that nightly builds run
-  smooth on Solaris!
+  Ensure that there isn't a mismatch between setlocal and endlocal calls,
+  which could have happened due to setlocal being called after certain
+  error conditions were checked for.
 
-- curl_multi_cleanup: remove superfluous NULL assigns
+- scripts: Allow -help to be specified in any argument
   
-  ... as the struct is free()d in the end anyway. It was first pointed out
-  to me that one of the ->msglist assignments were supposed to have been
-  ->pending but was a copy and paste mistake when I realized none of the
-  clearing of pointers had to be there.
+  Allow the -help command line argument to be specified in any argument
+  and not just as the first.
+
+Daniel Stenberg (6 Aug 2015)
+- [juef brought this change]
 
-- multi: convert CURLM_STATE_CONNECT_PEND handling to a list
+  curl_multi_remove_handle.3: fix formatting
   
-  ... instead of scanning through all handles, stash only the actual
-  handles that are in that state in the new ->pending list and scan that
-  list only. It should be mostly empty or very short. And only used for
-  pipelining.
+  closes #366
+
+Steve Holme (6 Aug 2015)
+- README: Added notes about 'Running DLL based configurations'
   
-  This avoids a rather hefty slow-down especially notable if you add many
-  handles to the same multi handle. Regression introduced in commit
-  0f147887 (version 7.30.0).
+  ...as well as a TODO for a future enhancement to the project files.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-07/0206.html
-  Reported-by: David Meyer
+  Thanks-to: Jay Satiro
 
-- RELEASE-NOTES: synced with e608324f9f9
+- RELEASE-NOTES: Synced with cf8975387f
 
-- [Andre Heinecke brought this change]
+- buildconf.bat: Synchronise no repository error with generate.bat
 
-  polarssl: implement CURLOPT_SSLVERSION
-  
-  Forwards the setting as minimum ssl version (if set) to polarssl.  If
-  the server does not support the requested version the SSL Handshake will
-  fail.
-  
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1419
+- generate.bat: Added a check for the presence of a git repository
 
-nickzman (1 Sep 2014)
-- Merge pull request #115 from ldx/darwinsslfixpr
-  
-  darwinssl: now accepts cacert bundles in PEM format in addition to single certs
+- [Jay Satiro brought this change]
 
-Vilmos Nebehaj (1 Sep 2014)
-- Check CA certificate in curl_darwinssl.c.
+  build: Added wolfSSL configurations to VC10+ project files
   
-  SecCertificateCreateWithData() returns a non-NULL SecCertificateRef even
-  if the buffer holds an invalid or corrupt certificate. Call
-  SecCertificateCopyPublicKey() to make sure cacert is a valid
-  certificate.
+  URL: https://github.com/bagder/curl/pull/174
+
+- [Jay Satiro brought this change]
 
-Daniel Stenberg (31 Aug 2014)
-- low-speed-limit: avoid timeout flood
+  build: Added wolfSSL build script for Visual Studio projects
   
-  Introducing Curl_expire_latest(). To be used when we the code flow only
-  wants to get called at a later time that is "no later than X" so that
-  something can be checked (and another timeout be added).
+  Added the wolfSSL build script, based on build-openssl.bat, as well as
+  the property sheet and header file required for the upcoming additions
+  to the Visual Studio project files.
+
+Daniel Stenberg (6 Aug 2015)
+- CHANGES: refer to the online changelog
   
-  The low-speed logic for example could easily be made to set very many
-  expire timeouts if it would be called faster or sooner than what it had
-  set its own timer and this goes for a few other timers too that aren't
-  explictiy checked for timer expiration in the code.
+  Suggested-by: mc0e
+
+- [Isaac Boukris brought this change]
+
+  NTLM: handle auth for only a single request
   
-  If there's no condition the code that says if(time-passed >= TIME), then
-  Curl_expire_latest() is preferred to Curl_expire().
+  Currently when the server responds with 401 on NTLM authenticated
+  connection (re-used) we consider it to have failed.  However this is
+  legitimate and may happen when for example IIS is set configured to
+  'authPersistSingleRequest' or when the request goes thru a proxy (with
+  'via' header).
   
-  If there exists such a condition, it is on the other hand important that
-  Curl_expire() is used and not the other.
+  Implemented by imploying an additional state once a connection is
+  re-used to indicate that if we receive 401 we need to restart
+  authentication.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-06/0235.html
-  Reported-by: Florian Weimer
+  Closes #363
 
-- [Michael Wallner brought this change]
+Steve Holme (5 Aug 2015)
+- RELEASE-NOTES: Synced with 473807b95f
 
-  resolve: cache lookup for async resolvers
-  
-  While waiting for a host resolve, check if the host cache may have
-  gotten the name already (by someone else), for when the same name is
-  resolved by several simultanoues requests.
-  
-  The resolver thread occasionally gets stuck in getaddrinfo() when the
-  DNS or anything else is crappy or slow, so when a host is found in the
-  DNS cache, leave the thread alone and let itself cleanup the mess.
+- generate.bat: Use buildconf.bat for prerequisite file clean-up
 
-Vilmos Nebehaj (30 Aug 2014)
-- Fix CA certificate bundle handling in darwinssl.
-  
-  If the --cacert option is used with a CA certificate bundle that
-  contains multiple CA certificates, iterate through it, adding each
-  certificate as a trusted root CA.
+- buildconf.bat: Added support for file clean-up via -clean
 
-Daniel Stenberg (29 Aug 2014)
-- [Askar Safin brought this change]
+- buildconf.bat: Added progress output
 
-  getinfo-times: Typo fixed
+- buildconf.bat: Avoid using goto for file not in repository
 
-- [Askar Safin brought this change]
+Daniel Stenberg (5 Aug 2015)
+- curl_slist_append.3: add error checking to the example
 
-  libcurl.3: Typo fixed
+Steve Holme (5 Aug 2015)
+- buildconf.bat: Added display of usage text with -help
 
-- curl_formadd.3: setting CURLFORM_CONTENTSLENGTH 0 zero means strlen
+- buildconf.bat: Added exit codes for error handling
 
-- curl.1: add an example for -H
+- buildconf.bat: Added our standard copyright header
 
-- FAQ: mention -w in the 4.20 answer as well
+- buildconf.bat: Use lower-case for commands and reserved keywords
 
-- FAQ: 4.20 curl doesn't return error for HTTP non-200 responses
+- generate.bat: Only clean prerequisite files when in ALL mode
 
-- CURLOPT_NOBODY.3: clarify this option is for downloads
-  
-  When enabling CURLOPT_NOBODY, libcurl effectively switches off upload
-  mode and will do a download (without a body). This is now better
-  explained in this man page.
-  
-  Bug: http://curl.haxx.se/mail/lib-2014-08/0236.html
-  Reported-by: John Coffey
+- generate.bat: Moved error messages out of sub-routines
 
-- INTERNALS: nghttp2 must be 0.6.0 or later
+- generate.bat: More use of lower-case for commands and reserved keywords
 
-- [Tatsuhiro Tsujikawa brought this change]
+Daniel Stenberg (3 Aug 2015)
+- libcurl.3: fix a single typo
+  
+  Closes #361
 
-  Compile with latest nghttp2
+- RELEASE-NOTES: synced with c4eb10e2f06f
 
-Dan Fandrich (26 Aug 2014)
-- THANKS: removed a few more duplicates
+- SSH: three state machine fixups
+  
+  The SSH state machine didn't clear the 'rc' variable appropriately in a
+  two places which prevented it from looping the way it should. And it
+  lacked an 'else' statement that made it possible to erroneously get
+  stuck in the SSH_AUTH_AGENT state.
+  
+  Reported-by: Tim Stack
+  
+  Closes #357
 
-Daniel Stenberg (26 Aug 2014)
-- RELEASE-NOTES: synced with 007242257683a
+- curl_gssapi: remove 'const' to fix compiler warnings
   
-  ... and bumped the contributor amount after recount
+  initialization discards 'const' qualifier from pointer target type
 
-- THANKS: added 52 missing contributors
+- docs: formpost needs the full size at start of upload
   
-  I re-ran contributors.sh on all changes since 7.10 and I found these
-  contributors who are mentioned in the commits but never were added to
-  THANKS before!
+  Closes #360
+
+Steve Holme (1 Aug 2015)
+- sspi: Fix typo from left over from old code which referenced NTLM
   
-  I also removed a couple of duplicates (mostly due to different
-  spellings).
+  References to NTLM in the identity generation should have been removed
+  in commit c469941293 but not all were.
 
-- contributors: grep and sort case insensitively
+- win32: Fix compilation warnings from commit 40c921f8b8
+  
+  connect.c:953:5: warning: initializer element is not computable at load
+                   time
+  connect.c:953:5: warning: missing initializer for field 'dwMinorVersion'
+                   of 'OSVERSIONINFOEX'
+  curl_sspi.c:97:5: warning: initializer element is not computable at load
+                    time
+  curl_sspi.c:97:5: warning: missing initializer for field 'szCSDVersion'
+                    of 'OSVERSIONINFOEX'
 
-- [Michael Osipov brought this change]
+- schannel: Fix compilation warning from commit 7a8e861a56
+  
+  schannel.c:1125:5: warning: missing initializer for field 'dwMinorVersion'
+                     of 'OSVERSIONINFOEX' [-Wmissing-field-initializers
 
-  configure.ac: Add support for recent GSS-API implementations for HP-UX
+Daniel Stenberg (31 Jul 2015)
+- libcurl-thread.3: minor reformatting
+
+Jay Satiro (31 Jul 2015)
+- curl_global_init_mem.3: Warn threaded resolver needs thread safe funcs
   
-  By default, configure script assumes that libcurl will use the
-  HP-supplied GSS-API implementation which does not have krb5-config.
-  If a dev needs a more recent version which has that config script,
-  the change will allow to pass an appropriate GSSAPI_ROOT.
+  Bug: http://curl.haxx.se/mail/lib-2015-07/0149.html
+  Reported-by: Eric Ridge
 
-- CONNECT: close proxy connections that fail to CONNECT
+- libcurl-thread.3: Warn memory functions must be thread safe
   
-  This is usually due to failed auth. There's no point in us keeping such
-  a connection alive since it shouldn't be re-used anyway.
+  Bug: http://curl.haxx.se/mail/lib-2015-07/0149.html
+  Reported-by: Eric Ridge
+
+Steve Holme (31 Jul 2015)
+- RELEASE-NOTES: Synced with 8b1d00ac1a
+
+- INSTALL: Minor formatting correction in 'Legacy Windows and SSL' section
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1381
-  Reported-by: Marcel Raad
+  ...as well as some rewording.
 
-- RELEASE-NOTES: added two missing HTTP/2 bug fixes
+Kamil Dudka (30 Jul 2015)
+- http: move HTTP/2 cleanup code off http_disconnect()
+  
+  Otherwise it would never be called for an HTTP/2 connection, which has
+  its own disconnect handler.
+  
+  I spotted this while debugging <https://bugzilla.redhat.com/1248389>
+  where the http_disconnect() handler was called on an FTP session handle
+  causing 'dnf' to crash.  conn->data->req.protop of type (struct FTP *)
+  was reinterpreted as type (struct HTTP *) which resulted in SIGSEGV in
+  Curl_add_buffer_free() after printing the "Connection cache is full,
+  closing the oldest one." message.
+  
+  A previously working version of libcurl started to crash after it was
+  recompiled with the HTTP/2 support despite the HTTP/2 protocol was not
+  actually used.  This commit makes it work again although I suspect the
+  root cause (reinterpreting session handle data of incompatible protocol)
+  still has to be fixed.  Otherwise the same will happen when mixing FTP
+  and HTTP/2 connections and exceeding the connection cache limit.
   
-  And renamed all http2 references to HTTP/2 in this file
+  Reported-by: Tomas Tomecek
+  Bug: https://bugzilla.redhat.com/1248389
 
-- RELEASE-NOTES: synced with f646e9075f47
+Daniel Stenberg (30 Jul 2015)
+- [Viktor Szakats brought this change]
 
-- [Jakub Zakrzewski brought this change]
+  ABI doc: use secure URL
 
-  Cmake: Possibility to use OpenLDAP, OpenSSL, LibSSH2 on windows
+- ABI: remove the ascii logo
   
-  At this point I can build libcurl on windows. It provides at least the same
-  list of protocols as for linux build and works with our software.
+  and made the indent level to 1
 
-- [Jakub Zakrzewski brought this change]
+- libcurl-multi.3: mention curl_multi_wait
+  
+  ... and some general rewordings to improve this docs.
+  
+  Reported-by: Tim Stack
+  
+  Closes #356
 
-  Cmake: Removed repeated content from ending blocks
+Steve Holme (30 Jul 2015)
+- maketgz: Fixed some VC makefiles missing from the release tarball
   
-  They are unnecesary in modern CMake and removing them improves readability.
+  VC7, VC11, VC12 and VC14 makefiles were missing from the release
+  tarball.
 
-- [Jakub Zakrzewski brought this change]
+- RELEASE-NOTES: Synced with 2d7e165761
+
+- build: Added VC14 project files to Makefile.am
 
-  Cmake: Removed some useless empty SET statements.
+- build: Added VC14 project files
   
-  Undefined variables resolve to empty strings and we do not ever test if
-  the variable is defined thus those SETs are superfluous.
+  Updates to Makefile.am for the generation of the project files in
+  the tarball to follow.
 
-- [Jakub Zakrzewski brought this change]
+Jay Satiro (29 Jul 2015)
+- libcurl-thread.3: Clarify CURLOPT_NOSIGNAL takes long value 1L
 
-  Cmake: Removed useless comments from CMakeLists.txt
+Steve Holme (28 Jul 2015)
+- generate.bat: Use lower-case for commands and reserved keywords
   
-  They look like some relics after changes.
+  Whilst there are no coding standards for the batch files used in curl,
+  most tend to use lower-case for keywords and upper-case for variables.
 
-- [Jakub Zakrzewski brought this change]
+- build: Added initial VC14 support to generate.bat
+  
+  Visual Studio project files and updates to makefile.am to follow.
 
-  Cmake: Don't check for all headers each time
-  
-  One header at a time is the right way. Apart from that the output on
-  windows goes from:
-  ...
-  -- Looking for include files I:/src/libssh2-1.4.3/include/libssh2.h, ws2tcpip.h
-  -- Looking for include files I:/src/libssh2-1.4.3/include/libssh2.h, ws2tcpip.h
-  - found
-  -- Looking for 3 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins
-  ock2.h
-  -- Looking for 3 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins
-  ock2.h - found
-  -- Looking for 4 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., stdi
-  o.h
-  -- Looking for 4 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., stdi
-  o.h - found
-  -- Looking for 5 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wind
-  ows.h
-  -- Looking for 5 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wind
-  ows.h - found
-  -- Looking for 6 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins
-  ock.h
-  -- Looking for 6 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., wins
-  ock.h - found
-  -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/
-  filio.h
-  -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/
-  filio.h - not found
-  -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/
-  ioctl.h
-  -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/
-  ioctl.h - not found
-  -- Looking for 7 include files I:/src/libssh2-1.4.3/include/libssh2.h, ..., sys/
-  resource.h
-  ...
-  
-  To much nicer:
-  ...
-  -- Looking for ws2tcpip.h
-  -- Looking for ws2tcpip.h - found
-  -- Looking for winsock2.h
-  -- Looking for winsock2.h - found
-  -- Looking for stdio.h
-  -- Looking for stdio.h - found
-  -- Looking for windows.h
-  -- Looking for windows.h - found
-  -- Looking for winsock.h
-  -- Looking for winsock.h - found
-  -- Looking for sys/filio.h
-  -- Looking for sys/filio.h - not found
-  -- Looking for sys/ioctl.h
-  -- Looking for sys/ioctl.h - not found
-  -- Looking for sys/resource.h
+- build: Fixed missing .opensdf files from VC10+ .gitignore files
 
-- [Jakub Zakrzewski brought this change]
+- build: Use $(ProjectName) macro for curl.exe and curld.exe filenames
+  
+  This wasn't possible with the old curlsrc project filenames, but like
+  commit 2a615a2b64 and 11397eb6dd for libcurl use the built in Visual
+  Studio macros for the output filenames.
 
-  Cmake: Append OpenSSL include directory to search path
+- build: Renamed curl src Visual Studio project files
   
-  At this point I can build libcurl with OpenSSL, OpenLDAP and LibSSH2.
-  Supported protocols are at least:
-  HTTP, HTTPS, FTP, SFTP, TFTP, LDAP, LDAPS, POP3, SMTP
-  (those are the ones we have regression tests for
-  in our product's testsuite)
+  Following commit 957fcd9049 and in preparation for adding the VC14
+  project files renamed the curl source project files.
 
-- [Jakub Zakrzewski brought this change]
+Daniel Stenberg (28 Jul 2015)
+- [Jay Satiro brought this change]
 
-  Cmake: Search for liblber, LDAP SSL headers, swith for using OpenLDAP code.
+  libcurl-thread.3: Revert to stricter handle wording
+  
+  .. also update formatting and add WinSSL and wolfSSL to the SSL/TLS
+  handlers list.
 
-- [Jakub Zakrzewski brought this change]
+- [Jay Satiro brought this change]
 
-  Cmake: LibSSH2 detection and use.
+  libcurl-thread.3: Consolidate thread safety info
+  
+  This is a new document to consolidate our thread safety information from
+  several documents (curl-www:features, libcurl.3, libcurl-tutorial.3).
+  Each document's section on multi-threading will now point to this one.
 
-- [Jakub Zakrzewski brought this change]
+Steve Holme (27 Jul 2015)
+- README: Corrected formatting for 'Legacy Windows and SSL' section
+  
+  ...as well as some wording.
 
-  Cmake: Moved macros out of the main CMakeLists.txt
+- build-openssl.bat: Added support for VC14
 
-- [Jakub Zakrzewski brought this change]
+Daniel Stenberg (26 Jul 2015)
+- RELEASE-NOTES: synced with 0f645adc95390e8
 
-  Cmake: Added missing protocol-disable switches
+- test1902: attempt to make the test more reliable
   
-  They already have their defines in config.h. This makes it possible to
-  disable the protocols from command line during configure step.
+  Closes #355
 
-- [Jakub Zakrzewski brought this change]
+- comment: fix comment about adding new option support
 
-  Cmake: Made boolean defines be defined to "1" instead of "ON"
-  
-  It's by convention, for compatibility and because the comments say so.
-  Just mabe someone have written a test like "#if HAVE_XX==1"
+Jay Satiro (25 Jul 2015)
+- build-openssl.bat: Show syntax if required args are missing
 
-- [Jakub Zakrzewski brought this change]
+Daniel Stenberg (26 Jul 2015)
+- TODO: improve how curl works in a windows console window
+  
+  Closes #322 for now
 
-  Cmake: Require at least CMake 2.8.
+- 1.11 minimize dependencies with dynamicly loaded modules
   
-  CMake 2.6 is already a bit old. Many bugs have been fixed since
-  its release. We use 2.8 in our company and we have no intention
-  of polluting our environment with old software, so 2.6 would
-  not be tested. This shouldn't be a problem since all one need
-  to build CMake from source is C and C++ compiler.
+  Closes #349 for now
 
-- disconnect: don't touch easy-related state on disconnects
+Jay Satiro (25 Jul 2015)
+- tool_operate: Fix CURLOPT_SSL_OPTIONS for builds without HTTPS
   
-  This was done to make sure NTLM state that is bound to a connection
-  doesn't survive and gets used for the subsequent request - but
-  disconnects can also be done to for example make room in the connection
-  cache and thus that connection is not strictly related to the easy
-  handle's current operation.
+  - Set CURLOPT_SSL_OPTIONS only if the tool enabled an SSL option.
   
-  The http authentication state is still kept in the easy handle since all
-  http auth _except_ NTLM is connection independent and thus survive over
-  multiple connections.
+  Broken by me several days ago in 172b2be.
+  https://github.com/bagder/curl/commit/172b2be#diff-70b44ee478e58d4e1ddcf9c9a73d257b
   
-  Bug: http://curl.haxx.se/mail/lib-2014-08/0148.html
-  Reported-by: Paras S
+  Bug: http://curl.haxx.se/mail/lib-2015-07/0119.html
+  Reported-by: Dan Fandrich
 
-- curl.1: clarify --limit-rate's effect on both directions
+Daniel Stenberg (25 Jul 2015)
+- configure: check if OpenSSL linking wants -ldl
+  
+  To make it easier to link with static versions of OpenSSL, the configure
+  script now checks if -ldl is needed for linking.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1414
-  Reported-by: teo8976
+  Help-by: TJ Saunders
 
-- curl.1: mention the --post30x options within the --location desc
+- [Michael Kaufmann brought this change]
 
-Dan Fandrich (22 Aug 2014)
-- sasl: Fixed a memory leak on OOM
+  HTTP: ignore "Content-Encoding: compress"
+  
+  Currently, libcurl rejects responses with "Content-Encoding: compress"
+  when CURLOPT_ACCEPT_ENCODING is set to "". I think that libcurl should
+  treat the Content-Encoding "compress" the same as other
+  Content-Encodings that it does not support, e.g. "bzip2". That means
+  just ignoring it.
 
-Daniel Stenberg (22 Aug 2014)
-- [Frank Meier brought this change]
+- [Marcel Raad brought this change]
 
-  NTLM: ignore CURLOPT_FORBID_REUSE during NTLM HTTP auth
-  
-  Problem: if CURLOPT_FORBID_REUSE is set, requests using NTLM failed
-  since NTLM requires multiple requests that re-use the same connection
-  for the authentication to work
+  openssl: work around MSVC warning
   
-  Solution: Ignore the forbid reuse flag in case the NTLM authentication
-  handshake is in progress, according to the NTLM state flag.
+  MSVC 12 complains:
   
-  Fixed known bug #77.
+  lib\vtls\openssl.c(1554): warning C4701: potentially uninitialized local
+  variable 'verstr' used It's a false positive, but as it's normally not,
+  I have enabled warning-as-error for that warning.
 
-Steve Holme (22 Aug 2014)
-- openssl.c: Fixed longer than 79 columns
+- [Michał Fita brought this change]
 
-- openssl.c: Fixed compilation warning
+  configure: add --disable-rt option
   
-  warning: declaration of 'minor' shadows a global declaration
-
-Daniel Stenberg (21 Aug 2014)
-- [Haris Okanovic brought this change]
+  This option disables any attempts in configure to create dependency on
+  stuff requiring linking to librt.so and libpthread.so, in this case this
+  means clock_gettime(CLOCK_MONOTONIC, &mt).
+  
+  We were in need to build curl which doesn't link libpthread.so to avoid
+  the following bug:
+  https://sourceware.org/bugzilla/show_bug.cgi?id=16628.
 
-  win32: Fixed WinSock 2 #if
+Kamil Dudka (23 Jul 2015)
+- http2: verify success of strchr() in http2_send()
   
-  A conditionally compiled block in connect.c references WinSock 2
-  symbols, but used `#ifdef HAVE_WINSOCK_H` instead of `#ifdef
-  HAVE_WINSOCK2_H`.
+  Detected by Coverity.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-08/0155.html
+  Error: NULL_RETURNS:
+  lib/http2.c:1301: returned_null: "strchr" returns null (checked 103 out of 109 times).
+  lib/http2.c:1301: var_assigned: Assigning: "hdbuf" = null return value from "strchr".
+  lib/http2.c:1302: dereference: Incrementing a pointer which might be null: "hdbuf".
+  1300|
+  1301|     hdbuf = strchr(hdbuf, 0x0a);
+  1302|->   ++hdbuf;
+  1303|
+  1304|     authority_idx = 0;
 
-- Curl_disconnect: don't free the URL
+Jay Satiro (22 Jul 2015)
+- Windows: Fix VerifyVersionInfo calls
   
-  The URL is not a property of the connection so it should not be freed in
-  the connection disconnect but in the Curl_close() that frees the easy
-  handle.
+  - Fix the VerifyVersionInfo calls, which we use to test for the OS major
+  version, to also test for the minor version as well as the service pack
+  major and minor versions.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-08/0148.html
-  Reported-by: Paras S
-
-- help output: minor whitespace edits
+  MSDN: "If you are testing the major version, you must also test the
+  minor version and the service pack major and minor versions."
+  
+  https://msdn.microsoft.com/en-us/library/windows/desktop/ms725492.aspx
   
-  Should've been amended in the previous commit but wasn't due to a
-  mistake.
+  Bug: https://github.com/bagder/curl/pull/353#issuecomment-123493098
+  Reported-by: Marcel Raad <MarcelRaad@users.noreply.github.com>
 
-- [Zearin brought this change]
+- [Marcel Raad brought this change]
 
-  help output: use ≥2 spaces between option and description
-  
-  ... and some other cleanups
+  schannel: Replace deprecated GetVersion with VerifyVersionInfo
+
+Steve Holme (21 Jul 2015)
+- makefile: Added support for VC14
 
-- FAQ: some actually sometimes get paid...
+Patrick Monnerat (21 Jul 2015)
+- os400: ebcdic wrappers for new functions. Upgrade ILE/RPG bindings.
 
-Steve Holme (17 Aug 2014)
-- sasl_sspi: Fixed a memory leak with the GSSAPI base-64 decoded challenge
+- libcurl: VERSIONINFO update
+  Addition of new procedures curl_pushheader_bynum and curl_pushheader_byname
+  requires VERSIONINFO updating.
 
-- sasl_sspi: Renamed GSSAPI mutual authentication parameter
+- http2: satisfy external references even if http2 is not compiled in.
+
+Daniel Stenberg (20 Jul 2015)
+- http2: add stream != NULL checks for reliability
   
-  ...From "mutual" to "mutual_auth" which better describes what it is.
+  They should not trigger, but in case of internal problems we at least
+  avoid crashes this way.
+
+Jay Satiro (18 Jul 2015)
+- symbols-in-versions: Add new CURLSSLOPT_NO_REVOKE symbol
 
-- sasl_sspi: Corrected some of the GSSAPI security message error codes
+- SSL: Add an option to disable certificate revocation checks
   
-  Corrected a number of the error codes that can be returned from the
-  Curl_sasl_create_gssapi_security_message() function when things go
-  wrong.
+  New tool option --ssl-no-revoke.
+  New value CURLSSLOPT_NO_REVOKE for CURLOPT_SSL_OPTIONS.
   
-  It makes more sense to return CURLE_BAD_CONTENT_ENCODING when the
-  inbound security challenge can't be decoded correctly or doesn't
-  contain the KERB_WRAP_NO_ENCRYPT flag and CURLE_OUT_OF_MEMORY when
-  EncryptMessage() fails. Unfortunately the previous error code of
-  CURLE_RECV_ERROR was a copy and paste mistakes on my part and should
-  have been correct in commit 4b491c675f :(
+  Currently this option applies only to WinSSL where we have automatic
+  certificate revocation checking by default. According to the
+  ssl-compared chart there are other backends that have automatic checking
+  (NSS, wolfSSL and DarwinSSL) so we could possibly accommodate them at
+  some later point.
+  
+  Bug: https://github.com/bagder/curl/issues/264
+  Reported-by: zenden2k <zenden2k@gmail.com>
 
-- docs: Escaped single backslash
+- runtests: Allow for spaces in curl custom path
+  
+  .. also fix some typos in test's FILEFORMAT spec.
 
-- TODO: Updated following GSSAPI (Kerberos V5) additions
+- [David Woodhouse brought this change]
+
+  ntlm_wb: Fix theoretical memory leak
   
-  Updated "FTP 4.6 GSSAPI via Windows SSPI" and "SASL 14.1 Other
-  authentication mechanisms" following recent additions.
+  Static analysis indicated that my commit 9008f3d564 ("ntlm_wb: Fix
+  hard-coded limit on NTLM auth packet size") introduced a potential
+  memory leak on an error path, because we forget to free the buffer
+  before returning an error.
   
-  Added SASL 14.2 GSSAPI via GSS-API libraries.
-
-- CURLOPT_USERNAME.3: Added Kerberos V5 and NTLM domain information
+  Fix this.
   
-  This repeats what has already been documented in both the curl manpage
-  and CURLOPT_USERPWD documentation but is provided here for completeness
-  as someone may not especially read the latter when using libcurl.
+  Although actually, it never happens in practice because we never *get*
+  here with state == NTLMSTATE_TYPE1. The state is always zero. That
+  might want cleaning up in a separate patch.
+  
+  Reported-by: Terri Oda
+
+- strerror: Add CRYPT_E_REVOKED to SSPI error strings
 
-- CURLOPT_USERPWD.3: Updated following Kerberos V5 SSPI changes
+Kamil Dudka (14 Jul 2015)
+- libtest: call PR_Cleanup() on exit if NSPR is used
   
-  Added information about Kerberos V5 requiring the domain part in the
-  user name.
+  This prevents valgrind from reporting possibly lost memory that NSPR
+  uses for file descriptor cache and other globally allocated internal
+  data structures.
   
-  Mentioned that the user name can be specified in UPN format, and not
-  just in Down-Level Logon Name format, following the information
-  added in commit 7679cb3fa8 reworking the exisitng information in the
-  process.
+  Reported-by: Štefan Kremeň
 
-- docs: Added Kerberos V5 and NTLM domain information to --user
+Jay Satiro (14 Jul 2015)
+- [John Malmberg brought this change]
 
-- docs: Added Kerberos V5 to the --user SSPI current credentials usage
+  openssl: VMS support for SHA256
+  
+  setup-vms.h: More symbols for SHA256, hacks for older VAX
+  
+  openssl.h: Use OpenSSL OPENSSL_NO_SHA256 macro to allow building on VAX.
+  
+  openssl.c: Use OpenSSL version checks and OPENSSL_NO_SHA256 macro to
+  allow building on VAX and 64 bit VMS.
 
-- sasl_sspi: Tell the server we don't support a GSSAPI receive buffer
+- examples: Fix typo in multi-single.c
 
-- smtp: Added support for GSSAPI (Kerberos V5) authentication via Windows SSPI
+Daniel Stenberg (7 Jul 2015)
+- [Tatsuhiro Tsujikawa brought this change]
 
-- pop3: Added support for GSSAPI (Kerberos V5) authentication via Windows SSPI
+  http2: Fix memory leak in push header array
 
-- imap: Added support for GSSAPI (Kerberos V5) authentication via Windows SSPI
+Dan Fandrich (2 Jul 2015)
+- test2041: fixed line endings in protocol part
 
-- email: Added mutual authentication flag
+- cyassl: fixed mismatched sha256sum function prototype
 
-Daniel Stenberg (15 Aug 2014)
-- RELEASE-NOTES: synced with 0187c9e11d079
+Daniel Stenberg (1 Jul 2015)
+- [moparisthebest brought this change]
 
-- http: fix the Content-Range: parser
-  
-  ... to handle "*/[total]". Also, removed the strange hack that made
-  CURLOPT_FAILONERROR on a 416 response after a *RESUME_FROM return
-  CURLE_OK.
-  
-  Reported-by: Dimitrios Siganos
-  Bug: http://curl.haxx.se/mail/lib-2014-06/0221.html
+  SSL: Pinned public key hash support
 
-Steve Holme (14 Aug 2014)
-- email: Introduced the GSSAPI states
+- examples: provide <DESC> sections
 
-- curl_sasl_sspi.c: Fixed more compilation warnings from commit 4b491c675f
-  
-  warning: unused variable 'resp'
-  
-  warning: no previous prototype for 'Curl_sasl_gssapi_cleanup'
+- [John Malmberg brought this change]
 
-- SHA-1: 61c93383b7f6cf79d12ff99e9dced1d1cc2a7064
+  OpenVMS: VMS Software, Inc now the supplier.
   
-  * curl_sasl_sspi.c: Fixed compilation warning from commit 4b491c675f
+  setup-vms.h: Symbol case fixups submitted by Michael Steve
   
-  warning: declaration of 'result' shadows a previous local
+  build_gnv_curl_pcsi_desc.com: VSI aka as VMS Software, is now the
+  supplier of new versions of VMS.  The install kit needs to accept
+  VSI as a producer.
 
-- curl_sasl.h: Fixed compilation error from commit 4b491c675f
+Jay Satiro (30 Jun 2015)
+- multi: Move http2 push function declarations to header end
   
-  warning: 'struct kerberos5data' declared inside parameter list
+  This change necessary for binary compatibility.
   
-  Due to missing forward declaration.
+  Prior to this change test 1135 failed due to the order of functions.
 
-- urldata.h: Fixed compilation warnings from commit 3ec253532e
+- symbols-in-versions: Add new http2 push symbols
   
-  warning: extra tokens at end of #endif directive
+  Prior to this change test 1119 failed due to the missing symbols.
 
-- sasl_sspi: Added GSSAPI message functions
+Daniel Stenberg (30 Jun 2015)
+- RELEASE-NOTES: synced with e6749055d653
 
-- urldata: Introduced a GSSAPI (Kerberos V5) data structure
+- configure: disable libidn by default
   
-  Added a kerberos5data structure which is similar in nature to the
-  ntlmdata and negotiatedata structures.
-
-- sspi: Moved KERB_WRAP_NO_ENCRYPT from socks_sspi module
+  For security reasons, until there is a fix.
   
-  In preparation for the upcoming SSPI implementation of GSSAPI
-  authentication, moved the definition of KERB_WRAP_NO_ENCRYPT from
-  socks_sspi.c to curl_sspi.h allowing it to be shared amongst other
-  SSPI based code.
+  Bug: http://curl.haxx.se/mail/lib-2015-06/0143.html
+  Reported-by: Gustavo Grieco, Feist Josselin
 
-Daniel Stenberg (13 Aug 2014)
-- mk-ca-bundle.pl: add missing $
+- SSL-PROBLEMS: mention WinSSL problems in WinXP
 
-- mk-ca-bundle.pl: switched to using hg.mozilla.org
-  
-  ... as mxr.mozilla.org is due to be retired.
+- CODE_OF_CONDUCT.md: added
   
-  The new host doesn't support If-Modified-Since nor ETags, meaning that
-  the script will now defer to download and do a post-transfer checksum
-  check to see if a new output is to be generated. The new output format
-  will hold the SHA1 checksum of the source file for that purpose.
+  Just to underscore how we treat each other in this project. Nothing new
+  really, but could be useful for newcomers and outsiders to see our
+  values.
+
+- tool_header_cb: fflush the header stream
   
-  We call this version 1.22
+  Flush the header stream when -D is used so that they are sent off
+  earlier.
   
-  Reported-by: Ed Morley
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1409
+  Bug: https://github.com/bagder/curl/issues/324
+  Reported-by: Cédric Connes
+
+- [Roger Leigh brought this change]
 
-- [Jose Alf brought this change]
+  tests: Distribute CMakeLists.txt files in subdirectories
 
-  openssl: fix version report for the 0.9.8 branch
+- CURLOPT_FAILONERROR.3: mention that it closes the connection
   
-  Fixed libcurl to correctly output the newer versions of OpenSSL 0.9.8,
-  starting from openssl-0.9.8za.
+  Reported-by: bemoody
+  Bug: https://github.com/bagder/curl/issues/325
 
-- [Frank Meier brought this change]
+- curl_multi_setopt.3: alpha sort the options
 
-  create_conn: prune dead connections
-  
-  Bringing back the old functionality that was mistakenly removed when the
-  connection cache was remade. When creating a new connection, all the
-  existing ones are checked and those that are known to be dead get
-  disconnected for real and removed from the connection cache. It helps
-  the cache from holding on to very many stale connections and aids in
-  keeping down the number of system sockets in wait states.
-  
-  Help-by: Jonatan Vela <jonatan.vela@ergon.ch>
-  
-  Bug: http://curl.haxx.se/mail/lib-2014-06/0189.html
+- curl_multi_setopt.3: add the new push options
 
-Kamil Dudka (11 Aug 2014)
-- docs/SSLCERTS: update the section about NSS database
-  
-  Bug: http://curl.haxx.se/mail/lib-2014-07/0335.html
-  Reported-by: David Shaw
+- [Tatsuhiro Tsujikawa brought this change]
 
-Daniel Stenberg (11 Aug 2014)
-- [Peter Wang brought this change]
+  http2: Use nghttp2 library error code for error return value
 
-  Curl_poll + Curl_wait_ms: fix timeout return value
-  
-  Curl_poll and Curl_wait_ms require the fix applied to Curl_socket_check
-  in commits b61e8b8 and c771968:
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Harden header validation for curl_pushheader_byname
   
-  When poll or select are interrupted and coincides with the timeout
-  elapsing, the functions return -1 indicating an error instead of 0 for
-  the timeout.
+  Since we do prefix match using given header by application code
+  against header name pair in format "NAME:VALUE", and VALUE part can
+  contain ":", we have to careful about existence of ":" in header
+  parameter.  ":" should be allowed to match HTTP/2 pseudo-header field,
+  and other use of ":" in header must be treated as error, and
+  curl_pushheader_byname should return NULL.  This commit implements
+  this behaviour.
 
-Steve Holme (10 Aug 2014)
-- config-tpf.h: Fixed up line lengths > 79 characters
+- [Tatsuhiro Tsujikawa brought this change]
 
-- config-symbian.h: Fixed up line lengths > 79 characters
+  CURLMOPT_PUSHFUNCTION.3: Remove unused variable
 
-- tool_hugehelp.c.cvs: Added copyright
-  
-  Added copyright due to warning from checksrc.pl.
+- CURLMOPT_PUSHFUNCTION.3: added example
 
-- RELEASE-NOTES: Synced with cd6ecf6a89
+- http2: curl_pushheader_byname now takes a const char *
 
-- sasl_sspi: Fixed hard coded buffer for response generation
-  
-  Given the SSPI package info query indicates a token size of 4096 bytes,
-  updated to use a dynamic buffer for the response message generation
-  rather than a fixed buffer of 1024 bytes.
+- http2-serverpush.c: example code
 
-- sasl_sspi: Fixed missing free of challenge buffer on SPN failure
+- http2: free all header memory after the push callback
 
-- http_negotiate_sspi: Tidy up to remove the get_gss_name() function
-  
-  Due to the reduction of code in commit 3b924b29 of get_gss_name() the
-  function isn't necessary anymore.
+- http2: init the pushed transfer properly
 
-- http_negotiate_sspi: Use a dynamic buffer for SPN generation
-  
-  Updated to use a dynamic buffer for the SPN generation via the recently
-  introduced Curl_sasl_build_spn() function rather than a fixed buffer of
-  1024 characters, which should have been more than enough, but by using
-  the new function removes the need for another variable sname to do the
-  wide character conversion in Unicode builds.
+- http2: fixed the header accessor functions for the push callback
+
+- http2: setup the new pushed stream properly
+
+- http2: initial implementation of the push callback
 
-- sasl: Tidy up to rename SPN variable from URI
+- http2: initial HTTP/2 server push types/docs
 
-- sasl: Use a dynamic buffer for SPN generation
+- test1531: verify POSTFIELDSIZE set after add_handle
   
-  Updated Curl_sasl_create_digest_md5_message() to use a dynamic buffer
-  for the SPN generation via the recently introduced Curl_sasl_build_spn()
-  function rather than a fixed buffer of 128 characters.
+  Following the fix made in 903b6e05565bf.
 
-- sasl_sspi: Fixed SPN not being converted to wchar under Unicode builds
+- pretransfer: init state.infilesize here, not in add_handle
   
-  Curl_sasl_create_digest_md5_message() would simply cast the SPN variable
-  to a TCHAR when calling InitializeSecurityContext(). This meant that,
-  under Unicode builds, it would not be valid wide character string.
+  ... to properly support that options are set to the handle after it is
+  added to the multi handle.
   
-  Updated to use the recently introduced Curl_sasl_build_spn() function
-  which performs the correct conversion for us.
+  Bug: http://curl.haxx.se/mail/lib-2015-06/0122.html
+  Reported-by: Stefan Bühler
 
-- sasl: Introduced Curl_sasl_build_spn() for building a SPN
+Jay Satiro (21 Jun 2015)
+- [Lior Kaplan brought this change]
+
+  tool_help: fix --tlsv1 help text to use >= for TLSv1
+
+- INSTALL: Advise use of non-native SSL for Windows <= XP
   
-  Various parts of the libcurl source code build a SPN for inclusion in
-  authentication data. This information is either used by our own native
-  generation routines or passed to authentication functions in third-party
-  libraries such as SSPI. However, some of these instances use fixed
-  buffers rather than dynamically allocated ones and not all of those that
-  should, convert to wide character strings in Unicode builds.
+  Advise that WinSSL in versions <= XP will not be able to connect to
+  servers that no longer support the legacy handshakes and algorithms used
+  by those versions, and to use an alternate backend like OpenSSL instead.
   
-  Implemented a common function that generates a SPN and performs the
-  wide character conversion where necessary.
+  Bug: https://github.com/bagder/curl/issues/253
+  Reported-by: zenden2k <zenden2k@gmail.com>
 
-- sasl_sspi: Fixed memory leak with not releasing Package Info struct
+Kamil Dudka (19 Jun 2015)
+- curl_easy_setopt.3: restore contents removed by mistake
   
-  Curl_sasl_create_digest_md5_message() wouldn't free the Package Info
-  structure after QuerySecurityPackageInfo() had allocated it.
+  ... in commit curl-7_43_0-18-g570076e
 
-- [Michael Osipov brought this change]
+Daniel Stenberg (19 Jun 2015)
+- curl_easy_setopt.3: mention CURLOPT_PIPEWAIT
 
-  docs: Update SPNEGO and GSS-API related doc sections
+Jay Satiro (18 Jun 2015)
+- cookie: Fix bug in export if any-domain cookie is present
   
-  Reflect recent changes in SPNEGO and GSS-API code in the docs.
-  Update them with appropriate namings and remove visible spots for
-  GSS-Negotiate.
+  In 3013bb6 I had changed cookie export to ignore any-domain cookies,
+  however the logic I used to do so was incorrect, and would lead to a
+  busy loop in the case of exporting a cookie list that contained
+  any-domain cookies. The result of that is worse though, because in that
+  case the other cookies would not be written resulting in an empty file
+  once the application is terminated to stop the busy loop.
 
-- sspi: Minor code tidy up to standardise coding style
-  
-  Following the recent changes and in attempt to align the SSPI based
-  authentication code performed the following:
-  
-  * Use NULL and SECBUFFVERSION rather than hard coded constants.
-  * Avoid comparison of zero in if statements.
-  * Standardised the buf and desc setup code.
+Dan Fandrich (18 Jun 2015)
+- FTP: fixed compiling with --disable-proxy, broken in b88f980a
 
-- schannel: Fixed compilation warning in vtls.c
+Daniel Stenberg (18 Jun 2015)
+- tool: always provide negotiate/kerberos options
   
-  vtls.c:688:43: warning: unused parameter 'data'
+  libcurl can still be built with it, even if the tool is not. Maintain
+  independence!
 
-- tool_getparam.c: Fixed compilation warning
-  
-  warning: `orig_opt' might be used uninitialized in this function
+- TODO: Support IDNA2008
 
-- RELEASE-NOTES: Synced with 159c3aafd8
+- [Viktor Szakats brought this change]
 
-Daniel Stenberg (8 Aug 2014)
-- curl_ntlm_msgs: make < 80 columns wide
+  Makefile.m32: add support for CURL_LDFLAG_EXTRAS
+  
+  It is similar to existing CURL_CFLAG_EXTRAS, but for
+  extra linker option.
 
-Steve Holme (8 Aug 2014)
-- ntlm: Fixed hard coded buffer for SSPI based auth packet generation
+- RTSP: removed another piece of dead code
   
-  Given the SSPI package info query indicates a token size of 2888 bytes,
-  and as with the Winbind code and commit 9008f3d56, use a dynamic buffer
-  for the Type-1 and Type-3 message generation rather than a fixed buffer
-  of 1024 bytes.
+  Coverity CID 1306668
 
-- ntlm: Added support for SSPI package info query
+- openssl: fix use of uninitialized buffer
   
-  Just as with the SSPI implementations of Digest and Negotiate added a
-  package info query so that libcurl can a) return a more appropriate
-  error code when the NTLM package is not supported and b) it can be of
-  use later to allocate a dynamic buffer for the Type-1 and Type-3
-  output tokens rather than use a fixed buffer of 1024 bytes.
+  Make sure that the error buffer is always initialized and simplify the
+  use of it to make the logic easier.
+  
+  Bug: https://github.com/bagder/curl/issues/318
+  Reported-by: sneis
 
-Daniel Stenberg (7 Aug 2014)
-- http2: added some more logging for debugging stream problems
+- examples: more descriptions
 
-- [Tatsuhiro Tsujikawa brought this change]
+- examples: add descriptions with <DESC>
+  
+  Using this fixed format for example descriptions, we can generate a
+  better list on the web site.
 
-  HTTP/2: Reset promised stream, not its associated stream.
+- libcurl-errors.3: fix typo
 
-- [Tatsuhiro Tsujikawa brought this change]
+- curl_easy_setopt.3: option order doesn't matter
 
-  HTTP/2: Move :authority before non-pseudo header fields
+- openssl: fix build with BoringSSL
+  
+  OPENSSL_load_builtin_modules does not exist in BoringSSL. Regression
+  from cae43a1
 
-- http2: show the received header for better debugging
+- [Paul Howarth brought this change]
 
-- openssl: replace call to OPENSSL_config
+  openssl: Fix build with openssl < ~ 0.9.8f
   
-  OPENSSL_config() is "strongly recommended" to use but unfortunately that
-  function makes an exit() call on wrongly formatted config files which
-  makes it hard to use in some situations. OPENSSL_config() itself calls
-  CONF_modules_load_file() and we use that instead and we ignore its
-  return code!
+  The symbol SSL3_MT_NEWSESSION_TICKET appears to have been introduced at
+  around openssl 0.9.8f, and the use of it in lib/vtls/openssl.c breaks
+  builds with older openssls (certainly with 0.9.8b, which is the latest
+  older version I have to try with).
+
+- FTP: do the HTTP CONNECT for data connection blocking
   
-  Reported-by: Jan Ehrhardt
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1401
+  ** WORK-AROUND **
+  
+  The introduced non-blocking general behaviour for Curl_proxyCONNECT()
+  didn't work for the data connection establishment unless it was very
+  fast. The newly introduced function argument makes it operate in a more
+  blocking manner, more like it used to work in the past. This blocking
+  approach is only used when the FTP data connecting through HTTP proxy.
+  
+  Blocking like this is bad. A better fix would make it work more
+  asynchronously.
+  
+  Bug: https://github.com/bagder/curl/issues/278
 
-Dan Fandrich (7 Aug 2014)
-- [Fabian Keil brought this change]
+- bump: start the journey toward 7.44.0
 
-  runtests.pl: Pad test case numbers with up to three zeroes
-  
-  Test case numbers with four digits have been available for a
-  while now.
+Jay Satiro (17 Jun 2015)
+- CURLOPT_ERRORBUFFER.3: Fix example, escape backslashes
 
-Steve Holme (7 Aug 2014)
-- docs: Added Negotiate to the SSPI current credentials usage description
+- CURLOPT_ERRORBUFFER.3: Improve example
 
-- TODO: HTTP Digest via Windows SSPI
+Version 7.43.0 (17 Jun 2015)
 
-- TODO: FTP GSSAPI via Windows SSPI
+Daniel Stenberg (17 Jun 2015)
+- RELEASE-NOTES: 7.43.0 release
 
-- http_negotiate_sspi: Fixed specific username and password not working
-  
-  Bug: http://curl.haxx.se/mail/lib-2014-06/0224.html
-  Reported-by: Leonardo Rosati
+- THANKS: updated with 7.43.0 names
+
+- [Kamil Dudka brought this change]
 
-- http_negotiate_sspi: Fixed endless unauthorized loop in commit 6bc76194e8
+  http: do not leak basic auth credentials on re-used connections
   
-  If the server rejects our authentication attempt and curl hasn't
-  called CompleteAuthToken() then the status variable will be
-  SEC_I_CONTINUE_NEEDED and not SEC_E_OK.
+  CVE-2015-3236
   
-  As such the existing detection mechanism for determining whether or not
-  the authentication process has finished is not sufficient.
+  This partially reverts commit curl-7_39_0-237-g87c4abb
   
-  However, the WWW-Authenticate: Negotiate header line will not contain
-  any data when the server has exhausted the negotiation, so we can use
-  that coupled with the already allocated context pointer.
-
-Daniel Stenberg (5 Aug 2014)
-- RELEASE-NOTES: synced with 5b37db44a3eb
+  Reported-by: Tomas Tomecek, Kamil Dudka
+  Bug: http://curl.haxx.se/docs/adv_20150617A.html
 
-Dan Fandrich (5 Aug 2014)
-- parsedate.c: fix the return code for an overflow edge condition
+- [Kamil Dudka brought this change]
 
-Daniel Stenberg (5 Aug 2014)
-- [Toby Peterson brought this change]
+  test2040: verify basic auth on re-used connections
 
-  darwinssl: don't use strtok()
+- SMB: rangecheck values read off incoming packet
   
-  The GetDarwinVersionNumber() function uses strtok, which is not
-  thread-safe.
-
-- Curl_ossl_version: adapted to detect BoringSSL
+  CVE-2015-3237
+  
+  Detected by Coverity. CID 1299430.
   
-  This seems to be the way it should work. Right now we can't build with
-  BoringSSL and try this out properly due to a minor API breakage.
+  Bug: http://curl.haxx.se/docs/adv_20150617B.html
 
-- Curl_ossl_version: detect and show libressl
+Jay Satiro (17 Jun 2015)
+- schannel: schannel_recv overhaul
+  
+  This commit is several drafts squashed together. The changes from each
+  draft are noted below. If any changes are similar and possibly
+  contradictory the change in the latest draft takes precedence.
+  
+  Bug: https://github.com/bagder/curl/issues/244
+  Reported-by: Chris Araman
+  
+  %%
+  %% Draft 1
+  %%
+  - return 0 if len == 0. that will have to be documented.
+  - continue on and process the caches regardless of raw recv
+  - if decrypted data will be returned then set the error code to CURLE_OK
+  and return its count
+  - if decrypted data will not be returned and the connection has closed
+  (eg nread == 0) then return 0 and CURLE_OK
+  - if decrypted data will not be returned and the connection *hasn't*
+  closed then set the error code to CURLE_AGAIN --only if an error code
+  isn't already set-- and return -1
+  - narrow the Win2k workaround to only Win2k
+  
+  %%
+  %% Draft 2
+  %%
+  - Trying out a change in flow to handle corner cases.
+  
+  %%
+  %% Draft 3
+  %%
+  - Back out the lazier decryption change made in draft2.
   
-  LibreSSL is otherwise OpenSSL API compliant (so far)
+  %%
+  %% Draft 4
+  %%
+  - Some formatting and branching changes
+  - Decrypt all encrypted cached data when len == 0
+  - Save connection closed state
+  - Change special Win2k check to use connection closed state
+  
+  %%
+  %% Draft 5
+  %%
+  - Default to CURLE_AGAIN in cleanup if an error code wasn't set and the
+  connection isn't closed.
+  
+  %%
+  %% Draft 6
+  %%
+  - Save the last error only if it is an unrecoverable error.
+  
+  Prior to this I saved the last error state in all cases; unfortunately
+  the logic to cover that in all cases would lead to some muddle and I'm
+  concerned that could then lead to a bug in the future so I've replaced
+  it by only recording an unrecoverable error and that state will persist.
+  
+  - Do not recurse on renegotiation.
+  
+  Instead we'll continue on to process any trailing encrypted data
+  received during the renegotiation only.
+  
+  - Move the err checks in cleanup after the check for decrypted data.
+  
+  In either case decrypted data is always returned but I think it's easier
+  to understand when those err checks come after the decrypted data check.
+  
+  %%
+  %% Draft 7
+  %%
+  - Regardless of len value go directly to cleanup if there is an
+  unrecoverable error or a close_notify was already received. Prior to
+  this change we only acknowledged those two states if len != 0.
+  
+  - Fix a bug in connection closed behavior: Set the error state in the
+  cleanup, because we don't know for sure it's an error until that time.
+  
+  - (Related to above) In the case the connection is closed go "greedy"
+  with the decryption to make sure all remaining encrypted data has been
+  decrypted even if it is not needed at that time by the caller. This is
+  necessary because we can only tell if the connection closed gracefully
+  (close_notify) once all encrypted data has been decrypted.
+  
+  - Do not renegotiate when an unrecoverable error is pending.
+  
+  %%
+  %% Draft 8
+  %%
+  - Don't show 'server closed the connection' info message twice.
+  
+  - Show an info message if server closed abruptly (missing close_notify).
 
-- [Tatsuhiro Tsujikawa brought this change]
+Daniel Stenberg (16 Jun 2015)
+- [Paul Oliver brought this change]
 
-  HTTP/2: Fix infinite loop in readwrite_data()
+  Fix typo in docs
   
-  To prevent infinite loop in readwrite_data() function when stream is
-  reset before any response body comes, reset closed flag to false once
-  it is evaluated to true.
+  s/curret/current/
 
-Dan Fandrich (3 Aug 2014)
-- gtls: only define Curl_gtls_seed if Nettle is not being used
+- [Viktor Szakats brought this change]
 
-- ssl: provide Curl_ssl_backend even if no SSL library is available
+  docs: update URLs
 
-Daniel Stenberg (2 Aug 2014)
-- [Tatsuhiro Tsujikawa brought this change]
+- RELEASE-NOTES: synced with f29f2cbd00dbe5f
 
-  HTTP2: Support expect: 100-continue
-  
-  "Expect: 100-continue", which was once deprecated in HTTP/2, is now
-  resurrected in HTTP/2 draft 14.  This change adds its support to
-  HTTP/2 code.  This change also includes stricter header field
-  checking.
+- [Viktor Szakats brought this change]
 
-- CURLOPT_SSL_VERIFYPEER.3. add a warning about disabling it
+  README: use secure protocol for Git repository
 
-- FEATURES: minor update
+- [Viktor Szakats brought this change]
 
-- openssl: make ossl_send return CURLE_OK better
-  
-  Previously it only returned a CURLcode for errors, which is when it
-  returns a different size than what was passed in to it.
-  
-  The http2 code only checked the curlcode and thus failed.
+  HTTP2.md: use SSL/TLS IETF URLs
 
-- RELEASE-NOTES: synced with 7bb4c8cadb5d0
+- [Viktor Szakats brought this change]
 
-- [Michael Wallner brought this change]
+  LICENSE-MIXING: update URLs
+  
+  * use SSL/TLS where available
+  * follow permanent redirects
 
-  CURLOPT_HEADEROPT.3: typo: do -> to
+- LICENSE-MIXING: refreshed
 
-- [Marcel Raad brought this change]
+- curl_easy_duphandle: see also *reset
 
-  schannel: use CryptGenRandom for random numbers
+- rtsp_do: fix DEAD CODE
   
-  This function is available for every Windows version since Windows 95/NT.
+  "At condition p_request, the value of p_request cannot be NULL."
   
-  reference:
-  http://msdn.microsoft.com/en-us/library/windows/desktop/aa379942.aspx
+  Coverity CID 1306668.
 
-- curl_version_info.3: 'ssl_version_num' is always 0
+- security:choose_mech fix DEAD CODE warning
   
-  ... and has been so since 2005
-
-- ssl: generalize how the ssl backend identifier is set
+  ... by removing the "do {} while (0)" block.
   
-  Each backend now defines CURL_SSL_BACKEND accordingly. Added the *AXTLS
-  one which was missing previously.
+  Coverity CID 1306669
 
-Dan Fandrich (31 Jul 2014)
-- axtls: define curlssl_random using axTLS's PRNG
+- curl.1: netrc is in man section 5
 
-- cyassl: fix the test for ASN_NO_SIGNER_E
+- curl.1: small format fix
   
-  It's an enum so a macro test won't work. The CyaSSL changelog doesn't
-  say exactly when this error code was introduced, but it's likely
-  to be 2.7.0.
+  use \fI-style instead of .BR for references
 
-- cyassl: use RNG_GenerateBlock to generate a good random number
+- urldata: store POST size in state.infilesize too
+  
+  ... to simplify checking when PUT _or_ POST have completed.
+  
+  Reported-by: Frank Meier
+  Bug: http://curl.haxx.se/mail/lib-2015-06/0019.html
 
-- opts: fixed some typos
+Dan Fandrich (14 Jun 2015)
+- test1530: added http to required features
 
-- smtp: fixed a segfault during test 1320 torture test
-  
-  Under these circumstances, the connection hasn't been fully established
-  and smtp_connect hasn't been called, yet smtp_done still calls the state
-  machine which dereferences the NULL conn pointer in struct pingpong.
+Jay Satiro (14 Jun 2015)
+- [Drake Arconis brought this change]
 
-Daniel Stenberg (30 Jul 2014)
-- vtls: repair build without TLS support
-  
-  ... by defining Curl_ssl_random() properly
+  build: Fix typo from OpenSSL 1.0.2 version detection fix
 
-- polarssl: provide a (weak) random function
-  
-  This now provides a weak random function since PolarSSL doesn't have a
-  quick and easy way to provide a good one. It does however provide the
-  framework to make one so it _can_ and _should_ be done...
+- [Drake Arconis brought this change]
 
-- [Michael Wallner brought this change]
+  build: Properly detect OpenSSL 1.0.2 when using configure
 
-  curl_tlsinfo -> curl_tlssessioninfo
+- curl_multi_info_read.3: fix example formatting
 
-- cyassl: use the default (weeker) random
-  
-  I couldn't find any dedicated function in its API to get a "good" random
-  with.
+Daniel Stenberg (13 Jun 2015)
+- BINDINGS: there's a new R binding in town!
+
+- BINDINGS: added the Xojo binding
+
+Jay Satiro (11 Jun 2015)
+- [Joel Depooter brought this change]
 
-- cyassl: made it compile with version 2.0.6 again
+  schannel: Add support for optional client certificates
   
-  ASN_NO_SIGNER_E didn't exist back then!
+  Some servers will request a client certificate, but not require one.
+  This change allows libcurl to connect to such servers when using
+  schannel as its ssl/tls backend. When a server requests a client
+  certificate, libcurl will now continue the handshake without one,
+  rather than terminating the handshake. The server can then decide
+  if that is acceptable or not. Prior to this change, libcurl would
+  terminate the handshake, reporting a SEC_I_INCOMPLETE_CREDENTIALS
+  error.
 
-- vtls: make the random function mandatory in the TLS backend
+Daniel Stenberg (11 Jun 2015)
+- curl_easy_cleanup.3: provide more SEE ALSO
+
+- debug: remove http2 debug leftovers
+
+- VERSIONS: now using markdown
+
+- RELEASE-PROCEDURE: remove ascii logo at the top of file
+
+- INTERNALS: absorbed docs/LIBCURL-STRUCTS
+
+- INTERNALS: cat lib/README* >> INTERNALS
   
-  To force each backend implementation to really attempt to provide proper
-  random. If a proper random function is missing, then we can explicitly
-  make use of the default one we use when TLS support is missing.
+  and a conversion to markdown. Removed the lib/README.* files. The idea
+  being to move toward having INTERNALS as the one and only "book" of
+  internals documentation.
   
-  This commit makes sure it works for darwinssl, gnutls, nss and openssl.
+  Added a TOC to top of the document.
 
-- libcurl.m4: include the standard source header
+Jay Satiro (8 Jun 2015)
+- openssl: LibreSSL and BoringSSL do not use TLS_client_method
   
-  ... with permission from David Shaw
-
-Kamil Dudka (28 Jul 2014)
-- nss: do not check the version of NSS at run time
+  Although OpenSSL 1.1.0+ deprecated SSLv23_client_method in favor of
+  TLS_client_method LibreSSL and BoringSSL didn't and still use
+  SSLv23_client_method.
   
-  The minimal required version of NSS is 3.14.x so it does not make sense
-  to check for NSS 3.12.0+ at run time.
+  Bug: https://github.com/bagder/curl/commit/49a6642#commitcomment-11578009
+  Reported-by: asavah@users.noreply.github.com
 
-Daniel Stenberg (28 Jul 2014)
-- [Anthon Pang brought this change]
+Daniel Stenberg (9 Jun 2015)
+- RELEASE-NOTES: synced with 20ac3458068
 
-  curl.h: bring back CURLE_OBSOLETE16
+- CURLOPT_OPENSOCKETFUNCTION: return error at once
   
-  Removing defines, even obsolete ones that haven't been used for a very
-  long time, still break a lot of applications.
+  When CURL_SOCKET_BAD is returned in the callback, it should be treated
+  as an error (CURLE_COULDNT_CONNECT) if no other socket is subsequently
+  created when trying to connect to a server.
   
-  Bug: https://github.com/bagder/curl/pull/106
+  Bug: http://curl.haxx.se/mail/lib-2015-06/0047.html
+
+- fopen.c: fix a few compiler warnings
 
-Dan Fandrich (26 Jul 2014)
-- [Fabian Keil brought this change]
+- [Ville Skyttä brought this change]
 
-  tests: Fix a couple of incomplete response lines
+  docs: Spelling fixes
 
-- [Fabian Keil brought this change]
+- [Ville Skyttä brought this change]
 
-  runtests.pl: Remove filteroff() which hasn't been used since 2001
+  docs: man page indentation and syntax fixes
 
-- [Fabian Keil brought this change]
+Linus Nielsen (8 Jun 2015)
+- help: Add --proxy-service-name and --service-name to the --help output
 
-  runtests.pl: Don't expect $TESTDIR/DISABLED to exist
+Jay Satiro (7 Jun 2015)
+- openssl: Fix verification of server-sent legacy intermediates
   
-  If a non-standard $TESTDIR is used the file may not be necessary.
+  - Try building a chain using issuers in the trusted store first to avoid
+  problems with server-sent legacy intermediates.
   
-  Previously a "missing" file resulted in the warning:
-  readline() on closed filehandle D at ./runtests.pl line 4940.
+  Prior to this change server-sent legacy intermediates with missing
+  legacy issuers would cause verification to fail even if the client's CA
+  bundle contained a valid replacement for the intermediate and an
+  alternate chain could be constructed that would verify successfully.
+  
+  https://rt.openssl.org/Ticket/Display.html?id=3621&user=guest&pass=guest
 
-- [Fabian Keil brought this change]
+Daniel Stenberg (5 Jun 2015)
+- BINDINGS: update several URLs
+  
+  Stop linking to the curl.haxx.se anchor pages, they are usually only
+  themselves pointers to the real page so better point there directly
+  instead.
 
-  getpart.pm: Fix a comment typo
+- BINDINGS: the curl-rust binding
 
-Daniel Stenberg (25 Jul 2014)
-- c-ares: fix build without IPv6 support
+- curl.h: add CURL_HTTP_VERSION_2
   
-  Bug: http://curl.haxx.se/mail/lib-2014-07/0337.html
-  Reported-by: Spork Schivago
+  The protocol is named "HTTP/2" after all. It is an alias for the
+  existing CURL_HTTP_VERSION_2_0 enum.
 
-- Curl_base64url_encode: unit-tested in 1302
-
-- base64: added Curl_base64url_encode()
+- openssl: removed error string #ifdef
   
-  This is now used by the http2 code. It has two different symbols at the
-  end of the base64 table to make the output "url safe".
+  ERR_error_string_n() was introduced in 0.9.6, no need to #ifdef anymore
+
+- openssl: removed USERDATA_IN_PWD_CALLBACK kludge
   
-  Bug: https://github.com/tatsuhiro-t/nghttp2/issues/62
+  Code for OpenSSL 0.9.4 serves no purpose anymore!
 
-- [Marcel Raad brought this change]
+- openssl: remove SSL_get_session()-using code
+  
+  It was present for OpenSSL 0.9.5 code but we only support 0.9.7 or
+  later.
 
-  SSPI Negotiate: Fix 3 memory leaks
+- openssl: remove dummy callback use from SSL_CTX_set_verify()
   
-  Curl_base64_decode allocates the output string by itself and two other
-  strings were not freed either.
+  The existing callback served no purpose.
 
-- symbols: CURL_VERSION_GSSNEGOTIATE is deprecated
+- LIBCURL-STRUCTS: clarify for multiplexing
 
-- test1013.pl: GSS-Negotiate doesn't exist as a feature anymore
+Jay Satiro (3 Jun 2015)
+- cookie: Stop exporting any-domain cookies
+  
+  Prior to this change any-domain cookies (cookies without a domain that
+  are sent to any domain) were exported with domain name "unknown".
+  
+  Bug: https://github.com/bagder/curl/issues/292
 
-- [Sergey Nikulov brought this change]
+Daniel Stenberg (3 Jun 2015)
+- RELEASE-PROCEDURE: refreshed 'coming dates'
 
-  libtest: fixed duplicated line in Makefile
+Jay Satiro (2 Jun 2015)
+- curl_setup: Change fopen text macros to use 't' for MSDOS
   
-  Bug: https://github.com/bagder/curl/pull/105
+  Bug: https://github.com/bagder/curl/pull/258#issuecomment-107915198
+  Reported-by: Gisle Vanem
 
-Patrick Monnerat (23 Jul 2014)
-- GSSAPI: remove useless *_MECHANISM defines.
+Daniel Stenberg (2 Jun 2015)
+- curl_multi_timeout.3: added example
 
-Daniel Stenberg (23 Jul 2014)
-- findprotocol: show unsupported protocol within quotes
-  
-  ... to aid when for example prefixed with a space or other weird
-  character.
+- curl_multi_perform.3: added example
 
-Patrick Monnerat (23 Jul 2014)
-- GSSAPI: private export mechanisms OIDs. OS400: Make RPG binding up to date.
+- curl_multi_info_read.3: added example
 
-Daniel Stenberg (23 Jul 2014)
-- [Marcel Raad brought this change]
+- checksrc: detect fopen() for text without the FOPEN_* macros
+  
+  Follow-up to e8423f9ce150 with discussionis in
+  https://github.com/bagder/curl/pull/258
+  
+  This check scans for fopen() with a mode string without 'b' present, as
+  it may indicate that an FOPEN_* define should rather be used.
+
+- curl_getdate.3: update RFC reference
 
-  conncache: fix compiler warning
+Jay Satiro (1 Jun 2015)
+- curl_setup: Add macros for FOPEN_READTEXT, FOPEN_WRITETEXT
   
-  warning C4267: '=' : conversion from 'size_t' to 'long', possible loss
-  of data
+  - Change fopen calls to use FOPEN_READTEXT instead of "r" or "rt"
+  - Change fopen calls to use FOPEN_WRITETEXT instead of "w" or "wt"
   
-  The member connection_id of struct connectdata is a long (always a
-  32-bit signed integer on Visual C++) and the member next_connection_id
-  of struct conncache is a size_t, so one of them should be changed to
-  match the other.
+  This change is to explicitly specify when we need to read/write text.
+  Unfortunately 't' is not part of POSIX fopen so we can't specify it
+  directly. Instead we now have FOPEN_READTEXT, FOPEN_WRITETEXT.
   
-  This patch the size_t in struct conncache to long (the less invasive
-  change as that variable is only ever used in a single code line).
+  Prior to this change we had an issue on Windows if an application that
+  uses libcurl overrides the default file mode to binary. The default file
+  mode in Windows is normally text mode (translation mode) and that's what
+  libcurl expects.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1399
+  Bug: https://github.com/bagder/curl/pull/258#issuecomment-107093055
+  Reported-by: Orgad Shaneh
 
-- RELEASE-NOTES: synced with 81cd24adb8b
+Daniel Stenberg (1 Jun 2015)
+- http2-upload.c: use PIPEWAIT for playing HTTP/2 better
 
-- http2: more and better error checking
+- http2-download: check for CURLPIPE_MULTIPLEX properly
   
-  1 - fixes the warnings when built without http2 support
-  
-  2 - adds CURLE_HTTP2, a new error code for errors detected by nghttp2
-  basically when they are about http2 specific things.
+  Bug: http://curl.haxx.se/mail/lib-2015-06/0001.html
+  Reported-by: Rafayel Mkrtchyan
+
+- [Isaac Boukris brought this change]
 
-Dan Fandrich (23 Jul 2014)
-- cyassl.c: return the correct error code on no CA cert
+  HTTP-NTLM: fail auth on connection close instead of looping
   
-  CyaSSL 3.0.0 returns a unique error code if no CA cert is available,
-  so translate that into CURLE_SSL_CACERT_BADFILE when peer verification
-  is requested.
+  Bug: https://github.com/bagder/curl/issues/256
 
-Daniel Stenberg (23 Jul 2014)
-- symbols-in-versions: new SPNEGO/GSS-API symbols in 7.38.0
+- 5.6 Refuse "downgrade" redirects
 
-- test1013.pl: remove SPNEGO/GSS-API tweaks
-  
-  No longer necessary after Michael Osipov's rework
+- README.pingpong: removed
 
-- http_negotiate: remove unused variable
+- ROADMAP: remove HTTP/2 multiplexing - its here now
 
-- [Michael Osipov brought this change]
+- HTTP2.md: formatted properly
 
-  docs: Improve inline GSS-API naming in code documentation
+- HTTP2: moved docs into docs/ and make it markdown
 
-- [Michael Osipov brought this change]
+- README.http2: refreshed and added multiplexing info
 
-  curl.h/features: Deprecate GSS-Negotiate macros due to bad naming
-  
-  - Replace CURLAUTH_GSSNEGOTIATE with CURLAUTH_NEGOTIATE
-  - CURL_VERSION_GSSNEGOTIATE is deprecated which
-    is served by CURL_VERSION_SSPI, CURL_VERSION_GSSAPI and
-    CURUL_VERSION_SPNEGO now.
-  - Remove display of feature 'GSS-Negotiate'
+- dist: add the http2 examples
 
-- [Michael Osipov brought this change]
+- http2 examples: clean up some comments
 
-  configure/features: Add feature and version info for GSS-API and SPNEGO
+- examples: added two programs doing multiplexed HTTP/2
 
-- [Michael Osipov brought this change]
+- scripts: moved contributors.sh and contrithanks.sh into subdir
+
+- RELEASE-NOTES: synced with c005790ff1c0a
+
+- [Daniel Melani brought this change]
+
+  openssl: typo in comment
 
-  HTTP: Remove checkprefix("GSS-Negotiate")
+Jay Satiro (27 May 2015)
+- openssl: Use TLS_client_method for OpenSSL 1.1.0+
   
-  That auth mech has never existed neither on MS nor on Unix side.
-  There is only Negotiate over SPNEGO.
+  SSLv23_client_method is deprecated starting in OpenSSL 1.1.0. The
+  equivalent is TLS_client_method.
+  
+  https://github.com/openssl/openssl/commit/13c9bb3#diff-708d3ae0f2c2973b272b811315381557
 
-- [Michael Osipov brought this change]
+Daniel Stenberg (26 May 2015)
+- FAQ: How do I port libcurl to my OS?
 
-  curl_gssapi: Add macros for common mechs and pass them appropriately
+Jay Satiro (25 May 2015)
+- CURLOPT_COOKIELIST.3: Explain Set-Cookie without a domain
+  
+  Document that if Set-Cookie is used without a domain then the cookie is
+  sent for any domain and will not be modified.
   
-  Macros defined: KRB5_MECHANISM and SPNEGO_MECHANISM called from
-  HTTP, FTP and SOCKS on Unix
+  Bug: http://curl.haxx.se/mail/lib-2015-05/0137.html
+  Reported-by: Alexander Dyagilev
 
-- CONNECT: Revert Curl_proxyCONNECT back to 7.29.0 design
+Daniel Stenberg (25 May 2015)
+- [Tatsuhiro Tsujikawa brought this change]
+
+  http2: Copy data passed in Curl_http2_switched into HTTP/2 connection buffer
   
-  This reverts commit cb3e6dfa3511 and instead fixes the problem
-  differently.
+  Previously, after seeing upgrade to HTTP/2, we feed data followed by
+  upgrade response headers directly to nghttp2_session_mem_recv() in
+  Curl_http2_switched().  But it turns out that passed buffer, mem, is
+  part of stream->mem, and callbacks called by
+  nghttp2_session_mem_recv() will write stream specific data into
+  stream->mem, overwriting input data.  This will corrupt input, and
+  most likely frame length error is detected by nghttp2 library.  The
+  fix is first copy the passed data to HTTP/2 connection buffer,
+  httpc->inbuf, and call nghttp2_session_mem_recv().
+
+Jay Satiro (24 May 2015)
+- CURLOPT_COOKIE.3: Explain that the cookies won't be modified
   
-  The reverted commit addressed a test failure in test 1021 by simplifying
-  and generalizing the code flow in a way that damaged the
-  performance. Now we modify the flow so that Curl_proxyCONNECT() again
-  does as much as possible in one go, yet still do test 1021 with and
-  without valgrind. It failed due to mistakes in the multi state machine.
+  The CURLOPT_COOKIE doc says it "sets the cookie header explicitly in the
+  outgoing request(s)." However there seems to be some user confusion
+  about cookie modification. Document that the cookies set by this option
+  are not modified by the cookie engine.
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1397
-  Reported-by: Paul Saab
+  Bug: http://curl.haxx.se/mail/lib-2015-05/0115.html
+  Reported-by: Alexander Dyagilev
 
-- [Marcel Raad brought this change]
+- CURLOPT_COOKIELIST.3: Add example
 
-  url.c: use the preferred symbol name: *READDATA
+Dan Fandrich (24 May 2015)
+- testcurl.pl: use rel2abs to make the source directory absolute
   
-  with CURL_NO_OLDIES defined, it doesn't compile because this deprecated
-  symbol (*INFILE) is used
-  
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1398
+  This function makes a platform-specific absolute path which uses
+  backslashes on Windows. This form works when passing it on the
+  command-line, as well as if the source is on another drive.
 
-Dan Fandrich (19 Jul 2014)
-- [Alessandro Ghedini brought this change]
+- conncache: fixed memory leak on OOM (torture tests)
+
+Daniel Stenberg (24 May 2015)
+- perl: remove subdir, not touched in 9 years
 
-  CURLOPT_CHUNK_BGN_FUNCTION: fix typo
+- log2changes.pl: moved to scripts/
 
-Kamil Dudka (18 Jul 2014)
 - [Alessandro Ghedini brought this change]
 
-  build: link curl to NSS libraries when NSS support is enabled
+  scripts: add zsh.pl for generating zsh completion
+
+Dan Fandrich (23 May 2015)
+- test1510: another flaky test
+
+Daniel Stenberg (22 May 2015)
+- security: fix "Unchecked return value" from sscanf()
   
-  This fixes a build failure on Debian caused by commit
-  24c3cdce88f39731506c287cb276e8bf4a1ce393.
+  By (void) prefixing it and adding a comment. Did some minor related
+  cleanups.
   
-  Bug: http://curl.haxx.se/mail/lib-2014-07/0209.html
+  Coverity CID 1299423.
 
-Steve Holme (17 Jul 2014)
-- build: Removed unnecessary XML Documentation file directive from VC8 to VC12
+- security: simplify choose_mech
   
-  The curl tool project files for VC8 to VC12 would set this setting to
-  $(IntDir) which is the Visual Studio default value. To avoid confusion
-  when viewing settings from within Visual Studio and for consistency
-  with the libcurl project files removed this setting.
+  Coverity CID 1299424 identified dead code because of checks that could
+  never equal true (if the mechanism's name was NULL).
   
-  Conflicts:
-       projects/Windows/VC10/src/curlsrc.tmpl
-       projects/Windows/VC11/src/curlsrc.tmpl
-       projects/Windows/VC12/src/curlsrc.tmpl
-       projects/Windows/VC8/src/curlsrc.tmpl
-       projects/Windows/VC9/src/curlsrc.tmpl
+  Simplified the function by removing a level of pointers and removing the
+  loop and array that weren't used.
 
-- build: Removed unnecessary Precompiled Header file directive in VC7 to VC12
+- RTSP: catch attempted unsupported requests better
   
-  The curl tool project files for VC7 to VC12 would set this settings to
-  $(IntDir)$(TargetName).pch which is the Visual Studio default value. To
-  avoid confusion when viewing settings from within Visual Studio and for
-  consistency with the libcurl project files removed this setting.
+  Replace use of assert with code that properly catches bad input at
+  run-time even in non-debug builds.
   
-  Conflicts:
-       projects/Windows/VC10/src/curlsrc.tmpl
-       projects/Windows/VC11/src/curlsrc.tmpl
-       projects/Windows/VC12/src/curlsrc.tmpl
-       projects/Windows/VC8/src/curlsrc.tmpl
-       projects/Windows/VC9/src/curlsrc.tmpl
+  This flaw was sort of detected by Coverity CID 1299425 which claimed the
+  "case RTSPREQ_NONE" was dead code.
 
-- build: Removed unnecessary ASM and Object file directives in VC7 to VC12
+- share_init: fix OOM crash
   
-  The curl tool project files for VC7 to VC12 would set these settings to
-  $(IntDir) which is the Visual Studio default value. To avoid confusion
-  when viewing settings from within Visual Studio and for consistency
-  with the libcurl project files removed these two settings.
+  A failed calloc() would lead to NULL pointer use.
+  
+  Coverity CID 1299427.
 
-Daniel Stenberg (17 Jul 2014)
-- [Dave Reisner brought this change]
+- parse_proxy: switch off tunneling if non-HTTP proxy
+  
+  non-HTTP proxy implies not using CURLOPT_HTTPPROXYTUNNEL
+  
+  Bug: http://curl.haxx.se/mail/lib-2015-05/0056.html
+  Reported-by: Sean Boudreau
 
-  src/Makefile.am: add .DELETE_ON_ERROR
+- curl: fix potential NULL dereference
   
-  This prevents targets like tool_hugehelp.c from leaving around
-  half-constructed files if the rule fails with GNU make.
+  Coverity CID 1299428: Dereference after null check (FORWARD_NULL)
+
+- http2: on_frame_recv: return early on stream 0
   
-  Reported-by: Rafaël Carré <funman@videolan.org>
+  Coverity CID 1299426 warned about possible NULL dereference otherwise,
+  but that would only ever happen if we get invalid HTTP/2 data with
+  frames for stream 0. Avoid this risk by returning early when stream 0 is
+  used.
 
-- THANKS: added new contributors from 7.37.1 announcement
+- http: removed self assignment
+  
+  Follow-up fix from b0143a2a33f0
+  
+  Detected by coverity. CID 1299429
 
-Dan Fandrich (17 Jul 2014)
-- testcurl.pl: log the value of --runtestopts in the test header
+- [Tatsuhiro Tsujikawa brought this change]
 
-Daniel Stenberg (16 Jul 2014)
-- RELEASE-NOTES: cleared, working towards next release
+  http2: Make HTTP Upgrade work
+  
+  This commit just add implicitly opened stream 1 to streams hash.
 
-- curl_gssapi.c: make line shorter than 80 columns
+Jay Satiro (22 May 2015)
+- strerror: Change SEC_E_ILLEGAL_MESSAGE description
+  
+  Prior to this change the description for SEC_E_ILLEGAL_MESSAGE was OS
+  and language specific, and invariably translated to something not very
+  helpful like: "The message received was unexpected or badly formatted."
+  
+  Bug: https://github.com/bagder/curl/issues/267
+  Reported-by: Michael Osipov
 
-- [David Woodhouse brought this change]
+- telnet: Fix read-callback change for Windows builds
+  
+  Refer to b0143a2 for more information on the read-callback change.
 
-  Fix negotiate auth to proxies to track correct state
+Daniel Stenberg (21 May 2015)
+- CURLOPT_HTTPPROXYTUNNEL.3: only works with a HTTP proxy!
 
-- [David Woodhouse brought this change]
+Dan Fandrich (21 May 2015)
+- testcurl.pl: allow source to be in an arbitrary directory
+  
+  This way, the build directory can be located on an entirely different
+  filesystem from the source code (e.g. a tmpfs).
 
-  Don't abort Negotiate auth when the server has a response for us
+Daniel Stenberg (20 May 2015)
+- read_callback: move to SessionHandle from connectdata
   
-  It's wrong to assume that we can send a single SPNEGO packet which will
-  complete the authentication. It's a *negotiation* — the clue is in the
-  name. So make sure we handle responses from the server.
+  With many easy handles using the same connection for multiplexing, it is
+  important we store and keep the transfer-oriented stuff in the
+  SessionHandle so that callbacks and callback data work fine even when
+  many easy handles share the same physical connection.
+
+- http2: show stream IDs in decimal
   
-  Curl_input_negotiate() will already handle bailing out if it thinks the
-  state is GSS_S_COMPLETE (or SEC_E_OK on Windows) and the server keeps
-  talking to us, so we should avoid endless loops that way.
+  It makes them easier to match output from the nghttpd test server.
 
-- [David Woodhouse brought this change]
+- [Tatsuhiro Tsujikawa brought this change]
 
-  Don't clear GSSAPI state between each exchange in the negotiation
-  
-  GSSAPI doesn't work very well if we forget everything ever time.
+  http2: Faster http2 upload
   
-  XX: Is Curl_http_done() the right place to do the final cleanup?
+  Previously, when we send all given buffer in data_source_callback, we
+  return NGHTTP2_ERR_DEFERRED, and nghttp2 library removes this stream
+  temporarily for writing.  This itself is good.  If this is the sole
+  stream in the session, nghttp2_session_want_write() returns zero,
+  which means that libcurl does not check writeability of the underlying
+  socket.  This leads to very slow upload, because it seems curl only
+  upload 16k something per 1 second.  To fix this, if we still have data
+  to send, call nghttp2_session_resume_data after nghttp2_session_send.
+  This makes nghttp2_session_want_write() returns nonzero (if connection
+  window still opens), and as a result, socket writeability is checked,
+  and upload speed becomes normal.
 
-- [David Woodhouse brought this change]
+- [Dmitry Eremin-Solenikov brought this change]
 
-  Use SPNEGO for HTTP Negotiate
+  gtls: don't fail on non-fatal alerts during handshake
   
-  This is the correct way to do SPNEGO. Just ask for it
-  
-  Now I correctly see it trying NTLMSSP authentication when a Kerberos ticket
-  isn't available. Of course, we bail out when the server responds with the
-  challenge packet, since we don't expect that. But I'll fix that bug next...
+  Stop curl from failing when non-fatal alert is received during
+  handshake.  This e.g. fixes lots of problems when working with https
+  sites through proxies.
 
-- [David Woodhouse brought this change]
+- curl_easy_unescape.3: update RFC reference
+  
+  Reported-by: bsammon
+  Bug: https://github.com/bagder/curl/issues/282
 
-  Remove all traces of FBOpenSSL SPNEGO support
+Jay Satiro (20 May 2015)
+- CURLOPT_POSTFIELDS.3: Mention curl_easy_escape
   
-  This is just fundamentally broken. SPNEGO (RFC4178) is a protocol which
-  allows client and server to negotiate the underlying mechanism which will
-  actually be used to authenticate. This is *often* Kerberos, and can also
-  be NTLM and other things. And to complicate matters, there are various
-  different OIDs which can be used to specify the Kerberos mechanism too.
+  .. also correct some variable naming in curl_easy_escape.3
   
-  A SPNEGO exchange will identify *which* GSSAPI mechanism is being used,
-  and will exchange GSSAPI tokens which are appropriate for that mechanism.
+  Bug: https://github.com/bagder/curl/issues/281
+  Reported-by: bsammon@users.noreply.github.com
+
+Daniel Stenberg (19 May 2015)
+- [Brian Prodoehl brought this change]
+
+  openssl: Use SSL_CTX_set_msg_callback and SSL_CTX_set_msg_callback_arg
   
-  But this SPNEGO implementation just strips the incoming SPNEGO packet
-  and extracts the token, if any. And completely discards the information
-  about *which* mechanism is being used. Then we *assume* it was Kerberos,
-  and feed the token into gss_init_sec_context() with the default
-  mechanism (GSS_S_NO_OID for the mech_type argument).
+  BoringSSL removed support for direct callers of SSL_CTX_callback_ctrl
+  and SSL_CTX_ctrl, so move to a way that should work on BoringSSL and
+  OpenSSL.
   
-  Furthermore... broken as this code is, it was never even *used* for input
-  tokens anyway, because higher layers of curl would just bail out if the
-  server actually said anything *back* to us in the negotiation. We assume
-  that we send a single token to the server, and it accepts it. If the server
-  wants to continue the exchange (as is required for NTLM and for SPNEGO
-  to do anything useful), then curl was broken anyway.
+  re #275
+
+Jay Satiro (19 May 2015)
+- curl.1: fix missing space in section --data
+
+Daniel Stenberg (19 May 2015)
+- transfer: remove erroneous and misleading comment
+
+Kamil Dudka (19 May 2015)
+- http: silence compile-time warnings without USE_NGHTTP2
   
-  So the only bit which actually did anything was the bit in
-  Curl_output_negotiate(), which always generates an *initial* SPNEGO
-  token saying "Hey, I support only the Kerberos mechanism and this is its
-  token".
+  Error: CLANG_WARNING:
+  lib/http.c:173:16: warning: Value stored to 'http' during its initialization is never read
   
-  You could have done that by manually just prefixing the Kerberos token
-  with the appropriate bytes, if you weren't going to do any proper SPNEGO
-  handling. There's no need for the FBOpenSSL library at all.
+  Error: COMPILER_WARNING:
+  lib/http.c: scope_hint: In function ‘http_disconnect’
+  lib/http.c:173:16: warning: unused variable ‘http’ [-Wunused-variable]
+
+Jay Satiro (19 May 2015)
+- transfer: Replace __func__ instances with function name
   
-  The sane way to do SPNEGO is just to *ask* the GSSAPI library to do
-  SPNEGO. That's what the 'mech_type' argument to gss_init_sec_context()
-  is for. And then it should all Just Work™.
+  .. also make __func__ replacement in multi.
   
-  That 'sane way' will be added in a subsequent patch, as will bug fixes
-  for our failure to handle any exchange other than a single outbound
-  token to the server which results in immediate success.
+  Prior to this change debug builds would fail to build if the compiler
+  was building pre-c99 and didn't support __func__.
 
-- [David Woodhouse brought this change]
+Daniel Stenberg (19 May 2015)
+- [Viktor Szakats brought this change]
 
-  ntlm_wb: Avoid invoking ntlm_auth helper with empty username
+  build: bump version in default nghttp2 paths
 
-- [David Woodhouse brought this change]
+- INTERNALS: we require nghttp2 1.0.0+ now
 
-  ntlm_wb: Fix hard-coded limit on NTLM auth packet size
+Jay Satiro (18 May 2015)
+- http: Add some include guards for the new HTTP/2 stuff
+
+Daniel Stenberg (18 May 2015)
+- http2: store upload state per stream
   
-  Bumping it to 1KiB in commit aaaf9e50ec is all very well, but having hit
-  a hard limit once let's just make it cope by reallocating as necessary.
+  Use a curl_off_t for upload left
 
-Version 7.37.1 (16 Jul 2014)
+- http2: fix build when NOT h2-enabled
 
-Daniel Stenberg (16 Jul 2014)
-- RELEASE-NOTES: synced with 4cb2521595
+- http2: switch to use Curl_hash_destroy()
+  
+  as after 4883f7019d3, the *_clean() function only flushes the hash.
 
-- test506: verify aa6884845168
+- curlver: restore LIBCURL_VERSION_NUM defined as a full number
   
-  After the fixed cookie lock deadlock, this test now passes and it
-  detects double-locking and double-unlocking of mutexes.
+  As it breaks configure, curl-config and test 1023 if not.
 
-- [Yousuke Kimoto brought this change]
+- [Anthony Avina brought this change]
 
-  cookie: avoid mutex deadlock
-  
-  ... by removing the extra mutex locks around th call to
-  Curl_flush_cookies() which takes care of the locking itself already.
+  hostip: fix unintended destruction of hash table
   
-  Bug: http://curl.haxx.se/mail/lib-2014-02/0184.html
+  .. and added unit1602 for hash.c
 
-- gnutls: fix compiler warning
-  
-  conversion to 'int' from 'long int' may alter its value
+- curlver: introducing new version number (checking) macros
+
+- runtests.pl: use 'h2c' now, no -14 anymore
+
+- [Tatsuhiro Tsujikawa brought this change]
 
-Dan Fandrich (15 Jul 2014)
-- test320: strip off the actual negotiated cipher width
+  http2: Ignore if we have stream ID not in hash in on_stream_close
   
-  It's irrelevant to the test, and will change depending on which SSL
-  library is being used by libcurl.
+  We could get stream ID not in the hash in on_stream_close.  For
+  example, if we decided to reject stream (e.g., PUSH_PROMISE), then we
+  don't create stream and store it in hash with its stream ID.
 
-- gnutls: detect lack of SRP support in GnuTLS at run-time and try without
+- [Tatsuhiro Tsujikawa brought this change]
+
+  Require nghttp2 v1.0.0
+  
+  This commit requires nghttp2 v1.0.0 to compile, and migrate to v1.0.0,
+  and utilize recent version of nghttp2 to simplify the code,
   
-  Reported-by: David Woodhouse
+  First we use nghttp2_option_set_no_recv_client_magic function to
+  detect nghttp2 v1.0.0.  That function only exists since v1.0.0.
+  
+  Since nghttp2 v0.7.5, nghttp2 ensures header field ordering, and
+  validates received header field.  If it found error, RST_STREAM with
+  PROTOCOL_ERROR is issued.  Since we require v1.0.0, we can utilize
+  this feature to simplify libcurl code.  This commit does this.
+  
+  Migration from 0.7 series are done based on nghttp2 migration
+  document.  For libcurl, we removed the code sending first 24 bytes
+  client magic.  It is now done by nghttp2 library.
+  on_invalid_frame_recv callback signature changed, and is updated
+  accordingly.
 
-Daniel Stenberg (14 Jul 2014)
-- [Michał Górny brought this change]
+- http2: infof length in on_frame_send()
 
-  configure: respect host tool prefix for krb5-config
+- pipeline: switch some code over to functions
   
-  Use ${host_alias}-krb5-config if available. This improves cross-
-  compilation support and fixes multilib on Gentoo (at least).
+  ... to "compartmentalize" a bit and make it easier to change behavior
+  when multiplexing is used instead of good old pipelining.
 
-- [David Woodhouse brought this change]
+- symbols-in-versions: add CURLOPT_PIPEWAIT
 
-  gnutls: handle IP address in cert name check
+- CURLOPT_PIPEWAIT: added
   
-  Before GnuTLS 3.3.6, the gnutls_x509_crt_check_hostname() function
-  didn't actually check IP addresses in SubjectAltName, even though it was
-  explicitly documented as doing so. So do it ourselves...
+  By setting this option to 1 libcurl will wait for a connection to reveal
+  if it is possible to pipeline/multiplex on before it continues.
 
-Dan Fandrich (14 Jul 2014)
-- build: set _POSIX_PTHREAD_SEMANTICS on Solaris to get proper getpwuid_r
+- Curl_http_readwrite_headers: minor code simplification
 
-Daniel Stenberg (14 Jul 2014)
-- RELEASE-NOTES: next one is called 7.37.1
+- IsPipeliningPossible: fixed for http2
 
-Dan Fandrich (13 Jul 2014)
-- gnutls: improved error message if setting cipher list fails
-  
-  Reported-by: David Woodhouse
+- http2: bump the h2 buffer size to 32K for speed
 
-- netrc: fixed thread safety problem by using getpwuid_r if available
+- http2: remove the stream from the hash in stream_close callback
   
-  The old way using getpwuid could cause problems in programs that enable
-  reading from netrc files simultaneously in multiple threads.
-  
-  Reported-by: David Woodhouse
+  ... and suddenly things work much better!
 
-- RELEASE-NOTES: add the reporter of the previous bug fix
+- http2: if there is paused data, do not clear the drain field
 
-- netrc: treat failure to find home dir same as missing netrc file
-  
-  This previously caused a fatal error (with a confusing error code, at
-  that).
-  
-  Reported by: Glen A Johnson Jr.
+- http2: rename s/data/pausedata
 
-Steve Holme (12 Jul 2014)
-- RELEASE-NOTES: Synced with aaaf9e50ec
+- http2: "stream %x" in all outputs to make it easier to search for
 
-- ntlm_wb: Fixed buffer size not being large enough for NTLMv2 sessions
+- http2: Curl_expire() all handles with incoming traffic
   
-  Bug: http://curl.haxx.se/mail/lib-2014-07/0103.html
-  Reported-by: David Woodhouse
+  ... so that they'll get handled next in the multi loop.
 
-- build: Fixed overridden compiler PDB settings in VC7 to VC12
+- http2: don't signal settings change for same values
+
+- http2: set default concurrency, fix ConnectionExists for multiplex
+
+- bundles: store no/default/pipeline/multiplex
   
-  The curl tool project files for VC7 to VC12 would override the default
-  setting with the output filename being the same as the linker PDB file.
-  As such the compiler file would be overwritten with the linker file
-  for all debug builds.
+  to allow code to act differently on the situation.
   
-  To avoid this overwrite and for consistency with the libcurl project
-  files, removed the setting to force the default filename to be used.
+  Also added some more info message for the connection re-use function to
+  make it clearer when connections are not re-used.
 
-Dan Fandrich (12 Jul 2014)
-- tests: added globbing keyword to URL globbing tests
+- http2: lazy init header_recvbuf
+  
+  It makes us use less memory when not doing HTTP/2 and subsequently also
+  makes us not have to cleanup HTTP/2 related data when not using HTTP/2!
 
-- Fixed some "statement not reached" warnings
+- http2: separate multiplex/pipelining + cleanup memory leaks
 
-- gnutls: fixed a couple of uninitialized variable references
+- CURLMOPT_PIPELINE: bit 1 is for multiplexing
 
-- gnutls: fixed compilation against versions < 2.12.0
-  
-  The AES-GCM ciphers were added to GnuTLS as late as ver. 3.0.1 but
-  the code path in which they're referenced here is only ever used for
-  somewhat older GnuTLS versions. This caused undeclared identifier errors
-  when compiling against those.
+- [Tatsuhiro Tsujikawa brought this change]
 
-- gnutls: explicitly added SRP to the priority string
-  
-  This seems to have become necessary for SRP support to work starting
-  with GnuTLS ver. 2.99.0. Since support for SRP was added to GnuTLS
-  before the function that takes this priority string, there should be no
-  issue with backward compatibility.
+  http2: Fix bug that data to be drained are overwritten by pending "paused" data
 
-- tests: adjust for capitalization differences in newer gnutls-serv
+- [Tatsuhiro Tsujikawa brought this change]
 
-- test320/1/2/4: fix the port number substitution variables
-  
-  These tests have been broken since commit 1958fe57 in Oct. 2011
+  http2: Don't call nghttp2_session_mem_recv while it is paused by a stream
 
-- tests: document more test identifiers and variables
+- [Tatsuhiro Tsujikawa brought this change]
 
-- gnutls: ignore invalid certificate dates with VERIFYPEER disabled
+  http2: Read data left in connection buffer after pause
   
-  This makes the behaviour consistent with what happens if a date can
-  be extracted from the certificate but is expired.
+  Previously when we do pause because of out of buffer, we just throw
+  away unread data in connection buffer.  This just broke protocol
+  framing, and I saw occasional FRAME_SIZE_ERROR.  This commit fix this
+  issue by remembering how much data read, and in the next iteration, we
+  process remaining data.
 
-Steve Holme (10 Jul 2014)
-- CURLOPT_UPLOAD: Corrected argument type
+- [Tatsuhiro Tsujikawa brought this change]
 
-Daniel Stenberg (9 Jul 2014)
-- FAQ: expand the thread-safe section
+  http2: Fix streams get stuck
   
-  ... with a mention of *NOSIGNAL, based on talk in bug #1386
+  This commit fixes the bug that streams get stuck if stream gets some
+  DATA, and stream->closed becomes true at the same time.  Previously,
+  in this condition, after we processed DATA, we are going to try to
+  read data from underlying transport, but there is no data, and gets
+  EAGAIN.  There was no code path to evaludate stream->closed.
+
+- http2: store incoming h2 SETTINGS
 
-Dan Fandrich (9 Jul 2014)
-- url.c: Fixed memory leak on OOM
+- pipeline: move function to pipeline.c and make static
   
-  This showed itself on some systems with torture failures
-  in tests 1060 and 1061
+  ... as it was only used from there.
 
-- Update instances of some obsolete CURLOPTs to their new names
+- IsPipeliningPossible: http2 can always "pipeline" (multiplex)
 
-Daniel Stenberg (5 Jul 2014)
-- [Marcel Raad brought this change]
+- http2: remove debug logging from on_frame_recv
 
-  compiler warnings: potentially uninitialized variables
-  
-  ... pointed out by MSVC2013
+- http2: remove the closed check in http2_recv
   
-  Bug: http://curl.haxx.se/bug/view.cgi?id=1391
+  With the "drained" functionality we can get here slightly asynchronously
+  so the stream have have been closed but there is pending data left to
+  read.
+
+- http2: bump the h2 buffer to 8K
 
-Kamil Dudka (4 Jul 2014)
-- nss: make the list of CRL items global
+- http2: Curl_read should not use the single buffer
   
-  Otherwise NSS could use an already freed item for another connection.
+  ... as it does for pipelining when we're multiplexing, as we need the
+  different buffers to store incoming data correctly for all streams.
 
-- nss: fix a memory leak when CURLOPT_CRLFILE is used
+- http2: more debug outputs
 
-- nss: make crl_der allocated on heap
+- http2: leave WAITPERFORM when conn is multiplexed
   
-  ... and spell it as crl_der instead of crlDER
+  No need to wait for our "spot" like for pipelining
 
-- nss: let nss_{cache,load}_crl return CURLcode
-
-- tool: oops, forgot to include <plarenas.h>
+- http2: force "drainage" of streams
   
-  ... that contains the declaration of PL_ArenaFinish()
+  ... which is necessary since the socket won't be readable but there is
+  data waiting in the buffer.
+
+- http2: move the mem+len pair to the stream struct
 
-- tool: call PL_ArenaFinish() on exit if NSPR is used
+- http2: more stream-oriented data, stream ID 0 is for connections
+
+- http2: move lots of state data to the 'stream' struct
   
-  This prevents valgrind from reporting still reachable memory allocated
-  by NSPR arenas (mainly the freelist).
+  ... from the connection struct. The stream one being the 'struct HTTP'
+  which is kept in the SessionHandle struct (easy handle).
   
-  Reported-by: Hubert Kario
+  lookup streams for incoming frames in the stream hash, hashing is based
+  on the stream id and we get the SessionHandle for the incoming stream
+  that way.
 
-Daniel Stenberg (3 Jul 2014)
-- [Dimitrios Siganos brought this change]
+- HTTP: partial start at fixing up hash-lookups on http2 frame receival
 
-  example: use correct type (long) for CURLOPT_FOLLOWLOCATION
+- http: a stream hash for h2 multiplexing
 
-- [Dimitrios Siganos brought this change]
+- http: a stream hash for h2 multiplexing
 
-  Document type of argument for CURLOPT_FOLLOWLOCATION.
+- http2: debug log when receiving unexpected stream_id
 
-- [Dimitrios Siganos brought this change]
+- http2: move stream_id to the HTTP struct (per-stream)
 
-  Document type of argument for CURLOPT_ERRORBUFFER.
+- Curl_http2_setup: only do it once and enable multiplex on the server
+  
+  Once we know we are HTTP/2 enabled we know the server can multiplex.
 
-- [Dimitrios Siganos brought this change]
+- http: switch on "pipelining" (multiplexing) for HTTP/2 servers
+  
+  ... and do not blacklist any.
+
+- README.pipelining: removed
+  
+  All the details mentioned here are better documented in man pages
 
-  Document type of argument for CURLOPT_COPYPOSTFIELDS.
+Dan Fandrich (14 May 2015)
+- build: removed bundles.c from make files
+  
+  This file was removed in commit fd137786
 
-- [Dimitrios Siganos brought this change]
+Daniel Stenberg (14 May 2015)
+- Curl_conncache_add_conn: fix memory leak on OOM
 
-  Document type of argument for CURLOPT_ADDRESS_SCOPE.
+- CURLMOPT_MAX_HOST_CONNECTIONS: host = host name + port number
 
-- curl.1: minor language fix
+- conncache: keep bundles on host+port bases, not only host names
   
-  Bug: http://curl.haxx.se/mail/archive-2014-07/0006.html
+  Previously we counted all connections to a specific host name and that
+  would be used for the CURLMOPT_MAX_HOST_CONNECTIONS check for example,
+  while servers on different port numbers are normally considered
+  different "origins" on the web and should thus be considered different
+  hosts.
 
-- [Ray Satiro brought this change]
+- bundles: merged into conncache.c
+  
+  All the existing Curl_bundle* functions were only ever used from within
+  the conncache.c file, so I moved them over and made them static (and
+  removed the Curl_ prefix).
 
-  progress callback: skip last callback update on errors
+- hostcache: made all host caches use structs, not pointers
   
-  When an error has been detected, skip the final forced call to the
-  progress callback by making sure to pass the current return code
-  variable in the Curl_done() call in the CURLM_STATE_DONE state.
+  This avoids unnecessary dynamic allocs and as this also removed the last
+  users of *hash_alloc() and *hash_destroy(), those two functions are now
+  removed.
+
+- multi: converted socket hash into non-allocated struct
   
-  This avoids the "extra" callback that could occur even if you returned
-  error from the progress callback.
+  avoids extra dynamic allocation
+
+- connection cache: avoid Curl_hash_alloc()
   
-  Bug: http://curl.haxx.se/mail/lib-2014-06/0062.html
-  Reported by: Jonathan Cardoso Machado
+  ... by using plain structs instead of pointers for the connection cache,
+  we can avoid several dynamic allocations that weren't necessary.
 
-Dan Fandrich (2 Jul 2014)
-- opts: fixed some CURLOPT references so they get turned into links
+- proxy: add newline to info message
 
-Kamil Dudka (2 Jul 2014)
-- tool: call PR_Cleanup() on exit if NSPR is used
-  
-  This prevents valgrind from reporting possibly lost memory that NSPR
-  uses for file descriptor cache and other globally allocated internal
-  data structures.
+Patrick Monnerat (8 May 2015)
+- FTP: fix dangling conn->ip_addr dereference on verbose EPSV.
 
-- nss: make the fallback to SSLv3 work again
-  
-  This feature was unintentionally disabled by commit ff92fcfb.
+- FTP: Make EPSV use the control IP address rather than the original host.
+  This ensures an alternate address is not used.
+  Does not apply to proxy tunnel.
 
-- nss: do not abort on connection failure
-  
-  ... due to calling SSL_VersionRangeGet() with NULL file descriptor
-  
-  reported-by: upstream tests 305 and 404
+Daniel Stenberg (8 May 2015)
+- [Alessandro Ghedini brought this change]
+
+  tool_help: fix formatting for --next option
 
-Dan Fandrich (1 Jul 2014)
-- opts: Document the socket callback function parameters
+- [Egon Eckert brought this change]
 
-Steve Holme (28 Jun 2014)
-- opts: Fixed some typos
+  opts: improved the TCP keepalive examples
 
-Dan Fandrich (25 Jun 2014)
-- curl_easy_setopt.3: fixed the error code for an unsupported option
+Jay Satiro (8 May 2015)
+- winbuild: Document the option used to statically link the CRT
+  
+  - Document option RTLIBCFG (runtime library configuration).
+  
+  Bug: https://github.com/bagder/curl/issues/254
+  Reported-by: Bert Huijben
 
-- opts: added some DEFAULT and RETURN VALUE sections
+- [Orgad Shaneh brought this change]
 
-Daniel Stenberg (21 Jun 2014)
-- libcurl docs: man page edits
+  netrc: Read in text mode when cygwin
   
-  mainly to improve how the web versions render
+  Use text mode when cygwin to eliminate trailing carriage returns.
+  
+  Bug: https://github.com/bagder/curl/pull/258
 
-Dan Fandrich (21 Jun 2014)
-- curl_easy_setopt.3: fixed some typos
+Patrick Monnerat (5 May 2015)
+- OS400: Add SPNEGO service name options to ILE/RPG binding.
 
-Daniel Stenberg (21 Jun 2014)
-- lib man pages: update easy setopt option references
+Daniel Stenberg (4 May 2015)
+- curl_multi_info_read.3: fix typo
   
-  ... by using the "\fIopt(3)\fP" syntax they will be linked properly when
-  the web version of the page is generated.
+  Reported-by: Liviu Chircu
 
-- opts: the CURLOPT_SSL_ENABLE_*PN options are enabled by default
+- MANUAL: language fix
+  
+  Reported-by: Fred Stluka
+  Bug: https://github.com/bagder/curl/issues/255
 
-- [Colin Hogben brought this change]
+- [Alessandro Ghedini brought this change]
 
-  lib: documentation updates in README.hostip
+  gtls: properly retrieve certificate status
   
-  c-ares now does support IPv6;
-  avoid implying threaded resolver is Windows-only;
-  two referenced source files were renamed in 7de2f92
+  Also print the revocation reason if appropriate.
 
-- curl_easy_setopt.3: CURLOPT_POSTFIELDS is the exception
+- OpenSSL: conditional check for SSL3_RT_HEADER
   
-  ... to the always-copy-char *-argument.
+  The symbol is fairly new.
   
-  And fix some minor mistakes.
+  Reported-by: Kamil Dudka
 
-- curl_easy_setopt.3: refer to the individual man pages
+- openssl: skip trace outputs for ssl_ver == 0
+  
+  The OpenSSL trace callback is wonderfully undocumented but given a
+  journey in the source code, it seems the cases were ssl_ver is zero
+  doesn't follow the same pattern and thus turned out confusing and
+  misleading. For now, we skip doing any CURLINFO_TEXT logging on those
+  but keep sending them as CURLINFO_SSL_DATA_OUT/IN.
+  
+  Also, I added direction to the text info and I edited some functions
+  slightly.
   
-  With all the new individual option man pages created, this now refers to
-  each separate one instead of duplicaing the info. Also makes this page
-  easier to overview.
+  Bug: https://github.com/bagder/curl/issues/219
+  Reported-by: Jay Satiro, Ashish Shukla
 
-Dan Fandrich (21 Jun 2014)
-- opts: fixed mancheck for out-of-tree builds
+Marc Hoersken (2 May 2015)
+- schannel.c: Small changes
 
-Daniel Stenberg (21 Jun 2014)
-- curl_easy_setopt.3: shorten
+- schannel.c: Improve code path and readability
+
+- schannel.c: Improve error and return code handling upon aa99a63f03
+
+- [Chris Araman brought this change]
+
+  schannel: fix regression in schannel_recv
+  
+  https://github.com/bagder/curl/issues/244
   
-  shorten descriptions, mostly refer to the separate descriptions
+  Commit 145c263 changed the behavior when Curl_read_plain returns
+  CURLE_AGAIN. We now handle CURLE_AGAIN and SEC_I_CONTEXT_EXPIRED
+  correctly.
 
-- CURLOPT_DNS_LOCAL_IP4.3: better short desc
+- Bug born in changes made several days ago 9a91e80.
+  
+  Commit: https://github.com/bagder/curl/commit/926cb9f
+  Reported-by: Ray Satiro
 
-Dan Fandrich (20 Jun 2014)
-- opts: document CURLE_OUT_OF_MEMORY among other return values
+Daniel Stenberg (30 Apr 2015)
+- [Michael Osipov brought this change]
 
-- opts: fixed some typos
+  configure: remove missing and make it autogenerate
+  
+  The missing file has not been autogenerated because a temporary fix was
+  employed in acinclude.m4 which blocked update. Removed that fix and a recent
+  version of missing is copied to build root.
 
-Daniel Stenberg (20 Jun 2014)
-- opts: various corrections
+- [Michael Osipov brought this change]
 
-- opts: add the rest of the options
+  acinclude.m4: fix test for default CA cert bundle/path
   
-  ... and fixed mancheck to ignore obsolete options
+  test(1) on HP-UX requires a single equals sign and fails with two.
+  Let's use one and make every OS happy.
 
-- opts: the final bunch of options as man pages
+- CONTRIBUTING.md: remove the sourceforge mention
   
-  Now all current options have their own man pages.
+  Reported-By: Michael Osipov
 
-- opts: 37 additional man pages
+Dan Fandrich (30 Apr 2015)
+- http_negotiate_sspi: added missing data variable
 
-- CURLOPT_URL: move up the text from "Notes"
+Daniel Stenberg (30 Apr 2015)
+- [Michael Osipov brought this change]
 
-- ROADMAP: removed, now ROADMAP.md
+  configure: remove --automake from libtoolize call
+  
+  That option is not mentioned in the man page of libtoolize 2.4.4.19-fda4.
+  Moveover, a comment in line 2623 says "--automake is for 1.5 compatibility".
+  
+  This option is redundant now.
 
-- ROADMAP.md: make it markdown formatted
+- [Viktor Szakats brought this change]
 
-- ROADMAP: initial commit of "curl the next few years"
+  build: update depedency versions, urls, example makefiles
   
-  To be further discussed, debated and edited
+  - update default versions of dependencies (except for rare/old platforms)
+  - update urls
+  - sync examples makefiles with main ones
+  - remove line ending space
 
-- opts: more man pages
+- [Michael Osipov brought this change]
 
-- CURLOPT_UNRESTRICTED_AUTH.3: added missing 'T'
+  configure: remove autogenerated files by autoconf
+  
+  * install-sh is always regenerated
+  * mkinstalldirs was already redudant years ago. Automake uses install for
+    that. See: http://lists.gnu.org/archive/html/automake/2007-03/msg00015.html
 
-- opts: makefile now includes all current man pages
+- [Anders Bakken brought this change]
 
-- opts: 11 more man pages
+  curl_multi_add_handle: next is already NULL
 
-Dan Fandrich (18 Jun 2014)
-- opts: document CURLE_OUT_OF_MEMORY as RETURN VALUE
+Jay Satiro (30 Apr 2015)
+- schannel: Fix out of bounds array
+  
+  Bug born in changes made several days ago 9a91e80.
+  
+  Bug: http://curl.haxx.se/mail/lib-2015-04/0199.html
+  Reported-by: Brian Chrisman
 
-- opts: fixed a couple of typos
+- docs/libcurl: gitignore libcurl-symbols.3
+  
+  Bug: http://curl.haxx.se/mail/lib-2015-04/0191.html
+  Reported-by: Michael Osipov
 
-Patrick Monnerat (18 Jun 2014)
-- OS400: make it compilable again. Make RPG binding up to date.
+- [Viktor Szakats brought this change]
 
-- buildconf: do not search tools in current directory.
+  lib/makefile.m32: add arch -m32/-m64 to LDFLAGS
+  
+  This fixes using a multi-target mingw distro to build curl .dll for the
+  non-default target.
+  (mirroring the same patch present in src/makefile.m32)
 
-Dan Fandrich (18 Jun 2014)
-- curl.h: renamed CURLOPT_DEPRECATEDx to CURLOPT_OBSOLETEx
+Daniel Stenberg (29 Apr 2015)
+- RELEASE-NOTES: synced with cd39b944afc
   
-  This is consistent with the existing obsolete error code naming
-  convention.
+  I've not mentioned the bug fixes that were shipped in 7.42.1 from the
+  7_42 branch.
 
-Daniel Stenberg (18 Jun 2014)
-- opts: 16 more man pages
+- THANKS: merged from the 7.42.1 release
+
+- CURLOPT_HEADEROPT: default to separate
+  
+  Make the HTTP headers separated by default for improved security and
+  reduced risk for information leakage.
+  
+  Bug: http://curl.haxx.se/docs/adv_20150429.html
+  Reported-by: Yehezkel Horowitz, Oren Souroujon
index 04d5e7e..ceff391 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -139,7 +139,7 @@ int main(void)
   rc = gethostbyname_r(address, &h, &hdata);
 #elif defined(HAVE_GETHOSTBYNAME_R_5) || \
       defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT)
-  rc = gethostbyname_r(address, &h, buffer, 8192, 0, &h_errnop);
+  rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop);
   (void)hp; /* not used for test */
 #elif defined(HAVE_GETHOSTBYNAME_R_6) || \
       defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT)
index 4986a8e..dfaeaf3 100644 (file)
@@ -155,7 +155,7 @@ message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}")
                 set(GSS_FLAVOUR "MIT")
             else()
                 # prevent compiling the header - just check if we can include it
-                set(CMAKE_REQUIRED_DEFINITIONS "-D__ROKEN_H__")
+                set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D__ROKEN_H__")
                 check_include_file( "roken.h" _GSS_HAVE_ROKEN_H)
 
                 check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H)
index 4f07f22..d599498 100644 (file)
@@ -10,8 +10,8 @@ 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_WINDOWS_H "windows.h")
   add_header_include(HAVE_WINSOCK_H "winsock.h")
   set(_source_epilogue
       "${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
index fc75d59..06f18cf 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -64,7 +64,7 @@ message(STATUS "curl version=[${CURL_VERSION}]")
 # 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(PACKAGE_BUGREPORT "a suitable curl mailing list => https://curl.haxx.se/mail/")
 set(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}")
 set(OS "\"${CMAKE_SYSTEM_NAME}\"")
 
@@ -76,6 +76,24 @@ 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(ENABLE_ARES "Set to ON to enable c-ares support" OFF)
 option(ENABLE_THREADED_RESOLVER "Set to ON to enable POSIX threaded DNS lookup" OFF)
+
+option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF)
+option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF)
+
+if (ENABLE_DEBUG)
+  # DEBUGBUILD will be defined only for Debug builds
+  if(NOT CMAKE_VERSION VERSION_LESS 3.0)
+    set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUGBUILD>)
+  else()
+    set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUGBUILD)
+  endif()
+  set(ENABLE_CURLDEBUG ON)
+endif()
+
+if (ENABLE_CURLDEBUG)
+  set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG)
+endif()
+
 # initialize CURL_LIBS
 set(CURL_LIBS "")
 
@@ -104,11 +122,6 @@ 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)
@@ -168,7 +181,7 @@ option(DISABLED_THREADSAFE "Set to explicitly specify we don't want to use threa
 mark_as_advanced(DISABLED_THREADSAFE)
 option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
 mark_as_advanced(ENABLE_IPV6)
-if(ENABLE_IPV6)
+if(ENABLE_IPV6 AND NOT WIN32)
   include(CheckStructHasMember)
   check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h"
                           HAVE_SOCKADDR_IN6_SIN6_ADDR)
@@ -235,9 +248,11 @@ include (CheckLibraryExists)
 include (CheckSymbolExists)
 include (CheckTypeSize)
 include (CheckCSourceCompiles)
+include (CMakeDependentOption)
 
 # On windows preload settings
 if(WIN32)
+  set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_")
   include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
 endif(WIN32)
 
@@ -271,15 +286,22 @@ endif(NOT NOT_NEED_LIBNSL)
 
 check_function_exists(gethostname HAVE_GETHOSTNAME)
 
+set(OPENSSL_DEFAULT ON)
 if(WIN32)
+  set(OPENSSL_DEFAULT OFF)
   check_library_exists_concat("ws2_32" getch        HAVE_LIBWS2_32)
   check_library_exists_concat("winmm"  getch        HAVE_LIBWINMM)
 endif()
 
-option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ON)
+option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ${OPENSSL_DEFAULT})
 mark_as_advanced(CMAKE_USE_OPENSSL)
 
-set(USE_SSLEAY OFF)
+if(WIN32)
+  CMAKE_DEPENDENT_OPTION(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON
+    "NOT CMAKE_USE_OPENSSL" OFF)
+  mark_as_advanced(CURL_WINDOWS_SSPI)
+endif()
+
 set(USE_OPENSSL OFF)
 set(HAVE_LIBCRYPTO OFF)
 set(HAVE_LIBSSL OFF)
@@ -288,32 +310,33 @@ if(CMAKE_USE_OPENSSL)
   find_package(OpenSSL)
   if(OPENSSL_FOUND)
     list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES})
-    set(USE_SSLEAY ON)
     set(USE_OPENSSL ON)
     set(HAVE_LIBCRYPTO ON)
     set(HAVE_LIBSSL ON)
     include_directories(${OPENSSL_INCLUDE_DIR})
     set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
-    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("openssl/rand.h"   HAVE_OPENSSL_RAND_H)
+    check_include_file("openssl/crypto.h" HAVE_OPENSSL_CRYPTO_H)
+    check_include_file("openssl/engine.h" HAVE_OPENSSL_ENGINE_H)
+    check_include_file("openssl/err.h"    HAVE_OPENSSL_ERR_H)
+    check_include_file("openssl/pem.h"    HAVE_OPENSSL_PEM_H)
+    check_include_file("openssl/pkcs12.h" HAVE_OPENSSL_PKCS12_H)
+    check_include_file("openssl/rsa.h"    HAVE_OPENSSL_RSA_H)
+    check_include_file("openssl/ssl.h"    HAVE_OPENSSL_SSL_H)
+    check_include_file("openssl/x509.h"   HAVE_OPENSSL_X509_H)
+    check_include_file("openssl/rand.h"   HAVE_OPENSSL_RAND_H)
+  elseif(WIN32)
+    set(CURL_WINDOWS_SSPI ON)
   endif()
 endif()
 
 if(NOT CURL_DISABLE_LDAP)
 
   if(WIN32)
-    option(CURL_LDAP_WIN "Use Windows LDAP implementation" ON)
-    if(CURL_LDAP_WIN)
+    option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON)
+    if(USE_WIN32_LDAP)
       check_library_exists("wldap32" cldap_open "" HAVE_WLDAP32)
       if(NOT HAVE_WLDAP32)
-        set(CURL_LDAP_WIN OFF)
+        set(USE_WIN32_LDAP OFF)
       endif()
     endif()
   endif()
@@ -323,12 +346,12 @@ if(NOT CURL_DISABLE_LDAP)
   set(CMAKE_LDAP_LIB "ldap" CACHE STRING "Name or full path to ldap library")
   set(CMAKE_LBER_LIB "lber" CACHE STRING "Name or full path to lber library")
 
-  if(CMAKE_USE_OPENLDAP AND CURL_LDAP_WIN)
-    message(FATAL_ERROR "Cannot use CURL_LDAP_WIN and CMAKE_USE_OPENLDAP at the same time")
+  if(CMAKE_USE_OPENLDAP AND USE_WIN32_LDAP)
+    message(FATAL_ERROR "Cannot use USE_WIN32_LDAP and CMAKE_USE_OPENLDAP at the same time")
   endif()
   
   # Now that we know, we're not using windows LDAP...
-  if(NOT CURL_LDAP_WIN)
+  if(NOT USE_WIN32_LDAP)
     # Check for LDAP
     set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
     check_library_exists_concat(${CMAKE_LDAP_LIB} ldap_init HAVE_LIBLDAP)
@@ -338,9 +361,10 @@ if(NOT CURL_DISABLE_LDAP)
     check_include_file_concat("winber.h"  HAVE_WINBER_H)
   endif()
   
+  set(CMAKE_REQUIRED_INCLUDES_BAK ${CMAKE_REQUIRED_INCLUDES})
   set(CMAKE_LDAP_INCLUDE_DIR "" CACHE STRING "Path to LDAP include directory")
   if(CMAKE_LDAP_INCLUDE_DIR)
-    set(CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
+    list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_LDAP_INCLUDE_DIR})
   endif()
   check_include_file_concat("ldap.h"           HAVE_LDAP_H)
   check_include_file_concat("lber.h"           HAVE_LBER_H)
@@ -348,9 +372,11 @@ if(NOT CURL_DISABLE_LDAP)
   if(NOT HAVE_LDAP_H)
     message(STATUS "LDAP_H not found CURL_DISABLE_LDAP set ON")
     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
+    set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
   elseif(NOT HAVE_LIBLDAP)
     message(STATUS "LDAP library '${CMAKE_LDAP_LIB}' not found CURL_DISABLE_LDAP set ON")
     set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
+    set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_BAK}) #LDAP includes won't be used
   else()
     if(CMAKE_USE_OPENLDAP)
       set(USE_OPENLDAP ON)
@@ -384,7 +410,7 @@ if(NOT CURL_DISABLE_LDAP)
         return 0;
       }"
     )
-    set(CMAKE_REQUIRED_DEFINITIONS "-DLDAP_DEPRECATED=1" "-DWIN32_LEAN_AND_MEAN")
+    set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DLDAP_DEPRECATED=1")
     list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB})
     if(HAVE_LIBLBER)
       list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB})
@@ -431,6 +457,7 @@ if(CURL_ZLIB)
     set(HAVE_LIBZ ON)
     list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
     include_directories(${ZLIB_INCLUDE_DIRS})
+    list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
   endif()
 endif()
 
@@ -446,7 +473,7 @@ if(CMAKE_USE_LIBSSH2)
   if(LIBSSH2_FOUND)
     list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY})
     set(CMAKE_REQUIRED_LIBRARIES ${LIBSSH2_LIBRARY})
-    set(CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
+    list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}")
     include_directories("${LIBSSH2_INCLUDE_DIR}")
     set(HAVE_LIBSSH2 ON)
     set(USE_LIBSSH2 ON)
@@ -474,12 +501,12 @@ mark_as_advanced(CMAKE_USE_GSSAPI)
 if(CMAKE_USE_GSSAPI)
   find_package(GSS)
 
-  set(HAVE_GSS_API ${GSS_FOUND})
+  set(HAVE_GSSAPI ${GSS_FOUND})
   if(GSS_FOUND)
 
     message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"")
 
-    set(CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIR})
+    list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIRECTORIES})
     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)
@@ -515,7 +542,7 @@ if(CMAKE_USE_GSSAPI)
 
     endif()
 
-    include_directories(${GSS_INCLUDE_DIR})
+    include_directories(${GSS_INCLUDE_DIRECTORIES})
     link_directories(${GSS_LINK_DIRECTORIES})
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
@@ -535,17 +562,28 @@ else()
   unset(USE_UNIX_SOCKETS CACHE)
 endif()
 
+
 # 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)
+  check_include_file_concat("ws2tcpip.h"     HAVE_WS2TCPIP_H)
+  check_include_file_concat("winsock2.h"     HAVE_WINSOCK2_H)
+  if(CURL_WINDOWS_SSPI)
+    set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32")
+    check_include_file_concat("sspi.h"       HAVE_SSPI_H)
+    if(HAVE_SSPI_H)
+      check_include_file_concat("schannel.h" HAVE_SCHANNEL_H)
+      set(USE_WINDOWS_SSPI ON)
+      if(HAVE_SCHANNEL_H)
+        set(USE_SCHANNEL ON)
+        set(SSL_ENABLED ON)
+      endif()
+    endif()
+  endif()
 endif(NOT UNIX)
 
+check_include_file_concat("stdio.h"          HAVE_STDIO_H)
 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)
@@ -737,7 +775,6 @@ if(CMAKE_USE_OPENSSL)
     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)
@@ -1024,7 +1061,8 @@ endfunction()
 
 # Clear list and try to detect available features
 set(_items)
-_add_if("SSL"           SSL_ENABLED)
+_add_if("WinSSL"        SSL_ENABLED AND USE_WINDOWS_SSPI)
+_add_if("OpenSSL"       SSL_ENABLED AND USE_OPENSSL)
 _add_if("IPv6"          ENABLE_IPV6)
 _add_if("unix-sockets"  USE_UNIX_SOCKETS)
 _add_if("libz"          HAVE_LIBZ)
@@ -1032,12 +1070,12 @@ _add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX)
 _add_if("IDN"           HAVE_LIBIDN)
 # TODO SSP1 (WinSSL) check is missing
 _add_if("SSPI"          USE_WINDOWS_SSPI)
-_add_if("GSS-API"       HAVE_GSS_API)
+_add_if("GSS-API"       HAVE_GSSAPI)
 # TODO SSP1 missing for SPNEGO
 _add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND
-                        (HAVE_GSS_API OR USE_WINDOWS_SSPI))
+                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
 _add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND
-                        (HAVE_GSS_API OR USE_WINDOWS_SSPI))
+                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
 # NTLM support requires crypto function adaptions from various SSL libs
 # TODO alternative SSL libs tests for SSP1, GNUTLS, NSS, DARWINSSL
 if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR
@@ -1122,7 +1160,7 @@ set(VERSIONNUM              "${CURL_VERSION_NUM}")
 # Finally generate a "curl-config" matching this config
 configure_file("${CURL_SOURCE_DIR}/curl-config.in"
                "${CURL_BINARY_DIR}/curl-config" @ONLY)
-install(FILES "${CMAKE_BINARY_DIR}/curl-config"
+install(FILES "${CURL_BINARY_DIR}/curl-config"
         DESTINATION bin
         PERMISSIONS
           OWNER_READ OWNER_WRITE OWNER_EXECUTE
@@ -1132,7 +1170,7 @@ install(FILES "${CMAKE_BINARY_DIR}/curl-config"
 # Finally generate a pkg-config file matching this config
 configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in"
                "${CURL_BINARY_DIR}/libcurl.pc" @ONLY)
-install(FILES "${CMAKE_BINARY_DIR}/libcurl.pc"
+install(FILES "${CURL_BINARY_DIR}/libcurl.pc"
         DESTINATION lib/pkgconfig)
 
 # This needs to be run very last so other parts of the scripts can take advantage of this.
diff --git a/COPYING b/COPYING
index 6b5d59f..a98663e 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -1,6 +1,7 @@
 COPYRIGHT AND PERMISSION NOTICE
 
-Copyright (c) 1996 - 2015, Daniel Stenberg, <daniel@haxx.se>.
+Copyright (c) 1996 - 2016, Daniel Stenberg, <daniel@haxx.se>, and many
+contributors, see the THANKS file.
 
 All rights reserved.
 
index 9863b78..19b338f 100755 (executable)
@@ -65,7 +65,7 @@ else
  ARCHES64='-arch x86_64'
  #We "know" that 10.4 and earlier do not support 64bit
  OLD_SDK64=`ls  $SDK_PATH|egrep -v "10.[0-4]"|head -1`
- NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4]"|head -1`
+ NEW_SDK64=`ls -r $SDK_PATH|egrep -v "10.[0-4][^0-9]" | head -1`
  if test $USE_OLD -gt 0
   then
    SDK64=$OLD_SDK64
@@ -94,7 +94,7 @@ if test ! -z $SDK32; then
   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
+  install_name_tool -id @rpath/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
@@ -121,7 +121,7 @@ if test ! -z $SDK32; then
 
     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
+    install_name_tool -id @rpath/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
index f0f50d8..329e4f3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -566,6 +566,17 @@ src/Makefile.vc12: src/Makefile.vc6
        @echo "generate $@"
        @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12
 
+# VC14 makefiles are for use with VS2015
+vc14: lib/Makefile.vc14 src/Makefile.vc14
+
+lib/Makefile.vc14: lib/Makefile.vc6
+       @echo "generate $@"
+       @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" lib/Makefile.vc6 > lib/Makefile.vc14
+
+src/Makefile.vc14: src/Makefile.vc6
+       @echo "generate $@"
+       @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" src/Makefile.vc6 > src/Makefile.vc14
+
 ca-bundle: lib/mk-ca-bundle.pl
        @echo "generate a fresh ca-bundle.crt"
        @perl $< -b -l -u lib/ca-bundle.crt
index 3b91e83..61cc5ec 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
@@ -30,105 +30,126 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in        \
  include/curl/curlbuild.h.cmake CMake/Macros.cmake
 
 VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
-VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp
+VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
 VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
-VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl
-VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp
+VC6_SRCTMPL = projects/Windows/VC6/src/curl.tmpl
+VC6_SRCDSP = projects/Windows/VC6/src/curl.dsp.dist
 VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
-VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj
+VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist
 VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
-VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl
-VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj
+VC7_SRCTMPL = projects/Windows/VC7/src/curl.tmpl
+VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.vcproj.dist
 VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
-VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj
+VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist
 VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
-VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl
-VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj
+VC71_SRCTMPL = projects/Windows/VC7.1/src/curl.tmpl
+VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.vcproj.dist
 VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
-VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj
+VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist
 VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
-VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl
-VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj
+VC8_SRCTMPL = projects/Windows/VC8/src/curl.tmpl
+VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.vcproj.dist
 VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
-VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj
+VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist
 VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
-VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl
-VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj
+VC9_SRCTMPL = projects/Windows/VC9/src/curl.tmpl
+VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.vcproj.dist
 VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
-VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj
+VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
 VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
-VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl
-VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj
+VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
+VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
 VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
-VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj
+VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
 VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
-VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl
-VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj
+VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
+VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
 VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
 
 VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
-VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj
+VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
 VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
-VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl
-VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj
+VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
+VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
 VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
 
-VC_DIST = projects/README      \
- projects/build-openssl.bat    \
- projects/checksrc.bat \
- projects/Windows/VC6/curl.dsw \
- projects/Windows/VC6/lib/libcurl.dsw $(VC6_LIBDSP)    \
- projects/Windows/VC6/src/curlsrc.dsw $(VC6_SRCDSP)    \
- projects/Windows/VC7/curl.sln \
- projects/Windows/VC7/lib/libcurl.sln $(VC7_LIBVCPROJ) \
- projects/Windows/VC7/src/curlsrc.sln $(VC7_SRCVCPROJ) \
- projects/Windows/VC7.1/curl.sln       \
- projects/Windows/VC7.1/lib/libcurl.sln $(VC71_LIBVCPROJ)      \
- projects/Windows/VC7.1/src/curlsrc.sln $(VC71_SRCVCPROJ)      \
- projects/Windows/VC8/curl.sln \
- projects/Windows/VC8/lib/libcurl.sln $(VC8_LIBVCPROJ) \
- projects/Windows/VC8/src/curlsrc.sln $(VC8_SRCVCPROJ) \
- projects/Windows/VC9/curl.sln \
- projects/Windows/VC9/lib/libcurl.sln $(VC9_LIBVCPROJ) \
- projects/Windows/VC9/src/curlsrc.sln $(VC9_SRCVCPROJ) \
- projects/Windows/VC10/curl.sln        \
- projects/Windows/VC10/lib/libcurl.sln $(VC10_LIBVCXPROJ)      \
- projects/Windows/VC10/src/curlsrc.sln $(VC10_SRCVCXPROJ)      \
- projects/Windows/VC11/curl.sln        \
- projects/Windows/VC11/lib/libcurl.sln $(VC11_LIBVCXPROJ)      \
- projects/Windows/VC11/src/curlsrc.sln $(VC11_SRCVCXPROJ)      \
- projects/Windows/VC12/curl.sln        \
- projects/Windows/VC12/lib/libcurl.sln $(VC12_LIBVCXPROJ)      \
- projects/Windows/VC12/src/curlsrc.sln $(VC12_SRCVCXPROJ)
+VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl
+VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist
+VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
+VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl
+VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist
+VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc
+
+VC_DIST = projects/README                           \
+ projects/build-openssl.bat                         \
+ projects/build-wolfssl.bat                         \
+ projects/checksrc.bat                              \
+ projects/Windows/VC6/curl-all.dsw                  \
+ projects/Windows/VC6/lib/libcurl.dsw               \
+ projects/Windows/VC6/src/curl.dsw                  \
+ projects/Windows/VC7/curl-all.sln                  \
+ projects/Windows/VC7/lib/libcurl.sln               \
+ projects/Windows/VC7/src/curl.sln                  \
+ projects/Windows/VC7.1/curl-all.sln                \
+ projects/Windows/VC7.1/lib/libcurl.sln             \
+ projects/Windows/VC7.1/src/curl.sln                \
+ projects/Windows/VC8/curl-all.sln                  \
+ projects/Windows/VC8/lib/libcurl.sln               \
+ projects/Windows/VC8/src/curl.sln                  \
+ projects/Windows/VC9/curl-all.sln                  \
+ projects/Windows/VC9/lib/libcurl.sln               \
+ projects/Windows/VC9/src/curl.sln                  \
+ projects/Windows/VC10/curl-all.sln                 \
+ projects/Windows/VC10/lib/libcurl.sln              \
+ projects/Windows/VC10/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC10/src/curl.sln                 \
+ projects/Windows/VC10/src/curl.vcxproj.filters     \
+ projects/Windows/VC11/curl-all.sln                 \
+ projects/Windows/VC11/lib/libcurl.sln              \
+ projects/Windows/VC11/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC11/src/curl.sln                 \
+ projects/Windows/VC11/src/curl.vcxproj.filters     \
+ projects/Windows/VC12/curl-all.sln                 \
+ projects/Windows/VC12/lib/libcurl.sln              \
+ projects/Windows/VC12/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC12/src/curl.sln                 \
+ projects/Windows/VC12/src/curl.vcxproj.filters     \
+ projects/Windows/VC14/curl-all.sln                 \
+ projects/Windows/VC14/lib/libcurl.sln              \
+ projects/Windows/VC14/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC14/src/curl.sln                 \
+ projects/Windows/VC14/src/curl.vcxproj.filters
 
 WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat  \
  winbuild/MakefileBuild.vc winbuild/Makefile.vc                                \
  winbuild/Makefile.msvc.names
 
 EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in      \
- RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework        \
- $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in
+ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl \
+ $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in          \
+ buildconf.bat
 
 CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ)     \
  $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
  $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ)       \
- $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)
+ $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)   \
+ $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ)
 
 bin_SCRIPTS = curl-config
 
-SUBDIRS = lib src include
+SUBDIRS = lib src include scripts
 DIST_SUBDIRS = $(SUBDIRS) tests packages docs
 
 pkgconfigdir = $(libdir)/pkgconfig
@@ -148,12 +169,12 @@ dist-hook:
        done)
 
 html:
-       cd docs; make html
+       cd docs && make html
 
 pdf:
-       cd docs; make pdf
+       cd docs && make pdf
 
-check: test examples
+check: test examples check-docs
 
 if CROSSCOMPILING
 test-full: test
@@ -181,6 +202,9 @@ endif
 examples:
        @(cd docs/examples; $(MAKE) check)
 
+check-docs:
+       @(cd docs/libcurl; $(MAKE) check)
+
 # This is a hook to have 'make clean' also clean up the docs and the tests
 # dir. The extra check for the Makefiles being present is necessary because
 # 'make distcheck' will make clean first in these directories _before_ it runs
@@ -266,7 +290,7 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
  $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS)     \
  $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
  $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS)       \
- $(VC12_SRCVCXPROJ_DEPS)
+ $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS)
        @(win32_lib_srcs='$(LIB_CFILES)'; \
        win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
        win32_lib_rc='$(LIB_RCFILES)'; \
@@ -527,4 +551,22 @@ function gen_element(type, dir, file)\
                -v src_rc="$$win32_src_rc" \
                -v src_x_srcs="$$sorted_src_x_srcs" \
                -v src_x_hdrs="$$sorted_src_x_hdrs" \
-               "$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; };)
+               "$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \
+       \
+       echo "generating '$(VC14_LIBVCXPROJ)'"; \
+       awk -v proj_type=vcxproj \
+               -v lib_srcs="$$sorted_lib_srcs" \
+               -v lib_hdrs="$$sorted_lib_hdrs" \
+               -v lib_rc="$$win32_lib_rc" \
+               -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
+               -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
+               "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \
+       \
+       echo "generating '$(VC14_SRCVCXPROJ)'"; \
+       awk -v proj_type=vcxproj \
+               -v src_srcs="$$sorted_src_srcs" \
+               -v src_hdrs="$$sorted_src_hdrs" \
+               -v src_rc="$$win32_src_rc" \
+               -v src_x_srcs="$$sorted_src_x_srcs" \
+               -v src_x_hdrs="$$sorted_src_x_hdrs" \
+               "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; };)
index 51c490e..509d0db 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -132,12 +142,6 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/lib/Makefile.inc $(srcdir)/src/Makefile.inc \
-       $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/configure $(am__configure_deps) mkinstalldirs \
-       $(srcdir)/curl-config.in $(srcdir)/libcurl.pc.in COPYING \
-       README compile config.guess config.sub depcomp install-sh \
-       missing ltmain.sh
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
@@ -159,9 +163,11 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+       $(am__configure_deps) $(am__DIST_COMMON)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
  configure.lineno config.status.lineno
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES = curl-config libcurl.pc
@@ -251,6 +257,10 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 CSCOPE = cscope
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/curl-config.in \
+       $(srcdir)/lib/Makefile.inc $(srcdir)/libcurl.pc.in \
+       $(srcdir)/src/Makefile.inc COPYING README compile config.guess \
+       config.sub depcomp install-sh ltmain.sh missing
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 distdir = $(PACKAGE)-$(VERSION)
 top_distdir = $(distdir)
@@ -350,7 +360,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -370,6 +380,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -403,6 +414,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -414,17 +426,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -470,6 +483,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -487,106 +501,128 @@ CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in      \
  include/curl/curlbuild.h.cmake CMake/Macros.cmake
 
 VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
-VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp
+VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
 VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
-VC6_SRCTMPL = projects/Windows/VC6/src/curlsrc.tmpl
-VC6_SRCDSP = projects/Windows/VC6/src/curlsrc.dsp
+VC6_SRCTMPL = projects/Windows/VC6/src/curl.tmpl
+VC6_SRCDSP = projects/Windows/VC6/src/curl.dsp.dist
 VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
 VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
-VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj
+VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist
 VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
-VC7_SRCTMPL = projects/Windows/VC7/src/curlsrc.tmpl
-VC7_SRCVCPROJ = projects/Windows/VC7/src/curlsrc.vcproj
+VC7_SRCTMPL = projects/Windows/VC7/src/curl.tmpl
+VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.vcproj.dist
 VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
 VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
-VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj
+VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist
 VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
-VC71_SRCTMPL = projects/Windows/VC7.1/src/curlsrc.tmpl
-VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curlsrc.vcproj
+VC71_SRCTMPL = projects/Windows/VC7.1/src/curl.tmpl
+VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.vcproj.dist
 VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
 VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
-VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj
+VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist
 VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
-VC8_SRCTMPL = projects/Windows/VC8/src/curlsrc.tmpl
-VC8_SRCVCPROJ = projects/Windows/VC8/src/curlsrc.vcproj
+VC8_SRCTMPL = projects/Windows/VC8/src/curl.tmpl
+VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.vcproj.dist
 VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
 VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
-VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj
+VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist
 VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
-VC9_SRCTMPL = projects/Windows/VC9/src/curlsrc.tmpl
-VC9_SRCVCPROJ = projects/Windows/VC9/src/curlsrc.vcproj
+VC9_SRCTMPL = projects/Windows/VC9/src/curl.tmpl
+VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.vcproj.dist
 VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
 VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
-VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj
+VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
 VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
-VC10_SRCTMPL = projects/Windows/VC10/src/curlsrc.tmpl
-VC10_SRCVCXPROJ = projects/Windows/VC10/src/curlsrc.vcxproj
+VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
+VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
 VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
 VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
-VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj
+VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
 VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
-VC11_SRCTMPL = projects/Windows/VC11/src/curlsrc.tmpl
-VC11_SRCVCXPROJ = projects/Windows/VC11/src/curlsrc.vcxproj
+VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
+VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
 VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
 VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
-VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj
+VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
 VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
-VC12_SRCTMPL = projects/Windows/VC12/src/curlsrc.tmpl
-VC12_SRCVCXPROJ = projects/Windows/VC12/src/curlsrc.vcxproj
+VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
+VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
 VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
-VC_DIST = projects/README      \
- projects/build-openssl.bat    \
- projects/checksrc.bat \
- projects/Windows/VC6/curl.dsw \
- projects/Windows/VC6/lib/libcurl.dsw $(VC6_LIBDSP)    \
- projects/Windows/VC6/src/curlsrc.dsw $(VC6_SRCDSP)    \
- projects/Windows/VC7/curl.sln \
- projects/Windows/VC7/lib/libcurl.sln $(VC7_LIBVCPROJ) \
- projects/Windows/VC7/src/curlsrc.sln $(VC7_SRCVCPROJ) \
- projects/Windows/VC7.1/curl.sln       \
- projects/Windows/VC7.1/lib/libcurl.sln $(VC71_LIBVCPROJ)      \
- projects/Windows/VC7.1/src/curlsrc.sln $(VC71_SRCVCPROJ)      \
- projects/Windows/VC8/curl.sln \
- projects/Windows/VC8/lib/libcurl.sln $(VC8_LIBVCPROJ) \
- projects/Windows/VC8/src/curlsrc.sln $(VC8_SRCVCPROJ) \
- projects/Windows/VC9/curl.sln \
- projects/Windows/VC9/lib/libcurl.sln $(VC9_LIBVCPROJ) \
- projects/Windows/VC9/src/curlsrc.sln $(VC9_SRCVCPROJ) \
- projects/Windows/VC10/curl.sln        \
- projects/Windows/VC10/lib/libcurl.sln $(VC10_LIBVCXPROJ)      \
- projects/Windows/VC10/src/curlsrc.sln $(VC10_SRCVCXPROJ)      \
- projects/Windows/VC11/curl.sln        \
- projects/Windows/VC11/lib/libcurl.sln $(VC11_LIBVCXPROJ)      \
- projects/Windows/VC11/src/curlsrc.sln $(VC11_SRCVCXPROJ)      \
- projects/Windows/VC12/curl.sln        \
- projects/Windows/VC12/lib/libcurl.sln $(VC12_LIBVCXPROJ)      \
- projects/Windows/VC12/src/curlsrc.sln $(VC12_SRCVCXPROJ)
+VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl
+VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist
+VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
+VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl
+VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist
+VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc
+VC_DIST = projects/README                           \
+ projects/build-openssl.bat                         \
+ projects/build-wolfssl.bat                         \
+ projects/checksrc.bat                              \
+ projects/Windows/VC6/curl-all.dsw                  \
+ projects/Windows/VC6/lib/libcurl.dsw               \
+ projects/Windows/VC6/src/curl.dsw                  \
+ projects/Windows/VC7/curl-all.sln                  \
+ projects/Windows/VC7/lib/libcurl.sln               \
+ projects/Windows/VC7/src/curl.sln                  \
+ projects/Windows/VC7.1/curl-all.sln                \
+ projects/Windows/VC7.1/lib/libcurl.sln             \
+ projects/Windows/VC7.1/src/curl.sln                \
+ projects/Windows/VC8/curl-all.sln                  \
+ projects/Windows/VC8/lib/libcurl.sln               \
+ projects/Windows/VC8/src/curl.sln                  \
+ projects/Windows/VC9/curl-all.sln                  \
+ projects/Windows/VC9/lib/libcurl.sln               \
+ projects/Windows/VC9/src/curl.sln                  \
+ projects/Windows/VC10/curl-all.sln                 \
+ projects/Windows/VC10/lib/libcurl.sln              \
+ projects/Windows/VC10/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC10/src/curl.sln                 \
+ projects/Windows/VC10/src/curl.vcxproj.filters     \
+ projects/Windows/VC11/curl-all.sln                 \
+ projects/Windows/VC11/lib/libcurl.sln              \
+ projects/Windows/VC11/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC11/src/curl.sln                 \
+ projects/Windows/VC11/src/curl.vcxproj.filters     \
+ projects/Windows/VC12/curl-all.sln                 \
+ projects/Windows/VC12/lib/libcurl.sln              \
+ projects/Windows/VC12/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC12/src/curl.sln                 \
+ projects/Windows/VC12/src/curl.vcxproj.filters     \
+ projects/Windows/VC14/curl-all.sln                 \
+ projects/Windows/VC14/lib/libcurl.sln              \
+ projects/Windows/VC14/lib/libcurl.vcxproj.filters  \
+ projects/Windows/VC14/src/curl.sln                 \
+ projects/Windows/VC14/src/curl.vcxproj.filters
 
 WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat  \
  winbuild/MakefileBuild.vc winbuild/Makefile.vc                                \
  winbuild/Makefile.msvc.names
 
 EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in      \
- RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework        \
- $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in
+ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl \
+ $(CMAKE_DIST) $(VC_DIST) $(WINBUILD_DIST) lib/libcurl.vers.in          \
+ buildconf.bat
 
 CLEANFILES = $(VC6_LIBDSP) $(VC6_SRCDSP) $(VC7_LIBVCPROJ) $(VC7_SRCVCPROJ)     \
  $(VC71_LIBVCPROJ) $(VC71_SRCVCPROJ) $(VC8_LIBVCPROJ) $(VC8_SRCVCPROJ) \
  $(VC9_LIBVCPROJ) $(VC9_SRCVCPROJ) $(VC10_LIBVCXPROJ) $(VC10_SRCVCXPROJ)       \
- $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)
+ $(VC11_LIBVCXPROJ) $(VC11_SRCVCXPROJ) $(VC12_LIBVCXPROJ) $(VC12_SRCVCXPROJ)   \
+ $(VC14_LIBVCXPROJ) $(VC14_SRCVCXPROJ)
 
 bin_SCRIPTS = curl-config
-SUBDIRS = lib src include
+SUBDIRS = lib src include scripts
 DIST_SUBDIRS = $(SUBDIRS) tests packages docs
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = libcurl.pc
 LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \
   vtls/polarssl.c vtls/polarssl_threadlock.c vtls/axtls.c               \
-  vtls/cyassl.c vtls/curl_schannel.c vtls/curl_darwinssl.c vtls/gskit.c
+  vtls/cyassl.c vtls/schannel.c vtls/darwinssl.c vtls/gskit.c           \
+  vtls/mbedtls.c
 
 LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \
   vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h vtls/axtls.h   \
-  vtls/cyassl.h vtls/curl_schannel.h vtls/curl_darwinssl.h vtls/gskit.h
+  vtls/cyassl.h vtls/schannel.h vtls/darwinssl.h vtls/gskit.h           \
+  vtls/mbedtls.h
 
 LIB_CFILES = 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       \
@@ -604,8 +640,9 @@ LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
   http_negotiate_sspi.c http_proxy.c non-ascii.c asyn-ares.c            \
   asyn-thread.c curl_gssapi.c curl_ntlm.c curl_ntlm_wb.c                \
   curl_ntlm_core.c curl_ntlm_msgs.c curl_sasl.c curl_multibyte.c        \
-  hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c      \
-  http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c
+  hostcheck.c conncache.c pipeline.c dotdot.c x509asn1.c                \
+  http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c       \
+  curl_des.c
 
 LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
   formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
@@ -621,9 +658,10 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
   rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
   curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
   curl_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
-  curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h bundles.h   \
+  curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h             \
   conncache.h curl_setup_once.h multihandle.h setup-vms.h pipeline.h    \
-  dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h
+  dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h  \
+  curl_printf.h
 
 LIB_RCFILES = libcurl.rc
 CSOURCES = $(LIB_CFILES) $(LIB_VTLS_CFILES)
@@ -645,6 +683,7 @@ CURLX_HFILES = \
        ../lib/warnless.h
 
 CURL_CFILES = \
+       slist_wc.c \
        tool_binmode.c \
        tool_bname.c \
        tool_cb_dbg.c \
@@ -686,6 +725,7 @@ CURL_CFILES = \
        tool_xattr.c
 
 CURL_HFILES = \
+       slist_wc.h \
        tool_binmode.h \
        tool_bname.h \
        tool_cb_dbg.h \
@@ -730,7 +770,9 @@ CURL_HFILES = \
        tool_xattr.h
 
 CURL_RCFILES = curl.rc
-curl_SOURCES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
+
+# curl_SOURCES is special and gets assigned in src/Makefile.am
+CURL_FILES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
 all: all-recursive
 
 .SUFFIXES:
@@ -749,7 +791,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/li
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -759,7 +800,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/lib/Makefile.inc $(srcdir)/src/Makefile.inc:
+$(srcdir)/lib/Makefile.inc $(srcdir)/src/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        $(SHELL) ./config.status --recheck
@@ -1029,15 +1070,15 @@ dist-xz: distdir
        $(am__post_remove_distdir)
 
 dist-tarZ: distdir
-       @echo WARNING: "Support for shar distribution archives is" \
-                      "deprecated." >&2
+       @echo WARNING: "Support for distribution archives compressed with" \
+                      "legacy program 'compress' is deprecated." >&2
        @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
        tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
        $(am__post_remove_distdir)
 
 dist-shar: distdir
-       @echo WARNING: "Support for distribution archives compressed with" \
-                      "legacy program 'compress' is deprecated." >&2
+       @echo WARNING: "Support for shar distribution archives is" \
+                      "deprecated." >&2
        @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
        shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
        $(am__post_remove_distdir)
@@ -1073,17 +1114,17 @@ distcheck: dist
        esac
        chmod -R a-w $(distdir)
        chmod u+w $(distdir)
-       mkdir $(distdir)/_build $(distdir)/_inst
+       mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
        chmod a-w $(distdir)
        test -d $(distdir)/_build || exit 0; \
        dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
          && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
          && am__cwd=`pwd` \
-         && $(am__cd) $(distdir)/_build \
-         && ../configure \
+         && $(am__cd) $(distdir)/_build/sub \
+         && ../../configure \
            $(AM_DISTCHECK_CONFIGURE_FLAGS) \
            $(DISTCHECK_CONFIGURE_FLAGS) \
-           --srcdir=.. --prefix="$$dc_install_base" \
+           --srcdir=../.. --prefix="$$dc_install_base" \
          && $(MAKE) $(AM_MAKEFLAGS) \
          && $(MAKE) $(AM_MAKEFLAGS) dvi \
          && $(MAKE) $(AM_MAKEFLAGS) check \
@@ -1265,6 +1306,8 @@ uninstall-am: uninstall-binSCRIPTS uninstall-pkgconfigDATA
        uninstall-am uninstall-binSCRIPTS uninstall-hook \
        uninstall-pkgconfigDATA
 
+.PRECIOUS: Makefile
+
 
 # List of files required to generate VC IDE .dsp, .vcproj and .vcxproj files
 
@@ -1278,12 +1321,12 @@ dist-hook:
        done)
 
 html:
-       cd docs; make html
+       cd docs && make html
 
 pdf:
-       cd docs; make pdf
+       cd docs && make pdf
 
-check: test examples
+check: test examples check-docs
 
 @CROSSCOMPILING_TRUE@test-full: test
 @CROSSCOMPILING_TRUE@test-torture: test
@@ -1306,6 +1349,9 @@ check: test examples
 examples:
        @(cd docs/examples; $(MAKE) check)
 
+check-docs:
+       @(cd docs/libcurl; $(MAKE) check)
+
 # This is a hook to have 'make clean' also clean up the docs and the tests
 # dir. The extra check for the Makefiles being present is necessary because
 # 'make distcheck' will make clean first in these directories _before_ it runs
@@ -1391,7 +1437,7 @@ vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS)       \
  $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS)     \
  $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
  $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS)       \
- $(VC12_SRCVCXPROJ_DEPS)
+ $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS)
        @(win32_lib_srcs='$(LIB_CFILES)'; \
        win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
        win32_lib_rc='$(LIB_RCFILES)'; \
@@ -1652,7 +1698,25 @@ function gen_element(type, dir, file)\
                -v src_rc="$$win32_src_rc" \
                -v src_x_srcs="$$sorted_src_x_srcs" \
                -v src_x_hdrs="$$sorted_src_x_hdrs" \
-               "$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; };)
+               "$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || { exit 1; }; \
+       \
+       echo "generating '$(VC14_LIBVCXPROJ)'"; \
+       awk -v proj_type=vcxproj \
+               -v lib_srcs="$$sorted_lib_srcs" \
+               -v lib_hdrs="$$sorted_lib_hdrs" \
+               -v lib_rc="$$win32_lib_rc" \
+               -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
+               -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
+               "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || { exit 1; }; \
+       \
+       echo "generating '$(VC14_SRCVCXPROJ)'"; \
+       awk -v proj_type=vcxproj \
+               -v src_srcs="$$sorted_src_srcs" \
+               -v src_hdrs="$$sorted_src_hdrs" \
+               -v src_rc="$$win32_src_rc" \
+               -v src_x_srcs="$$sorted_src_x_srcs" \
+               -v src_x_hdrs="$$sorted_src_x_hdrs" \
+               "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || { exit 1; };)
 
 # 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.
diff --git a/README b/README
index 2ffacc3..f0b3b93 100644 (file)
--- a/README
+++ b/README
@@ -24,7 +24,7 @@ README
 CONTACT
 
   If you have problems, questions, ideas or suggestions, please contact us
-  by posting to a suitable mailing list. See http://curl.haxx.se/mail/
+  by posting to a suitable mailing list. See https://curl.haxx.se/mail/
 
   All contributors to the project are listed in the THANKS document.
 
@@ -32,18 +32,18 @@ WEB SITE
 
   Visit the curl web site for the latest news and downloads:
 
-        http://curl.haxx.se/
+        https://curl.haxx.se/
 
 GIT
 
   To download the very latest source off the GIT server do this:
 
-    git clone git://github.com/bagder/curl.git
+    git clone https://github.com/curl/curl.git
 
   (you'll get a directory named curl created, filled with the source code)
 
 NOTICE
 
   Curl contains pieces of source code that is Copyright (c) 1998, 1999
-  Kungliga Tekniska Högskolan. This notice is included here to comply with the
+  Kungliga Tekniska Högskolan. This notice is included here to comply with the
   distribution terms.
index 123088f..54029db 100644 (file)
-Curl and libcurl 7.40.0
+Curl and libcurl 7.48.0
 
- Public curl releases:         143
- Command line options:         162
- curl_easy_setopt() options:   208
- Public functions in libcurl:  58
- Contributors:                 1219
+ Public curl releases:         153
+ Command line options:         179
+ curl_easy_setopt() options:   221
+ Public functions in libcurl:  61
+ Contributors:                 1364
 
 This release includes the following changes:
 
- o http_digest: Added support for Windows SSPI based authentication
- o version info: Added Kerberos V5 to the supported features
- o Makefile: Added VC targets for WinIDN
- o config-win32: Introduce build targets for VS2012+
- o SSL: Add PEM format support for public key pinning
- o smtp: Added support for the conversion of Unix newlines during mail send [8]
- o smb: Added initial support for the SMB/CIFS protocol
- o Added support for HTTP over unix domain sockets, via
-   CURLOPT_UNIX_SOCKET_PATH and --unix-socket
- o sasl: Added support for GSS-API based Kerberos V5 authentication
+ o configure: --with-ca-fallback: use built-in TLS CA fallback [2]
+ o TFTP: add --tftp-no-options to expose CURLOPT_TFTP_NO_OPTIONS [22]
+ o getinfo: CURLINFO_TLS_SSL_PTR supersedes CURLINFO_TLS_SESSION [25]
+ o added CODE_STYLE.md [47]
 
 This release includes the following bugfixes:
 
- o darwinssl: fix session ID keys to only reuse identical sessions [18]
- o url-parsing: reject CRLFs within URLs [19]
- o OS400: Adjust specific support to last release
- o THANKS: Remove duplicate names
- o url.c: Fixed compilation warning
- o ssh: Fixed build on platforms where R_OK is not defined [1]
- o tool_strdup.c: include the tool strdup.h
- o build: Fixed Visual Studio project file generation of strdup.[c|h]
- o curl_easy_setopt.3: add CURLOPT_PINNEDPUBLICKEY [2]
- o curl.1: show zone index use in a URL
- o mk-ca-bundle.vbs: switch to new certdata.txt url
- o Makefile.dist: Added some missing SSPI configurations
- o build: Fixed no NTLM support for email when CURL_DISABLE_HTTP is defined
- o SSH: use the port number as well for known_known checks [3]
- o libssh2: detect features based on version, not configure checks
- o http2: Deal with HTTP/2 data inside Upgrade response header buffer [4]
- o multi: removed Curl_multi_set_easy_connection
- o symbol-scan.pl: do not require autotools
- o cmake: add ENABLE_THREADED_RESOLVER, rename ARES
- o cmake: build libhostname for test suite
- o cmake: fix HAVE_GETHOSTNAME definition
- o tests: fix libhostname visibility
- o tests: fix memleak in server/resolve.c
- o vtls.h: Fixed compiler warning when compiled without SSL
- o CMake: Restore order-dependent header checks
- o CMake: Restore order-dependent library checks
- o tool: Removed krb4 from the supported features
- o http2: Don't send Upgrade headers when we already do HTTP/2
- o examples: Don't call select() to sleep on windows [6]
- o win32: Updated some legacy APIs to use the newer extended versions [5]
- o easy.c: Fixed compilation warning when no verbose string support
- o connect.c: Fixed compilation warning when no verbose string support
- o build: in Makefile.m32 pass -F flag to windres
- o build: in Makefile.m32 add -m32 flag for 32bit
- o multi: when leaving for timeout, close accordingly
- o CMake: Simplify if() conditions on check result variables
- o build: in Makefile.m32 try to detect 64bit target
- o multi: inform about closed sockets before they are closed
- o multi-uv.c: close the file handle after download
- o examples: Wait recommended 100ms when no file descriptors are ready
- o ntlm: Split the SSPI based messaging code from the native messaging code
- o cmake: fix NTLM detection when CURL_DISABLE_HTTP defined
- o cmake: add Kerberos to the supported feature
- o CURLOPT_POSTFIELDS.3: mention the COPYPOSTFIELDS option
- o http: Disable pipelining for HTTP/2 and upgraded connections
- o ntlm: Fixed static'ness of local decode function
- o sasl: Reduced the need for two sets of NTLM messaging functions
- o multi.c: Fixed compilation warnings when no verbose string support
- o select.c: fix compilation for VxWorks [7]
- o multi-single.c: switch to use curl_multi_wait
- o curl_multi_wait.3: clarify numfds being used if not NULL
- o http.c: Fixed compilation warnings from features being disabled
- o NSS: enable the CAPATH option [9]
- o docs: Fix FAILONERROR typos
- o HTTP: don't abort connections with pending Negotiate authentication
- o HTTP: Free (proxy)userpwd for NTLM/Negotiate after sending a request
- o http_perhapsrewind: don't abort CONNECT requests
- o build: updated dependencies in makefiles
- o multi.c: Fixed compilation warning
- o ftp.c: Fixed compilation warnings when proxy support disabled
- o get_url_file_name: Fixed crash on OOM on debug build
- o cookie.c: Refactored cleanup code to simplify
- o OS400: enable NTLM authentication
- o ntlm: Use Windows Crypt API
- o http2: avoid logging neg "failure" if h2 was not requested
- o schannel_recv: return the correct code [10]
- o VC build: added sspi define for winssl-zlib builds
- o Curl_client_write(): chop long data, convert data only once
- o openldap: do not ignore Curl_client_write() return code
- o ldap: check Curl_client_write() return codes
- o parsedate.c: Fixed compilation warning
- o url.c: Fixed compilation warning when USE_NTLM is not defined
- o ntlm_wb_response: fix "statement not reached" [11]
- o telnet: fix "cast increases required alignment of target type"
- o smtp: Fixed dot stuffing when EOL characters at end of input buffers [12]
- o ntlm: Allow NTLM2Session messages when USE_NTRESPONSES manually defined
- o ntlm: Disable NTLM v2 when 64-bit integers are not supported
- o ntlm: Use short integer when decoding 16-bit values
- o ftp.c: Fixed compilation warning when no verbose string support
- o synctime.c: fixed timeserver URLs
- o mk-ca-bundle.pl: restored forced run again
- o ntlm: Fixed return code for bad type-2 Target Info
- o curl_schannel.c: Data may be available before connection shutdown
- o curl_schannel: Improvements to memory re-allocation strategy [13]
- o darwinssl: aprintf() to allocate the session key
- o tool_util.c: Use GetTickCount64 if it is available
- o lib: Fixed multiple code analysis warnings if SAL are available
- o tool_binmode.c: Explicitly ignore the return code of setmode
- o tool_urlglob.c: Silence warning C6293: Ill-defined for-loop
- o opts: Warn CURLOPT_TIMEOUT overrides when set after CURLOPT_TIMEOUT_MS
- o SFTP: work-around servers that return zero size on STAT [14]
- o connect: singleipconnect(): properly try other address families after failure
- o IPV6: address scope != scope id [15]
- o parseurlandfillconn(): fix improper non-numeric scope_id stripping [16]
- o secureserver.pl: make OpenSSL CApath and cert absolute path values
- o secureserver.pl: update Windows detection and fix path conversion
- o secureserver.pl: clean up formatting of config and fix verbose output
- o tests: Added Windows support using Cygwin-based OpenSSH
- o sockfilt.c: use non-Ex functions that are available before WinXP
- o VMS: Updates for 0740-0D1220
- o openssl: warn for SRP set if SSLv3 is used, not for TLS version
- o openssl: make it compile against openssl 1.1.0-DEV master branch
- o openssl: fix SSL/TLS versions in verbose output
- o curl: show size of inhibited data when using -v
- o build: Removed WIN32 definition from the Visual Studio projects
- o build: Removed WIN64 definition from the libcurl Visual Studio projects
- o vtls: Use bool for Curl_ssl_getsessionid() return type
- o sockfilt.c: Replace 100ms sleep with thread throttle
- o sockfilt.c: Reduce the number of individual memory allocations
- o vtls: Don't set cert info count until memory allocation is successful
- o nss: Don't ignore Curl_ssl_init_certinfo() OOM failure
- o nss: Don't ignore Curl_extract_certinfo() OOM failure
- o vtls: Fixed compilation warning and an ignored return code
- o sockfilt.c: Fixed compilation warnings
- o darwinssl: Fixed compilation warning
- o vtls: Use '(void) arg' for unused parameters
- o sepheaders.c: Fixed resource leak on failure
- o lib1900.c: Fixed cppcheck error [17]
- o ldap: Fixed Unicode connection details in Win32 initialsation / bind calls
- o ldap: Fixed Unicode DN, attributes and filter in Win32 search calls
+ o Proxy-Connection: stop sending this header by default [1]
+ o os400: sync ILE/RPG definitions with latest public header files
+ o cookies: allow spaces in cookie names, cut of trailing spaces [3]
+ o tool_urlglob: Allow reserved dos device names (Windows) [4]
+ o openssl: remove most BoringSSL #ifdefs [5]
+ o tool_doswin: Support for literal path prefix \\?\
+ o mbedtls: fix ALPN usage segfault [6]
+ o mbedtls: fix memory leak when destroying SSL connection data [7]
+ o nss: do not count enabled cipher-suites
+ o examples/cookie_interface.c: add cleanup call
+ o examples: adhere to curl code style
+ o curlx_tvdiff: handle 32bit time_t overflows [8]
+ o dist: ship buildconf.bat too
+ o curl.1: --disable-{eprt,epsv} are ignored for IPv6 hosts [9]
+ o generate.bat: Fix comment bug by removing old comments [10]
+ o test1604: Add to Makefile.inc so it gets run
+ o gtls: fix for builds lacking encrypted key file support [11]
+ o SCP: use libssh2_scp_recv2 to support > 2GB files on windows [12]
+ o CURLOPT_CONNECTTIMEOUT_MS.3: Fix example to use milliseconds option [13]
+ o cookie: do not refuse cookies to localhost [14]
+ o openssl: avoid direct PKEY access with OpenSSL 1.1.0 [15]
+ o http: Don't break the header into chunks if HTTP/2 [16]
+ o http2: don't decompress gzip decoding automatically [17]
+ o curlx.c: i2s_ASN1_IA5STRING() clashes with an openssl function
+ o curl.1: add a missing dash
+ o curl.1: HTTP headers for --cookie must be Set-Cookie style [18]
+ o CURLOPT_COOKIEFILE.3: HTTP headers must be Set-Cookie style [18]
+ o curl_sasl: Fix memory leak in digest parser [19]
+ o src/Makefile.m32: add CURL_{LD,C}FLAGS_EXTRAS support [20]
+ o CURLOPT_DEBUGFUNCTION.3: Fix example
+ o runtests: Fixed usage of %PWD on MinGW64 [21]
+ o tests/sshserver.pl: use RSA instead of DSA for host auth [23]
+ o multi_remove_handle: keep the timeout list until after disconnect [24]
+ o Curl_read: check for activated HTTP/1 pipelining, not only requested
+ o configure: warn on invalid ca bundle or path [26]
+ o file: try reading from files with no size [27]
+ o getinfo: Add support for mbedTLS TLS session info
+ o formpost: fix memory leaks in AddFormData error branches [28]
+ o makefile.m32: allow to pass .dll/.exe-specific LDFLAGS [29]
+ o url: if Curl_done is premature then pipeline not in use [30]
+ o cookie: remove redundant check [31]
+ o cookie: Don't expire session cookies in remove_expired [32]
+ o makefile.m32: fix to allow -ssh2-winssl combination [33]
+ o checksrc.bat: Fixed cannot find perl if installed but not in path
+ o build-openssl.bat: Fixed cannot find perl if installed but not in path
+ o mbedtls: fix user-specified SSL protocol version
+ o makefile.m32: add missing libs for static -winssl-ssh2 builds [34]
+ o test46: change cookie expiry date [35]
+ o pipeline: Sanity check pipeline pointer before accessing it [36]
+ o openssl: use the correct OpenSSL/BoringSSL/LibreSSL in messages
+ o ftp_done: clear tunnel_state when secondary socket closes [37]
+ o opt-docs: fix heading macros [38]
+ o imap/pop3/smtp: Fixed connections upgraded with TLS are not reused [39]
+ o curl_multi_wait: never return -1 in 'numfds' [40]
+ o url.c: fix clang warning: no newline at end of file
+ o krb5: improved type handling to avoid clang compiler warnings
+ o cookies: first n/v pair in Set-Cookie: is the cookie, then parameters [41]
+ o multi: avoid blocking during CURLM_STATE_WAITPROXYCONNECT [42]
+ o multi hash: ensure modulo performed on curl_socket_t [43]
+ o curl: glob_range: no need to check unsigned variable for negative
+ o easy: add check to malloc() when running event-based
+ o CURLOPT_SSLENGINE.3: Only for OpenSSL built with engine support [44]
+ o version: thread safety
+ o openssl: verbose: show matching SAN pattern
+ o openssl: adapt to OpenSSL 1.1.0 API breakage in ERR_remove_thread_state()
+ o formdata.c: Fixed compilation warning
+ o configure: use cpp -P when needed [45]
+ o imap.c: Fixed compilation warning with /Wall enabled
+ o config-w32.h: Fixed compilation warning when /Wall enabled
+ o ftp/imap/pop3/smtp: Fixed compilation warning when /Wall enabled
+ o build: Added missing Visual Studio filter files for VC10 onwards
+ o easy: Remove poll failure check in easy_transfer
+ o mbedtls: fix compiler warning
+ o build-wolfssl: Update VS properties for wolfSSL v3.9.0
+ o Fixed various compilation warnings when verbose strings disabled
 
 This release includes the following known bugs:
 
- o see docs/KNOWN_BUGS (http://curl.haxx.se/docs/knownbugs.html)
+ o see docs/KNOWN_BUGS (https://curl.haxx.se/docs/knownbugs.html)
 
 This release would not have looked like this without help, code, reports and
 advice from friends like these:
 
-  Andrey Labunets, Anthon Pang, Bill Nagel, Brad Harder, Brad King, Carlo Wood,
-  Christian Hägele, Dan Fandrich, Daniel Stenberg, Dave Reisner, Frank Gevaerts,
-  Gisle Vanem, Guenter Knauf, Jan Ehrhardt, Johan Lantz, John E. Malmberg,
-  Jon Spencer, Julien Nabet, Kamil Dudka, Kyle J. McKay, Lucas Pardue,
-  Marc Hesse, Marc Hoersken, Marc Renault, Michael Osipov, Nick Zitzmann,
-  Nobuhiro Ban, Patrick Monnerat, Peter Wu, Ray Satiro, Sam Hurst,
-  Stefan Bühler, Stefan Neis, Steve Holme, Tae Hyoung Ahn, Tatsuhiro Tsujikawa,
-  Tomasz Kojm, Tor Arntsen, Waldek Kozba, Warren Menzer
+  Anders Bakken, Brad Fitzpatrick, Clint Clayton, Dan Fandrich,
+  Daniel Stenberg, David Benjamin, David Byron, Emil Lerner, Eric S. Raymond,
+  Gisle Vanem, Jaime Fullaondo, Jeffrey Walton, Jesse Tan, Justin Ehlert,
+  Kamil Dudka, Kazuho Oku, Ludwig Nussel, Maksim Kuzevanov, Michael König,
+  Oliver Graute, Patrick Monnerat, Rafael Antonio, Ray Satiro, Seth Mos,
+  Shine Fan, Steve Holme, Tatsuhiro Tsujikawa, Timotej Lazar, Tim Rühsen,
+  Viktor Szakáts,
+  (30 contributors)
 
         Thanks! (and sorry if I forgot to mention someone)
 
 References to bug reports and discussions on issues:
 
- [1] = http://curl.haxx.se/mail/lib-2014-11/0035.html
- [2] = http://curl.haxx.se/mail/lib-2014-11/0078.html
- [3] = http://curl.haxx.se/bug/view.cgi?id=1448
- [4] = https://github.com/tatsuhiro-t/nghttp2/issues/103
- [5] = http://sourceforge.net/p/curl/feature-requests/82/
- [6] = http://curl.haxx.se/mail/lib-2014-11/0221.html
- [7] = http://curl.haxx.se/bug/view.cgi?id=1455
- [8] = http://curl.haxx.se/bug/view.cgi?id=1456
- [9] = http://curl.haxx.se/bug/view.cgi?id=1457
- [10] = http://curl.haxx.se/bug/view.cgi?id=1462
- [11] = http://curl.haxx.se/mail/lib-2014-12/0089.html
- [12] = http://curl.haxx.se/bug/view.cgi?id=1456
- [13] = http://curl.haxx.se/bug/view.cgi?id=1450
- [14] = http://curl.haxx.se/mail/lib-2014-12/0103.html
- [15] = http://curl.haxx.se/bug/view.cgi?id=1451
- [16] = http://curl.haxx.se/bug/view.cgi?id=1449
- [17] = https://github.com/bagder/curl/pull/133
- [18] = http://curl.haxx.se/docs/adv_20150108A.html
- [19] = http://curl.haxx.se/docs/adv_20150108B.html
+ [1] = https://curl.haxx.se/bug/?i=633
+ [2] = https://curl.haxx.se/bug/?i=569
+ [3] = https://curl.haxx.se/bug/?i=639
+ [4] = https://github.com/curl/curl/commit/4520534#commitcomment-15954863
+ [5] = https://curl.haxx.se/bug/?i=640
+ [6] = https://curl.haxx.se/bug/?i=642
+ [7] = https://curl.haxx.se/bug/?i=626
+ [8] = https://curl.haxx.se/bug/?i=646
+ [9] = https://bugzilla.redhat.com/1305970
+ [10] = https://curl.haxx.se/bug/?i=649
+ [11] = https://curl.haxx.se/bug/?i=651
+ [12] = https://curl.haxx.se/bug/?i=451
+ [13] = https://curl.haxx.se/bug/?i=653
+ [14] = https://curl.haxx.se/bug/?i=658
+ [15] = https://curl.haxx.se/bug/?i=650
+ [16] = https://curl.haxx.se/bug/?i=659
+ [17] = https://curl.haxx.se/bug/?i=661
+ [18] = https://curl.haxx.se/bug/?i=666
+ [19] = https://curl.haxx.se/bug/?i=667
+ [20] = https://curl.haxx.se/bug/?i=670
+ [21] = https://curl.haxx.se/bug/?i=672
+ [22] = https://curl.haxx.se/bug/?i=481
+ [23] = https://curl.haxx.se/bug/?i=676
+ [24] = https://curl.haxx.se/mail/lib-2016-02/0097.html
+ [25] = https://curl.haxx.se/libcurl/c/CURLINFO_TLS_SSL_PTR.html
+ [26] = https://curl.haxx.se/bug/?i=404
+ [27] = https://curl.haxx.se/bug/?i=681
+ [28] = https://curl.haxx.se/bug/?i=688
+ [29] = https://curl.haxx.se/bug/?i=689
+ [30] = https://curl.haxx.se/bug/?i=690
+ [31] = https://curl.haxx.se/bug/?i=695
+ [32] = https://curl.haxx.se/bug/?i=697
+ [33] = https://curl.haxx.se/bug/?i=692
+ [34] = https://curl.haxx.se/bug/?i=693
+ [35] = https://curl.haxx.se/bug/?i=697
+ [36] = https://curl.haxx.se/bug/?i=704
+ [37] = https://curl.haxx.se/bug/?i=701
+ [38] = https://curl.haxx.se/bug/?i=705
+ [39] = https://curl.haxx.se/bug/?i=422
+ [40] = https://curl.haxx.se/bug/?i=707
+ [41] = https://curl.haxx.se/bug/?i=709
+ [42] = https://curl.haxx.se/bug/?i=703
+ [43] = https://curl.haxx.se/bug/?i=712
+ [44] = https://curl.haxx.se/mail/lib-2016-03/0150.html
+ [45] = https://curl.haxx.se/bug/?i=719
+ [47] = https://curl.haxx.se/dev/code-style.html
index 453358d..2c2e51b 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -20,7 +20,6 @@
 #
 #***************************************************************************
 
-
 dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
 dnl -------------------------------------------------
 dnl Use the C preprocessor to find out if the given object-style symbol
@@ -31,6 +30,10 @@ 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], [
+  AC_REQUIRE([CURL_CPP_P])dnl
+  OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
   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
@@ -67,6 +70,7 @@ CURL_DEF_TOKEN $1
   fi
   AS_VAR_POPDEF([ac_Def])dnl
   AS_VAR_POPDEF([ac_HaveDef])dnl
+  CPPFLAGS=$OLDCPPFLAGS
 ])
 
 
@@ -1851,8 +1855,10 @@ 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([[
+  #
+  if test "x$dontwant_rt" == "xno" ; then
+    AC_COMPILE_IFELSE([
+      AC_LANG_PROGRAM([[
 #ifdef HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
@@ -1866,17 +1872,18 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [
 #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"
-  ])
+      ]],[[
+        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"
+    ])
+  fi
   dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed
   dnl until library linking and run-time checks for clock_gettime succeed.
 ])
@@ -2452,23 +2459,6 @@ AC_DEFUN([CURL_CHECK_FUNC_SELECT], [
 ])
 
 
-# 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
@@ -2584,7 +2574,8 @@ 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([--with-ca-bundle=FILE],
+[Path to a file containing CA certificates (example: /etc/ca-bundle.crt)])
 AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
   [
     want_ca="$withval"
@@ -2594,7 +2585,11 @@ AC_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]),
   ],
   [ want_ca="unset" ])
   AC_ARG_WITH(ca-path,
-AC_HELP_STRING([--with-ca-path=DIRECTORY], [Directory to use as CA path])
+AC_HELP_STRING([--with-ca-path=DIRECTORY],
+[Path to a directory containing CA certificates stored individually, with \
+their filenames in a hash format. This option can be used with OpenSSL, \
+GnuTLS and PolarSSL backends. Refer to OpenSSL c_rehash for details. \
+(example: /etc/certificates)])
 AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
   [
     want_capath="$withval"
@@ -2604,18 +2599,23 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
   ],
   [ want_capath="unset"])
 
+  ca_warning="   (warning: certs not found)"
+  capath_warning="   (warning: certs not found)"
+  check_capath=""
+
   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.])
+    ca="$want_ca"
+    capath="$want_capath"
   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" -a "x$POLARSSL_ENABLED" != "x1"; then
-      AC_MSG_ERROR([--with-ca-path only works with openSSL or PolarSSL])
+    if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then
+      AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL])
     fi
     capath="$want_capath"
     ca="no"
@@ -2651,12 +2651,7 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
       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
+        check_capath="/etc/ssl/certs/"
       fi
     else
       dnl no option given and cross-compiling
@@ -2664,18 +2659,62 @@ AC_HELP_STRING([--without-ca-path], [Don't use a default CA path]),
     fi
   fi
 
+  if test "x$ca" = "xno" || test -f "$ca"; then
+    ca_warning=""
+  fi
+
+  if test "x$capath" != "xno"; then
+    check_capath="$capath"
+  fi
+
+  if test ! -z "$check_capath"; then
+    for a in "$check_capath"; 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
+        if test "x$capath" = "xno"; then
+          capath="$a"
+        fi
+        capath_warning=""
+        break
+      fi
+    done
+  fi
+
+  if test "x$capath" = "xno"; then
+    capath_warning=""
+  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
+  fi
+  if 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
+  fi
+  if test "x$ca" = "xno" && test "x$capath" = "xno"; then
     AC_MSG_RESULT([no])
   fi
+
+  AC_MSG_CHECKING([whether to use builtin CA store of SSL library])
+  AC_ARG_WITH(ca-fallback,
+AC_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library])
+AC_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]),
+  [
+    if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then
+      AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter])
+    fi
+  ],
+  [ with_ca_fallback="no"])
+  AC_MSG_RESULT([$with_ca_fallback])
+  if test "x$with_ca_fallback" = "xyes"; then
+    if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then
+      AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS])
+    fi
+    AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ])
+  fi
 ])
 
 
@@ -2848,7 +2887,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
   #
   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
@@ -2856,9 +2894,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
   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
@@ -2893,17 +2928,6 @@ AC_DEFUN([CURL_CONFIGURE_CURL_OFF_T], [
     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
   #
@@ -3063,12 +3087,14 @@ dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir.
 dnl
 
 AC_DEFUN([CURL_CHECK_PKGCONFIG], [
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no],
+        [$PATH:/usr/bin:/usr/local/bin])
+    fi
 
-    PKGCONFIG="no"
-
-    AC_PATH_TOOL( PKGCONFIG, pkg-config, no, $PATH:/usr/bin:/usr/local/bin)
-
-    if test x$PKGCONFIG != xno; then
+    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
@@ -3125,3 +3151,48 @@ use vars qw(
 1;
 _EOF
 ])
+
+dnl CURL_CPP_P
+dnl
+dnl Check if $cpp -P should be used for extract define values due to gcc 5
+dnl splitting up strings and defines between line outputs. gcc by default
+dnl (without -P) will show TEST EINVAL TEST as
+dnl
+dnl # 13 "conftest.c"
+dnl TEST
+dnl # 13 "conftest.c" 3 4
+dnl     22
+dnl # 13 "conftest.c"
+dnl            TEST
+
+AC_DEFUN([CURL_CPP_P], [
+  AC_MSG_CHECKING([if cpp -P is needed])
+  AC_EGREP_CPP([TEST.*TEST], [
+ #include <errno.h>
+TEST EINVAL TEST
+  ], [cpp=no], [cpp=yes])
+  AC_MSG_RESULT([$cpp])
+
+  dnl we need cpp -P so check if it works then
+  if test "x$cpp" = "xyes"; then
+    AC_MSG_CHECKING([if cpp -P works])
+    OLDCPPFLAGS=$CPPFLAGS
+    CPPFLAGS="$CPPFLAGS -P"
+    AC_EGREP_CPP([TEST.*TEST], [
+ #include <errno.h>
+TEST EINVAL TEST
+    ], [cpp_p=yes], [cpp_p=no])
+    AC_MSG_RESULT([$cpp_p])
+
+    if test "x$cpp_p" = "xno"; then
+      AC_MSG_WARN([failed to figure out cpp -P alternative])
+      # without -P
+      CPPPFLAGS=$OLDCPPFLAGS
+    else
+      # with -P
+      CPPPFLAGS=$CPPFLAGS
+    fi
+    dnl restore CPPFLAGS
+    CPPFLAGS=$OLDCPPFLAGS
+  fi
+])
index fd841ca..32d8994 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -20,7 +20,7 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -32,10 +32,10 @@ To do so, use the procedure documented by the package, typically 'autoreconf'.])
 # generated from the m4 files accompanying Automake X.Y.
 # (This private macro should not be called outside this file.)
 AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
+[am__api_version='1.15'
 dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
 dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.14.1], [],
+m4_if([$1], [1.15], [],
       [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
@@ -51,14 +51,14 @@ m4_define([_AM_AUTOCONF_VERSION], [])
 # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
 # This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
 AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14.1])dnl
+[AM_AUTOMAKE_VERSION([1.15])dnl
 m4_ifndef([AC_AUTOCONF_VERSION],
   [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
 _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
 
 # AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -110,7 +110,7 @@ am_aux_dir=`cd "$ac_aux_dir" && pwd`
 
 # AM_CONDITIONAL                                            -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -141,7 +141,7 @@ AC_CONFIG_COMMANDS_PRE(
 Usually this means the macro was only invoked conditionally.]])
 fi])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -332,7 +332,7 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
 
 # Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -408,7 +408,7 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
 
 # Do all the work for Automake.                             -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -498,8 +498,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  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
@@ -573,6 +573,9 @@ END
     AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
   fi
 fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
 ])
 
 dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
@@ -602,7 +605,7 @@ for _am_header in $config_headers :; do
 done
 echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -613,7 +616,7 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
 # Define $install_sh.
 AC_DEFUN([AM_PROG_INSTALL_SH],
 [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\    *)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -623,7 +626,7 @@ if test x"${install_sh}" != xset; then
 fi
 AC_SUBST([install_sh])])
 
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -645,7 +648,7 @@ AC_SUBST([am__leading_dot])])
 # Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
 # From Jim Meyering
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -680,7 +683,7 @@ AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
 
 # Check to see how 'make' treats includes.                 -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -730,7 +733,7 @@ rm -f confinc confmf
 
 # Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
 
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -769,7 +772,7 @@ fi
 
 # Helper functions for option handling.                     -*- Autoconf -*-
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -798,7 +801,7 @@ AC_DEFUN([_AM_SET_OPTIONS],
 AC_DEFUN([_AM_IF_OPTION],
 [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -845,7 +848,7 @@ AC_LANG_POP([C])])
 # For backward compatibility.
 AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -864,7 +867,7 @@ AC_DEFUN([AM_RUN_LOG],
 
 # Check to make sure that the build environment is sane.    -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -945,7 +948,7 @@ AC_CONFIG_COMMANDS_PRE(
 rm -f conftest.file
 ])
 
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1005,7 +1008,7 @@ AC_SUBST([AM_BACKSLASH])dnl
 _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1033,7 +1036,7 @@ fi
 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -1052,7 +1055,7 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
 # Check how to create a tarball.                            -*- Autoconf -*-
 
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
 #
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
index f3f0bd5..0d998c2 100755 (executable)
--- a/buildconf
+++ b/buildconf
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
@@ -318,6 +318,8 @@ for fname in .deps \
     ltsugar.m4 \
     ltversion.m4 \
     lt~obsolete.m4 \
+    missing \
+    install-sh \
     stamp-h1 \
     stamp-h2 \
     stamp-h3 ; do
@@ -329,7 +331,7 @@ done
 #
 
 echo "buildconf: running libtoolize"
-${libtoolize} --copy --automake --force || die "libtoolize command failed"
+${libtoolize} --copy --force || die "libtoolize command failed"
 
 # When using libtool 1.5.X (X < 26) we copy libtool.m4 to our local m4
 # subdirectory and this local copy is patched to fix some warnings that
diff --git a/buildconf.bat b/buildconf.bat
new file mode 100644 (file)
index 0000000..ad3fba6
--- /dev/null
@@ -0,0 +1,350 @@
+@echo off
+rem ***************************************************************************
+rem *                                  _   _ ____  _
+rem *  Project                     ___| | | |  _ \| |
+rem *                             / __| | | | |_) | |
+rem *                            | (__| |_| |  _ <| |___
+rem *                             \___|\___/|_| \_\_____|
+rem *
+rem * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+rem *
+rem * This software is licensed as described in the file COPYING, which
+rem * you should have received as part of this distribution. The terms
+rem * are also available at https://curl.haxx.se/docs/copyright.html.
+rem *
+rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+rem * copies of the Software, and permit persons to whom the Software is
+rem * furnished to do so, under the terms of the COPYING file.
+rem *
+rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+rem * KIND, either express or implied.
+rem *
+rem ***************************************************************************
+
+rem NOTES
+rem
+rem This batch file must be used to set up a git tree to build on systems where
+rem there is no autotools support (i.e. DOS and Windows).
+rem
+
+:begin
+  rem Set our variables
+  if "%OS%" == "Windows_NT" setlocal
+  set MODE=GENERATE
+
+  rem Switch to this batch file's directory
+  cd /d "%~0\.." 1>NUL 2>&1
+
+  rem Check we are running from a curl git repository
+  if not exist GIT-INFO goto norepo
+
+  rem Detect programs. HAVE_<PROGNAME>
+  rem When not found the variable is set undefined. The undefined pattern
+  rem allows for statements like "if not defined HAVE_PERL (command)"
+  groff --version <NUL 1>NUL 2>&1
+  if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y)
+  nroff --version <NUL 1>NUL 2>&1
+  if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y)
+  perl --version <NUL 1>NUL 2>&1
+  if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y)
+  gzip --version <NUL 1>NUL 2>&1
+  if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y)
+
+:parseArgs
+  if "%~1" == "" goto start
+
+  if /i "%~1" == "-clean" (
+    set MODE=CLEAN
+  ) else if /i "%~1" == "-?" (
+    goto syntax
+  ) else if /i "%~1" == "-h" (
+    goto syntax
+  ) else if /i "%~1" == "-help" (
+    goto syntax
+  ) else (
+    goto unknown
+  )
+
+  shift & goto parseArgs
+
+:start
+  if "%MODE%" == "GENERATE" (
+    echo.
+    echo Generating prerequisite files
+
+    call :generate
+    if errorlevel 4 goto nogencurlbuild
+    if errorlevel 3 goto nogenhugehelp
+    if errorlevel 2 goto nogenmakefile
+    if errorlevel 1 goto warning
+
+  ) else (
+    echo.
+    echo Removing prerequisite files
+
+    call :clean
+    if errorlevel 3 goto nocleancurlbuild
+    if errorlevel 2 goto nocleanhugehelp
+    if errorlevel 1 goto nocleanmakefile
+  )
+
+  goto success
+
+rem Main generate function.
+rem
+rem Returns:
+rem
+rem 0 - success
+rem 1 - success with simplified tool_hugehelp.c 
+rem 2 - failed to generate Makefile
+rem 3 - failed to generate tool_hugehelp.c
+rem 4 - failed to generate curlbuild.h
+rem
+:generate
+  if "%OS%" == "Windows_NT" setlocal
+  set BASIC_HUGEHELP=0
+
+  rem Create Makefile
+  echo * %CD%\Makefile
+  if exist Makefile.dist (
+    copy /Y Makefile.dist Makefile 1>NUL 2>&1
+    if errorlevel 1 (
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 2
+    )
+  )
+
+  rem Create tool_hugehelp.c
+  echo * %CD%\src\tool_hugehelp.c
+  call :genHugeHelp
+  if errorlevel 2 (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 3
+  )
+  if errorlevel 1 (
+    set BASIC_HUGEHELP=1
+  )
+  cmd /c exit 0
+
+  rem Create curlbuild.h
+  echo * %CD%\include\curl\curlbuild.h
+  if exist include\curl\curlbuild.h.dist (
+    copy /Y include\curl\curlbuild.h.dist include\curl\curlbuild.h 1>NUL 2>&1
+    if errorlevel 1 (
+      if "%OS%" == "Windows_NT" endlocal
+      exit /B 4
+    )
+  )
+
+  rem Setup c-ares git tree
+  if exist ares\buildconf.bat (
+    echo.
+    echo Configuring c-ares build environment
+    cd ares
+    call buildconf.bat
+    cd ..
+  )
+
+  if "%BASIC_HUGEHELP%" == "1" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+  )
+
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 0
+
+rem Main clean function.
+rem
+rem Returns:
+rem
+rem 0 - success
+rem 1 - failed to clean Makefile
+rem 2 - failed to clean tool_hugehelp.c
+rem 3 - failed to clean curlbuild.h
+rem
+:clean
+  rem Remove Makefile
+  echo * %CD%\Makefile
+  if exist Makefile (
+    del Makefile 2>NUL
+    if exist Makefile (
+      exit /B 1
+    )
+  )
+
+  rem Remove tool_hugehelp.c
+  echo * %CD%\src\tool_hugehelp.c
+  if exist src\tool_hugehelp.c (
+    del src\tool_hugehelp.c 2>NUL
+    if exist src\tool_hugehelp.c (
+      exit /B 2
+    )
+  )
+
+  rem Remove curlbuild.h
+  echo * %CD%\include\curl\curlbuild.h
+  if exist include\curl\curlbuild.h (
+    del include\curl\curlbuild.h 2>NUL
+    if exist include\curl\curlbuild.h (
+      exit /B 3
+    )
+  )
+
+  exit /B
+
+rem Function to generate src\tool_hugehelp.c
+rem
+rem Returns:
+rem
+rem 0 - full tool_hugehelp.c generated
+rem 1 - simplified tool_hugehelp.c
+rem 2 - failure
+rem
+:genHugeHelp
+  if "%OS%" == "Windows_NT" setlocal
+  set LC_ALL=C
+  set ROFFCMD=
+  set BASIC=1
+
+  if defined HAVE_PERL (
+    if defined HAVE_GROFF (
+      set ROFFCMD=groff -mtty-char -Tascii -P-c -man
+    ) else if defined HAVE_NROFF (
+      set ROFFCMD=nroff -c -Tascii -man
+    )
+  )
+
+  if defined ROFFCMD (
+    echo #include "tool_setup.h"> src\tool_hugehelp.c
+    echo #include "tool_hugehelp.h">> src\tool_hugehelp.c 
+
+    if defined HAVE_GZIP (
+      echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c
+    )
+
+    %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c
+    if defined HAVE_GZIP (
+      echo #else>> src\tool_hugehelp.c
+      %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c
+      echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c
+    )
+
+    set BASIC=0
+  ) else (
+    if exist src\tool_hugehelp.c.cvs (
+      copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1
+    ) else (
+      echo #include "tool_setup.h"> src\tool_hugehelp.c
+      echo #include "tool_hugehelp.hd">> src\tool_hugehelp.c
+      echo.>> src\tool_hugehelp.c
+      echo void hugehelp(void^)>> src\tool_hugehelp.c
+      echo {>> src\tool_hugehelp.c
+      echo #ifdef USE_MANUAL>> src\tool_hugehelp.c
+      echo   fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c
+      echo #endif>> src\tool_hugehelp.c
+      echo }>> src\tool_hugehelp.c
+    )
+  )
+
+  findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1
+  if errorlevel 1 (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 2
+  )
+
+  if "%BASIC%" == "1" (
+    if "%OS%" == "Windows_NT" endlocal
+    exit /B 1
+  )
+
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 0
+
+rem Function to clean-up local variables under DOS, Windows 3.x and
+rem Windows 9x as setlocal isn't available until Windows NT
+rem
+:dosCleanup
+  set MODE=
+  set HAVE_GROFF=
+  set HAVE_NROFF=
+  set HAVE_PERL=
+  set HAVE_GZIP=
+  set BASIC_HUGEHELP=
+  set LC_ALL
+  set ROFFCMD=
+  set BASIC=
+
+  exit /B
+
+:syntax
+  rem Display the help
+  echo.
+  echo Usage: buildconf [-clean]
+  echo.
+  echo -clean    - Removes the files
+  goto error
+
+:unknown
+  echo.
+  echo Error: Unknown argument '%1'
+  goto error
+
+:norepo
+  echo.
+  echo Error: This batch file should only be used with a curl git repository
+  goto error
+
+:nogenmakefile
+  echo.
+  echo Error: Unable to generate Makefile
+  goto error
+
+:nogenhugehelp
+  echo.
+  echo Error: Unable to generate src\tool_hugehelp.c
+  goto error
+
+:nogencurlbuild
+  echo.
+  echo Error: Unable to generate include\curl\curlbuild.h
+  goto error
+
+:nocleanmakefile
+  echo.
+  echo Error: Unable to clean Makefile
+  goto error
+
+:nocleanhugehelp
+  echo.
+  echo Error: Unable to clean src\tool_hugehelp.c
+  goto error
+
+:nocleancurlbuild
+  echo.
+  echo Error: Unable to clean include\curl\curlbuild.h
+  goto error
+
+:warning
+  echo.
+  echo Warning: The curl manual could not be integrated in the source. This means when
+  echo you build curl the manual will not be available (curl --man^). Integration of
+  echo the manual is not required and a summary of the options will still be available
+  echo (curl --help^). To integrate the manual your PATH is required to have
+  echo groff/nroff, perl and optionally gzip for compression.
+  goto success
+
+:error
+  if "%OS%" == "Windows_NT" (
+    endlocal
+  ) else (
+    call :dosCleanup
+  )
+  exit /B 1
+
+:success
+  if "%OS%" == "Windows_NT" (
+    endlocal
+  ) else (
+    call :dosCleanup
+  )
+  exit /B 0
diff --git a/compile b/compile
index 531136b..a85b723 100755 (executable)
--- a/compile
+++ b/compile
@@ -3,7 +3,7 @@
 
 scriptversion=2012-10-14.11; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
index 1f5c50c..1659250 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2015 Free Software Foundation, Inc.
 
-timestamp='2014-03-23'
+timestamp='2015-08-20'
 
 # 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
@@ -24,12 +24,12 @@ timestamp='2014-03-23'
 # program.  This Exception is an additional permission under section 7
 # of the GNU General Public License, version 3 ("GPLv3").
 #
-# Originally written by Per Bothner.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # 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
 #
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 
 
 me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 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."
@@ -168,20 +168,27 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # 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)`
+       UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+           /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 ;;
+           earmv*)
+               arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine=${arch}${endian}-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)
+           arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
                eval $set_cc_for_build
                if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
                        | grep -q __ELF__
@@ -197,6 +204,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                os=netbsd
                ;;
        esac
+       # Determine ABI tags.
+       case "${UNAME_MACHINE_ARCH}" in
+           earm*)
+               expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+               abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+               ;;
+       esac
        # The OS release
        # Debian GNU/NetBSD machines have a different userland, and
        # thus, need a distinct triplet. However, they do not need
@@ -207,13 +221,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                release='-gnu'
                ;;
            *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+               release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
                ;;
        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}"
+       echo "${machine}-${os}${release}${abi}"
        exit ;;
     *:Bitrig:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
@@ -235,6 +249,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:MirBSD:*:*)
        echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
        exit ;;
+    *:Sortix:*:*)
+       echo ${UNAME_MACHINE}-unknown-sortix
+       exit ;;
     alpha:OSF1:*:*)
        case $UNAME_RELEASE in
        *4.0)
@@ -579,8 +596,9 @@ EOF
        else
                IBM_ARCH=powerpc
        fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
+       if [ -x /usr/bin/lslpp ] ; then
+               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+                          awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
        else
                IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
        fi
@@ -932,6 +950,9 @@ EOF
     crisv32:Linux:*:*)
        echo ${UNAME_MACHINE}-axis-linux-${LIBC}
        exit ;;
+    e2k:Linux:*:*)
+       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       exit ;;
     frv:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
        exit ;;
@@ -1020,7 +1041,7 @@ EOF
        echo ${UNAME_MACHINE}-dec-linux-${LIBC}
        exit ;;
     x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
        exit ;;
     xtensa*:Linux:*:*)
        echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
index bba4efb..1acc966 100755 (executable)
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
+#   Copyright 1992-2015 Free Software Foundation, Inc.
 
-timestamp='2014-09-11'
+timestamp='2015-08-20'
 
 # 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
@@ -25,7 +25,7 @@ timestamp='2014-09-11'
 # of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+# Please send patches to <config-patches@gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -68,7 +68,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2014 Free Software Foundation, Inc.
+Copyright 1992-2015 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."
@@ -117,7 +117,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
   kopensolaris*-gnu* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
@@ -255,12 +255,13 @@ case $basic_machine in
        | arc | arceb \
        | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
        | avr | avr32 \
+       | ba \
        | be32 | be64 \
        | bfin \
        | c4x | c8051 | clipper \
        | d10v | d30v | dlx | dsp16xx \
-       | epiphany \
-       | fido | fr30 | frv \
+       | e2k | epiphany \
+       | fido | fr30 | frv | ft32 \
        | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
        | hexagon \
        | i370 | i860 | i960 | ia64 \
@@ -305,7 +306,7 @@ case $basic_machine in
        | riscv32 | riscv64 \
        | rl78 | rx \
        | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
        | sh64 | sh64le \
        | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
        | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -313,6 +314,7 @@ case $basic_machine in
        | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
        | ubicom32 \
        | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+       | visium \
        | we32k \
        | x86 | xc16x | xstormy16 | xtensa \
        | z8k | z80)
@@ -327,6 +329,9 @@ case $basic_machine in
        c6x)
                basic_machine=tic6x-unknown
                ;;
+       leon|leon[3-9])
+               basic_machine=sparc-$basic_machine
+               ;;
        m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
                basic_machine=$basic_machine-unknown
                os=-none
@@ -372,12 +377,13 @@ case $basic_machine in
        | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
        | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
        | avr-* | avr32-* \
+       | ba-* \
        | be32-* | be64-* \
        | bfin-* | bs2000-* \
        | c[123]* | c30-* | [cjt]90-* | c4x-* \
        | c8051-* | clipper-* | craynv-* | cydra-* \
        | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
+       | e2k-* | elxsi-* \
        | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
        | h8300-* | h8500-* \
        | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
@@ -424,12 +430,13 @@ case $basic_machine in
        | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
        | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
        | pyramid-* \
+       | riscv32-* | riscv64-* \
        | rl78-* | 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-* | sv1-* | sx?-* \
+       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
        | tahoe-* \
        | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
        | tile*-* \
@@ -437,6 +444,7 @@ case $basic_machine in
        | ubicom32-* \
        | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
        | vax-* \
+       | visium-* \
        | we32k-* \
        | x86-* | x86_64-* | xc16x-* | xps100-* \
        | xstormy16-* | xtensa*-* \
@@ -513,6 +521,9 @@ case $basic_machine in
                basic_machine=i386-pc
                os=-aros
                ;;
+        asmjs)
+               basic_machine=asmjs-unknown
+               ;;
        aux)
                basic_machine=m68k-apple
                os=-aux
@@ -774,6 +785,9 @@ case $basic_machine in
                basic_machine=m68k-isi
                os=-sysv
                ;;
+       leon-*|leon[3-9]-*)
+               basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+               ;;
        m68knommu)
                basic_machine=m68k-unknown
                os=-linux
@@ -1365,7 +1379,7 @@ case $os in
              | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
              | -sym* | -kopensolaris* | -plan9* \
              | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* \
+             | -aos* | -aros* | -cloudabi* | -sortix* \
              | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
              | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
              | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
index bbdf846..cb00bd6 100755 (executable)
--- a/configure
+++ b/configure
@@ -2,7 +2,7 @@
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.69 for curl -.
 #
-# Report bugs to <a suitable curl mailing list: http://curl.haxx.se/mail/>.
+# Report bugs to <a suitable curl mailing list: https://curl.haxx.se/mail/>.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -11,7 +11,7 @@
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
 #
-# Copyright (c) 1998 - 2014 Daniel Stenberg, <daniel@haxx.se>
+# Copyright (c) 1998 - 2016 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
 
@@ -513,7 +513,7 @@ fi
     $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: mailing list: https://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."
@@ -830,7 +830,7 @@ PACKAGE_NAME='curl'
 PACKAGE_TARNAME='curl'
 PACKAGE_VERSION='-'
 PACKAGE_STRING='curl -'
-PACKAGE_BUGREPORT='a suitable curl mailing list: http://curl.haxx.se/mail/'
+PACKAGE_BUGREPORT='a suitable curl mailing list: https://curl.haxx.se/mail/'
 PACKAGE_URL=''
 
 ac_unique_file="lib/urldata.h"
@@ -903,6 +903,7 @@ MANOPT
 NROFF
 PERL
 IPV6_ENABLED
+ZSH_FUNCTIONS_DIR
 USE_NGHTTP2
 IDN_ENABLED
 CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE
@@ -913,19 +914,22 @@ USE_LIBSSH2
 LIBMETALINK_CPPFLAGS
 LIBMETALINK_LDFLAGS
 LIBMETALINK_LIBS
+USE_LIBPSL_FALSE
+USE_LIBPSL_TRUE
 CURL_CA_BUNDLE
 SSL_ENABLED
 USE_AXTLS
 NSS_LIBS
 USE_NSS
 USE_CYASSL
+USE_MBEDTLS
 USE_POLARSSL
 HAVE_GNUTLS_SRP
 USE_GNUTLS_NETTLE
 USE_GNUTLS
-HAVE_SSLEAY_SRP
+HAVE_OPENSSL_SRP
 RANDOM_FILE
-USE_SSLEAY
+SSL_LIBS
 PKGCONFIG
 USE_DARWINSSL
 USE_WINDOWS_SSPI
@@ -969,6 +973,7 @@ CURL_LT_SHLIB_USE_NO_UNDEFINED_FALSE
 CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE
 CURL_LT_SHLIB_USE_VERSION_INFO_FALSE
 CURL_LT_SHLIB_USE_VERSION_INFO_TRUE
+LT_SYS_LIBRARY_PATH
 OTOOL64
 OTOOL
 LIPO
@@ -1000,10 +1005,6 @@ PKGADD_NAME
 PKGADD_PKG
 VERSIONNUM
 CURLVERSION
-AM_BACKSLASH
-AM_DEFAULT_VERBOSITY
-AM_DEFAULT_V
-AM_V
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
 CCDEPMODE
@@ -1052,6 +1053,10 @@ GREP
 SED
 CURL_CFLAG_EXTRAS
 CONFIGURE_OPTIONS
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
 MAINT
 MAINTAINER_MODE_FALSE
 MAINTAINER_MODE_TRUE
@@ -1074,6 +1079,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -1097,6 +1103,7 @@ ac_subst_files=''
 ac_user_opts='
 enable_option_checking
 enable_maintainer_mode
+enable_silent_rules
 enable_debug
 enable_optimize
 enable_warnings
@@ -1105,13 +1112,14 @@ enable_curldebug
 enable_symbol_hiding
 enable_hidden_symbols
 enable_ares
+enable_rt
 enable_dependency_tracking
-enable_silent_rules
 enable_largefile
 enable_shared
 enable_static
 with_pic
 enable_fast_install
+with_aix_soname
 with_gnu_ld
 with_sysroot
 enable_libtool_lock
@@ -1147,11 +1155,14 @@ with_egd_socket
 with_random
 with_gnutls
 with_polarssl
+with_mbedtls
 with_cyassl
 with_nss
 with_axtls
 with_ca_bundle
 with_ca_path
+with_ca_fallback
+with_libpsl
 with_libmetalink
 with_libssh2
 with_librtmp
@@ -1159,6 +1170,7 @@ enable_versioned_symbols
 with_winidn
 with_libidn
 with_nghttp2
+with_zsh_functions_dir
 enable_threaded_resolver
 enable_verbose
 enable_sspi
@@ -1177,7 +1189,8 @@ CFLAGS
 LDFLAGS
 LIBS
 CPPFLAGS
-CPP'
+CPP
+LT_SYS_LIBRARY_PATH'
 ac_subdirs_all='ares'
 
 # Initialize some variables set by options.
@@ -1216,6 +1229,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1468,6 +1482,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1605,7 +1628,7 @@ fi
 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
+               libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1758,6 +1781,7 @@ Fine tuning of the installation directories:
   --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]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1799,6 +1823,8 @@ Optional Features:
   --enable-maintainer-mode
                           enable make rules and dependencies not useful (and
                           sometimes confusing) to the casual installer
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
   --enable-debug          Enable debug build options
   --disable-debug         Disable debug build options
   --enable-optimize       Enable compiler optimizations
@@ -1816,12 +1842,11 @@ Optional Features:
                           To be deprecated, use --disable-symbol-hiding
   --enable-ares[=PATH]    Enable c-ares for DNS lookups
   --disable-ares          Disable c-ares for DNS lookups
+  --disable-rt            disable dependency on -lrt
   --enable-dependency-tracking
                           do not reject slow dependency extractors
   --disable-dependency-tracking
                           speeds up one-time build
-  --enable-silent-rules   less verbose build output (undo: "make V=1")
-  --disable-silent-rules  verbose build output (undo: "make V=0")
   --disable-largefile     omit support for large files
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
@@ -1899,9 +1924,12 @@ Optional Packages:
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
                           both]
+  --with-aix-soname=aix|svr4|both
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, [default=aix].
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-sysroot=DIR Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).
+  --with-sysroot[=DIR]    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
   --with-zlib=PATH        search for zlib in PATH
   --without-zlib          disable use of zlib
   --with-ldap-lib=libname Specify name of ldap lib file
@@ -1927,6 +1955,9 @@ Optional Packages:
   --with-polarssl=PATH    where to look for PolarSSL, PATH points to the
                           installation root
   --without-polarssl      disable PolarSSL detection
+  --with-mbedtls=PATH     where to look for mbedTLS, PATH points to the
+                          installation root
+  --without-mbedtls       disable mbedTLS detection
   --with-cyassl=PATH      where to look for CyaSSL, PATH points to the
                           installation root (default: system lib default)
   --without-cyassl        disable CyaSSL detection
@@ -1937,11 +1968,19 @@ Optional Packages:
                           installation prefix (default: /usr/local). Ignored
                           if another SSL engine is selected.
   --without-axtls         disable axTLS
-  --with-ca-bundle=FILE   File name to use as CA bundle
+  --with-ca-bundle=FILE   Path to a file containing CA certificates (example:
+                          /etc/ca-bundle.crt)
   --without-ca-bundle     Don't use a default CA bundle
   --with-ca-path=DIRECTORY
-                          Directory to use as CA path
+                          Path to a directory containing CA certificates
+                          stored individually, with their filenames in a hash
+                          format. This option can be used with OpenSSL, GnuTLS
+                          and PolarSSL backends. Refer to OpenSSL c_rehash for
+                          details. (example: /etc/certificates)
   --without-ca-path       Don't use a default CA path
+  --with-ca-fallback      Use the built in CA store of the SSL library
+  --without-ca-fallback   Don't use the built in CA store of the SSL library
+  --without-libpsl        disable support for libpsl cookie checking
   --with-libmetalink=PATH where to look for libmetalink, PATH points to the
                           installation root
   --without-libmetalink   disable libmetalink detection
@@ -1961,6 +2000,10 @@ Optional Packages:
   --without-libidn        Disable libidn usage
   --with-nghttp2=PATH     Enable nghttp2 usage
   --without-nghttp2       Disable nghttp2 usage
+  --with-zsh-functions-dir=PATH
+                          Install zsh completions to PATH
+  --without-zsh-functions-dir
+                          Do not install zsh completions
 
 Some influential environment variables:
   CC          C compiler command
@@ -1971,11 +2014,13 @@ Some influential environment variables:
   CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
               you have headers in a nonstandard directory <include dir>
   CPP         C preprocessor
+  LT_SYS_LIBRARY_PATH
+              User-defined run-time library search path.
 
 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/>.
+Report bugs to <a suitable curl mailing list: https://curl.haxx.se/mail/>.
 _ACEOF
 ac_status=$?
 fi
@@ -2045,7 +2090,7 @@ Copyright (C) 2012 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 
-Copyright (c) 1998 - 2014 Daniel Stenberg, <daniel@haxx.se>
+Copyright (c) 1998 - 2016 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
@@ -2548,9 +2593,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $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/ ##
-## ---------------------------------------------------------------------- ##"
+( $as_echo "## ----------------------------------------------------------------------- ##
+## Report this to a suitable curl mailing list: https://curl.haxx.se/mail/ ##
+## ----------------------------------------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
@@ -3064,6 +3109,45 @@ fi
   MAINT=$MAINTAINER_MODE_TRUE
 
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
 
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable debug build options" >&5
@@ -3259,6 +3343,36 @@ fi
 $as_echo "$want_ares" >&6; }
 
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to disable dependency on -lrt" >&5
+$as_echo_n "checking whether to disable dependency on -lrt... " >&6; }
+  OPT_RT="default"
+  # Check whether --enable-rt was given.
+if test "${enable_rt+set}" = set; then :
+  enableval=$enable_rt; OPT_RT=$enableval
+fi
+
+  case "$OPT_RT" in
+    no)
+            dontwant_rt="yes"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+      ;;
+    default)
+            dontwant_rt="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: (assumed no)" >&5
+$as_echo "(assumed no)" >&6; }
+      ;;
+    *)
+            dontwant_rt="no"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      ;;
+  esac
+    if test "$dontwant_rt" = "yes" && test "$want_thres" = "yes" ; then
+    as_fn_error $? "options --disable-rt and --enable-thread-resolver are mutually exclusive, at most one can be selected." "$LINENO" 5
+  fi
+
+
 #
 # Check that 'XC_CONFIGURE_PREAMBLE' has already run.
 #
@@ -4858,7 +4972,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-am__api_version='1.14'
+am__api_version='1.15'
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
 $as_echo_n "checking whether build environment is sane... " >&6; }
@@ -4937,17 +5051,24 @@ test "$program_suffix" != NONE &&
 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
 
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} \"$am_aux_dir/missing\""
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
 # Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 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;}
+  { $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 test x"${install_sh}" != xset; then
+if test x"${install_sh+set}" != xset; then
   case $am_aux_dir in
   *\ * | *\    *)
     install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
@@ -5243,45 +5364,6 @@ else
 fi
 
 
-# Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
-  enableval=$enable_silent_rules;
-fi
-
-case $enable_silent_rules in # (((
-  yes) AM_DEFAULT_VERBOSITY=0;;
-   no) AM_DEFAULT_VERBOSITY=1;;
-    *) AM_DEFAULT_VERBOSITY=1;;
-esac
-am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if $as_echo 'TRUE=$(BAR$(V))
-BAR0=false
-BAR1=true
-V=1
-am__doit:
-       @$(TRUE)
-.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
-  am_cv_make_support_nested_variables=yes
-else
-  am_cv_make_support_nested_variables=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
-if test $am_cv_make_support_nested_variables = yes; then
-    AM_V='$(V)'
-  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
-  AM_V=$AM_DEFAULT_VERBOSITY
-  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
-AM_BACKSLASH='\'
-
 ## --------------------------------------- ##
 ##  Start of automake initialization code  ##
 ## --------------------------------------- ##
@@ -5342,8 +5424,8 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 # <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
 mkdir_p='$(MKDIR_P)'
 
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
 # Always define AMTAR for backward compatibility.  Yes, it's still used
 # in the wild :-(  We should find a proper way to deprecate it ...
 AMTAR='$${TAR-tar}'
@@ -5551,7 +5633,7 @@ PKGADD_VENDOR="curl.haxx.se"
 
 
 
-    curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} )"
+    curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )"
     curl_ssh_msg="no      (--with-libssh2)"
    curl_zlib_msg="no      (--with-zlib)"
     curl_gss_msg="no      (--with-gssapi)"
@@ -5569,6 +5651,7 @@ curl_verbose_msg="enabled (--disable-verbose)"
    curl_rtsp_msg="no      (--enable-rtsp)"
    curl_rtmp_msg="no      (--with-librtmp)"
   curl_mtlnk_msg="no      (--with-libmetalink)"
+    curl_psl_msg="no      (--with-libpsl)"
 
     init_ssl_msg=${curl_ssl_msg}
 
@@ -5948,6 +6031,62 @@ done
 
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if cpp -P is needed" >&5
+$as_echo_n "checking if cpp -P is needed... " >&6; }
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+ #include <errno.h>
+TEST EINVAL TEST
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "TEST.*TEST" >/dev/null 2>&1; then :
+  cpp=no
+else
+  cpp=yes
+fi
+rm -f conftest*
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cpp" >&5
+$as_echo "$cpp" >&6; }
+
+    if test "x$cpp" = "xyes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if cpp -P works" >&5
+$as_echo_n "checking if cpp -P works... " >&6; }
+    OLDCPPFLAGS=$CPPFLAGS
+    CPPFLAGS="$CPPFLAGS -P"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+ #include <errno.h>
+TEST EINVAL TEST
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "TEST.*TEST" >/dev/null 2>&1; then :
+  cpp_p=yes
+else
+  cpp_p=no
+fi
+rm -f conftest*
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cpp_p" >&5
+$as_echo "$cpp_p" >&6; }
+
+    if test "x$cpp_p" = "xno"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: failed to figure out cpp -P alternative" >&5
+$as_echo "$as_me: WARNING: failed to figure out cpp -P alternative" >&2;}
+      # without -P
+      CPPPFLAGS=$OLDCPPFLAGS
+    else
+      # with -P
+      CPPPFLAGS=$CPPFLAGS
+    fi
+        CPPFLAGS=$OLDCPPFLAGS
+  fi
+
+
     #
         #
   if test -z "$SED"; then
@@ -6032,7 +6171,6 @@ _ACEOF
   #
   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
@@ -6040,9 +6178,6 @@ _ACEOF
   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
   #
     #
@@ -6109,6 +6244,9 @@ if ac_fn_c_try_compile "$LINENO"; then :
         curl_sizeof_curl_off_t="8"
       else
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
   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
@@ -6149,6 +6287,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     eval "$as_ac_Def=\$tmp_exp"
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
         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`
@@ -6223,6 +6362,9 @@ if ac_fn_c_try_compile "$LINENO"; then :
         curl_sizeof_curl_off_t="4"
       else
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
   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
@@ -6263,6 +6405,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     eval "$as_ac_Def=\$tmp_exp"
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
         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`
@@ -6282,120 +6425,6 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 $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 `echo "$t2" | sed 's/[^a-zA-Z0-9_]/_/g'` 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
   #
@@ -7817,8 +7846,8 @@ esac
 
 
 
-macro_version='2.4.2'
-macro_revision='1.3337'
+macro_version='2.4.6'
+macro_revision='2.4.6'
 
 
 
@@ -7832,7 +7861,7 @@ macro_revision='1.3337'
 
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 
 # Backslashify metacharacters that are still active within
 # double-quoted strings.
@@ -7881,7 +7910,7 @@ func_echo_all ()
     $ECHO ""
 }
 
-case "$ECHO" in
+case $ECHO in
   printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
 $as_echo "printf" >&6; } ;;
   print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
@@ -8074,19 +8103,19 @@ 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
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
   with_gnu_ld=no
 fi
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; 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
+    # 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` ;;
@@ -8100,7 +8129,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
       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"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -8111,7 +8140,7 @@ $as_echo_n "checking for ld used by $CC... " >&6; }
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
 $as_echo_n "checking for GNU ld... " >&6; }
 else
@@ -8122,32 +8151,32 @@ if ${lt_cv_path_LD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$LD"; then
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    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"
+      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 no != "$with_gnu_ld" && break
        ;;
       *)
-       test "$with_gnu_ld" != yes && break
+       test yes != "$with_gnu_ld" && break
        ;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi
 fi
 
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
 $as_echo "$LD" >&6; }
@@ -8190,33 +8219,38 @@ if ${lt_cv_path_NM+:} false; then :
 else
   if test -n "$NM"; then
   # Let the user override the test.
-  lt_cv_path_NM="$NM"
+  lt_cv_path_NM=$NM
 else
-  lt_nm_to_check="${ac_tool_prefix}nm"
+  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
+    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"
+      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
+      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:
+       # 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'*)
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
-         break
+         break 2
          ;;
        *)
          case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
-           break
+           break 2
            ;;
          *)
            lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
@@ -8227,15 +8261,15 @@ else
        esac
       fi
     done
-    IFS="$lt_save_ifs"
+    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"
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
@@ -8341,9 +8375,9 @@ esac
   fi
 fi
 
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
@@ -8351,8 +8385,8 @@ fi
     esac
   fi
 
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
@@ -8403,7 +8437,7 @@ if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
     i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
@@ -8443,7 +8477,7 @@ else
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # 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`
@@ -8494,22 +8528,22 @@ else
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     if test -n "$lt_cv_sys_max_cmd_len" && \
-       test undefined != "$lt_cv_sys_max_cmd_len"; then
+       test undefined != "$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
+      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"`env echo "$teststring$teststring" 2>/dev/null` \
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
+             test 17 != "$i" # 1/2 MB should be enough
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
@@ -8527,7 +8561,7 @@ else
 
 fi
 
-if test -n $lt_cv_sys_max_cmd_len ; then
+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
@@ -8545,30 +8579,6 @@ max_cmd_len=$lt_cv_sys_max_cmd_len
 : ${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%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && 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
@@ -8691,13 +8701,13 @@ esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       reload_cmds=false
     fi
     ;;
   darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
@@ -8822,13 +8832,13 @@ 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.
+# '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.
+# that 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]*)
@@ -8855,8 +8865,7 @@ 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.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+  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
@@ -8952,8 +8961,8 @@ newos6*)
   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
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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)$'
@@ -9006,6 +9015,9 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 
 fi
@@ -9160,8 +9172,8 @@ else
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
@@ -9173,7 +9185,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 
@@ -9326,7 +9338,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-      if test "$ac_status" -eq 0; then
+      if test 0 -eq "$ac_status"; then
        # Ensure the archiver fails upon bogus file names.
        rm -f conftest.$ac_objext libconftest.a
        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
@@ -9334,7 +9346,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
-       if test "$ac_status" -ne 0; then
+       if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
@@ -9347,7 +9359,7 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
 $as_echo "$lt_cv_ar_at_file" >&6; }
 
-if test "x$lt_cv_ar_at_file" = xno; then
+if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
@@ -9564,7 +9576,7 @@ old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -9654,7 +9666,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   symcode='[ABCDGISTW]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[ABCDEGRST]'
   fi
   ;;
@@ -9687,14 +9699,44 @@ case `$NM -V 2>&1` in
   symcode='[ABCDGIRSTW]' ;;
 esac
 
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
 # 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'"
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$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'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -9712,21 +9754,24 @@ for ac_symprfx in "" "_"; do
 
   # 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.
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported 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};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
 "     \$ 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))}"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,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'"
@@ -9774,11 +9819,11 @@ _LT_EOF
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
@@ -9804,7 +9849,7 @@ lt__PROGRAM__LTX_preloaded_symbols[] =
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
          cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
@@ -9824,13 +9869,13 @@ _LT_EOF
          mv -f conftest.$ac_objext conftstm.$ac_objext
          lt_globsym_save_LIBS=$LIBS
          lt_globsym_save_CFLAGS=$CFLAGS
-         LIBS="conftstm.$ac_objext"
+         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
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
            pipe_works=yes
          fi
          LIBS=$lt_globsym_save_LIBS
@@ -9851,7 +9896,7 @@ _LT_EOF
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
+  if test yes = "$pipe_works"; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
@@ -9904,6 +9949,16 @@ fi
 
 
 
+
+
+
+
+
+
+
+
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
 $as_echo_n "checking for sysroot... " >&6; }
 
@@ -9916,9 +9971,9 @@ fi
 
 
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -9928,8 +9983,8 @@ case ${with_sysroot} in #(
  no|'')
    ;; #(
  *)
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5
-$as_echo "${with_sysroot}" >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
    as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
    ;;
 esac
@@ -9941,18 +9996,99 @@ $as_echo "${lt_sysroot:-no}" >&6; }
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_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 dd; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
+  fi
+else
+  ac_cv_path_lt_DD=$lt_DD
+fi
+
+rm -f conftest.i conftest2.i conftest.out
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
 # 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
+test no = "$enable_libtool_lock" || 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.
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -9961,24 +10097,25 @@ ia64-*-hpux*)
   test $ac_status = 0; }; then
     case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
-       HPUX_IA64_MODE="32"
+       HPUX_IA64_MODE=32
        ;;
       *ELF-64*)
-       HPUX_IA64_MODE="64"
+       HPUX_IA64_MODE=64
        ;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo '#line '$LINENO' "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
+    if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
@@ -10007,9 +10144,50 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "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
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
 x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -10032,10 +10210,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
                ;;
            esac
            ;;
-         powerpc64le-*)
+         powerpc64le-*linux*)
            LD="${LD-ld} -m elf32lppclinux"
            ;;
-         powerpc64-*)
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -10054,10 +10232,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         powerpcle-*)
+         powerpcle-*linux*)
            LD="${LD-ld} -m elf64lppc"
            ;;
-         powerpc-*)
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -10075,7 +10253,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
+  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; }
@@ -10114,13 +10292,14 @@ 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
+  if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   fi
   ;;
 *-*solaris*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
   (eval $ac_compile) 2>&5
@@ -10132,7 +10311,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
-        i?86-*-solaris*)
+        i?86-*-solaris*|x86_64-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
@@ -10141,7 +10320,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
@@ -10157,7 +10336,7 @@ $as_echo "$lt_cv_cc_needs_belf" >&6; }
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
@@ -10268,7 +10447,7 @@ else
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
 $as_echo "$lt_cv_path_mainfest_tool" >&6; }
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 
@@ -10771,7 +10950,7 @@ if ${lt_cv_apple_cc_single_mod+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_apple_cc_single_mod=no
-      if test -z "${LT_MULTI_MODULE}"; then
+      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
@@ -10789,7 +10968,7 @@ else
          cat conftest.err >&5
        # Otherwise, if the output was created with a 0 exit code from
        # the compiler, it worked.
-       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&5
@@ -10827,7 +11006,7 @@ else
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-       LDFLAGS="$save_LDFLAGS"
+       LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
@@ -10856,7 +11035,7 @@ _LT_EOF
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
        cat conftest.err >&5
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&5
 $as_echo "$lt_cv_ld_force_load" >&6; }
     case $host_os in
     rhapsody* | darwin1.[012])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+      _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' ;;
+         _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' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+    if test yes = "$lt_cv_apple_cc_single_mod"; 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'
+    if test yes = "$lt_cv_ld_exported_symbols_list"; 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}'
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
     fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -10902,6 +11081,41 @@ $as_echo "$lt_cv_ld_force_load" >&6; }
     ;;
   esac
 
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    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
@@ -10956,7 +11170,7 @@ fi
 if test "x$xc_lt_want_enable_shared" = 'xyes' &&
   test "x$xc_lt_want_enable_static" = 'xyes'; then
   case $host_os in # (
-    mingw* | pw32* | cegcc* | os2* | aix*)
+    pw32* | cegcc* | os2* | aix*)
       xc_lt_want_enable_static='no'
       ;;
   esac
@@ -11343,14 +11557,14 @@ if test "${enable_shared+set}" = set; then :
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_shared=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -11374,14 +11588,14 @@ if test "${enable_static+set}" = set; then :
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_static=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -11405,14 +11619,14 @@ if test "${with_pic+set}" = set; then :
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for lt_pkg in $withval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$lt_pkg" = "X$lt_p"; then
          pic_mode=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
@@ -11420,8 +11634,6 @@ else
 fi
 
 
-test -z "$pic_mode" && pic_mode=default
-
 
 
 
@@ -11437,14 +11649,14 @@ if test "${enable_fast_install+set}" = set; then :
     *)
       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,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_fast_install=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac
 else
 
 
 
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
+
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
+fi
+
+    with_aix_soname=$lt_cv_with_aix_soname
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+
+
+
+
+
+
 
 
 
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
+LIBTOOL_DEPS=$ltmain
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
@@ -11511,7 +11775,7 @@ test -z "$LN_S" && LN_S="ln -s"
 
 
 
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
@@ -11550,7 +11814,7 @@ 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
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -11561,14 +11825,14 @@ esac
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# 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"
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
+old_CC=$CC
+old_CFLAGS=$CFLAGS
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
@@ -11577,15 +11841,8 @@ 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 "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
 
 
 # Only perform the check for file, if the check method requires it
@@ -11600,22 +11857,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then :
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  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
+  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"
+    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 -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"
+         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
            :
@@ -11638,13 +11895,13 @@ _LT_EOF
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac
 fi
 
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+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; }
@@ -11666,22 +11923,22 @@ if ${lt_cv_path_MAGIC_CMD+:} false; then :
 else
   case $MAGIC_CMD in
 [\\/*] |  ?:[\\/]*)
-  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  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
+  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"
+    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 -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"
+         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
            :
@@ -11704,13 +11961,13 @@ _LT_EOF
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac
 fi
 
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+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; }
@@ -11731,7 +11988,7 @@ esac
 
 # Use C for the default configuration in the libtool script
 
-lt_save_CC="$CC"
+lt_save_CC=$CC
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -11793,7 +12050,7 @@ if test -n "$compiler"; then
 
 lt_prog_compiler_no_builtin_flag=
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $cc_basename in
   nvcc*)
     lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
@@ -11809,7 +12066,7 @@ 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"
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
    # 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
@@ -11839,7 +12096,7 @@ 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
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
     lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 else
     :
@@ -11857,17 +12114,18 @@ lt_prog_compiler_pic=
 lt_prog_compiler_static=
 
 
-  if test "$GCC" = yes; then
+  if test yes = "$GCC"; 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
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       fi
+      lt_prog_compiler_pic='-fPIC'
       ;;
 
     amigaos*)
@@ -11878,8 +12136,8 @@ lt_prog_compiler_static=
         ;;
       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'.
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
             lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
         ;;
       esac
@@ -11895,6 +12153,11 @@ lt_prog_compiler_static=
       # Although the cygwin gcc ignores -fPIC, still need this for old-style
       # (--disable-auto-import) libraries
       lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -11965,7 +12228,7 @@ lt_prog_compiler_static=
     case $host_os in
     aix*)
       lt_prog_compiler_wl='-Wl,'
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        lt_prog_compiler_static='-Bstatic'
       else
@@ -11973,10 +12236,29 @@ lt_prog_compiler_static=
       fi
       ;;
 
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
+
     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'
+      case $host_os in
+      os2*)
+       lt_prog_compiler_static='$wl-static'
+       ;;
+      esac
       ;;
 
     hpux9* | hpux10* | hpux11*)
@@ -11992,7 +12274,7 @@ lt_prog_compiler_static=
        ;;
       esac
       # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static='${wl}-a ${wl}archive'
+      lt_prog_compiler_static='$wl-a ${wl}archive'
       ;;
 
     irix5* | irix6* | nonstopux*)
@@ -12003,7 +12285,7 @@ lt_prog_compiler_static=
 
     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
+      # old Intel for x86_64, which still supported -KPIC.
       ecc*)
        lt_prog_compiler_wl='-Wl,'
        lt_prog_compiler_pic='-KPIC'
@@ -12028,6 +12310,12 @@ lt_prog_compiler_static=
        lt_prog_compiler_pic='-PIC'
        lt_prog_compiler_static='-Bstatic'
        ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       lt_prog_compiler_wl='-Wl,'
+       lt_prog_compiler_pic='-fPIC'
+       lt_prog_compiler_static='-static'
+       ;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
@@ -12125,7 +12413,7 @@ lt_prog_compiler_static=
       ;;
 
     sysv4*MP*)
-      if test -d /usr/nec ;then
+      if test -d /usr/necthen
        lt_prog_compiler_pic='-Kconform_pic'
        lt_prog_compiler_static='-Bstatic'
       fi
@@ -12154,7 +12442,7 @@ lt_prog_compiler_static=
   fi
 
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     lt_prog_compiler_pic=
     ;;
@@ -12186,7 +12474,7 @@ 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"
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"  ## exclude from sc_useless_quotes_in_assignment
    # 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
@@ -12216,7 +12504,7 @@ 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
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
     case $lt_prog_compiler_pic in
      "" | " "*) ;;
      *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
@@ -12248,7 +12536,7 @@ if ${lt_cv_prog_compiler_static_works+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler_static_works=no
-   save_LDFLAGS="$LDFLAGS"
+   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
@@ -12267,13 +12555,13 @@ else
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   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
+if test yes = "$lt_cv_prog_compiler_static_works"; then
     :
 else
     lt_prog_compiler_static=
@@ -12393,8 +12681,8 @@ $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
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; 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; }
@@ -12406,9 +12694,9 @@ $as_echo_n "checking if we can lock with hard links... " >&6; }
   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;}
+  if test no = "$hard_links"; 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
@@ -12451,9 +12739,9 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   # 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'.
+  # 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
@@ -12468,7 +12756,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     # 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
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
@@ -12476,7 +12764,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
   linux* | k*bsd*-gnu | gnu*)
@@ -12489,7 +12777,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     case $host_os in
       aix*)
        # The AIX port of GNU ld has always aspired to compatibility
@@ -12511,24 +12799,24 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     esac
   fi
 
-  if test "$lt_use_gnu_ld_interface" = yes; then
+  if test yes = "$lt_use_gnu_ld_interface"; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
+    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'
+    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'
+      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
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 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 ...
@@ -12541,7 +12829,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie
     case $host_os in
     aix[3-9]*)
       # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
@@ -12560,7 +12848,7 @@ _LT_EOF
       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_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             archive_expsym_cmds=''
         ;;
       m68k)
@@ -12576,7 +12864,7 @@ _LT_EOF
        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'
+       archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       else
        ld_shlibs=no
       fi
@@ -12586,7 +12874,7 @@ _LT_EOF
       # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
       # as there is no search path for DLLs.
       hardcode_libdir_flag_spec='-L$libdir'
-      export_dynamic_flag_spec='${wl}--export-all-symbols'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
       allow_undefined_flag=unsupported
       always_export_symbols=no
       enable_shared_with_static_runtimes=yes
@@ -12594,61 +12882,89 @@ _LT_EOF
       exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
 
       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'
+        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, use it as
+       # is; otherwise, prepend EXPORTS...
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; 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
       ;;
 
     haiku*)
-      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       link_all_deplibs=yes
       ;;
 
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
+
     interix[3-9]*)
       hardcode_direct=no
       hardcode_shlibpath_var=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec='${wl}-E'
+      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'
+      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
+      if test linux-dietlibc = "$host_os"; 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
+        && test no = "$tmp_diet"
       then
        tmp_addflag=' $pic_flag'
        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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag'
          ;;
        pgf77* | pgf90* | pgf95* | pgfortran*)
                                        # 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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
@@ -12659,42 +12975,47 @@ _LT_EOF
        lf95*)                          # Lahey Fortran 8.1
          whole_archive_flag_spec=
          tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
        xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
        nvcc*)  # Cuda Compiler Driver 2.2
-         whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          compiler_needs_object=yes
          ;;
        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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$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'
+       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
+        if test yes = "$supports_anon_versioning"; 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'
+            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
+       tcc*)
+         export_dynamic_flag_spec='-rdynamic'
+         ;;
        xlf* | bgf* | bgxlf* | mpixlf*)
          # 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='${wl}-rpath ${wl}$libdir'
+         hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
          archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
+         if test yes = "$supports_anon_versioning"; 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 $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
          ;;
        esac
@@ -12708,8 +13029,8 @@ _LT_EOF
        archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -12727,8 +13048,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       else
        ld_shlibs=no
       fi
@@ -12740,7 +13061,7 @@ _LT_EOF
        ld_shlibs=no
        cat <<_LT_EOF 1>&2
 
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
 *** 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
@@ -12755,9 +13076,9 @@ _LT_EOF
          # 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'
+           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
@@ -12774,15 +13095,15 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       archive_expsym_cmds='$CC -shared $pic_flag $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
+    if test no = "$ld_shlibs"; then
       runpath_var=
       hardcode_libdir_flag_spec=
       export_dynamic_flag_spec=
@@ -12798,7 +13119,7 @@ _LT_EOF
       # 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
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
        # Neither direct hardcoding nor static linking is supported with a
        # broken collect2.
        hardcode_direct=unsupported
@@ -12806,34 +13127,57 @@ _LT_EOF
       ;;
 
     aix[4-9]*)
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; 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=""
+       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
-       # Also, AIX nm treats weak defined symbols like other global
-       # defined symbols, whereas GNU nm marks them as "W".
+       # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+       # Without the "-l" option, or with the "-B" option, AIX nm treats
+       # weak defined symbols like other global defined symbols, whereas
+       # GNU nm marks them as "W".
+       # While the 'weak' keyword is ignored in the Export File, we need
+       # it in the Import File for the 'aix-soname' feature, so we have
+       # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+         export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { 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'
+         export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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.
+       # have runtime linking enabled, and use it for executables.
+       # For shared libraries, we enable/disable runtime linking
+       # depending on the kind of the shared library created -
+       # when "with_aix_soname,aix_use_runtimelinking" is:
+       # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "aix,yes"  lib.so          shared, rtl:yes, for executables
+       #            lib.a           static archive
+       # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+       #            lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a(lib.so.V) shared, rtl:no
+       # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a           static archive
        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
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
            aix_use_runtimelinking=yes
            break
          fi
          done
+         if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+           # With aix-soname=svr4, we create the lib.so.V shared archives only,
+           # so we don't have lib.a shared libs to link our executables.
+           # We have to force runtime linking in this case.
+           aix_use_runtimelinking=yes
+           LDFLAGS="$LDFLAGS -Wl,-brtl"
+         fi
          ;;
        esac
 
@@ -12852,13 +13196,21 @@ _LT_EOF
       hardcode_direct_absolute=yes
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      file_list_spec='${wl}-f,'
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+       # The Import File defines what to hardcode.
+       hardcode_direct=no
+       hardcode_direct_absolute=no
+       ;;
+      esac
 
-      if test "$GCC" = yes; then
+      if test yes = "$GCC"; 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`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
           strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -12877,36 +13229,42 @@ _LT_EOF
          ;;
        esac
        shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
        fi
-       link_all_deplibs=no
+       # Need to ensure runtime linking is disabled for the traditional
+       # shared library, or the linker may eventually find shared libraries
+       # /with/ Import File - we do not want to mix them.
+       shared_flag_aix='-shared'
+       shared_flag_svr4='-shared $wl-G'
       else
        # not using gcc
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; 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'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
          else
-           shared_flag='${wl}-bM:SRE'
+           shared_flag='$wl-bM:SRE'
          fi
+         shared_flag_aix='$wl-bM:SRE'
+         shared_flag_svr4='$wl-G'
        fi
       fi
 
-      export_dynamic_flag_spec='${wl}-bexpall'
+      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
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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.
-        if test "${lt_cv_aix_libpath+set}" = set; then
+        if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
@@ -12940,7 +13298,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 fi
   aix_libpath=$lt_cv_aix_libpath_
 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 func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; 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'
+       if test ia64 = "$host_cpu"; 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"
+         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.
-        if test "${lt_cv_aix_libpath+set}" = set; then
+        if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   if ${lt_cv_aix_libpath_+:} false; then :
@@ -12992,7 +13350,7 @@ fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
   if test -z "$lt_cv_aix_libpath_"; then
-    lt_cv_aix_libpath_="/usr/lib:/lib"
+    lt_cv_aix_libpath_=/usr/lib:/lib
   fi
 
 fi
   aix_libpath=$lt_cv_aix_libpath_
 fi
 
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        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'
-         if test "$with_gnu_ld" = yes; then
+         no_undefined_flag=' $wl-bernotok'
+         allow_undefined_flag=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
            # We only use this code for GNU lds that support --whole-archive.
-           whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
          else
            # Exported symbols can be pulled into shared objects from archives
            whole_archive_flag_spec='$convenience'
          fi
          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'
+         archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+         # -brtl affects multiple linker settings, -berok does not and is overridden later
+         compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+         if test svr4 != "$with_aix_soname"; then
+           # This is similar to how AIX traditionally builds its shared libraries.
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+         fi
+         if test aix != "$with_aix_soname"; then
+           archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+         else
+           # used by -dlpreopen to get the symbols
+           archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+         fi
+         archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
        fi
       fi
       ;;
@@ -13023,7 +13393,7 @@ fi
       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_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             archive_expsym_cmds=''
         ;;
       m68k)
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
-       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-         else
-           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-         fi~
-         $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-         linknames='
+       archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[   ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([     ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, )='true'
        enable_shared_with_static_runtimes=yes
        # Don't use ranlib
        old_postinstall_cmds='chmod 644 $oldlib'
        postlink_cmds='lt_outputfile="@OUTPUT@"~
-         lt_tool_outputfile="@TOOL_OUTPUT@"~
-         case $lt_outputfile in
-           *.exe|*.EXE) ;;
-           *)
-             lt_outputfile="$lt_outputfile.exe"
-             lt_tool_outputfile="$lt_tool_outputfile.exe"
-             ;;
-         esac~
-         if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-           $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-           $RM "$lt_outputfile.manifest";
-         fi'
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
        ;;
       *)
        # Assume MSVC wrapper
@@ -13091,7 +13462,7 @@ fi
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
        archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
        # The linker will automatically build a .lib file if we build a DLL.
   hardcode_direct=no
   hardcode_automatic=yes
   hardcode_shlibpath_var=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
 
   else
     whole_archive_flag_spec=''
   fi
   link_all_deplibs=yes
-  allow_undefined_flag="$_lt_dar_allow_undefined"
+  allow_undefined_flag=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
-    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}"
+    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
       ;;
 
     hpux9*)
-      if test "$GCC" = yes; then
-       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv -f $output_objdir/$soname $lib'
+      if test yes = "$GCC"; then
+       archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv -f $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 -f $output_objdir/$soname $lib'
+       archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv -f $output_objdir/$soname $lib'
       fi
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      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'
+      export_dynamic_flag_spec='$wl-E'
       ;;
 
     hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-       archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       archive_cmds='$CC -shared $pic_flag $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'
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
        hardcode_libdir_separator=:
        hardcode_direct=yes
        hardcode_direct_absolute=yes
-       export_dynamic_flag_spec='${wl}-E'
+       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
       ;;
 
     hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+      if test yes,no = "$GCC,$with_gnu_ld"; then
        case $host_cpu in
        hppa*64*)
-         archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        ia64*)
-         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
-         archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         archive_cmds='$CC -shared $pic_flag $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'
+         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+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
 
@@ -13233,7 +13604,7 @@ if ${lt_cv_prog_compiler__b+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   lt_cv_prog_compiler__b=no
-   save_LDFLAGS="$LDFLAGS"
+   save_LDFLAGS=$LDFLAGS
    LDFLAGS="$LDFLAGS -b"
    echo "$lt_simple_link_test_code" > conftest.$ac_ext
    if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
@@ -13252,14 +13623,14 @@ else
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
 $as_echo "$lt_cv_prog_compiler__b" >&6; }
 
-if test x"$lt_cv_prog_compiler__b" = xyes; then
-    archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $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
@@ -13267,8 +13638,8 @@ fi
          ;;
        esac
       fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      if test no = "$with_gnu_ld"; then
+       hardcode_libdir_flag_spec='$wl+b $wl$libdir'
        hardcode_libdir_separator=:
 
        case $host_cpu in
@@ -13279,7 +13650,7 @@ fi
        *)
          hardcode_direct=yes
          hardcode_direct_absolute=yes
-         export_dynamic_flag_spec='${wl}-E'
+         export_dynamic_flag_spec='$wl-E'
 
          # hardcode_minus_L: Not really in the search PATH,
          # but as the default location of the library.
@@ -13290,8 +13661,8 @@ fi
       ;;
 
     irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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.
@@ -13301,8 +13672,8 @@ $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >
 if ${lt_cv_irix_exported_symbol+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  save_LDFLAGS="$LDFLAGS"
-          LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+  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) { return 0; }
@@ -13314,24 +13685,35 @@ else
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-           LDFLAGS="$save_LDFLAGS"
+           LDFLAGS=$save_LDFLAGS
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
 $as_echo "$lt_cv_irix_exported_symbol" >&6; }
-       if test "$lt_cv_irix_exported_symbol" = yes; then
-          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
        fi
+       link_all_deplibs=no
       else
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+       archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       inherit_rpath=yes
       link_all_deplibs=yes
       ;;
 
+    linux*)
+      case $cc_basename in
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       ld_shlibs=yes
+       archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       ;;
+      esac
+      ;;
+
     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
@@ -13346,7 +13728,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     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_flag_spec='$wl-rpath $wl$libdir'
       hardcode_libdir_separator=:
       hardcode_shlibpath_var=no
       ;;
@@ -13354,27 +13736,19 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
     *nto* | *qnx*)
       ;;
 
-    openbsd*)
+    openbsd* | bitrig*)
       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
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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'
+         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
+         archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+         hardcode_libdir_flag_spec='$wl-rpath,$libdir'
        fi
       else
        ld_shlibs=no
@@ -13385,33 +13759,53 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       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'
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
       ;;
 
     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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; 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" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
       fi
       archive_cmds_need_lc='no'
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      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} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      if test yes = "$GCC"; then
+       allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+       archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -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'
@@ -13422,24 +13816,24 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 
     solaris*)
       no_undefined_flag=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       archive_cmds='$CC -shared $pic_flag $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 $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+          $CC -shared $pic_flag $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_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'
+            $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'
+         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'
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
          ;;
        esac
       fi
@@ -13449,11 +13843,11 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       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 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'
+       if test yes = "$GCC"; 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
@@ -13463,10 +13857,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     sunos4*)
-      if test "x$host_vendor" = xsequent; then
+      if test sequent = "$host_vendor"; 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'
+       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
@@ -13515,43 +13909,43 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag='${wl}-z,text'
+      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'
+      if test yes = "$GCC"; 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'
+       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
+      # Note: We CANNOT 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'
+      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_flag_spec='$wl-R,$libdir'
       hardcode_libdir_separator=':'
       link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
+      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'
+      if test yes = "$GCC"; 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'
+       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
       ;;
 
@@ -13566,10 +13960,10 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       export_dynamic_flag_spec='${wl}-Blargedynsym'
+       export_dynamic_flag_spec='$wl-Blargedynsym'
        ;;
       esac
     fi
@@ -13577,7 +13971,7 @@ $as_echo "$lt_cv_irix_exported_symbol" >&6; }
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
 $as_echo "$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
+test no = "$ld_shlibs" && can_build_shared=no
 
 with_gnu_ld=$with_gnu_ld
 
@@ -13603,7 +13997,7 @@ x|xyes)
   # Assume -lc should be added
   archive_cmds_need_lc=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $archive_cmds in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -13818,14 +14212,14 @@ 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
+if test yes = "$GCC"; then
   case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
   esac
   case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
@@ -13841,28 +14235,35 @@ if test "$GCC" = yes; then
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
+  # 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`
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
   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
+    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"
+    elif test -n "$lt_multi_os_dir"; then
       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;
+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;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
@@ -13876,7 +14277,7 @@ BEGIN {RS=" "; FS="/|\n";} {
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([A-Za-z]:\),\1,g'` ;;
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
@@ -13885,7 +14286,7 @@ fi
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -13902,14 +14303,16 @@ hardcode_into_libs=no
 # flags to be left without arguments
 need_version=unknown
 
+
+
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  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'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[4-9]*)
@@ -13917,41 +14320,91 @@ aix[4-9]*)
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    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
+    # 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
+          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
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot 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
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
       # 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
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
       # 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
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
     shlibpath_var=LIBPATH
   fi
   ;;
@@ -13961,18 +14414,18 @@ amigaos*)
   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}'
+    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=`func_echo_all "$lib" | $SED '\''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'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $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}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -13980,8 +14433,8 @@ beos*)
 bsdi[45]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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"
@@ -13993,7 +14446,7 @@ bsdi[45]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -14002,8 +14455,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # gcc
     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'\''`~
+    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~
@@ -14019,17 +14472,17 @@ cygwin* | mingw* | pw32* | cegcc*)
     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}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
 
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     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}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -14038,8 +14491,8 @@ cygwin* | mingw* | pw32* | cegcc*)
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
@@ -14066,7 +14519,7 @@ cygwin* | mingw* | pw32* | cegcc*)
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -14079,8 +14532,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     esac
 
     # 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'\''`~
+    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'
@@ -14093,7 +14546,7 @@ cygwin* | mingw* | pw32* | cegcc*)
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -14106,8 +14559,8 @@ darwin* | rhapsody*)
   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'
+  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`'
@@ -14120,8 +14573,8 @@ dgux*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
   ;;
 
@@ -14139,12 +14592,13 @@ freebsd* | dragonfly*)
   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}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
@@ -14174,10 +14628,10 @@ haiku*)
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  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=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -14195,14 +14649,15 @@ hpux9* | hpux10* | hpux11*)
     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
+    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 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
     fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
   hppa*64*)
     shrext_cmds='.sl'
@@ -14210,8 +14665,8 @@ hpux9* | hpux10* | hpux11*)
     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'
+    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
     ;;
@@ -14220,8 +14675,8 @@ hpux9* | hpux10* | hpux11*)
     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'
+    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, ...
@@ -14234,8 +14689,8 @@ interix[3-9]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
@@ -14246,7 +14701,7 @@ irix5* | irix6* | nonstopux*)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
+       if test yes = "$lt_cv_prog_gnu_ld"; then
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
@@ -14254,8 +14709,8 @@ irix5* | irix6* | nonstopux*)
   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}'
+  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=
@@ -14274,8 +14729,8 @@ irix5* | irix6* | nonstopux*)
   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}"
+  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
   ;;
 
@@ -14284,13 +14739,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # 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
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
   # before this can be enabled.
   hardcode_into_libs=yes
 
-  # Append ld.so.conf contents to the search path
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) 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;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -14365,12 +14845,12 @@ netbsd*)
   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'
+    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'
+    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
@@ -14380,7 +14860,7 @@ netbsd*)
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  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
   ;;
@@ -14389,58 +14869,68 @@ newsos6)
   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'
+  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*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  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
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
   else
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   fi
+  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
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
   dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  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'
   ;;
 
 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}'
+  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"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -14451,8 +14941,8 @@ solaris*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
@@ -14462,11 +14952,11 @@ solaris*)
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  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
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -14474,8 +14964,8 @@ sunos4*)
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  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)
@@ -14496,24 +14986,24 @@ sysv4 | sysv4.3*)
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/necthen
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    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
+  version_type=sco
   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'
+  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
+  if test yes = "$with_gnu_ld"; 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'
@@ -14531,7 +15021,7 @@ tpf*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  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
@@ -14539,8 +15029,8 @@ tpf*)
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  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
   ;;
 
@@ -14550,20 +15040,35 @@ uts4*)
 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
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; 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"
+if test set = "${lt_cv_sys_lib_search_path_spec+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"
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
 
 
 
@@ -14660,15 +15165,15 @@ $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
+   test yes = "$hardcode_automatic"; then
 
   # We can hardcode non-existent directories.
-  if test "$hardcode_direct" != no &&
+  if test no != "$hardcode_direct" &&
      # 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
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
     # Linking always hardcodes the temporary library directory.
     hardcode_action=relink
   else
 { $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
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -14698,7 +15203,7 @@ fi
 
 
 
-  if test "x$enable_dlopen" != xyes; then
+  if test yes != "$enable_dlopen"; then
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
@@ -14708,23 +15213,23 @@ else
 
   case $host_os in
   beos*)
-    lt_cv_dlopen="load_add_on"
+    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=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
-  # if libdl is installed we need to link against it
+    # 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 ${ac_cv_lib_dl_dlopen+:} false; then :
 { $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" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
 else
 
-    lt_cv_dlopen="dyld"
+    lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
 
 
     ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
   *)
     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
 if test "x$ac_cv_func_shl_load" = xyes; then :
-  lt_cv_dlopen="shl_load"
+  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; }
 { $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" = xyes; then :
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
+  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" = xyes; then :
-  lt_cv_dlopen="dlopen"
+  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; }
@@ -14849,7 +15362,7 @@ 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" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+  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; }
@@ -14885,7 +15398,7 @@ 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" = xyes; then :
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+  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; }
@@ -14921,7 +15434,7 @@ 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" = xyes; then :
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
 
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   fi
 
   case $lt_cv_dlopen in
   dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
-    save_LDFLAGS="$LDFLAGS"
+    save_LDFLAGS=$LDFLAGS
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
@@ -14964,7 +15477,7 @@ $as_echo_n "checking whether a program can dlopen itself... " >&6; }
 if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-         if test "$cross_compiling" = yes; then :
+         if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -15011,9 +15524,9 @@ else
 #  endif
 #endif
 
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -15043,7 +15556,7 @@ _LT_EOF
   (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
+  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
 { $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
+    if test yes = "$lt_cv_dlopen_self"; 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 ${lt_cv_dlopen_self_static+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-         if test "$cross_compiling" = yes; then :
+         if test yes = "$cross_compiling"; then :
   lt_cv_dlopen_self_static=cross
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -15117,9 +15630,9 @@ else
 #  endif
 #endif
 
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -15149,7 +15662,7 @@ _LT_EOF
   (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
+  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
@@ -15170,9 +15683,9 @@ fi
 $as_echo "$lt_cv_dlopen_self_static" >&6; }
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
@@ -15216,7 +15729,7 @@ else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
-    if test -n "$STRIP" ; then
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -15244,7 +15757,7 @@ fi
 
 
 
-  # Report which library types will actually be built
+  # Report what 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
@@ -15252,13 +15765,13 @@ $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
+  test no = "$can_build_shared" && 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
+    test yes = "$enable_shared" && enable_static=no
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
@@ -15266,8 +15779,12 @@ $as_echo_n "checking whether to build shared libraries... " >&6; }
     ;;
 
   aix[4-9]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;                  # shared object as lib.so file only
+      yes,svr4,*) ;;                   # shared object as lib.so archive member only
+      yes,*) enable_static=no ;;       # shared object in lib.a archive as well
+      esac
     fi
     ;;
   esac
@@ -15277,7 +15794,7 @@ $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
+  test yes = "$enable_shared" || enable_static=yes
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
 $as_echo "$enable_static" >&6; }
 
@@ -15291,7 +15808,7 @@ 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"
+CC=$lt_save_CC
 
 
 
@@ -15612,6 +16129,9 @@ esac
   { $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; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15650,8 +16170,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___DECC=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15690,6 +16214,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___DECC_VER=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___DECC" = "yes" &&
     test "$curl_cv_have_def___DECC_VER" = "yes"; then
@@ -15711,6 +16236,9 @@ $as_echo "no" >&6; }
   { $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; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15749,6 +16277,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___HP_cc=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___HP_cc" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -15769,6 +16298,9 @@ $as_echo "no" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is IBM C" >&5
 $as_echo_n "checking if compiler is IBM C... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15807,6 +16339,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___IBMC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___IBMC__" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -15835,6 +16368,9 @@ $as_echo "no" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is Intel C" >&5
 $as_echo_n "checking if compiler is Intel C... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15873,12 +16409,16 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___INTEL_COMPILER=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   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"
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15917,6 +16457,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___unix__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
     if test "$curl_cv_have_def___unix__" = "yes"; then
       compiler_id="INTEL_UNIX_C"
@@ -15951,6 +16492,9 @@ $as_echo "no" >&6; }
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is clang" >&5
 $as_echo_n "checking if compiler is clang... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -15989,6 +16533,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___clang__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___clang__" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -16020,6 +16565,9 @@ $as_echo "no" >&6; }
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is GNU C" >&5
 $as_echo_n "checking if compiler is GNU C... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16058,6 +16606,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___GNUC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___GNUC__" = "yes" &&
     test "$compiler_id" = "unknown"; then
@@ -16082,6 +16631,9 @@ $as_echo "yes" >&6; }
     flags_opt_yes="-O2"
     flags_opt_off="-O0"
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16120,6 +16672,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def__WIN32=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
@@ -16130,6 +16683,9 @@ $as_echo "no" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is LCC" >&5
 $as_echo_n "checking if compiler is LCC... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16168,6 +16724,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___LCC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___LCC__" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -16188,6 +16745,9 @@ $as_echo "no" >&6; }
     { $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; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16226,8 +16786,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___GNUC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16266,8 +16830,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def__COMPILER_VERSION=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16306,6 +16874,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def__SGI_COMPILER_VERSION=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___GNUC__" = "no" &&
     (test "$curl_cv_have_def__SGI_COMPILER_VERSION" = "yes" ||
@@ -16328,6 +16897,9 @@ $as_echo "no" >&6; }
     { $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; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16366,8 +16938,12 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___GNUC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16406,6 +16982,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___sgi=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___GNUC__" = "no" &&
     test "$curl_cv_have_def___sgi" = "yes" &&
@@ -16428,6 +17005,9 @@ $as_echo "no" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is SunPro C" >&5
 $as_echo_n "checking if compiler is SunPro C... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16466,6 +17046,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___SUNPRO_C=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___SUNPRO_C" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -16486,6 +17067,9 @@ $as_echo "no" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is Tiny C" >&5
 $as_echo_n "checking if compiler is Tiny C... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16524,6 +17108,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___TINYC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___TINYC__" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
@@ -16544,6 +17129,9 @@ $as_echo "no" >&6; }
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler is Watcom C" >&5
 $as_echo_n "checking if compiler is Watcom C... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16582,11 +17170,15 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___WATCOMC__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def___WATCOMC__" = "yes"; then
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -16625,6 +17217,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def___UNIX__=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
     if test "$curl_cv_have_def___UNIX__" = "yes"; then
       compiler_id="WATCOM_UNIX_C"
@@ -16660,7 +17253,7 @@ $as_echo "no" >&6; }
 ***
 *** 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/
+*** mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/
 ***
 _EOF
   fi
@@ -19929,7 +20522,9 @@ 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
+  #
+  if test "x$dontwant_rt" == "xno" ; then
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 
@@ -19950,8 +20545,8 @@ $as_echo_n "checking for monotonic clock_gettime... " >&6; }
 int main (void)
 {
 
-      struct timespec ts;
-      (void)clock_gettime(CLOCK_MONOTONIC, &ts);
+        struct timespec ts;
+        (void)clock_gettime(CLOCK_MONOTONIC, &ts);
 
  ;
  return 0;
@@ -19960,18 +20555,19 @@ int main (void)
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-    ac_cv_func_clock_gettime="yes"
+      ac_cv_func_clock_gettime="yes"
 
 else
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-    ac_cv_func_clock_gettime="no"
+      ac_cv_func_clock_gettime="no"
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  fi
 
 
     #
@@ -20921,7 +21517,7 @@ done
   if test "$LDAPLIBNAME" = "wldap32"; then
     curl_ldap_msg="enabled (winldap)"
 
-$as_echo "#define CURL_LDAP_WIN 1" >>confdefs.h
+$as_echo "#define USE_WIN32_LDAP 1" >>confdefs.h
 
   else
     curl_ldap_msg="enabled (OpenLDAP)"
@@ -20957,16 +21553,20 @@ $as_echo "yes" >&6; }
   esac
 else
   if test "$cross_compiling" = yes; then :
-  { $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
 
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
  /* is AF_INET6 available? */
 #include <sys/types.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
 #include <sys/socket.h>
+#endif
 #include <stdlib.h> /* for exit() */
 main()
 {
@@ -21005,7 +21605,12 @@ $as_echo_n "checking if struct sockaddr_in6 has sin6_scope_id member... " >&6; }
 /* end confdefs.h.  */
 
 #include <sys/types.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else
 #include <netinet/in.h>
+#endif
 int main (void)
 {
 struct sockaddr_in6 s; s.sin6_scope_id = 0;
@@ -21117,6 +21722,8 @@ if test "${with_gssapi+set}" = set; then :
 fi
 
 
+: ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"}
+
 save_CPPFLAGS="$CPPFLAGS"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GSS-API support is requested" >&5
 $as_echo_n "checking if GSS-API support is requested... " >&6; }
@@ -21127,8 +21734,8 @@ $as_echo "yes" >&6; }
   if test -z "$GSSAPI_INCS"; then
      if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
         GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
-     elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then
-        GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
+     elif test -f "$KRB5CONFIG"; then
+        GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
      elif test "$GSSAPI_ROOT" != "yes"; then
         GSSAPI_INCS="-I$GSSAPI_ROOT/include"
      fi
@@ -21272,8 +21879,8 @@ $as_echo "#define HAVE_GSSAPI 1" >>confdefs.h
         if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
                                  gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi`
            LIBS="$gss_libs $LIBS"
-        elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then
-                                 gss_libs=`$GSSAPI_ROOT/bin/krb5-config --libs gssapi`
+        elif test -f "$KRB5CONFIG"; then
+                                 gss_libs=`$KRB5CONFIG --libs gssapi`
            LIBS="$gss_libs $LIBS"
         else
            case $host in
@@ -21395,6 +22002,37 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
   CLEANCPPFLAGS="$CPPFLAGS"
   CLEANLIBS="$LIBS"
 
+    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
+
   case "$OPT_SSL" in
   yes)
         if test x$cross_compiling != xyes; then
@@ -21432,10 +22070,10 @@ $as_echo "$as_me: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&6;}
   if test "$PKGTEST" = "yes"; then
 
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -21535,8 +22173,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    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=`
@@ -21579,6 +22218,7 @@ $as_echo "found" >&6; }
     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
@@ -21595,40 +22235,9 @@ $as_echo "$as_me: pkg-config: SSL_CPPFLAGS: \"$SSL_CPPFLAGS\"" >&6;}
     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 ${ac_cv_lib_crypto_CRYPTO_lock+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HMAC_Update in -lcrypto" >&5
+$as_echo_n "checking for HMAC_Update in -lcrypto... " >&6; }
+if ${ac_cv_lib_crypto_HMAC_Update+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -21640,26 +22249,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char CRYPTO_lock ();
+char HMAC_Update ();
 int main (void)
 {
-return CRYPTO_lock ();
+return HMAC_Update ();
  ;
  return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_crypto_CRYPTO_lock=yes
+  ac_cv_lib_crypto_HMAC_Update=yes
 else
-  ac_cv_lib_crypto_CRYPTO_lock=no
+  ac_cv_lib_crypto_HMAC_Update=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" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_HMAC_Update" >&5
+$as_echo "$ac_cv_lib_crypto_HMAC_Update" >&6; }
+if test "x$ac_cv_lib_crypto_HMAC_Update" = xyes; then :
 
      HAVECRYPTO="yes"
      LIBS="-lcrypto $LIBS"
@@ -21668,9 +22277,9 @@ 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 ${ac_cv_lib_crypto_CRYPTO_add_lock+:} false; then :
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HMAC_Init_ex in -lcrypto" >&5
+$as_echo_n "checking for HMAC_Init_ex in -lcrypto... " >&6; }
+if ${ac_cv_lib_crypto_HMAC_Init_ex+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -21682,26 +22291,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char CRYPTO_add_lock ();
+char HMAC_Init_ex ();
 int main (void)
 {
-return CRYPTO_add_lock ();
+return HMAC_Init_ex ();
  ;
  return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_crypto_CRYPTO_add_lock=yes
+  ac_cv_lib_crypto_HMAC_Init_ex=yes
 else
-  ac_cv_lib_crypto_CRYPTO_add_lock=no
+  ac_cv_lib_crypto_HMAC_Init_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_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" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_HMAC_Init_ex" >&5
+$as_echo "$ac_cv_lib_crypto_HMAC_Init_ex" >&6; }
+if test "x$ac_cv_lib_crypto_HMAC_Init_ex" = xyes; then :
 
        HAVECRYPTO="yes"
        LIBS="-lcrypto $LIBS"
 
 
   if test X"$HAVECRYPTO" = X"yes"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL linking without -ldl" >&5
+$as_echo_n "checking OpenSSL linking without -ldl... " >&6; }
+     saved_libs=$LIBS
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <openssl/evp.h>
+
+int main (void)
+{
+
+          SSLeay_add_all_algorithms();
+
+ ;
+ 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; }
+          LIBS="$saved_libs"
+
+else
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL linking with -ldl" >&5
+$as_echo_n "checking OpenSSL linking with -ldl... " >&6; }
+          LIBS="-ldl $LIBS"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+            #include <openssl/evp.h>
+
+int main (void)
+{
+
+            SSLeay_add_all_algorithms();
+
+ ;
+ 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; }
+            LIBS="$saved_libs -ldl"
+
+else
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+            LIBS="$saved_libs"
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+  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; }
@@ -21865,10 +22544,6 @@ done
     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"
@@ -21884,8 +22559,6 @@ done
     else
        LIBS="$CLEANLIBS"
     fi
-            USE_SSLEAY="$OPENSSL_ENABLED"
-
 
     if test X"$OPT_SSL" != Xoff &&
        test "$OPENSSL_ENABLED" != "1"; then
 done
 
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BoringSSL" >&5
+$as_echo_n "checking for BoringSSL... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+                #include <openssl/base.h>
+
+int main (void)
+{
+
+                #ifndef OPENSSL_IS_BORINGSSL
+                #error not boringssl
+                #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 HAVE_BORINGSSL 1
+_ACEOF
 
-    { $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; }
+        curl_ssl_msg="enabled (BoringSSL)"
+
+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
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libressl" >&5
+$as_echo_n "checking for libressl... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 
-#include <openssl/ssl.h>
+#include <openssl/opensslv.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
+        int dummy = LIBRESSL_VERSION_NUMBER;
 
  ;
  return 0;
@@ -21974,10 +22681,10 @@ if ac_fn_c_try_compile "$LINENO"; then :
 $as_echo "yes" >&6; }
 
 cat >>confdefs.h <<_ACEOF
-#define USE_YASSLEMUL 1
+#define HAVE_LIBRESSL 1
 _ACEOF
 
-      curl_ssl_msg="enabled (OpenSSL emulation by yaSSL)"
+      curl_ssl_msg="enabled (libressl)"
 
 else
 
@@ -22006,6 +22713,9 @@ $as_echo "$as_me: Added $LIB_OPENSSL to LD_LIBRARY_PATH" >&6;}
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL headers version" >&5
 $as_echo_n "checking for OpenSSL headers version... " >&6; }
 
+    OLDCPPFLAGS=$CPPFLAGS
+  # CPPPFLAGS comes from CURL_CPP_P
+  CPPFLAGS="$CPPPFLAGS"
       if test -z "$SED"; then
     as_fn_error $? "SED not set. Cannot continue without SED being set." "$LINENO" 5
   fi
@@ -22050,6 +22760,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     curl_cv_def_OPENSSL_VERSION_NUMBER=$tmp_exp
 
   fi
+      CPPFLAGS=$OLDCPPFLAGS
 
   if test "$curl_cv_have_def_OPENSSL_VERSION_NUMBER" = "yes"; then
     tst_verlen=`expr "$curl_cv_def_OPENSSL_VERSION_NUMBER" : '.*'`
@@ -22072,6 +22783,7 @@ rm -f conftest.err conftest.i conftest.$ac_ext
     esac
     case $tst_api in
       0x110) tst_show="1.1.0" ;;
+      0x102) tst_show="1.0.2" ;;
       0x101) tst_show="1.0.1" ;;
       0x100) tst_show="1.0.0" ;;
       0x099) tst_show="0.9.9" ;;
@@ -22181,6 +22893,42 @@ rm -f core conftest.err conftest.$ac_objext \
 /* end confdefs.h.  */
 
 
+#define SSL_CONF_CTX_new innocuous_SSL_CONF_CTX_new
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+#undef SSL_CONF_CTX_new
+#ifdef __cplusplus
+extern "C"
+#endif
+char SSL_CONF_CTX_new ();
+#if defined __stub_SSL_CONF_CTX_new || defined __stub___SSL_CONF_CTX_new
+choke me
+#endif
+
+int main (void)
+{
+return SSL_CONF_CTX_new ();
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+      tst_api="0x102"
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  fi
+  if test "$tst_api" = "unknown"; then
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
 #define SSL_renegotiate_abbreviated innocuous_SSL_renegotiate_abbreviated
 #ifdef __STDC__
 # include <limits.h>
@@ -22538,6 +23286,7 @@ rm -f core conftest.err conftest.$ac_objext \
   fi
   case $tst_api in
     0x110) tst_show="1.1.0" ;;
+    0x102) tst_show="1.0.2" ;;
     0x101) tst_show="1.0.1" ;;
     0x100) tst_show="1.0.0" ;;
     0x099) tst_show="0.9.9" ;;
@@ -22680,9 +23429,9 @@ $as_echo "$ac_cv_lib_crypto_SRP_Calc_client_key" >&6; }
 if test "x$ac_cv_lib_crypto_SRP_Calc_client_key" = xyes; then :
 
 
-$as_echo "#define HAVE_SSLEAY_SRP 1" >>confdefs.h
+$as_echo "#define HAVE_OPENSSL_SRP 1" >>confdefs.h
 
-     HAVE_SSLEAY_SRP=1
+     HAVE_OPENSSL_SRP=1
 
 
 fi
@@ -22711,10 +23460,10 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
 
     if test "x$OPT_GNUTLS" = "xyes"; then
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -22814,8 +23563,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    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=`
@@ -22948,6 +23698,17 @@ $as_echo "$as_me: detected GnuTLS version $version" >&6;}
 $as_echo "$as_me: Added $gtlslib to LD_LIBRARY_PATH" >&6;}
           fi
         fi
+        for ac_func in gnutls_certificate_set_x509_key_file2
+do :
+  ac_fn_c_check_func "$LINENO" "gnutls_certificate_set_x509_key_file2" "ac_cv_func_gnutls_certificate_set_x509_key_file2"
+if test "x$ac_cv_func_gnutls_certificate_set_x509_key_file2" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2 1
+_ACEOF
+
+fi
+done
+
       fi
 
     fi
@@ -23333,34 +24094,34 @@ $as_echo "$as_me: Added $polarssllib to LD_LIBRARY_PATH" >&6;}
 fi
 
 
-OPT_CYASSL=no
+OPT_MBEDTLS=no
 
 _cppflags=$CPPFLAGS
 _ldflags=$LDFLAGS
 
-# Check whether --with-cyassl was given.
-if test "${with_cyassl+set}" = set; then :
-  withval=$with_cyassl; OPT_CYASSL=$withval
+# Check whether --with-mbedtls was given.
+if test "${with_mbedtls+set}" = set; then :
+  withval=$with_mbedtls; OPT_MBEDTLS=$withval
 fi
 
 
 if test "$curl_ssl_msg" = "$init_ssl_msg"; then
 
-  if test X"$OPT_CYASSL" != Xno; then
+  if test X"$OPT_MBEDTLS" != Xno; then
 
-    if test "$OPT_CYASSL" = "yes"; then
-      OPT_CYASSL=""
+    if test "$OPT_MBEDTLS" = "yes"; then
+      OPT_MBEDTLS=""
     fi
 
-    if test -z "$OPT_CYASSL" ; then
+    if test -z "$OPT_MBEDTLS" ; then
 
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CyaSSL_Init in -lcyassl" >&5
-$as_echo_n "checking for CyaSSL_Init in -lcyassl... " >&6; }
-if ${ac_cv_lib_cyassl_CyaSSL_Init+:} false; then :
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mbedtls_havege_init in -lmbedtls" >&5
+$as_echo_n "checking for mbedtls_havege_init in -lmbedtls... " >&6; }
+if ${ac_cv_lib_mbedtls_mbedtls_havege_init+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
-LIBS="-lcyassl  $LIBS"
+LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -23368,35 +24129,35 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char CyaSSL_Init ();
+char mbedtls_havege_init ();
 int main (void)
 {
-return CyaSSL_Init ();
+return mbedtls_havege_init ();
  ;
  return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_cyassl_CyaSSL_Init=yes
+  ac_cv_lib_mbedtls_mbedtls_havege_init=yes
 else
-  ac_cv_lib_cyassl_CyaSSL_Init=no
+  ac_cv_lib_mbedtls_mbedtls_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_cyassl_CyaSSL_Init" >&5
-$as_echo "$ac_cv_lib_cyassl_CyaSSL_Init" >&6; }
-if test "x$ac_cv_lib_cyassl_CyaSSL_Init" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mbedtls_mbedtls_havege_init" >&5
+$as_echo "$ac_cv_lib_mbedtls_mbedtls_havege_init" >&6; }
+if test "x$ac_cv_lib_mbedtls_mbedtls_havege_init" = xyes; then :
 
 
-$as_echo "#define USE_CYASSL 1" >>confdefs.h
+$as_echo "#define USE_MBEDTLS 1" >>confdefs.h
 
-         USE_CYASSL=1
+         USE_MBEDTLS=1
 
-         CYASSL_ENABLED=1
-         USE_CYASSL="yes"
-         curl_ssl_msg="enabled (CyaSSL)"
+         MBEDTLS_ENABLED=1
+         USE_MBEDTLS="yes"
+         curl_ssl_msg="enabled (mbedTLS)"
 
 fi
 
     addld=""
     addlib=""
     addcflags=""
-    cyassllib=""
+    mbedtlslib=""
 
-    if test "x$USE_CYASSL" != "xyes"; then
-            addld=-L$OPT_CYASSL/lib$libsuff
-      addcflags=-I$OPT_CYASSL/include
-      cyassllib=$OPT_CYASSL/lib$libsuff
+    if test "x$USE_MBEDTLS" != "xyes"; then
+            addld=-L$OPT_MBEDTLS/lib$libsuff
+      addcflags=-I$OPT_MBEDTLS/include
+      mbedtlslib=$OPT_MBEDTLS/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 mbedtls_ssl_init in -lmbedtls" >&5
+$as_echo_n "checking for mbedtls_ssl_init in -lmbedtls... " >&6; }
+if ${ac_cv_lib_mbedtls_mbedtls_ssl_init+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char mbedtls_ssl_init ();
+int main (void)
+{
+return mbedtls_ssl_init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_mbedtls_mbedtls_ssl_init=yes
+else
+  ac_cv_lib_mbedtls_mbedtls_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_mbedtls_mbedtls_ssl_init" >&5
+$as_echo "$ac_cv_lib_mbedtls_mbedtls_ssl_init" >&6; }
+if test "x$ac_cv_lib_mbedtls_mbedtls_ssl_init" = xyes; then :
+
+
+$as_echo "#define USE_MBEDTLS 1" >>confdefs.h
+
+       USE_MBEDTLS=1
+
+       MBEDTLS_ENABLED=1
+       USE_MBEDTLS="yes"
+       curl_ssl_msg="enabled (mbedTLS)"
+
+else
+
+         CPPFLAGS=$_cppflags
+         LDFLAGS=$_ldflags
+
+fi
+
+    fi
+
+    if test "x$USE_MBEDTLS" = "xyes"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: detected mbedTLS" >&5
+$as_echo "$as_me: detected mbedTLS" >&6;}
+
+      LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
+
+      if test -n "$mbedtlslib"; then
+                                        if test "x$cross_compiling" != "xyes"; then
+          LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mbedtlslib"
+          export LD_LIBRARY_PATH
+          { $as_echo "$as_me:${as_lineno-$LINENO}: Added $mbedtlslib to LD_LIBRARY_PATH" >&5
+$as_echo "$as_me: Added $mbedtlslib to LD_LIBRARY_PATH" >&6;}
+        fi
+      fi
+    fi
+
+  fi
+fi
+
+
+OPT_CYASSL=no
+
+_cppflags=$CPPFLAGS
+_ldflags=$LDFLAGS
+
+# Check whether --with-cyassl was given.
+if test "${with_cyassl+set}" = set; then :
+  withval=$with_cyassl; OPT_CYASSL=$withval
+fi
+
+
+if test "$curl_ssl_msg" = "$init_ssl_msg"; then
+
+  if test X"$OPT_CYASSL" != Xno; then
+
+    if test "$OPT_CYASSL" = "yes"; then
+      OPT_CYASSL=""
+    fi
+
+
+    cyassllibname=cyassl
+
+    if test -z "$OPT_CYASSL" ; then
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CyaSSL_Init in -lcyassl" >&5
+$as_echo_n "checking for CyaSSL_Init in -lcyassl... " >&6; }
+if ${ac_cv_lib_cyassl_CyaSSL_Init+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcyassl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char CyaSSL_Init ();
+int main (void)
+{
+return CyaSSL_Init ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_cyassl_CyaSSL_Init=yes
+else
+  ac_cv_lib_cyassl_CyaSSL_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_cyassl_CyaSSL_Init" >&5
+$as_echo "$ac_cv_lib_cyassl_CyaSSL_Init" >&6; }
+if test "x$ac_cv_lib_cyassl_CyaSSL_Init" = xyes; then :
+
+
+$as_echo "#define USE_CYASSL 1" >>confdefs.h
+
+         USE_CYASSL=1
+
+         CYASSL_ENABLED=1
+         USE_CYASSL="yes"
+         curl_ssl_msg="enabled (CyaSSL)"
+
+fi
+
+    fi
+
+    addld=""
+    addlib=""
+    addcflags=""
+    cyassllib=""
+
+    if test "x$USE_CYASSL" != "xyes"; then
+            addld=-L$OPT_CYASSL/lib$libsuff
+      addcflags=-I$OPT_CYASSL/include
+      cyassllib=$OPT_CYASSL/lib$libsuff
 
       LDFLAGS="$LDFLAGS $addld"
       if test "$addcflags" != "-I/usr/include"; then
@@ -23465,14 +24386,82 @@ else
 
          CPPFLAGS=$_cppflags
          LDFLAGS=$_ldflags
+         cyassllib=""
 
 fi
 
     fi
 
+    addld=""
+    addlib=""
+    addcflags=""
+
+    if test "x$USE_CYASSL" != "xyes"; then
+            addld=-L$OPT_CYASSL/lib$libsuff
+      addcflags=-I$OPT_CYASSL/include
+      cyassllib=$OPT_CYASSL/lib$libsuff
+
+      LDFLAGS="$LDFLAGS $addld"
+      if test "$addcflags" != "-I/usr/include"; then
+         CPPFLAGS="$CPPFLAGS $addcflags"
+      fi
+
+      cyassllibname=wolfssl
+      my_ac_save_LIBS="$LIBS"
+      LIBS="-l$cyassllibname -lm $LIBS"
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CyaSSL_Init in -lwolfssl" >&5
+$as_echo_n "checking for CyaSSL_Init in -lwolfssl... " >&6; }
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+/* These aren't needed for detection and confuse WolfSSL.
+   They are set up properly later if it is detected.  */
+#undef SIZEOF_LONG
+#undef SIZEOF_LONG_LONG
+#include <cyassl/ssl.h>
+
+int main (void)
+{
+
+         return CyaSSL_Init();
+
+ ;
+ 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; }
+
+$as_echo "#define USE_CYASSL 1" >>confdefs.h
+
+         USE_CYASSL=1
+
+         CYASSL_ENABLED=1
+         USE_CYASSL="yes"
+         curl_ssl_msg="enabled (WolfSSL)"
+
+else
+
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+         CPPFLAGS=$_cppflags
+         LDFLAGS=$_ldflags
+         cyassllib=""
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+      LIBS="$my_ac_save_LIBS"
+    fi
+
     if test "x$USE_CYASSL" = "xyes"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: detected CyaSSL" >&5
-$as_echo "$as_me: detected CyaSSL" >&6;}
+      { $as_echo "$as_me:${as_lineno-$LINENO}: detected $cyassllibname" >&5
+$as_echo "$as_me: detected $cyassllibname" >&6;}
 
             # 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
@@ -23508,6 +24497,19 @@ _ACEOF
 
 
 
+            for ac_header in cyassl/options.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "cyassl/options.h" "ac_cv_header_cyassl_options_h" "$ac_includes_default"
+if test "x$ac_cv_header_cyassl_options_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CYASSL_OPTIONS_H 1
+_ACEOF
+
+fi
+
+done
+
+
             for ac_header in cyassl/error-ssl.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "cyassl/error-ssl.h" "ac_cv_header_cyassl_error_ssl_h" "$ac_includes_default"
 done
 
 
-      LIBS="-lcyassl -lm $LIBS"
+      LIBS="-l$cyassllibname -lm $LIBS"
+
+      if test "x$cyassllibname" = "xwolfssl"; then
+                        for ac_func in wolfSSLv3_client_method \
+                       wolfSSL_get_peer_certificate
+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
+
+      else
+                for ac_func in CyaSSL_get_peer_certificate
+do :
+  ac_fn_c_check_func "$LINENO" "CyaSSL_get_peer_certificate" "ac_cv_func_CyaSSL_get_peer_certificate"
+if test "x$ac_cv_func_CyaSSL_get_peer_certificate" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CYASSL_GET_PEER_CERTIFICATE 1
+_ACEOF
+
+fi
+done
+
+      fi
 
       if test -n "$cyassllib"; then
                                         if test "x$cross_compiling" != "xyes"; then
@@ -23560,10 +24590,10 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
     if test "x$OPT_NSS" = "xyes"; then
 
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -23663,8 +24693,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    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=`
@@ -23705,24 +24736,191 @@ $as_echo "found" >&6; }
         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
+      NSS_PCDIR="$OPT_NSS/lib/pkgconfig"
+      if test -f "$NSS_PCDIR/nss.pc"; then
+
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}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 ${ac_cv_path_PKGCONFIG+:} false; 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 as_fn_executable_p "$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
+
+  ;;
+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 -z "$ac_cv_path_PKGCONFIG"; then
+  ac_pt_PKGCONFIG=$PKGCONFIG
+  # 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 ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKGCONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_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
+
+  ;;
+esac
+fi
+ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG
+if test -n "$ac_pt_PKGCONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5
+$as_echo "$ac_pt_PKGCONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_pt_PKGCONFIG" = x; then
+    PKGCONFIG="no"
+  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
+    PKGCONFIG=$ac_pt_PKGCONFIG
+  fi
+else
+  PKGCONFIG="$ac_cv_path_PKGCONFIG"
+fi
+
     fi
 
-    if test -n "$addlib"; then
+    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 "$NSS_PCDIR"; then
+      PKG_CONFIG_LIBDIR="$NSS_PCDIR"
+      export PKG_CONFIG_LIBDIR
+    fi
+         $PKGCONFIG --exists nss >/dev/null 2>&1 && echo 1`
 
-      CLEANLIBS="$LIBS"
-      CLEANCPPFLAGS="$CPPFLAGS"
+      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
 
-      LIBS="$addlib $LIBS"
-      if test "$addcflags" != "-I/usr/include"; then
-         CPPFLAGS="$CPPFLAGS $addcflags"
+        if test "$PKGCONFIG" != "no" ; then
+          addld=`
+    if test -n "$NSS_PCDIR"; then
+      PKG_CONFIG_LIBDIR="$NSS_PCDIR"
+      export PKG_CONFIG_LIBDIR
+    fi
+ $PKGCONFIG --libs-only-L nss`
+          addlib=`
+    if test -n "$NSS_PCDIR"; then
+      PKG_CONFIG_LIBDIR="$NSS_PCDIR"
+      export PKG_CONFIG_LIBDIR
+    fi
+ $PKGCONFIG --libs-only-l nss`
+          addcflags=`
+    if test -n "$NSS_PCDIR"; then
+      PKG_CONFIG_LIBDIR="$NSS_PCDIR"
+      export PKG_CONFIG_LIBDIR
+    fi
+ $PKGCONFIG --cflags nss`
+          version=`
+    if test -n "$NSS_PCDIR"; then
+      PKG_CONFIG_LIBDIR="$NSS_PCDIR"
+      export PKG_CONFIG_LIBDIR
+    fi
+ $PKGCONFIG --modversion nss`
+          nssprefix=`
+    if test -n "$NSS_PCDIR"; then
+      PKG_CONFIG_LIBDIR="$NSS_PCDIR"
+      export PKG_CONFIG_LIBDIR
+    fi
+ $PKGCONFIG --variable=prefix nss`
+        fi
       fi
+    fi
 
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_VersionRangeSet in -lnss3" >&5
+    if test -z "$addlib"; then
+      # Without pkg-config, we'll kludge in some defaults
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Using hard-wired libraries and compilation flags for NSS." >&5
+$as_echo "$as_me: WARNING: Using hard-wired libraries and compilation flags for NSS." >&2;}
+      addld="-L$OPT_NSS/lib"
+      addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4"
+      addcflags="-I$OPT_NSS/include"
+      version="unknown"
+      nssprefix=$OPT_NSS
+    fi
+
+    CLEANLDFLAGS="$LDFLAGS"
+    CLEANLIBS="$LIBS"
+    CLEANCPPFLAGS="$CPPFLAGS"
+
+    LDFLAGS="$addld $LDFLAGS"
+    LIBS="$addlib $LIBS"
+    if test "$addcflags" != "-I/usr/include"; then
+       CPPFLAGS="$CPPFLAGS $addcflags"
+    fi
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SSL_VersionRangeSet in -lnss3" >&5
 $as_echo_n "checking for SSL_VersionRangeSet in -lnss3... " >&6; }
 if ${ac_cv_lib_nss3_SSL_VersionRangeSet+:} false; then :
   $as_echo_n "(cached) " >&6
@@ -23760,37 +24958,36 @@ if test "x$ac_cv_lib_nss3_SSL_VersionRangeSet" = xyes; then :
 
 $as_echo "#define USE_NSS 1" >>confdefs.h
 
-       USE_NSS=1
+     USE_NSS=1
 
-       USE_NSS="yes"
-       NSS_ENABLED=1
-       curl_ssl_msg="enabled (NSS)"
+     USE_NSS="yes"
+     NSS_ENABLED=1
+     curl_ssl_msg="enabled (NSS)"
 
 else
 
-         LIBS="$CLEANLIBS"
-         CPPFLAGS="$CLEANCPPFLAGS"
+       LDFLAGS="$CLEANLDFLAGS"
+       LIBS="$CLEANLIBS"
+       CPPFLAGS="$CLEANCPPFLAGS"
 
 fi
 
 
-      if test "x$USE_NSS" = "xyes"; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: detected NSS version $version" >&5
+    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;}
 
-                NSS_LIBS=$addlib
+            NSS_LIBS=$addlib
 
 
-                                        if test "x$cross_compiling" != "xyes"; then
-          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
+                              if test "x$cross_compiling" != "xyes"; then
+        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
 fi
 OPT_AXTLS=off
@@ -23889,7 +25086,7 @@ fi
   fi
 fi
 
-if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then
+if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_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, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this." >&5
@@ -23933,15 +25130,20 @@ else
 fi
 
 
+  ca_warning="   (warning: certs not found)"
+  capath_warning="   (warning: certs not found)"
+  check_capath=""
+
   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
+        ca="$want_ca"
+    capath="$want_capath"
   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" -a "x$POLARSSL_ENABLED" != "x1"; then
-      as_fn_error $? "--with-ca-path only works with openSSL or PolarSSL" "$LINENO" 5
+        if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1" -a "x$POLARSSL_ENABLED" != "x1"; then
+      as_fn_error $? "--with-ca-path only works with OpenSSL, GnuTLS or PolarSSL" "$LINENO" 5
     fi
     capath="$want_capath"
     ca="no"
       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
+        check_capath="/etc/ssl/certs/"
       fi
     else
             { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: skipped the ca-cert path detection when cross-compiling" >&5
@@ -23983,6 +25180,30 @@ $as_echo "$as_me: WARNING: skipped the ca-cert path detection when cross-compili
     fi
   fi
 
+  if test "x$ca" = "xno" || test -f "$ca"; then
+    ca_warning=""
+  fi
+
+  if test "x$capath" != "xno"; then
+    check_capath="$capath"
+  fi
+
+  if test ! -z "$check_capath"; then
+    for a in "$check_capath"; 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
+        if test "x$capath" = "xno"; then
+          capath="$a"
+        fi
+        capath_warning=""
+        break
+      fi
+    done
+  fi
+
+  if test "x$capath" = "xno"; then
+    capath_warning=""
+  fi
+
   if test "x$ca" != "xno"; then
     CURL_CA_BUNDLE='"'$ca'"'
 
@@ -23993,7 +25214,8 @@ _ACEOF
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ca" >&5
 $as_echo "$ca" >&6; }
-  elif test "x$capath" != "xno"; then
+  fi
+  if test "x$capath" != "xno"; then
     CURL_CA_PATH="\"$capath\""
 
 cat >>confdefs.h <<_ACEOF
@@ -24002,11 +25224,122 @@ _ACEOF
 
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $capath (capath)" >&5
 $as_echo "$capath (capath)" >&6; }
-  else
+  fi
+  if test "x$ca" = "xno" && test "x$capath" = "xno"; then
     { $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 use builtin CA store of SSL library" >&5
+$as_echo_n "checking whether to use builtin CA store of SSL library... " >&6; }
+
+# Check whether --with-ca-fallback was given.
+if test "${with_ca_fallback+set}" = set; then :
+  withval=$with_ca_fallback;
+    if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then
+      as_fn_error $? "--with-ca-fallback only allows yes or no as parameter" "$LINENO" 5
+    fi
+
+else
+   with_ca_fallback="no"
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_ca_fallback" >&5
+$as_echo "$with_ca_fallback" >&6; }
+  if test "x$with_ca_fallback" = "xyes"; then
+    if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then
+      as_fn_error $? "--with-ca-fallback only works with OpenSSL or GnuTLS" "$LINENO" 5
+    fi
+
+cat >>confdefs.h <<_ACEOF
+#define CURL_CA_FALLBACK 1
+_ACEOF
+
+  fi
+
+
+
+
+# Check whether --with-libpsl was given.
+if test "${with_libpsl+set}" = set; then :
+  withval=$with_libpsl; with_libpsl=$withval
+else
+  with_libpsl=yes
+fi
+
+if test $with_libpsl != "no"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing psl_builtin" >&5
+$as_echo_n "checking for library containing psl_builtin... " >&6; }
+if ${ac_cv_search_psl_builtin+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#ifdef __cplusplus
+extern "C"
+#endif
+char psl_builtin ();
+int main (void)
+{
+return psl_builtin ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' psl; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_psl_builtin=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_psl_builtin+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_psl_builtin+:} false; then :
+
+else
+  ac_cv_search_psl_builtin=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_psl_builtin" >&5
+$as_echo "$ac_cv_search_psl_builtin" >&6; }
+ac_res=$ac_cv_search_psl_builtin
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  curl_psl_msg="yes";
+
+$as_echo "#define USE_LIBPSL 1" >>confdefs.h
+
+
+else
+  curl_psl_msg="no      (libpsl not found)";
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libpsl was not found" >&5
+$as_echo "$as_me: WARNING: libpsl was not found" >&2;}
+
+
+fi
+
+fi
+ if test "$curl_psl_msg" = "yes"; then
+  USE_LIBPSL_TRUE=
+  USE_LIBPSL_FALSE='#'
+else
+  USE_LIBPSL_TRUE='#'
+  USE_LIBPSL_FALSE=
+fi
+
 
 
 OPT_LIBMETALINK=no
@@ -24030,10 +25363,10 @@ if test X"$OPT_LIBMETALINK" != Xno; then
   if test "x$OPT_LIBMETALINK" = "xyes"; then
         PKGTEST="yes"
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -24133,8 +25466,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    if test "x$PKGCONFIG" != "xno"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmetalink options with pkg-config" >&5
 $as_echo_n "checking for libmetalink options with pkg-config... " >&6; }
             itexists=`
@@ -24163,10 +25497,10 @@ $as_echo "$as_me: PKG_CONFIG_LIBDIR will be set to \"$LIBMETALINK_PCDIR\"" >&6;}
     fi
     if test "$PKGTEST" = "yes"; then
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -24266,8 +25600,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    if test "x$PKGCONFIG" != "xno"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libmetalink options with pkg-config" >&5
 $as_echo_n "checking for libmetalink options with pkg-config... " >&6; }
             itexists=`
@@ -24396,10 +25731,10 @@ if test X"$OPT_LIBSSH2" != Xno; then
   case "$OPT_LIBSSH2" in
   yes)
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -24499,8 +25834,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    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=`
@@ -24650,10 +25986,10 @@ if test X"$OPT_LIBRTMP" != Xno; then
   case "$OPT_LIBRTMP" in
   yes)
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -24753,8 +26089,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    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=`
@@ -25097,10 +26434,10 @@ if test "$want_idn" = "yes"; then
   if test "$want_idn_path" != "default"; then
         IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig"
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -25200,8 +26537,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    if test "x$PKGCONFIG" != "xno"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn options with pkg-config" >&5
 $as_echo_n "checking for libidn options with pkg-config... " >&6; }
             itexists=`
@@ -25249,10 +26587,10 @@ $as_echo "found" >&6; }
     fi
   else
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -25352,8 +26690,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    if test "x$PKGCONFIG" != "xno"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn options with pkg-config" >&5
 $as_echo_n "checking for libidn options with pkg-config... " >&6; }
             itexists=`
@@ -25585,10 +26924,10 @@ if test X"$want_h2" != Xno; then
   CLEANLIBS="$LIBS"
 
 
-
-    PKGCONFIG="no"
-
-    if test -n "$ac_tool_prefix"; then
+    if test -n "$PKG_CONFIG"; then
+      PKGCONFIG="$PKG_CONFIG"
+    else
+      if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -25688,8 +27027,9 @@ else
   PKGCONFIG="$ac_cv_path_PKGCONFIG"
 fi
 
+    fi
 
-    if test x$PKGCONFIG != xno; then
+    if test "x$PKGCONFIG" != "xno"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnghttp2 options with pkg-config" >&5
 $as_echo_n "checking for libnghttp2 options with pkg-config... " >&6; }
             itexists=`
@@ -25744,9 +27084,11 @@ $as_echo "$as_me: -L is $LD_H2" >&6;}
     CPPFLAGS="$CPPFLAGS $CPP_H2"
     LIBS="$LIB_H2 $LIBS"
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2_session_callbacks_set_send_callback in -lnghttp2" >&5
-$as_echo_n "checking for nghttp2_session_callbacks_set_send_callback in -lnghttp2... " >&6; }
-if ${ac_cv_lib_nghttp2_nghttp2_session_callbacks_set_send_callback+:} false; then :
+    # use nghttp2_option_set_no_recv_client_magic to require nghttp2
+    # >= 1.0.0
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nghttp2_option_set_no_recv_client_magic in -lnghttp2" >&5
+$as_echo_n "checking for nghttp2_option_set_no_recv_client_magic in -lnghttp2... " >&6; }
+if ${ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_check_lib_save_LIBS=$LIBS
@@ -25758,26 +27100,26 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char nghttp2_session_callbacks_set_send_callback ();
+char nghttp2_option_set_no_recv_client_magic ();
 int main (void)
 {
-return nghttp2_session_callbacks_set_send_callback ();
+return nghttp2_option_set_no_recv_client_magic ();
  ;
  return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_nghttp2_nghttp2_session_callbacks_set_send_callback=yes
+  ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic=yes
 else
-  ac_cv_lib_nghttp2_nghttp2_session_callbacks_set_send_callback=no
+  ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic=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_nghttp2_nghttp2_session_callbacks_set_send_callback" >&5
-$as_echo "$ac_cv_lib_nghttp2_nghttp2_session_callbacks_set_send_callback" >&6; }
-if test "x$ac_cv_lib_nghttp2_nghttp2_session_callbacks_set_send_callback" = xyes; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic" >&5
+$as_echo "$ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic" >&6; }
+if test "x$ac_cv_lib_nghttp2_nghttp2_option_set_no_recv_client_magic" = xyes; then :
 
        for ac_header in nghttp2/nghttp2.h
 do :
 fi
 
 
+OPT_ZSH_FPATH=default
+
+# Check whether --with-zsh-functions-dir was given.
+if test "${with_zsh_functions_dir+set}" = set; then :
+  withval=$with_zsh_functions_dir; OPT_ZSH_FPATH=$withval
+fi
+
+case "$OPT_ZSH_FPATH" in
+  no)
+        ;;
+  default|yes)
+        ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions"
+
+    ;;
+  *)
+        ZSH_FUNCTIONS_DIR="$withval"
+
+    ;;
+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 ${ac_cv_header_stdc+:} false; then :
@@ -30482,6 +31845,12 @@ int main (void)
         struct addrinfo *ai = 0;
         int error;
 
+        #ifdef HAVE_WINSOCK2_H
+        WSADATA wsa;
+        if (WSAStartup(MAKEWORD(2,2), &wsa))
+                exit(2);
+        #endif
+
         memset(&hints, 0, sizeof(hints));
         hints.ai_flags = AI_NUMERICHOST;
         hints.ai_family = AF_UNSPEC;
@@ -32542,6 +33911,10 @@ curl_includes_arpa_inet="\
 #ifdef HAVE_ARPA_INET_H
 #  include <arpa/inet.h>
 #endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#endif
 /* includes end */"
   for ac_header in sys/types.h sys/socket.h netinet/in.h arpa/inet.h
 do :
@@ -38758,7 +40131,7 @@ 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
+if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; 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" = xyes; then :
 
@@ -38998,7 +40371,7 @@ $as_echo "yes" >&6; }
 fi
 
 
-if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_SSLEAY_SRP" = "x1") ; then
+if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_OPENSSL_SRP" = "x1") ; then
 
 $as_echo "#define USE_TLS_SRP 1" >>confdefs.h
 
@@ -39164,7 +40537,7 @@ ENABLE_STATIC="$enable_static"
 
 
 
-if test "x$USE_SSLEAY" = "x1"; then
+if test "x$OPENSSL_ENABLED" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
 elif test -n "$SSL_ENABLED"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
@@ -39192,6 +40565,10 @@ if test "x$HAVE_GSSAPI" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API"
 fi
 
+if test "x$curl_psl_msg" = "xyes"; then
+  SUPPORT_FEATURES="$SUPPORT_FEATURES PSL"
+fi
+
 if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
     \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO"
@@ -39203,7 +40580,7 @@ if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
 fi
 
 if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then
-  if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
+  if test "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \
       -o "x$DARWINSSL_ENABLED" = "x1"; then
     SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM"
@@ -39275,7 +40652,7 @@ if test "x$CURL_DISABLE_IMAP" != "x1"; then
 fi
 if test "x$CURL_DISABLE_SMB" != "x1" \
     -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \
-    -a \( "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
+    -a \( "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \
       -o "x$DARWINSSL_ENABLED" = "x1" \); then
   SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB"
@@ -39491,7 +40868,7 @@ if test "x$want_curldebug_assumed" = "xyes" &&
   ac_configure_args="$ac_configure_args --enable-curldebug"
 fi
 
-ac_config_files="$ac_config_files Makefile docs/Makefile docs/examples/Makefile docs/libcurl/Makefile docs/libcurl/opts/Makefile include/Makefile include/curl/Makefile src/Makefile lib/Makefile lib/libcurl.vers tests/Makefile tests/certs/Makefile tests/certs/scripts/Makefile tests/data/Makefile tests/server/Makefile tests/libtest/Makefile tests/unit/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_config_files="$ac_config_files Makefile docs/Makefile docs/examples/Makefile docs/libcurl/Makefile docs/libcurl/opts/Makefile include/Makefile include/curl/Makefile src/Makefile lib/Makefile scripts/Makefile lib/libcurl.vers tests/Makefile tests/certs/Makefile tests/certs/scripts/Makefile tests/data/Makefile tests/server/Makefile tests/libtest/Makefile tests/unit/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
@@ -39666,6 +41043,10 @@ 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_LIBPSL_TRUE}" && test -z "${USE_LIBPSL_FALSE}"; then
+  as_fn_error $? "conditional \"USE_LIBPSL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_TRUE}" && test -z "${CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS_FALSE}"; then
   as_fn_error $? "conditional \"CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -40143,7 +41524,7 @@ $config_headers
 Configuration commands:
 $config_commands
 
-Report bugs to <a suitable curl mailing list: http://curl.haxx.se/mail/>."
+Report bugs to <a suitable curl mailing list: https://curl.haxx.se/mail/>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
@@ -40287,6 +41668,7 @@ enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
 enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
 pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
 enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
 SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
 ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
 PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
@@ -40334,10 +41716,13 @@ compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
 GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
 nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
 lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
 objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
 MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
 lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
@@ -40402,7 +41787,8 @@ finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
 finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
 hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
 sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
-sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
 hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
 enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
 enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
@@ -40454,9 +41840,12 @@ CFLAGS \
 compiler \
 lt_cv_sys_global_symbol_pipe \
 lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
 lt_cv_sys_global_symbol_to_c_name_address \
 lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
 nm_file_list_spec \
+lt_cv_truncate_bin \
 lt_prog_compiler_no_builtin_flag \
 lt_prog_compiler_pic \
 lt_prog_compiler_wl \
@@ -40491,7 +41880,7 @@ old_striplib \
 striplib; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -40518,10 +41907,11 @@ postinstall_cmds \
 postuninstall_cmds \
 finish_cmds \
 sys_lib_search_path_spec \
-sys_lib_dlsearch_path_spec; do
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path; do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[\\\\\\\`\\"\\\$]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -40530,19 +41920,16 @@ sys_lib_dlsearch_path_spec; do
 done
 
 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
+# See if we are running on zsh, and set the options that allow our
 # commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
 
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'
 
@@ -40570,6 +41957,7 @@ do
     "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" ;;
+    "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
     "lib/libcurl.vers") CONFIG_FILES="$CONFIG_FILES lib/libcurl.vers" ;;
     "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
     "tests/certs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/certs/Makefile" ;;
@@ -41284,55 +42672,53 @@ $as_echo X"$file" |
  ;;
     "libtool":C)
 
-    # See if we are running on zsh, and set the options which allow our
+    # See if we are running on zsh, and set the options that allow our
     # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    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
+# Generated automatically by $as_me ($PACKAGE) $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.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 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 of the License, or
+# (at your option) any later version.
 #
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 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.
+# 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
+# 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.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 # The names of the tagged configurations supported by this script.
-available_tags=""
+available_tags=''
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
 
 # ### BEGIN LIBTOOL CONFIG
 
@@ -41361,6 +42747,9 @@ pic_mode=$pic_mode
 # Whether or not to optimize for fast installation.
 fast_install=$enable_fast_install
 
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
+
 # Shell to use when invoking shell scripts.
 SHELL=$lt_SHELL
 
@@ -41472,18 +42861,27 @@ 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 into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
+
 # 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 lister interface.
+nm_interface=$lt_lt_cv_nm_interface
+
 # Specify filename containing input files for \$NM.
 nm_file_list_spec=$lt_nm_file_list_spec
 
-# The root where to search for dependent libraries,and in which our libraries should be installed.
+# The root where to search for dependent libraries,and where our libraries should be installed.
 lt_sysroot=$lt_sysroot
 
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
+
 # The name of the directory that contains temporary libtool files.
 objdir=$objdir
 
@@ -41574,8 +42972,11 @@ 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
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
+
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
 
 # Whether dlopen is supported.
 dlopen_support=$enable_dlopen
@@ -41668,13 +43069,13 @@ hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 # 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
+# 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
+# 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
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
 # library is relocated.
 hardcode_direct_absolute=$hardcode_direct_absolute
 
@@ -41726,13 +43127,72 @@ hardcode_action=$hardcode_action
 
 _LT_EOF
 
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_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
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -41741,7 +43201,7 @@ _LT_EOF
   esac
 
 
-ltmain="$ac_aux_dir/ltmain.sh"
+ltmain=$ac_aux_dir/ltmain.sh
 
 
   # We use sed instead of cat because bash on DJGPP gets confused if
@@ -41751,165 +43211,6 @@ ltmain="$ac_aux_dir/ltmain.sh"
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
-  if test x"$xsi_shell" = xyes; then
-  sed -e '/^func_dirname ()$/,/^} # func_dirname /c\
-func_dirname ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_basename ()$/,/^} # func_basename /c\
-func_basename ()\
-{\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\
-func_dirname_and_basename ()\
-{\
-\    case ${1} in\
-\      */*) func_dirname_result="${1%/*}${2}" ;;\
-\      *  ) func_dirname_result="${3}" ;;\
-\    esac\
-\    func_basename_result="${1##*/}"\
-} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_stripname ()$/,/^} # func_stripname /c\
-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}"}\
-} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\
-func_split_long_opt ()\
-{\
-\    func_split_long_opt_name=${1%%=*}\
-\    func_split_long_opt_arg=${1#*=}\
-} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\
-func_split_short_opt ()\
-{\
-\    func_split_short_opt_arg=${1#??}\
-\    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\
-} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\
-func_lo2o ()\
-{\
-\    case ${1} in\
-\      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\
-\      *)    func_lo2o_result=${1} ;;\
-\    esac\
-} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_xform ()$/,/^} # func_xform /c\
-func_xform ()\
-{\
-    func_xform_result=${1%.*}.lo\
-} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_arith ()$/,/^} # func_arith /c\
-func_arith ()\
-{\
-    func_arith_result=$(( $* ))\
-} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_len ()$/,/^} # func_len /c\
-func_len ()\
-{\
-    func_len_result=${#1}\
-} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  sed -e '/^func_append ()$/,/^} # func_append /c\
-func_append ()\
-{\
-    eval "${1}+=\\${2}"\
-} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\
-func_append_quoted ()\
-{\
-\    func_quote_for_eval "${2}"\
-\    eval "${1}+=\\\\ \\$func_quote_for_eval_result"\
-} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5
-$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;}
-fi
-
-
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
@@ -42256,13 +43557,15 @@ done
   --libcurl option: ${curl_libcurl_msg}
   Verbose errors:   ${curl_verbose_msg}
   SSPI support:     ${curl_sspi_msg}
-  ca cert bundle:   ${ca}
-  ca cert path:     ${capath}
+  ca cert bundle:   ${ca}${ca_warning}
+  ca cert path:     ${capath}${capath_warning}
+  ca fallback:      ${with_ca_fallback}
   LDAP support:     ${curl_ldap_msg}
   LDAPS support:    ${curl_ldaps_msg}
   RTSP support:     ${curl_rtsp_msg}
   RTMP support:     ${curl_rtmp_msg}
   metalink support: ${curl_mtlnk_msg}
+  PSL support:      ${curl_psl_msg}
   HTTP2 support:    ${curl_h2_msg}
   Protocols:        ${SUPPORT_PROTOCOLS}
 " >&5
@@ -42286,13 +43589,15 @@ $as_echo "$as_me: Configured to build curl/libcurl:
   --libcurl option: ${curl_libcurl_msg}
   Verbose errors:   ${curl_verbose_msg}
   SSPI support:     ${curl_sspi_msg}
-  ca cert bundle:   ${ca}
-  ca cert path:     ${capath}
+  ca cert bundle:   ${ca}${ca_warning}
+  ca cert path:     ${capath}${capath_warning}
+  ca fallback:      ${with_ca_fallback}
   LDAP support:     ${curl_ldap_msg}
   LDAPS support:    ${curl_ldaps_msg}
   RTSP support:     ${curl_rtsp_msg}
   RTMP support:     ${curl_rtmp_msg}
   metalink support: ${curl_mtlnk_msg}
+  PSL support:      ${curl_psl_msg}
   HTTP2 support:    ${curl_h2_msg}
   Protocols:        ${SUPPORT_PROTOCOLS}
 " >&6;}
index a1b560c..b208d4d 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
@@ -24,14 +24,14 @@ 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/])
+AC_INIT([curl], [-], [a suitable curl mailing list: https://curl.haxx.se/mail/])
 
 XC_OVR_ZZ50
 XC_OVR_ZZ60
 CURL_OVERRIDE_AUTOCONF
 
 dnl configure script copyright
-AC_COPYRIGHT([Copyright (c) 1998 - 2014 Daniel Stenberg, <daniel@haxx.se>
+AC_COPYRIGHT([Copyright (c) 1998 - 2016 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])
 
@@ -39,6 +39,7 @@ AC_CONFIG_SRCDIR([lib/urldata.h])
 AC_CONFIG_HEADERS(lib/curl_config.h include/curl/curlbuild.h)
 AC_CONFIG_MACRO_DIR([m4])
 AM_MAINTAINER_MODE
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
 CURL_CHECK_OPTION_DEBUG
 CURL_CHECK_OPTION_OPTIMIZE
@@ -47,6 +48,7 @@ CURL_CHECK_OPTION_WERROR
 CURL_CHECK_OPTION_CURLDEBUG
 CURL_CHECK_OPTION_SYMBOL_HIDING
 CURL_CHECK_OPTION_ARES
+CURL_CHECK_OPTION_RT
 
 XC_CHECK_PATH_SEPARATOR
 
@@ -147,7 +149,7 @@ AC_SUBST(PKGADD_VENDOR)
 
 dnl
 dnl initialize all the info variables
-    curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls,winssl,darwinssl} )"
+    curl_ssl_msg="no      (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )"
     curl_ssh_msg="no      (--with-libssh2)"
    curl_zlib_msg="no      (--with-zlib)"
     curl_gss_msg="no      (--with-gssapi)"
@@ -165,6 +167,7 @@ curl_verbose_msg="enabled (--disable-verbose)"
    curl_rtsp_msg="no      (--enable-rtsp)"
    curl_rtmp_msg="no      (--with-librtmp)"
   curl_mtlnk_msg="no      (--with-libmetalink)"
+    curl_psl_msg="no      (--with-libpsl)"
 
     init_ssl_msg=${curl_ssl_msg}
 
@@ -1046,7 +1049,7 @@ if test x$CURL_DISABLE_LDAP != x1 ; then
 
   if test "$LDAPLIBNAME" = "wldap32"; then
     curl_ldap_msg="enabled (winldap)"
-    AC_DEFINE(CURL_LDAP_WIN, 1, [Use Windows LDAP implementation])
+    AC_DEFINE(USE_WIN32_LDAP, 1, [Use Windows LDAP implementation])
   else
     curl_ldap_msg="enabled (OpenLDAP)"
     if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then
@@ -1080,7 +1083,11 @@ AC_HELP_STRING([--disable-ipv6],[Disable IPv6 support]),
 
   AC_TRY_RUN([ /* is AF_INET6 available? */
 #include <sys/types.h>
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#else
 #include <sys/socket.h>
+#endif
 #include <stdlib.h> /* for exit() */
 main()
 {
@@ -1094,8 +1101,8 @@ main()
   ipv6=yes,
   AC_MSG_RESULT(no)
   ipv6=no,
-  AC_MSG_RESULT(no)
-  ipv6=no
+  AC_MSG_RESULT(yes)
+  ipv6=yes
 ))
 
 if test "$ipv6" = "yes"; then
@@ -1107,7 +1114,12 @@ 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>] ,
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else
+#include <netinet/in.h>
+#endif] ,
   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])
@@ -1184,6 +1196,8 @@ AC_ARG_WITH(gssapi,
   fi
 ])
 
+: ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"}
+
 save_CPPFLAGS="$CPPFLAGS"
 AC_MSG_CHECKING([if GSS-API support is requested])
 if test x"$want_gss" = xyes; then
@@ -1192,8 +1206,8 @@ if test x"$want_gss" = xyes; then
   if test -z "$GSSAPI_INCS"; then
      if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then
         GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi`
-     elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then
-        GSSAPI_INCS=`$GSSAPI_ROOT/bin/krb5-config --cflags gssapi`
+     elif test -f "$KRB5CONFIG"; then
+        GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi`
      elif test "$GSSAPI_ROOT" != "yes"; then
         GSSAPI_INCS="-I$GSSAPI_ROOT/include"
      fi
@@ -1283,10 +1297,10 @@ if test x"$want_gss" = xyes; then
            dnl into LIBS
            gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi`
            LIBS="$gss_libs $LIBS"
-        elif test -f "$GSSAPI_ROOT/bin/krb5-config"; then
+        elif test -f "$KRB5CONFIG"; 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`
+           gss_libs=`$KRB5CONFIG --libs gssapi`
            LIBS="$gss_libs $LIBS"
         else
            case $host in
@@ -1394,6 +1408,24 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
   CLEANCPPFLAGS="$CPPFLAGS"
   CLEANLIBS="$LIBS"
 
+  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
+
   case "$OPT_SSL" in
   yes)
     dnl --with-ssl (without path) used
@@ -1451,6 +1483,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
       SSL_CPPFLAGS=`CURL_EXPORT_PCDIR([$OPENSSL_PCDIR]) dnl
         $PKGCONFIG --cflags-only-I openssl 2>/dev/null`
 
+      AC_SUBST(SSL_LIBS)
       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"])
@@ -1471,31 +1504,13 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
   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,[
+  AC_CHECK_LIB(crypto, HMAC_Update,[
      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,[
+     AC_CHECK_LIB(crypto, HMAC_Init_ex,[
        HAVECRYPTO="yes"
        LIBS="-lcrypto $LIBS"], [
        LDFLAGS="$CLEANLDFLAGS"
@@ -1506,6 +1521,46 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
 
 
   if test X"$HAVECRYPTO" = X"yes"; then
+     AC_MSG_CHECKING([OpenSSL linking without -ldl])
+     saved_libs=$LIBS
+     AC_TRY_LINK(
+        [
+          #include <openssl/evp.h>
+        ],
+        [
+          SSLeay_add_all_algorithms();
+        ],
+        [
+          AC_MSG_RESULT(yes)
+          LIBS="$saved_libs"
+        ],
+        [
+          AC_MSG_RESULT(no)
+          AC_MSG_CHECKING([OpenSSL linking with -ldl])
+          LIBS="-ldl $LIBS"
+          AC_TRY_LINK(
+          [
+            #include <openssl/evp.h>
+          ],
+          [
+            SSLeay_add_all_algorithms();
+          ],
+          [
+            AC_MSG_RESULT(yes)
+            LIBS="$saved_libs -ldl"
+          ],
+          [
+            AC_MSG_RESULT(no)
+            LIBS="$saved_libs"
+          ]
+          )
+
+        ]
+     )
+
+  fi
+
+  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
 
@@ -1527,7 +1582,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
 
     else
 
-      dnl Have the libraries--check for SSLeay/OpenSSL headers
+      dnl Have the libraries--check for 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)"
@@ -1551,17 +1606,11 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
     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
@@ -1578,8 +1627,10 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
                 AC_CHECK_FUNCS( ENGINE_load_builtin_engines )
               ])
 
-    dnl these can only exist if openssl exists
-    dnl yassl doesn't have SSL_get_shutdown
+    dnl These can only exist if OpenSSL exists
+    dnl Older versions of Cyassl (some time before 2.9.4) don't have
+    dnl SSL_get_shutdown (but this check won't actually detect it there
+    dnl as it's a macro that needs the header files be included)
 
     AC_CHECK_FUNCS( RAND_status \
                     RAND_screen \
@@ -1589,26 +1640,36 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then
                     SSL_get_shutdown \
                     SSLv2_client_method )
 
-    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 BoringSSL])
+    AC_COMPILE_IFELSE([
+        AC_LANG_PROGRAM([[
+                #include <openssl/base.h>
+                ]],[[
+                #ifndef OPENSSL_IS_BORINGSSL
+                #error not boringssl
+                #endif
+       ]])
+    ],[
+        AC_MSG_RESULT([yes])
+        AC_DEFINE_UNQUOTED(HAVE_BORINGSSL, 1,
+                           [Define to 1 if using BoringSSL.])
+        curl_ssl_msg="enabled (BoringSSL)"
+    ],[
+        AC_MSG_RESULT([no])
+    ])
 
-    AC_MSG_CHECKING([for yaSSL using OpenSSL compatibility mode])
+    AC_MSG_CHECKING([for libressl])
     AC_COMPILE_IFELSE([
       AC_LANG_PROGRAM([[
-#include <openssl/ssl.h>
+#include <openssl/opensslv.h>
       ]],[[
-#if defined(YASSL_VERSION) && defined(OPENSSL_VERSION_NUMBER)
-        int dummy = SSL_ERROR_NONE;
-#else
-        Not the yaSSL OpenSSL compatibility header.
-#endif
+        int dummy = LIBRESSL_VERSION_NUMBER;
       ]])
     ],[
       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_DEFINE_UNQUOTED(HAVE_LIBRESSL, 1,
+        [Define to 1 if using libressl.])
+      curl_ssl_msg="enabled (libressl)"
     ],[
       AC_MSG_RESULT([no])
     ])
@@ -1672,8 +1733,8 @@ dnl ---
 if test "$OPENSSL_ENABLED" = "1"; then
   AC_CHECK_LIB(crypto, SRP_Calc_client_key,
    [
-     AC_DEFINE(HAVE_SSLEAY_SRP, 1, [if you have the function SRP_Calc_client_key])
-     AC_SUBST(HAVE_SSLEAY_SRP, [1])
+     AC_DEFINE(HAVE_OPENSSL_SRP, 1, [if you have the function SRP_Calc_client_key])
+     AC_SUBST(HAVE_OPENSSL_SRP, [1])
    ])
 fi
 
@@ -1784,6 +1845,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
             AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH])
           fi
         fi
+        AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2)
       fi
 
     fi
@@ -1922,6 +1984,93 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
 fi
 
 dnl ----------------------------------------------------
+dnl check for mbedTLS
+dnl ----------------------------------------------------
+
+OPT_MBEDTLS=no
+
+_cppflags=$CPPFLAGS
+_ldflags=$LDFLAGS
+AC_ARG_WITH(mbedtls,dnl
+AC_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root])
+AC_HELP_STRING([--without-mbedtls], [disable mbedTLS detection]),
+  OPT_MBEDTLS=$withval)
+
+if test "$curl_ssl_msg" = "$init_ssl_msg"; then
+
+  if test X"$OPT_MBEDTLS" != Xno; then
+
+    if test "$OPT_MBEDTLS" = "yes"; then
+      OPT_MBEDTLS=""
+    fi
+
+    if test -z "$OPT_MBEDTLS" ; then
+      dnl check for lib first without setting any new path
+
+      AC_CHECK_LIB(mbedtls, mbedtls_havege_init,
+      dnl libmbedtls found, set the variable
+       [
+         AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
+         AC_SUBST(USE_MBEDTLS, [1])
+         MBEDTLS_ENABLED=1
+         USE_MBEDTLS="yes"
+         curl_ssl_msg="enabled (mbedTLS)"
+        ], [], -lmbedx509 -lmbedcrypto)
+    fi
+
+    addld=""
+    addlib=""
+    addcflags=""
+    mbedtlslib=""
+
+    if test "x$USE_MBEDTLS" != "xyes"; then
+      dnl add the path and test again
+      addld=-L$OPT_MBEDTLS/lib$libsuff
+      addcflags=-I$OPT_MBEDTLS/include
+      mbedtlslib=$OPT_MBEDTLS/lib$libsuff
+
+      LDFLAGS="$LDFLAGS $addld"
+      if test "$addcflags" != "-I/usr/include"; then
+         CPPFLAGS="$CPPFLAGS $addcflags"
+      fi
+
+      AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
+       [
+       AC_DEFINE(USE_MBEDTLS, 1, [if mbedTLS is enabled])
+       AC_SUBST(USE_MBEDTLS, [1])
+       MBEDTLS_ENABLED=1
+       USE_MBEDTLS="yes"
+       curl_ssl_msg="enabled (mbedTLS)"
+       ],
+       [
+         CPPFLAGS=$_cppflags
+         LDFLAGS=$_ldflags
+       ], -lmbedx509 -lmbedcrypto)
+    fi
+
+    if test "x$USE_MBEDTLS" = "xyes"; then
+      AC_MSG_NOTICE([detected mbedTLS])
+
+      LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
+
+      if test -n "$mbedtlslib"; 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
+        if test "x$cross_compiling" != "xyes"; then
+          LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$mbedtlslib"
+          export LD_LIBRARY_PATH
+          AC_MSG_NOTICE([Added $mbedtlslib to LD_LIBRARY_PATH])
+        fi
+      fi
+    fi
+
+  fi dnl mbedTLS not disabled
+
+fi
+
+dnl ----------------------------------------------------
 dnl check for CyaSSL
 dnl ----------------------------------------------------
 
@@ -1943,6 +2092,10 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
       OPT_CYASSL=""
     fi
 
+    dnl This should be reworked to use pkg-config instead
+
+    cyassllibname=cyassl
+
     if test -z "$OPT_CYASSL" ; then
       dnl check for lib in system default first
 
@@ -1984,19 +2137,80 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
        [
          CPPFLAGS=$_cppflags
          LDFLAGS=$_ldflags
+         cyassllib=""
+       ])
+    fi
+
+    addld=""
+    addlib=""
+    addcflags=""
+
+    if test "x$USE_CYASSL" != "xyes"; then
+      dnl libcyassl renamed to libwolfssl as of 3.4.0
+      addld=-L$OPT_CYASSL/lib$libsuff
+      addcflags=-I$OPT_CYASSL/include
+      cyassllib=$OPT_CYASSL/lib$libsuff
+
+      LDFLAGS="$LDFLAGS $addld"
+      if test "$addcflags" != "-I/usr/include"; then
+         CPPFLAGS="$CPPFLAGS $addcflags"
+      fi
+
+      cyassllibname=wolfssl
+      my_ac_save_LIBS="$LIBS"
+      LIBS="-l$cyassllibname -lm $LIBS"
+
+      AC_MSG_CHECKING([for CyaSSL_Init in -lwolfssl])
+      AC_LINK_IFELSE([
+       AC_LANG_PROGRAM([[
+/* These aren't needed for detection and confuse WolfSSL.
+   They are set up properly later if it is detected.  */
+#undef SIZEOF_LONG
+#undef SIZEOF_LONG_LONG
+#include <cyassl/ssl.h>
+       ]],[[
+         return CyaSSL_Init();
+       ]])
+      ],[
+         AC_MSG_RESULT(yes)
+         AC_DEFINE(USE_CYASSL, 1, [if CyaSSL/WolfSSL is enabled])
+         AC_SUBST(USE_CYASSL, [1])
+         CYASSL_ENABLED=1
+         USE_CYASSL="yes"
+         curl_ssl_msg="enabled (WolfSSL)"
+       ],
+       [
+         AC_MSG_RESULT(no)
+         CPPFLAGS=$_cppflags
+         LDFLAGS=$_ldflags
+         cyassllib=""
        ])
+      LIBS="$my_ac_save_LIBS"
     fi
 
     if test "x$USE_CYASSL" = "xyes"; then
-      AC_MSG_NOTICE([detected CyaSSL])
+      AC_MSG_NOTICE([detected $cyassllibname])
 
       dnl cyassl/ctaocrypt/types.h needs SIZEOF_LONG_LONG defined!
       AC_CHECK_SIZEOF(long long)
 
+      dnl Versions since at least 2.6.0 may have options.h
+      AC_CHECK_HEADERS(cyassl/options.h)
+
       dnl Versions since at least 2.9.4 renamed error.h to error-ssl.h
       AC_CHECK_HEADERS(cyassl/error-ssl.h)
 
-      LIBS="-lcyassl -lm $LIBS"
+      LIBS="-l$cyassllibname -lm $LIBS"
+
+      if test "x$cyassllibname" = "xwolfssl"; then
+        dnl Recent WolfSSL versions build without SSLv3 by default
+        dnl WolfSSL needs configure --enable-opensslextra to have *get_peer*
+        AC_CHECK_FUNCS(wolfSSLv3_client_method \
+                       wolfSSL_get_peer_certificate)
+      else
+        dnl Cyassl needs configure --enable-opensslextra to have *get_peer*
+        AC_CHECK_FUNCS(CyaSSL_get_peer_certificate)
+      fi
 
       if test -n "$cyassllib"; then
         dnl when shared libs were found in a path that the run-time
@@ -2063,56 +2277,72 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
         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
+      NSS_PCDIR="$OPT_NSS/lib/pkgconfig"
+      if test -f "$NSS_PCDIR/nss.pc"; then
+        CURL_CHECK_PKGCONFIG(nss, [$NSS_PCDIR])
+        if test "$PKGCONFIG" != "no" ; then
+          addld=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-L nss`
+          addlib=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --libs-only-l nss`
+          addcflags=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --cflags nss`
+          version=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --modversion nss`
+          nssprefix=`CURL_EXPORT_PCDIR([$NSS_PCDIR]) $PKGCONFIG --variable=prefix nss`
+        fi
+      fi
     fi
 
-    if test -n "$addlib"; then
+    if test -z "$addlib"; then
+      # Without pkg-config, we'll kludge in some defaults
+      AC_MSG_WARN([Using hard-wired libraries and compilation flags for NSS.])
+      addld="-L$OPT_NSS/lib"
+      addlib="-lssl3 -lsmime3 -lnss3 -lplds4 -lplc4 -lnspr4"
+      addcflags="-I$OPT_NSS/include"
+      version="unknown"
+      nssprefix=$OPT_NSS
+    fi
 
-      CLEANLIBS="$LIBS"
-      CLEANCPPFLAGS="$CPPFLAGS"
+    CLEANLDFLAGS="$LDFLAGS"
+    CLEANLIBS="$LIBS"
+    CLEANCPPFLAGS="$CPPFLAGS"
 
-      LIBS="$addlib $LIBS"
-      if test "$addcflags" != "-I/usr/include"; then
-         CPPFLAGS="$CPPFLAGS $addcflags"
-      fi
+    LDFLAGS="$addld $LDFLAGS"
+    LIBS="$addlib $LIBS"
+    if test "$addcflags" != "-I/usr/include"; then
+       CPPFLAGS="$CPPFLAGS $addcflags"
+    fi
 
-      dnl The function SSL_VersionRangeSet() is needed to enable TLS > 1.0
-      AC_CHECK_LIB(nss3, SSL_VersionRangeSet,
-       [
-       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"
-       ])
+    dnl The function SSL_VersionRangeSet() is needed to enable TLS > 1.0
+    AC_CHECK_LIB(nss3, SSL_VersionRangeSet,
+     [
+     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)"
+     ],
+     [
+       LDFLAGS="$CLEANLDFLAGS"
+       LIBS="$CLEANLIBS"
+       CPPFLAGS="$CLEANCPPFLAGS"
+     ])
 
-      if test "x$USE_NSS" = "xyes"; then
-        AC_MSG_NOTICE([detected NSS version $version])
+    if test "x$USE_NSS" = "xyes"; then
+      AC_MSG_NOTICE([detected NSS version $version])
 
-        dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS
-        NSS_LIBS=$addlib
-        AC_SUBST([NSS_LIBS])
+      dnl needed when linking the curl tool without USE_EXPLICIT_LIB_DEPS
+      NSS_LIBS=$addlib
+      AC_SUBST([NSS_LIBS])
 
-        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
-        if test "x$cross_compiling" != "xyes"; then
-          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
+      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
+      if test "x$cross_compiling" != "xyes"; then
+        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 found
 
   fi dnl NSS not disabled
 
@@ -2174,7 +2404,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then
   fi
 fi
 
-if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_ENABLED" = "x"; then
+if test "x$OPENSSL_ENABLED$GNUTLS_ENABLED$NSS_ENABLED$POLARSSL_ENABLED$MBEDTLS_ENABLED$AXTLS_ENABLED$CYASSL_ENABLED$WINSSL_ENABLED$DARWINSSL_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, --with-cyassl, --with-nss, --with-axtls, --with-winssl, or --with-darwinssl to address this.])
 else
@@ -2190,6 +2420,27 @@ dnl **********************************************************************
 CURL_CHECK_CA_BUNDLE
 
 dnl **********************************************************************
+dnl Check for libpsl
+dnl **********************************************************************
+
+AC_ARG_WITH(libpsl,
+           AS_HELP_STRING([--without-libpsl],
+           [disable support for libpsl cookie checking]),
+           with_libpsl=$withval,
+           with_libpsl=yes)
+if test $with_libpsl != "no"; then
+  AC_SEARCH_LIBS(psl_builtin, psl,
+    [curl_psl_msg="yes";
+     AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled])
+     ],
+    [curl_psl_msg="no      (libpsl not found)";
+     AC_MSG_WARN([libpsl was not found])
+     ]
+  )
+fi
+AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "yes"])
+
+dnl **********************************************************************
 dnl Check for libmetalink
 dnl **********************************************************************
 
@@ -2768,7 +3019,9 @@ if test X"$want_h2" != Xno; then
     CPPFLAGS="$CPPFLAGS $CPP_H2"
     LIBS="$LIB_H2 $LIBS"
 
-    AC_CHECK_LIB(nghttp2, nghttp2_session_callbacks_set_send_callback,
+    # use nghttp2_option_set_no_recv_client_magic to require nghttp2
+    # >= 1.0.0
+    AC_CHECK_LIB(nghttp2, nghttp2_option_set_no_recv_client_magic,
       [
        AC_CHECK_HEADERS(nghttp2/nghttp2.h,
           curl_h2_msg="enabled (nghttp2)"
@@ -2795,6 +3048,31 @@ if test X"$want_h2" != Xno; then
 fi
 
 dnl **********************************************************************
+dnl Check for zsh completion path
+dnl **********************************************************************
+
+OPT_ZSH_FPATH=default
+AC_ARG_WITH(zsh-functions-dir,
+AC_HELP_STRING([--with-zsh-functions-dir=PATH],[Install zsh completions to PATH])
+AC_HELP_STRING([--without-zsh-functions-dir],[Do not install zsh completions]),
+  [OPT_ZSH_FPATH=$withval])
+case "$OPT_ZSH_FPATH" in
+  no)
+    dnl --without-zsh-functions-dir option used
+    ;;
+  default|yes)
+    dnl --with-zsh-functions-dir option used without path
+    ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions"
+    AC_SUBST(ZSH_FUNCTIONS_DIR)
+    ;;
+  *)
+    dnl --with-zsh-functions-dir option used with path
+    ZSH_FUNCTIONS_DIR="$withval"
+    AC_SUBST(ZSH_FUNCTIONS_DIR)
+    ;;
+esac
+
+dnl **********************************************************************
 dnl Back to "normal" configuring
 dnl **********************************************************************
 
@@ -3142,7 +3420,7 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then
 [Options --enable-threaded-resolver and --enable-ares are mutually exclusive])
 fi
 
-if test "$want_thres" = "yes"; then
+if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then
   AC_CHECK_HEADER(pthread.h,
     [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have <pthread.h>])
       save_CFLAGS="$CFLAGS"
@@ -3268,7 +3546,7 @@ AC_HELP_STRING([--disable-tls-srp],[Disable TLS-SRP authentication]),
        want_tls_srp=yes
 )
 
-if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_SSLEAY_SRP" = "x1") ; then
+if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_OPENSSL_SRP" = "x1") ; then
    AC_DEFINE(USE_TLS_SRP, 1, [Use TLS-SRP authentication])
    USE_TLS_SRP=1
    curl_tls_srp_msg="enabled"
@@ -3382,7 +3660,7 @@ dnl For keeping supported features and protocols also in pkg-config file
 dnl since it is more cross-compile friendly than curl-config
 dnl
 
-if test "x$USE_SSLEAY" = "x1"; then
+if test "x$OPENSSL_ENABLED" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
 elif test -n "$SSL_ENABLED"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES SSL"
@@ -3410,6 +3688,10 @@ if test "x$HAVE_GSSAPI" = "x1"; then
   SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API"
 fi
 
+if test "x$curl_psl_msg" = "xyes"; then
+  SUPPORT_FEATURES="$SUPPORT_FEATURES PSL"
+fi
+
 if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
     \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then
   SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO"
@@ -3421,7 +3703,7 @@ if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" -a \
 fi
 
 if test "x$CURL_DISABLE_CRYPTO_AUTH" != "x1"; then
-  if test "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
+  if test "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \
       -o "x$DARWINSSL_ENABLED" = "x1"; then
     SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM"
@@ -3494,7 +3776,7 @@ if test "x$CURL_DISABLE_IMAP" != "x1"; then
 fi
 if test "x$CURL_DISABLE_SMB" != "x1" \
     -a "x$CURL_DISABLE_CRYPTO_AUTH" != "x1" \
-    -a \( "x$USE_SSLEAY" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
+    -a \( "x$OPENSSL_ENABLED" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \
       -o "x$GNUTLS_ENABLED" = "x1" -o "x$NSS_ENABLED" = "x1" \
       -o "x$DARWINSSL_ENABLED" = "x1" \); then
   SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB"
@@ -3557,6 +3839,7 @@ AC_CONFIG_FILES([Makefile \
            include/curl/Makefile \
            src/Makefile \
            lib/Makefile \
+           scripts/Makefile \
            lib/libcurl.vers \
            tests/Makefile \
            tests/certs/Makefile \
@@ -3608,13 +3891,15 @@ AC_MSG_NOTICE([Configured to build curl/libcurl:
   --libcurl option: ${curl_libcurl_msg}
   Verbose errors:   ${curl_verbose_msg}
   SSPI support:     ${curl_sspi_msg}
-  ca cert bundle:   ${ca}
-  ca cert path:     ${capath}
+  ca cert bundle:   ${ca}${ca_warning}
+  ca cert path:     ${capath}${capath_warning}
+  ca fallback:      ${with_ca_fallback}
   LDAP support:     ${curl_ldap_msg}
   LDAPS support:    ${curl_ldaps_msg}
   RTSP support:     ${curl_rtsp_msg}
   RTMP support:     ${curl_rtmp_msg}
   metalink support: ${curl_mtlnk_msg}
+  PSL support:      ${curl_psl_msg}
   HTTP2 support:    ${curl_h2_msg}
   Protocols:        ${SUPPORT_PROTOCOLS}
 ])
index 1ddf4c2..af484b4 100644 (file)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
@@ -71,7 +71,7 @@ while test $# -gt 0; do
         ;;
 
     --ca)
-        echo "@CURL_CA_BUNDLE@"
+        echo @CURL_CA_BUNDLE@
         ;;
 
     --cc)
diff --git a/depcomp b/depcomp
index 4ebd5b3..fc98710 100755 (executable)
--- a/depcomp
+++ b/depcomp
@@ -3,7 +3,7 @@
 
 scriptversion=2013-05-30.07; # UTC
 
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Copyright (C) 1999-2014 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
index d4cf488..eb67c3d 100644 (file)
@@ -27,7 +27,7 @@ Basic
 
 C
   libcurl is a C library in itself!
-  http://curl.haxx.se/libcurl/
+  https://curl.haxx.se/libcurl/
 
 C++
 
@@ -50,7 +50,7 @@ Cocoa
 D
 
   Written by Kenneth Bogert
-  http://curl.haxx.se/libcurl/d/
+  http://dlang.org/library/std/net/curl.html
 
 Dylan
 
@@ -60,7 +60,7 @@ Dylan
 Eiffel
 
   Written by Eiffel Software
-  http://curl.haxx.se/libcurl/eiffel/
+  https://room.eiffel.com/library/curl
 
 Euphoria
 
@@ -78,7 +78,7 @@ Ferite
 
 Gambas
 
-  http://gambas.sourceforge.net
+  http://gambas.sourceforge.net/
 
 glib/GTK+
 
@@ -90,6 +90,11 @@ Guile:
   Written by Michael L. Gran
   http://www.lonelycactus.com/guile-curl.html
 
+Harbour
+
+  Written by Viktor Szakáts
+  https://github.com/vszakats/harbour-core/tree/master/contrib/hbcurl
+
 Haskell
 
   Written by Galois, Inc
@@ -97,8 +102,7 @@ Haskell
 
 Java
 
-  Maintained by [blank]
-  http://curl.haxx.se/libcurl/java/
+  https://github.com/pjlegato/curl-java
 
 Julia
 
@@ -115,7 +119,7 @@ Lua
   luacurl by Alexander Marinov
   http://luacurl.luaforge.net/
 
-  Lua-cURL by Jürgen Hötzel
+  Lua-cURL by Jürgen Hötzel
   http://luaforge.net/projects/lua-curl/
 
 Mono
@@ -126,7 +130,7 @@ Mono
 .NET
 
   libcurl-net by Jeffrey Phillips
-  http://sourceforge.net/projects/libcurl-net/
+  https://sourceforge.net/projects/libcurl-net/
 
 node.js
 
@@ -141,7 +145,7 @@ Object-Pascal
 O'Caml
 
   Written by Lars Nilsson
-  http://sourceforge.net/projects/ocurl/
+  https://sourceforge.net/projects/ocurl/
 
 Pascal
 
@@ -150,13 +154,13 @@ Pascal
 
 Perl
 
-  Maintained by Cris Bailiff
-  http://curl.haxx.se/libcurl/perl/
+  Maintained by Cris Bailiff and Bálint Szilakszi
+  https://github.com/szbalint/WWW--Curl
 
 PHP
 
   Written by Sterling Hughes
-  http://curl.haxx.se/libcurl/php/
+  https://php.net/curl
 
 PostgreSQL
 
@@ -170,8 +174,7 @@ Python
 
 R
 
-  RCurl by Duncan Temple Lang
-  http://www.omegahat.org/RCurl/
+  http://cran.r-project.org/package=curl
 
 Rexx
 
@@ -181,7 +184,7 @@ Rexx
 RPG
 
   Support for ILE/RPG on OS/400 is included in source distribution
-  http://curl.haxx.se/libcurl/
+  https://curl.haxx.se/libcurl/
   See packages/OS400/README.OS400 and packages/OS400/curl.inc.in
 
 Ruby
@@ -192,10 +195,15 @@ Ruby
   ruby-curl-multi - written by Kristjan Petursson and Keith Rarick
   http://curl-multi.rubyforge.org/
 
+Rust
+
+  curl-rust - by Carl Lerche
+  https://github.com/carllerche/curl-rust
+
 Scheme
 
   Bigloo binding by Kirill Lisovsky
-  http://curl.haxx.se/libcurl/scheme/
+  http://www.metapaper.net/lisovsky/web/curl/
 
 S-Lang
 
@@ -219,13 +227,13 @@ SPL
 
 Tcl
 
-  Tclcurl by Andrés García
-  http://personal1.iddeo.es/andresgarci/tclcurl/english/docs.html
+  Tclcurl by Andrés García
+  http://mirror.yellow5.com/tclcurl/
 
 Visual Basic
 
   libcurl-vb by Jeffrey Phillips
-  http://sourceforge.net/projects/libcurl-vb/
+  https://sourceforge.net/projects/libcurl-vb/
 
 Visual Foxpro
 
@@ -245,3 +253,8 @@ XBLite
 
   Written by David Szafranski
   http://perso.wanadoo.fr/xblite/libraries.html
+
+Xojo
+
+  Written by Andrew Lambert
+  https://github.com/charonn0/RB-libcURL
index c0c6fa8..dfd9b20 100644 (file)
--- a/docs/BUGS
+++ b/docs/BUGS
@@ -35,14 +35,12 @@ BUGS
   have a go at a solution. You can optionally also post your bug/problem at
   curl's bug tracking system over at
 
-        https://sourceforge.net/p/curl/bugs/
+        https://github.com/curl/curl/issues
 
-  Please read the rest of this document below first before doing that! Also,
-  you need to login to your sourceforge account before being able to submit a
-  bug report (necessary evil done to avoid spam).
+  Please read the rest of this document 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/
+  post there. The lists are available on https://curl.haxx.se/mail/
 
 1.3 What to report
 
diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md
new file mode 100644 (file)
index 0000000..04ea66e
--- /dev/null
@@ -0,0 +1,32 @@
+Contributor Code of Conduct
+===========================
+
+As contributors and maintainers of this project, we pledge to respect all
+people who contribute through reporting issues, posting feature requests,
+updating documentation, submitting pull requests or patches, and other
+activities.
+
+We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, or religion.
+
+Examples of unacceptable behavior by participants include the use of sexual
+language or imagery, derogatory comments or personal attacks, trolling, public
+or private harassment, insults, or other unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct. Project maintainers who do not
+follow the Code of Conduct may be removed from the project team.
+
+This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by opening an issue or contacting one or more of the project
+maintainers.
+
+This Code of Conduct is adapted from the [Contributor
+Covenant](http://contributor-covenant.org), version 1.1.0, available at
+[http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/)
diff --git a/docs/CODE_STYLE.md b/docs/CODE_STYLE.md
new file mode 100644 (file)
index 0000000..033a33b
--- /dev/null
@@ -0,0 +1,185 @@
+# cURL C code style
+
+Source code that has a common style is easier to read than code that uses
+different styles in different places. It helps making the code feel like one
+single code base. Easy-to-read is a very important property of code and helps
+making it easier to review when new things are added and it helps debugging
+code when developers are trying to figure out why things go wrong. A unified
+style is more important than individual contributors having their own personal
+tastes satisfied.
+
+Our C code has a few style rules. Most of them are verified and upheld by the
+lib/checksrc.pl script. Invoked with `make checksrc` or even by default by the
+build system when built after `./configure --enable-debug` has been used.
+
+It is normally not a problem for anyone to follow the guidelines, as you just
+need to copy the style already used in the source code and there are no
+particularly unusual rules in our set of rules.
+
+We also work hard on writing code that are warning-free on all the major
+platforms and in general on as many platforms as possible. Code that obviously
+will cause warnings will not be accepted as-is.
+
+## 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.
+
+## Indenting
+
+We use only spaces for indentation, never TABs. We use two spaces for each new
+open brace.
+
+    if(something_is_true) {
+      while(second_statement == fine) {
+        moo();
+      }
+    }
+
+## Comments
+
+Since we write C89 code, `//` comments are not allowed. They weren't
+introduced in the C standard until C99. We use only `/*` and `*/` comments:
+
+    /* this is a comment */
+
+## Long lines
+
+Source code in curl may never be wider than 80 columns and there are two
+reasons for maintaining this even in the modern era of very large and high
+resolution screens:
+
+1. Narrower columns are easier to read than very wide ones. There's a reason
+   newspapers have used columns for decades or centuries.
+
+2. Narrower columns allow developers to easier show multiple pieces of code
+   next to each other in different windows. I often have two or three source
+   code windows next to each other on the same screen - as well as multiple
+   terminal and debugging windows.
+
+## Braces
+
+In if/while/do/for expressions, we write the open brace on the same line as
+the keyword and we then set the closing brace on the same indentation level as
+the initial keyword. Like this:
+
+    if(age < 40) {
+      /* clearly a youngster */
+    }
+
+When we write functions however, the opening brace should be in the first
+column of the first line:
+
+    int main(int argc, char **argv)
+    {
+      return 1;
+    }
+
+## 'else' on the following line
+
+When adding an `else` clause to a conditional expression using braces, we add
+it on a new line after the closing brace. Like this:
+
+    if(age < 40) {
+      /* clearly a youngster */
+    }
+    else {
+      /* probably grumpy */
+    }
+
+## No space before parentheses
+
+When writing expressions using if/while/do/for, there shall be no space
+between the keyword and the open parenthesis. Like this:
+
+    while(1) {
+      /* loop forever */
+    }
+
+## Use boolean conditions
+
+Rather than test a conditional value such as a bool against TRUE or FALSE, a
+pointer against NULL or != NULL and an int against zero or not zero in
+if/while conditions we prefer:
+
+    result = do_something();
+    if(!result) {
+      /* something went wrong */
+      return result;
+    }
+
+## No assignments in conditions
+
+To increase readability and reduce complexity of conditionals, we avoid
+assigning variables within if/while conditions. We frown upon this style:
+
+    if((ptr = malloc(100)) == NULL)
+      return NULL;
+
+and instead we encourage the above version to be spelled out more clearly:
+
+    ptr = malloc(100);
+    if(!ptr)
+      return NULL;
+
+## New block on a new line
+
+We never write multiple statements on the same source line, even for very
+short if() conditions.
+
+    if(a)
+      return TRUE;
+    else if(b)
+      return FALSE;
+
+and NEVER:
+
+    if(a) return TRUE;
+    else if(b) return FALSE;
+
+## Space around operators
+
+Please use spaces on both sides of operators in C expressions.  Postfix `(),
+[], ->, ., ++, --` and Unary `+, - !, ~, &` operators excluded they should
+have no space.
+
+Examples:
+
+    bla = func();
+    who = name[0];
+    age += 1;
+    true = !false;
+    size += -2 + 3 * (a + b);
+    ptr->member = a++;
+    struct.field = b--;
+    ptr = &address;
+    contents = *pointer;
+    complement = ~bits;
+
+## 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.
+
+We also encourage use of macros/functions that possibly are empty or defined
+to constants when libcurl is built without that feature, to make the code
+seamless. Like this style where the `magic()` function works differently
+depending on a build-time conditional:
+
+    #ifdef HAVE_MAGIC
+    void magic(int a)
+    {
+      return a + 2;
+    }
+    #else
+    #define magic(x) 1
+    #endif
+
+    int content = magic(3);
index 83fa420..9e84175 100644 (file)
  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
+ 2. Write a good patch
+ 2.1 Follow code style
+ 2.2 Non-clobbering All Over
+ 2.3 Write Separate Patches
+ 2.4 Patch Against Recent Sources
+ 2.5 Document
+ 2.6 Test Cases
 
  3. Pushing Out Your Changes
  3.1 Write Access to git Repository
@@ -34,7 +29,7 @@
  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
- 3.6 Please don't send pull requests
+ 3.6 About pull requests
 
 ==============================================================================
 
 
 1.1 Join the Community
 
- Skip over to http://curl.haxx.se/mail/ and join the appropriate mailing
+ Skip over to https://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
+ list etiquette: https://curl.haxx.se/mail/etiquette.html
 
  We also hang out on IRC in #curl on irc.freenode.net
 
+ If you're at all interested in the code side of things, consider clicking
+ 'watch' on the curl repo at github to get notified on pull requests and new
+ issues posted there.
+
 1.2. License
 
  When contributing with code, you agree to put your changes and new code under
 
 1.3 What To Read
 
- Source code, the man pages, the INTERNALS document, TODO, KNOWN_BUGS, the
- most recent CHANGES. Just lurking on the curl-library 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
-
- Use the same indenting levels and bracing method as all the other code
- already does. It makes the source code 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
+ Source code, the man pages, the INTERNALS document, TODO, KNOWN_BUGS and the
+ most recent changes in the git log. Just lurking on the curl-library mailing
+ list is gonna give you a lot of insights on what's going on right now. Asking
+ there is a good idea too.
 
- 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. Write a good patch
 
-2.4 Line Lengths
+2.1 Follow code style
 
- We write source lines shorter than 80 columns.
+ When writing C code, follow the CODE_STYLE already established in the
+ project. Consistent style makes code easier to read and mistakes less likely
+ to happen.
 
-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
+2.2 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
  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
+2.3 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
  Also, separate patches enable bisecting much better when we track problems in
  the future.
 
-2.9 Patch Against Recent Sources
+2.4 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
+2.5 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
  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
+2.6 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
 
  You need to first checkout the repository:
 
-     git clone git://github.com/bagder/curl.git
+     git clone https://github.com/curl/curl.git
 
  You then proceed and edit all the files you like and you commit them to your
  local repository:
 
  For unix-like operating systems:
 
-     http://www.gnu.org/software/patch/patch.html
-     http://www.gnu.org/directory/diffutils.html
+     https://savannah.gnu.org/projects/patch/
+     https://www.gnu.org/software/diffutils/
 
  For Windows:
 
  and make sure that you have your own user and email setup correctly in git
  before you commit
 
-3.6 Please don't send pull requests
+3.6 About pull requests
 
  With git (and especially github) it is easy and tempting to send a pull
- request to one or more people in the curl project to have changes merged this
- way instead of mailing patches to the curl-library mailing list.
-
- We don't like that. We want them mailed for these reasons:
-
- - Peer review. Anyone and everyone on the list can review, comment and
-   improve on the patch. Pull requests limit this ability.
-
- - Anyone can merge the patch into their own trees for testing and those who
-   have push rights can push it to the main repo. It doesn't have to be anyone
-   the patch author knows beforehand.
-
- - Commit messages can be tweaked and changed if merged locally instead of
-   using github. Merges directly on github requires the changes to be perfect
-   already, which they seldom are.
+ request to the curl project to have changes merged this way instead of
+ mailing patches to the curl-library mailing list.
 
- - Merges on github prevents rebases and even enforces --no-ff which is a git
-   style we don't otherwise use in the project
+ We used to dislike this but we're trying to change that and accept that this
+ is a frictionless way for people to contribute to the project. We now welcome
+ pull requests!
 
- However: once patches have been reviewed and deemed fine on list they are
perfectly OK to be pulled from a published git tree.
+ We will continue to avoid using github's merge tools to make the history
linear and to make sure commits follow our style guidelines.
diff --git a/docs/DISTRO-DILEMMA b/docs/DISTRO-DILEMMA
deleted file mode 100644 (file)
index 71186a2..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-  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/GnuTLS
- 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 licensed
-   - 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 licensed
-   - 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
index 043b7bb..8608153 100644 (file)
--- a/docs/FAQ
+++ b/docs/FAQ
@@ -21,6 +21,7 @@ FAQ
   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?
+  1.15 How do I port libcurl to my OS?
 
  2. Install Related Problems
   2.1 configure doesn't find OpenSSL even when it is installed
@@ -29,6 +30,7 @@ FAQ
   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) ?
+  2.5 Install libcurl for both 32bit and 64bit?
 
  3. Usage Problems
   3.1 curl: (1) SSL is disabled, https: not supported
@@ -81,6 +83,7 @@ FAQ
   4.18 file:// URLs containing drive letters (Windows, NetWare)
   4.19 Why doesn't cURL return an error when the network cable is unplugged?
   4.20 curl doesn't return error for HTTP non-200 responses!
+  4.21 Why is there a HTTP/1.1 in my HTTP/2 request?
 
  5. libcurl Issues
   5.1 Is libcurl thread-safe?
@@ -223,7 +226,9 @@ FAQ
   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.
+  efforts in return. Simply go to the GitHub repo which resides at
+  https://github.com/curl/curl, fork the project, and create pull requests
+  with your proposed changes.
 
   If you write the code, chances are bigger that it will get into curl faster.
 
@@ -249,9 +254,10 @@ FAQ
 
   We still get help from companies. Haxx provides web site, bandwidth, mailing
   lists etc, sourceforge.net hosts project services we take advantage from,
-  like the bug tracker and github hosts the primary git repository. 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.
+  like the bug tracker, and GitHub hosts the primary git repository at
+  https://github.com/curl/curl. 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.
@@ -276,7 +282,7 @@ FAQ
   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/
+  https://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
@@ -297,7 +303,7 @@ FAQ
   your curl-related problems.
 
   We list available alternatives on the curl web site:
-  http://curl.haxx.se/support.html
+  https://curl.haxx.se/support.html
 
   1.10 How many are using curl?
 
@@ -314,7 +320,7 @@ FAQ
   In May 2012 Daniel did a counting game and came up with a number that may
   be completely wrong or somewhat accurate. Over 500 million!
 
-  See http://daniel.haxx.se/blog/2012/05/16/300m-users/
+  See https://daniel.haxx.se/blog/2012/05/16/300m-users/
 
   1.11 Why don't you update ca-bundle.crt
 
@@ -336,7 +342,7 @@ FAQ
   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
+  for this purpose: https://curl.haxx.se/docs/caextract.html
 
   1.12 I have a problem who can I chat with?
 
@@ -350,13 +356,15 @@ FAQ
   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
+  Apache Software Foundation gives a good explanation of ECCNs at
+  https://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.
+  5D992. It seems necessary to write them (the authority that administers ECCN
+  numbers), asking to confirm.
 
-  Comprehensible explanations of the meaning of such numbers and how to
-  obtain them (resp.) are here
+  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
@@ -379,6 +387,19 @@ FAQ
 
   Lots of more details are found in the CONTRIBUTE and INTERNALS docs.
 
+  1.15 How do I port libcurl to my OS?
+
+  Here's a rough step-by-step:
+
+  1. copy a suitable lib/config-*.h file as a start to lib/config-[youros].h
+
+  2. edit lib/config-[youros].h to match your OS and setup
+
+  3. edit lib/curl_setup.h to include config-[youros].h when your OS is
+     detected by the preprocessor, in the style others already exist
+
+  4. compile lib/*.c and make them into a library
+
 
 2. Install Related Problems
 
@@ -429,7 +450,7 @@ FAQ
   GnuTLS, yassl, NSS, PolarSSL, axTLS, Secure Transport (native iOS/OS X),
   WinSSL (native Windows) or GSKit (native IBM i). They all have their pros
   and cons, and we try to maintain a comparison of them here:
-  http://curl.haxx.se/docs/ssl-compared.html
+  https://curl.haxx.se/docs/ssl-compared.html
 
   2.3 Where can I find a copy of LIBEAY32.DLL?
 
@@ -444,6 +465,32 @@ FAQ
 
   Yes, SOCKS 4 and 5 are supported.
 
+  2.5 Install libcurl for both 32bit and 64bit?
+
+  In curl's configure procedure one of the regular include files get created
+  with platform specific information. The file 'curl/curlbuild.h' in the
+  installed libcurl file tree is therefore somewhat tied to that particular
+  platform.
+
+  To allow applications to get built for either 32bit or 64bit you need to
+  install libcurl headers for both setups and unfortunately curl doesn't do
+  this automatically.
+
+  A commonly used procedure is this:
+
+     $ ./configure [32bit platform]
+     $ mv curl/curlbuild.h curl/curlbuild-32bit.h
+     $ ./configure [64bit platform]
+     $ mv curl/curlbuild.h curl/curlbuild-64bit.h
+
+  Then you make a toplevel curl/curlbuild.h replacement that only does this:
+
+     #ifdef IS_32BIT
+     #include "curlbuild-32bit.h"
+     else
+     #include "curlbuild-64bit.h"
+     #endif
+
 
 3. Usage problems
 
@@ -541,7 +588,7 @@ FAQ
 
   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/
+  https://curl.haxx.se/libcurl/
 
   All the various bindings to libcurl are made by other projects and people,
   outside of the cURL project. The cURL project itself only produces libcurl
@@ -674,7 +721,7 @@ FAQ
   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
+  (https://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
@@ -764,8 +811,9 @@ FAQ
   request-body in a GET request with something like "curl -X GET -d data
   [URL]"
 
-  Note that -X doesn't change curl's behavior. It only modifies the actual
-  string sent in the request.
+  Note that -X doesn't actually change curl's behavior as it only modifies the
+  actual string sent in the request, but that may of course trigger a
+  different set of events.
 
   Accordingly, by using -XPOST on a command line that for example would follow
   a 303 redirect, you will effectively prevent curl from behaving
@@ -964,7 +1012,7 @@ FAQ
   this check.
 
   Details are also in the SSLCERTS file in the release archives, found online
-  here: http://curl.haxx.se/docs/sslcerts.html
+  here: https://curl.haxx.se/docs/sslcerts.html
 
   4.13 Why is curl -R on Windows one hour off?
 
@@ -1026,7 +1074,7 @@ FAQ
   timeout is set.
 
   See option TcpMaxConnectRetransmissions on this page:
-  http://support.microsoft.com/?scid=kb%3Ben-us%3B175523&x=6&y=7
+  https://support.microsoft.com/en-us/kb/175523/en-us
 
   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
@@ -1043,7 +1091,7 @@ FAQ
   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),
+  According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt),
   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'.
@@ -1071,7 +1119,7 @@ FAQ
 
   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
+  perfectly legal for the client to 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
@@ -1115,6 +1163,16 @@ FAQ
   You can also use the -w option and the variable %{response_code} to extract
   the exact response code that was return in the response.
 
+  4.21 Why is there a HTTP/1.1 in my HTTP/2 request?
+
+  If you use verbose to see the HTTP request when you send off a HTTP/2
+  request, it will still say 1.1.
+
+  The reason for this is that we first generate the request to send using the
+  old 1.1 style and show that request in the verbose output, and then we
+  convert it over to the binary header-compressed HTTP/2 style. The actual
+  "1.1" part from that request is then not actually used in the transfer. The
+  binary HTTP/2 headers are not human readable.
 
 5. libcurl Issues
 
@@ -1137,13 +1195,13 @@ FAQ
   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
+    https://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
+    https://web.archive.org/web/20111103083330/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.
 
@@ -1319,7 +1377,7 @@ FAQ
   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. You may also consider using
-  http://www.torproject.org .
+  https://www.torproject.org/ .
 
   5.13 How do I stop an ongoing transfer?
 
@@ -1371,7 +1429,7 @@ FAQ
   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
+  list parser is available at https://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.
 
@@ -1490,7 +1548,7 @@ FAQ
   notice" somewhere. Most probably like in the documentation or in the section
   where other third party dependencies already are mentioned and acknowledged.
 
-  As can be seen here: http://curl.haxx.se/docs/companies.html and elsewhere,
+  As can be seen here: https://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.
 
@@ -1510,9 +1568,7 @@ FAQ
 
   7.2 Who wrote 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.
+  PHP/CURL was initially written by Sterling Hughes.
 
   7.3 Can I perform multiple requests using the same handle?
 
@@ -1521,4 +1577,10 @@ FAQ
   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.
+  transfer. This will make libcurl re-use the same connection if it can.
+
+  7.4 Does PHP/CURL have dependencies?
+
+  PHP/CURL is a module that comes with the regular PHP package. It depends on
+  and uses libcurl, so you need to have libcurl installed properly before
+  PHP/CURL can be used.
index a674002..10fbdd5 100644 (file)
@@ -134,8 +134,8 @@ SMB
  - authentication with NTLMv1
 
 SMTP
- - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9) and Kerberos 5
-   (*4)
+ - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9), Kerberos 5
+   (*4) and External.
  - send e-mails
  - mail from support
  - mail size support
@@ -150,8 +150,8 @@ SMTPS (*1)
 
 POP3
  - authentication: Clear Text, APOP and SASL
- - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9) and
-   Kerberos 5 (*4)
+ - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9),
+   Kerberos 5 (*4) and External.
  - list e-mails
  - retrieve e-mails
  - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via
@@ -165,8 +165,8 @@ POP3S (*1)
 
 IMAP
  - authentication: Clear Text and SASL
- - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9) and
-   Kerberos 5 (*4)
+ - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (*9),
+   Kerberos 5 (*4) and External.
  - list the folders of a mailbox
  - select a mailbox with support for verifying the UIDVALIDITY
  - fetch e-mails with support for specifying the UID and SECTION
index e76e5b9..f878ee1 100644 (file)
@@ -65,7 +65,7 @@ OpenSSL took over where SSLeay was abandoned.
 May, first Debian package.
 
 August, LDAP:// and FILE:// support added. The curl web site gets 1300 visits
-weekly.
+weekly. Moved site to curl.haxx.nu.
 
 Released curl 6.0 in September. 15000 lines of code.
 
@@ -81,6 +81,8 @@ 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.
 
+June 2000: the curl site moves to "curl.haxx.se"
+
 August, the curl web site gets 4000 visits weekly.
 
 The PHP guys adopted libcurl already the same month, when the first ever third
index 818e161..0e43ba7 100644 (file)
@@ -1,4 +1,4 @@
-Updated: July 3, 2012 (http://curl.haxx.se/docs/http-cookies.html)
+Updated: July 3, 2012 (https://curl.haxx.se/docs/http-cookies.html)
                                   _   _ ____  _
                               ___| | | |  _ \| |
                              / __| | | | |_) | |
@@ -34,9 +34,9 @@ HTTP Cookies
   servers with the Cookie: header.
 
   For a very long time, the only spec explaining how to use cookies was the
-  original Netscape spec from 1994: http://curl.haxx.se/rfc/cookie_spec.html
+  original Netscape spec from 1994: https://curl.haxx.se/rfc/cookie_spec.html
 
-  In 2011, RFC6265 (http://www.ietf.org/rfc/rfc6265.txt) was finally published
+  In 2011, RFC6265 (https://www.ietf.org/rfc/rfc6265.txt) was finally published
   and details how cookies work within HTTP.
 
   1.2 Cookies saved to disk
diff --git a/docs/HTTP2.md b/docs/HTTP2.md
new file mode 100644 (file)
index 0000000..bf53820
--- /dev/null
@@ -0,0 +1,111 @@
+HTTP/2 with curl
+================
+
+[HTTP/2 Spec](https://www.rfc-editor.org/rfc/rfc7540.txt)
+[http2 explained](https://daniel.haxx.se/http2/)
+
+Build prerequisites
+-------------------
+  - nghttp2
+  - OpenSSL, NSS, GnutTLS or PolarSSL with a new enough version
+
+[nghttp2](https://nghttp2.org/)
+-------------------------------
+
+libcurl uses this 3rd party library for the low level protocol handling
+parts. The reason for this is that HTTP/2 is much more complex at that layer
+than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already
+existing and well functional library.
+
+We require at least version 1.0.0.
+
+Over an http:// URL
+-------------------
+
+If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will
+include an upgrade header in the initial request to the host to allow
+upgrading to HTTP/2.
+
+Possibly we can later introduce an option that will cause libcurl to fail if
+not possible to upgrade. Possibly we introduce an option that makes libcurl
+use HTTP/2 at once over http://
+
+Over an https:// URL
+--------------------
+
+If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will use
+ALPN (or NPN) to negotiate which protocol to continue with. Possibly introduce
+an option that will cause libcurl to fail if not possible to use HTTP/2.
+
+`CURL_HTTP_VERSION_2TLS` was added in 7.47.0 as a way to ask libcurl to prefer
+HTTP/2 for HTTPS but stick to 1.1 by default for plain old HTTP connections.
+
+ALPN is the TLS extension that HTTP/2 is expected to use. The NPN extension is
+for a similar purpose, was made prior to ALPN and is used for SPDY so early
+HTTP/2 servers are implemented using NPN before ALPN support is widespread.
+
+`CURLOPT_SSL_ENABLE_ALPN` and `CURLOPT_SSL_ENABLE_NPN` are offered to allow
+applications to explicitly disable ALPN or NPN.
+
+SSL libs
+--------
+
+The challenge is the ALPN and NPN support and all our different SSL
+backends. You may need a fairly updated SSL library version for it to
+provide the necessary TLS features. Right now we support:
+
+  - OpenSSL:  ALPN and NPN
+  - NSS:      ALPN and NPN
+  - GnuTLS:   ALPN
+  - PolarSSL: ALPN
+
+Multiplexing
+------------
+
+Starting in 7.43.0, libcurl fully supports HTTP/2 multiplexing, which is the
+term for doing multiple independent transfers over the same physical TCP
+connection.
+
+To take advantage of multiplexing, you need to use the multi interface and set
+`CURLMOPT_PIPELINING` to `CURLPIPE_MULTIPLEX`. With that bit set, libcurl will
+attempt to re-use existing HTTP/2 connections and just add a new stream over
+that when doing subsequent parallel requests.
+
+While libcurl sets up a connection to a HTTP server there is a period during
+which it doesn't know if it can pipeline or do multiplexing and if you add new
+transfers in that period, libcurl will default to start new connections for
+those transfers. With the new option `CURLOPT_PIPEWAIT` (added in 7.43.0), you
+can ask that a transfer should rather wait and see in case there's a
+connection for the same host in progress that might end up being possible to
+multiplex on. It favours keeping the number of connections low to the cost of
+slightly longer time to first byte transferred.
+
+Applications
+------------
+
+We hide HTTP/2's binary nature and convert received HTTP/2 traffic to headers
+in HTTP 1.1 style. This allows applications to work unmodified.
+
+curl tool
+---------
+
+curl offers the `--http2` command line option to enable use of HTTP/2.
+
+Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections.
+
+HTTP Alternative Services
+-------------------------
+
+Alt-Svc is a suggested extension with a corresponding frame (ALTSVC) in HTTP/2
+that tells the client about an alternative "route" to the same content for the
+same origin server that you get the response from. A browser or long-living
+client can use that hint to create a new connection asynchronously.  For
+libcurl, we may introduce a way to bring such clues to the applicaton and/or
+let a subsequent request use the alternate route
+automatically. [Spec](https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-14)
+
+TODO
+----
+
+  - Implement "prior-knowledge" HTTP/2 connections over clear text so that
+    curl can connect with HTTP/2 at once without 1.1+Upgrade.
index 30dec53..d316a1a 100644 (file)
@@ -173,13 +173,13 @@ Win32
    advice given above.
 
    KB94248  - How To Use the C Run-Time
-              http://support.microsoft.com/kb/94248/en-us
+              https://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
+              https://support.microsoft.com/kb/140584/en-us
 
    KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries
-              http://msdn.microsoft.com/en-us/library/ms235460
+              https://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
@@ -209,8 +209,8 @@ Win32
    environment variables, for example:
 
      set ZLIB_PATH=c:\zlib-1.2.8
-     set OPENSSL_PATH=c:\openssl-0.9.8zc
-     set LIBSSH2_PATH=c:\libssh2-1.4.3
+     set OPENSSL_PATH=c:\openssl-1.0.2c
+     set LIBSSH2_PATH=c:\libssh2-1.6.0
 
    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!
@@ -232,7 +232,7 @@ Win32
    - 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
+     https://www.novell.com/developer/ndk/ldap_libraries_for_c.html
 
    Cygwin
    ------
@@ -254,7 +254,7 @@ Win32
    If you use MSVC 6 it is required that you use the February 2003 edition of
    the 'Platform SDK' which can be downloaded from:
 
-   http://www.microsoft.com/en-us/download/details.aspx?id=12261
+   https://www.microsoft.com/en-us/download/details.aspx?id=12261
 
    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
@@ -263,7 +263,7 @@ Win32
    software built in such way will at some point regret having done so.
 
    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
+   those mentioned in https://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
@@ -299,7 +299,7 @@ Win32
    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
+   zlib (http://www.zlib.net/) 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:
 
@@ -471,6 +471,15 @@ Win32
    add '-DCURL_STATICLIB' to your CFLAGS.  Otherwise the linker will look for
    dynamic import symbols.
 
+   Legacy Windows and SSL
+   ----------------------
+
+   WinSSL (specifically SChannel from Windows SSPI), is the native SSL library
+   in Windows. However, WinSSL in Windows <= XP is unable to connect to servers
+   that no longer support the legacy handshakes and algorithms used by those
+   versions. If you will be using curl in one of those earlier versions of
+   Windows you should choose another SSL backend such as OpenSSL.
+
 Apple iOS and Mac OS X
 ======================
 
@@ -665,12 +674,10 @@ NetWare
    - 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
+   - recent Novell LibC or Novell CLib SDK available from:
+     https://www.novell.com/developer/ndk/
    - optional recent Novell CLDAP SDK available from:
-     http://developer.novell.com/ndk/cldap.htm
+     https://www.novell.com/developer/ndk/ldap_libraries_for_c.html
    - optional zlib sources (static or dynamic linking with zlib.imp);
      sources with NetWare Makefile can be obtained from:
      http://www.gknw.net/mirror/zlib/
@@ -699,7 +706,7 @@ NetWare
    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/dev/builds.html
+   https://curl.haxx.se/dev/builds.html
 
 eCos
 ====
@@ -825,7 +832,7 @@ VxWorks
 
    To build libcurl for VxWorks you need:
 
-      - CYGWIN (free, http://cygwin.com/)
+      - CYGWIN (free, https://cygwin.com/)
       - Wind River Workbench (commercial)
 
    If you have CYGWIN and Workbench installed on you machine
@@ -943,9 +950,10 @@ REDUCING SIZE
    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.
+   and potentially the -march=X, -mdynamic-no-pic and -flto options as well,
+   e.g.
 
-      ./configure CFLAGS='-Os' ...
+      ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...
 
    Note that newer compilers often produce smaller code than older versions
    due to improved optimization.
@@ -963,7 +971,9 @@ REDUCING SIZE
      --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-unix-sockets (disables support for UNIX sockets)
      --disable-verbose (eliminates debugging strings and error code strings)
+     --disable-versioned-symbols (disables support for versioned symbols)
      --enable-hidden-symbols (eliminates unneeded symbols in the shared library)
      --without-libidn (disables support for the libidn DNS library)
      --without-librtmp (disables support for RTMP)
@@ -976,7 +986,7 @@ REDUCING SIZE
    configure command-line, e.g.
 
      CFLAGS="-Os -ffunction-sections -fdata-sections \
-             -fno-unwind-tables -fno-asynchronous-unwind-tables" \
+             -fno-unwind-tables -fno-asynchronous-unwind-tables -flto" \
      LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"
 
    Be sure also to strip debugging symbols from your binaries after
@@ -986,9 +996,9 @@ REDUCING SIZE
    .comment section).
 
    Using these techniques it is possible to create a basic HTTP-only shared
-   libcurl library for i386 Linux platforms that is only 114 KiB in size, and
-   an FTP-only library that is 115 KiB in size (as of libcurl version 7.35.0,
-   using gcc 4.8.2).
+   libcurl library for i386 Linux platforms that is only 109 KiB in size, and
+   an FTP-only library that is 109 KiB in size (as of libcurl version 7.45.0,
+   using gcc 4.9.2).
 
    You may find that statically linking libcurl to your application will
    result in a lower total size than dynamically linking.
@@ -1086,18 +1096,18 @@ Useful URLs
 
 axTLS        http://axtls.sourceforge.net/
 c-ares       http://c-ares.haxx.se/
-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/
+GNU GSS      https://www.gnu.org/software/gss/
+GnuTLS       https://www.gnu.org/software/gnutls/
+Heimdal      http://www.h5l.org/
+libidn       https://www.gnu.org/software/libidn/
 libmetalink  https://launchpad.net/libmetalink/
 libssh2      http://www.libssh2.org/
 MIT Kerberos http://web.mit.edu/kerberos/www/dist/
-NSS          http://www.mozilla.org/projects/security/pki/nss/
+NSS          https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS
 OpenLDAP     http://www.openldap.org/
-OpenSSL      http://www.openssl.org/
-PolarSSL     http://polarssl.org/
-yassl        http://www.yassl.com/
+OpenSSL      https://www.openssl.org/
+PolarSSL     https://tls.mbed.org/
+wolfSSL      https://www.wolfssl.com/wolfSSL/
 Zlib         http://www.zlib.net/
 
 MingW        http://www.mingw.org/
index 46d1836..f989d52 100644 (file)
@@ -95,7 +95,7 @@ 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
+https://sourceforge.net/p/dev-cpp/discussion/48211/thread/2a85ea46
 
 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;
@@ -248,7 +248,7 @@ SSL Files
 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/.
+https://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
index f8b1b47..698d66e 100644 (file)
@@ -1,18 +1,57 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
-INTERNALS
+Table of Contents
+=================
 
- 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.
+ - [Intro](#intro)
+ - [git](#git)
+ - [Portability](#Portability)
+ - [Windows vs Unix](#winvsunix)
+ - [Library](#Library)
+   - [`Curl_connect`](#Curl_connect)
+   - [`Curl_do`](#Curl_do)
+   - [`Curl_readwrite`](#Curl_readwrite)
+   - [`Curl_done`](#Curl_done)
+   - [`Curl_disconnect`](#Curl_disconnect)
+ - [HTTP(S)](#http)
+ - [FTP](#ftp)
+   - [Kerberos](#kerberos)
+ - [TELNET](#telnet)
+ - [FILE](#file)
+ - [SMB](#smb)
+ - [LDAP](#ldap)
+ - [E-mail](#email)
+ - [General](#general)
+ - [Persistent Connections](#persistent)
+ - [multi interface/non-blocking](#multi)
+ - [SSL libraries](#ssl)
+ - [Library Symbols](#symbols)
+ - [Return Codes and Informationals](#returncodes)
+ - [AP/ABI](#abi)
+ - [Client](#client)
+ - [Memory Debugging](#memorydebug)
+ - [Test Suite](#test)
+ - [Asynchronous name resolves](#asyncdns)
+   - [c-ares](#cares)
+ - [`curl_off_t`](#curl_off_t)
+ - [curlx](#curlx)
+ - [Content Encoding](#contentencoding)
+ - [hostip.c explained](#hostip)
+ - [Track Down Memory Leaks](#memoryleak)
+ - [`multi_socket`](#multi_socket)
+ - [Structs in libcurl](#structs)
+
+<a name="intro"></a>
+curl internals
+==============
+
+ This 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
+
+<a name="git"></a>
+git
 ===
 
  All changes to the sources are committed to the git repository as soon as
@@ -23,6 +62,7 @@ GIT
  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.
 
+<a name="Portability"></a>
 Portability
 ===========
 
@@ -34,45 +74,55 @@ Portability
  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.7
- GnuTLS       1.2
- zlib         1.1.4
- libssh2      0.16
- c-ares       1.6.0
- libidn       0.4.1
- cyassl       2.0.0
- openldap     2.0
- MIT Kerberos 1.2.4
- GSKit        V5R3M0
- NSS          3.14.x
- axTLS        1.2.7
- PolarSSL     1.3.0
- Heimdal      ?
- nghttp2      0.6.0
+Dependencies
+------------
+
+ - OpenSSL      0.9.7
+ - GnuTLS       1.2
+ - zlib         1.1.4
+ - libssh2      0.16
+ - c-ares       1.6.0
+ - libidn       0.4.1
+ - cyassl       2.0.0
+ - openldap     2.0
+ - MIT Kerberos 1.2.4
+ - GSKit        V5R3M0
+ - NSS          3.14.x
+ - axTLS        1.2.7
+ - PolarSSL     1.3.0
+ - Heimdal      ?
+ - nghttp2      1.0.0
+
+Operating Systems
+-----------------
 
  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       V5R3M0
- Symbian      9.1
- Windows CE   ?
- TPF          ?
+ - Windows      98
+ - AS/400       V5R3M0
+ - Symbian      9.1
+ - Windows CE   ?
+ - TPF          ?
+
+Build tools
+-----------
 
  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         5.004
- roffit       0.5
- groff        ? (any version that supports "groff -Tps -man [in] [out]")
- ps2pdf (gs)  ?
GNU Libtool  1.4.2
GNU Autoconf 2.57
+ - GNU Automake 1.7
GNU M4       1.4
perl         5.004
roffit       0.5
groff        ? (any version that supports "groff -Tps -man [in] [out]")
ps2pdf (gs)  ?
 
+<a name="winvsunix"></a>
 Windows vs Unix
 ===============
 
@@ -87,8 +137,9 @@ Windows vs Unix
 
  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.
+   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 interchangeable as in unix.
@@ -101,28 +152,29 @@ Windows vs Unix
 
    We set stdout to binary under windows
 
- Inside the source code, We make an effort to avoid '#ifdef [Your OS]'. All
+ 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 a curl_config-win32.h file in lib directory that is supposed to
- look exactly as a curl_config.h file would have looked like on a Windows
`#ifdef HAVE_THAT_WEIRD_FUNCTION`. Since Windows can't run configure scripts,
+ we maintain a `curl_config-win32.h` file in lib directory that is 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.
 
+<a name="Library"></a>
 Library
 =======
 
- (See LIBCURL-STRUCTS for a separate document describing all major internal
+ (See `LIBCURL-STRUCTS` for a separate document describing all major internal
  structs and their purposes.)
 
  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
+ 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
`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.
@@ -130,51 +182,56 @@ Library
  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_init()`][2] 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
+ [`curl_easy_setopt()`][1] 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() is just a wrapper function that makes use of the multi
- API.  It basically curl_multi_init(), curl_multi_add_handle(),
- curl_multi_wait(), and curl_multi_perform() until the transfer is done and
- then returns.
`curl_easy_perform()` is just a wrapper function that makes use of the multi
+ API.  It basically calls `curl_multi_init()`, `curl_multi_add_handle()`,
+ `curl_multi_wait()`, and `curl_multi_perform()` until the transfer is done
and then returns.
 
  Some of the most important key functions in url.c are called from multi.c
  when certain key steps are to be made in the transfer operation.
 
- o Curl_connect()
+<a name="Curl_connect"></a>
+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
+   `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.
+   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()
+<a name="Curl_do"></a>
+Curl_do()
+---------
 
-   Curl_do() makes sure the proper protocol-specific function is called. The
+   `Curl_do()` makes sure the proper protocol-specific function is called. The
    functions are named after the protocols they handle.
 
    The protocol-specific functions of course deal with protocol-specific
-   negotiations and setup. They have access to the Curl_sendf() (from
+   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
+   `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
@@ -183,11 +240,13 @@ Library
    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
+   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 transfer sizes (if known).
 
- o Curl_readwrite()
+<a name="Curl_readwrite"></a>
+Curl_readwrite()
+----------------
 
    Called during the transfer of the actual protocol payload.
 
@@ -196,18 +255,22 @@ Library
    called). The speedcheck functions in lib/speedcheck.c are also used to
    verify that the transfer is as fast as required.
 
- o Curl_done()
+<a name="Curl_done"></a>
+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
+   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().
+   be closed with `Curl_disconnect()`.
 
- o Curl_disconnect()
+<a name="Curl_disconnect"></a>
+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
+   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
@@ -216,8 +279,9 @@ Library
    This function cleans up all resources that are associated with a single
    connection.
 
-
- HTTP(S)
+<a name="http"></a>
+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
@@ -229,100 +293,123 @@ Library
  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.
+ 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
`http_chunks.c` contains functions that understands HTTP 1.1 chunked transfer
  encoding.
 
- An interesting detail with the HTTP(S) request, is the Curl_add_buffer()
+ An interesting detail with the HTTP(S) request, is the `Curl_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
+<a name="ftp"></a>
+FTP
+===
 
- The Curl_if2ip() function can be used for getting the IP number of a
+ 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.
+ `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
+<a name="kerberos"></a>
+Kerberos
+--------
 
  Kerberos support is mainly in lib/krb5.c and lib/security.c but also
curl_sasl_sspi.c and curl_sasl_gssapi.c for the email protocols and
socks_gssapi.c & socks_sspi.c for SOCKS5 proxy specifics.
`curl_sasl_sspi.c` and `curl_sasl_gssapi.c` for the email protocols and
`socks_gssapi.c` and `socks_sspi.c` for SOCKS5 proxy specifics.
 
- TELNET
+<a name="telnet"></a>
+TELNET
+======
 
  Telnet is implemented in lib/telnet.c.
 
- FILE
+<a name="file"></a>
+FILE
+====
 
  The file:// protocol is dealt with in lib/file.c.
 
- SMB
+<a name="smb"></a>
+SMB
+===
 
  The smb:// protocol is dealt with in lib/smb.c.
 
- LDAP
+<a name="ldap"></a>
+LDAP
+====
 
  Everything LDAP is in lib/ldap.c and lib/openldap.c
 
- E-mail
+<a name="email"></a>
+E-mail
+======
 
  The e-mail related source code is in lib/imap.c, lib/pop3.c and lib/smtp.c.
 
- GENERAL
+<a name="general"></a>
+General
+=======
 
  URL encoding and decoding, called escaping and unescaping in the source code,
  is found in lib/escape.c.
 
  While transferring data in Transfer() a few functions might get used.
curl_getdate() in lib/parsedate.c is for HTTP date comparisons (and more).
`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/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 conversions.
 
- A function named curl_version() that returns the full curl version string is
- found in lib/version.c.
+ A function named `curl_version()` that returns the full curl version string
is found in lib/version.c.
 
+<a name="persistent"></a>
 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
+ - The 'SessionHandle' struct returned in the [`curl_easy_init()`][2] 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.
+
+ - The 'SessionHandle' struct holds the "connection cache" (an array of
    pointers to 'connectdata' structs).
- o This enables the 'curl handle' to be reused on subsequent transfers.
- o When libcurl is told to perform a transfer, it first checks for an already
+
+ - This enables the 'curl handle' to be reused on subsequent transfers.
+
+ - When libcurl is told to perform a transfer, it first checks for an already
    existing connection in the cache that we can use. Otherwise it creates a
    new one and adds that the cache. If the cache is full already when a new
    connection is added added, it will first close the oldest unused one.
- o When the transfer operation is complete, the connection is left
+
+ - When the transfer operation is complete, the connection is left
    open. Particular options may tell libcurl not to, and protocols may signal
    closure on connections and then they won't be kept open of course.
- o When curl_easy_cleanup() is called, we close all still opened connections,
+
+ - When `curl_easy_cleanup()` is called, we close all still opened connections,
    unless of course the multi interface "owns" the connections.
 
  The curl handle must be re-used in order for the persistent connections to
  work.
 
+<a name="multi"></a>
 multi interface/non-blocking
 ============================
 
@@ -341,6 +428,7 @@ multi interface/non-blocking
  protocols are crappy examples and they are subject for rewrite in the future
  to better fit the libcurl protocol family.
 
+<a name="ssl"></a>
 SSL libraries
 =============
 
@@ -350,36 +438,39 @@ SSL libraries
  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 vtls.[ch] system, and they are the only SSL
functions we must use from within libcurl. vtls is then crafted to use the
- appropriate lower-level function calls to whatever SSL library that is in
+ function API as provided by the vtls/vtls.[ch] system, and they are the only
SSL functions we must use from within libcurl. vtls is then crafted to use
the appropriate lower-level function calls to whatever SSL library that is in
  use. For example vtls/openssl.[ch] for the OpenSSL library.
 
+<a name="symbols"></a>
 Library Symbols
 ===============
 
- All symbols used internally in libcurl must use a 'Curl_' prefix if they're
+ 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,
+ Public ("exported") symbols must use a `curl_` prefix. (There are exceptions,
  but they are to be changed to follow this pattern in future versions.) Public
- API functions are marked with CURL_EXTERN in the public header files so that
- all others can be hidden on platforms where this is possible.
+ API functions are marked with `CURL_EXTERN` in the public header files so
that all others can be hidden on platforms where this is possible.
 
+<a name="returncodes"></a>
 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
+ 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.
+ 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.
 
+<a name="abi"></a>
 API/ABI
 =======
 
@@ -387,29 +478,31 @@ API/ABI
  that makes it easier to keep a solid API/ABI over time. See docs/libcurl/ABI
  for our promise to users.
 
+<a name="client"></a>
 Client
 ======
 
- main() resides in src/tool_main.c.
+ main() resides in `src/tool_main.c`.
 
src/tool_hugehelp.c is automatically generated by the mkhelp.pl perl script
`src/tool_hugehelp.c` is automatically generated by the mkhelp.pl perl script
  to display the complete "manual" and the src/tool_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.
+ 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
`curl_easy_getinfo()` function to extract useful information from the curl
  session.
 
  It may loop and do all this several times if many URLs were specified on the
  command line or config file.
 
+<a name="memorydebug"></a>
 Memory Debugging
 ================
 
@@ -439,6 +532,7 @@ Memory Debugging
  the configure script. When --enable-debug is given both features will be
  enabled, unless some restriction prevents memory tracking from being used.
 
+<a name="test"></a>
 Test Suite
 ==========
 
@@ -456,29 +550,546 @@ Test Suite
  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
-=================
+<a name="asyncdns"></a>
+Asynchronous name resolves
+==========================
+
+ libcurl can be built to do name resolves asynchronously, using either the
+ normal resolver in a threaded manner or by using c-ares.
+
+<a name="cares"></a>
+[c-ares][3]
+------
+
+### Build libcurl to use a c-ares
+
+1. ./configure --enable-ares=/path/to/ares/install
+2. make
+
+### c-ares on win32
+
+ First I compiled c-ares. I changed the default C runtime library to be the
+ single-threaded rather than the multi-threaded (this seems to be required to
+ prevent linking errors later on). Then I simply build the areslib project
+ (the other projects adig/ahost seem to fail under MSVC).
+
+ Next was libcurl. I opened lib/config-win32.h and I added a:
+ `#define USE_ARES 1`
+
+ Next thing I did was I added the path for the ares includes to the include
+ path, and the libares.lib to the libraries.
+
+ Lastly, I also changed libcurl to be single-threaded rather than
+ multi-threaded, again this was to prevent some duplicate symbol errors. I'm
+ not sure why I needed to change everything to single-threaded, but when I
+ didn't I got redefinition errors for several CRT functions (malloc, stricmp,
+ etc.)
+
+<a name="curl_off_t"></a>
+`curl_off_t`
+==========
+
+ curl_off_t is a data type provided by the external libcurl include
+ headers. It is the type meant to be used for the [`curl_easy_setopt()`][1]
+ options that end with LARGE. The type is 64bit large on most modern
+ platforms.
+
+curlx
+=====
+
+ The libcurl source code offers a few functions by source only. They are not
+ part of the official libcurl API, but the source files might be useful for
+ others so apps can optionally compile/build with these sources to gain
+ additional functions.
+
+ We provide them through a single header file for easy access for apps:
+ "curlx.h"
+
+`curlx_strtoofft()`
+-------------------
+   A macro that converts a string containing a number to a curl_off_t number.
+   This might use the curlx_strtoll() function which is provided as source
+   code in strtoofft.c. Note that the function is only provided if no
+   strtoll() (or equivalent) function exist on your platform. If curl_off_t
+   is only a 32 bit number on your platform, this macro uses strtol().
+
+`curlx_tvnow()`
+---------------
+   returns a struct timeval for the current time.
+
+`curlx_tvdiff()`
+--------------
+   returns the difference between two timeval structs, in number of
+   milliseconds.
+
+`curlx_tvdiff_secs()`
+---------------------
+   returns the same as curlx_tvdiff but with full usec resolution (as a
+   double)
+
+Future
+------
+
+ Several functions will be removed from the public curl_ name space in a
+ future libcurl release. They will then only become available as curlx_
+ functions instead. To make the transition easier, we already today provide
+ these functions with the curlx_ prefix to allow sources to get built properly
+ with the new function names. The functions this concerns are:
+
+ - `curlx_getenv`
+ - `curlx_strequal`
+ - `curlx_strnequal`
+ - `curlx_mvsnprintf`
+ - `curlx_msnprintf`
+ - `curlx_maprintf`
+ - `curlx_mvaprintf`
+ - `curlx_msprintf`
+ - `curlx_mprintf`
+ - `curlx_mfprintf`
+ - `curlx_mvsprintf`
+ - `curlx_mvprintf`
+ - `curlx_mvfprintf`
+
+<a name="contentencoding"></a>
+Content Encoding
+================
+
+## About content encodings
+
+ [HTTP/1.1][4] specifies that a client may request that a server encode its
+ response. This is usually used to compress a response using one of a set of
+ commonly available compression techniques. These schemes are 'deflate' (the
+ zlib algorithm), 'gzip' and 'compress'. A client requests that the sever
+ perform an encoding by including an Accept-Encoding header in the request
+ document. The value of the header should be one of the recognized tokens
+ 'deflate', ... (there's a way to register new schemes/tokens, see sec 3.5 of
+ the spec). A server MAY honor the client's encoding request. When a response
+ is encoded, the server includes a Content-Encoding header in the
+ response. The value of the Content-Encoding header indicates which scheme was
+ used to encode the data.
+
+ A client may tell a server that it can understand several different encoding
+ schemes. In this case the server may choose any one of those and use it to
+ encode the response (indicating which one using the Content-Encoding header).
+ It's also possible for a client to attach priorities to different schemes so
+ that the server knows which it prefers. See sec 14.3 of RFC 2616 for more
+ information on the Accept-Encoding header.
+
+## Supported content encodings
+
+ The 'deflate' and 'gzip' content encoding are supported by libcurl. Both
+ regular and chunked transfers work fine.  The zlib library is required for
+ this feature.
+
+## The libcurl interface
+
+ To cause libcurl to request a content encoding use:
+
+  [`curl_easy_setopt`][1](curl, [`CURLOPT_ACCEPT_ENCODING`][5], string)
+
+ where string is the intended value of the Accept-Encoding header.
+
+ Currently, libcurl only understands how to process responses that use the
+ "deflate" or "gzip" Content-Encoding, so the only values for
+ [`CURLOPT_ACCEPT_ENCODING`][5] that will work (besides "identity," which does
+ nothing) are "deflate" and "gzip" If a response is encoded using the
+ "compress" or methods, libcurl will return an error indicating that the
+ response could not be decoded.  If <string> is NULL no Accept-Encoding header
+ is generated.  If <string> is a zero-length string, then an Accept-Encoding
+ header containing all supported encodings will be generated.
+
+ The [`CURLOPT_ACCEPT_ENCODING`][5] must be set to any non-NULL value for
+ content to be automatically decoded.  If it is not set and the server still
+ sends encoded content (despite not having been asked), the data is returned
+ in its raw form and the Content-Encoding type is not checked.
+
+## The curl interface
+
+ Use the [--compressed][6] option with curl to cause it to ask servers to
+ compress responses using any format supported by curl.
+
+<a name="hostip"></a>
+hostip.c explained
+==================
+
+ The main compile-time defines to keep in mind when reading the host*.c source
+ file are these:
+
+## `CURLRES_IPV6`
+
+ this host has getaddrinfo() and family, and thus we use that. The host may
+ not be able to resolve IPv6, but we don't really have to take that into
+ account. Hosts that aren't IPv6-enabled have CURLRES_IPV4 defined.
+
+## `CURLRES_ARES`
+
+ is defined if libcurl is built to use c-ares for asynchronous name
+ resolves. This can be Windows or *nix.
+
+## `CURLRES_THREADED`
+
+ is defined if libcurl is built to use threading for asynchronous name
+ resolves. The name resolve will be done in a new thread, and the supported
+ asynch API will be the same as for ares-builds. This is the default under
+ (native) Windows.
+
+ If any of the two previous are defined, `CURLRES_ASYNCH` is defined too. If
+ libcurl is not built to use an asynchronous resolver, `CURLRES_SYNCH` is
+ defined.
+
+## host*.c sources
+
+ The host*.c sources files are split up like this:
+
+ - hostip.c      - method-independent resolver functions and utility functions
+ - hostasyn.c    - functions for asynchronous name resolves
+ - hostsyn.c     - functions for synchronous name resolves
+ - asyn-ares.c   - functions for asynchronous name resolves using c-ares
+ - asyn-thread.c - functions for asynchronous name resolves using threads
+ - hostip4.c     - IPv4 specific functions
+ - hostip6.c     - IPv6 specific functions
+
+ The hostip.h is the single united header file for all this. It defines the
+ `CURLRES_*` defines based on the config*.h and curl_setup.h defines.
+
+<a name="memoryleak"></a>
+Track Down Memory Leaks
+=======================
+
+## Single-threaded
+
+  Please note that this memory leak system is not adjusted to work in more
+  than one thread. If you want/need to use it in a multi-threaded app. Please
+  adjust accordingly.
+
+
+## Build
+
+  Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with
+  --enable-debug fixes this). 'make clean' first, then 'make' so that all
+  files actually are rebuilt properly. It will also make sense to build
+  libcurl with the debug option (usually -g to the compiler) so that debugging
+  it will be easier if you actually do find a leak in the library.
+
+  This will create a library that has memory debugging enabled.
+
+## Modify Your Application
+
+  Add a line in your application code:
+
+       `curl_memdebug("dump");`
+
+  This will make the malloc debug system output a full trace of all resource
+  using functions to the given file name. Make sure you rebuild your program
+  and that you link with the same libcurl you built for this purpose as
+  described above.
+
+## Run Your Application
+
+  Run your program as usual. Watch the specified memory trace file grow.
+
+  Make your program exit and use the proper libcurl cleanup functions etc. So
+  that all non-leaks are returned/freed properly.
+
+## Analyze the Flow
+
+  Use the tests/memanalyze.pl perl script to analyze the dump file:
+
+    tests/memanalyze.pl dump
+
+  This now outputs a report on what resources that were allocated but never
+  freed etc. This report is very fine for posting to the list!
+
+  If this doesn't produce any output, no leak was detected in libcurl. Then
+  the leak is mostly likely to be in your code.
+
+<a name="multi_socket"></a>
+`multi_socket`
+==============
+
+ Implementation of the `curl_multi_socket` API
+
+  The main ideas of this API are simply:
+
+   1 - The application can use whatever event system it likes as it gets info
+       from libcurl about what file descriptors libcurl waits for what action
+       on. (The previous API returns `fd_sets` which is very select()-centric).
+
+   2 - When the application discovers action on a single socket, it calls
+       libcurl and informs that there was action on this particular socket and
+       libcurl can then act on that socket/transfer only and not care about
+       any other transfers. (The previous API always had to scan through all
+       the existing transfers.)
+
+  The idea is that [`curl_multi_socket_action()`][7] calls a given callback
+  with information about what socket to wait for what action on, and the
+  callback only gets called if the status of that socket has changed.
+
+  We also added a timer callback that makes libcurl call the application when
+  the timeout value changes, and you set that with [`curl_multi_setopt()`][9]
+  and the [`CURLMOPT_TIMERFUNCTION`][10] option. To get this to work,
+  Internally, there's an added a struct to each easy handle in which we store
+  an "expire time" (if any). The structs are then "splay sorted" so that we
+  can add and remove times from the linked list and yet somewhat swiftly
+  figure out both how long time there is until the next nearest timer expires
+  and which timer (handle) we should take care of now. Of course, the upside
+  of all this is that we get a [`curl_multi_timeout()`][8] that should also
+  work with old-style applications that use [`curl_multi_perform()`][11].
+
+  We created an internal "socket to easy handles" hash table that given
+  a socket (file descriptor) return the easy handle that waits for action on
+  that socket.  This hash is made using the already existing hash code
+  (previously only used for the DNS cache).
+
+  To make libcurl able to report plain sockets in the socket callback, we had
+  to re-organize the internals of the [`curl_multi_fdset()`][12] etc so that
+  the conversion from sockets to `fd_sets` for that function is only done in
+  the last step before the data is returned. I also had to extend c-ares to
+  get a function that can return plain sockets, as that library too returned
+  only `fd_sets` and that is no longer good enough. The changes done to c-ares
+  are available in c-ares 1.3.1 and later.
+
+<a name="structs"></a>
+Structs in libcurl
+==================
+
+This section should cover 7.32.0 pretty accurately, but will make sense even
+for older and later versions as things don't change drastically that often.
+
+## SessionHandle
+
+  The SessionHandle handle struct is the one returned to the outside in the
+  external API as a "CURL *". This is usually known as an easy handle in API
+  documentations and examples.
+
+  Information and state that is related to the actual connection is in the
+  'connectdata' struct. When a transfer is about to be made, libcurl will
+  either create a new connection or re-use an existing one. The particular
+  connectdata that is used by this handle is pointed out by
+  SessionHandle->easy_conn.
+
+  Data and information that regard this particular single transfer is put in
+  the SingleRequest sub-struct.
+
+  When the SessionHandle struct is added to a multi handle, as it must be in
+  order to do any transfer, the ->multi member will point to the `Curl_multi`
+  struct it belongs to. The ->prev and ->next members will then be used by the
+  multi code to keep a linked list of SessionHandle structs that are added to
+  that same multi handle. libcurl always uses multi so ->multi *will* point to
+  a `Curl_multi` when a transfer is in progress.
+
+  ->mstate is the multi state of this particular SessionHandle. When
+  `multi_runsingle()` is called, it will act on this handle according to which
+  state it is in. The mstate is also what tells which sockets to return for a
+  specific SessionHandle when [`curl_multi_fdset()`][12] is called etc.
+
+  The libcurl source code generally use the name 'data' for the variable that
+  points to the SessionHandle.
+
+  When doing multiplexed HTTP/2 transfers, each SessionHandle is associated
+  with an individual stream, sharing the same connectdata struct. Multiplexing
+  makes it even more important to keep things associated with the right thing!
+
+## connectdata
+
+  A general idea in libcurl is to keep connections around in a connection
+  "cache" after they have been used in case they will be used again and then
+  re-use an existing one instead of creating a new as it creates a significant
+  performance boost.
+
+  Each 'connectdata' identifies a single physical connection to a server. If
+  the connection can't be kept alive, the connection will be closed after use
+  and then this struct can be removed from the cache and freed.
+
+  Thus, the same SessionHandle can be used multiple times and each time select
+  another connectdata struct to use for the connection. Keep this in mind, as
+  it is then important to consider if options or choices are based on the
+  connection or the SessionHandle.
+
+  Functions in libcurl will assume that connectdata->data points to the
+  SessionHandle that uses this connection (for the moment).
+
+  As a special complexity, some protocols supported by libcurl require a
+  special disconnect procedure that is more than just shutting down the
+  socket. It can involve sending one or more commands to the server before
+  doing so. Since connections are kept in the connection cache after use, the
+  original SessionHandle may no longer be around when the time comes to shut
+  down a particular connection. For this purpose, libcurl holds a special
+  dummy `closure_handle` SessionHandle in the `Curl_multi` struct to use when
+  needed.
+
+  FTP uses two TCP connections for a typical transfer but it keeps both in
+  this single struct and thus can be considered a single connection for most
+  internal concerns.
+
+  The libcurl source code generally use the name 'conn' for the variable that
+  points to the connectdata.
+
+## Curl_multi
+
+  Internally, the easy interface is implemented as a wrapper around multi
+  interface functions. This makes everything multi interface.
+
+  `Curl_multi` is the multi handle struct exposed as "CURLM *" in external APIs.
+
+  This struct holds a list of SessionHandle structs that have been added to
+  this handle with [`curl_multi_add_handle()`][13]. The start of the list is
+  ->easyp and ->num_easy is a counter of added SessionHandles.
+
+  ->msglist is a linked list of messages to send back when
+  [`curl_multi_info_read()`][14] is called. Basically a node is added to that
+  list when an individual SessionHandle's transfer has completed.
+
+  ->hostcache points to the name cache. It is a hash table for looking up name
+  to IP. The nodes have a limited life time in there and this cache is meant
+  to reduce the time for when the same name is wanted within a short period of
+  time.
+
+  ->timetree points to a tree of SessionHandles, sorted by the remaining time
+  until it should be checked - normally some sort of timeout. Each
+  SessionHandle has one node in the tree.
+
+  ->sockhash is a hash table to allow fast lookups of socket descriptor to
+  which SessionHandle that uses that descriptor. This is necessary for the
+  `multi_socket` API.
+
+  ->conn_cache points to the connection cache. It keeps track of all
+  connections that are kept after use. The cache has a maximum size.
+
+  ->closure_handle is described in the 'connectdata' section.
+
+  The libcurl source code generally use the name 'multi' for the variable that
+  points to the Curl_multi struct.
+
+## Curl_handler
+
+  Each unique protocol that is supported by libcurl needs to provide at least
+  one `Curl_handler` struct. It defines what the protocol is called and what
+  functions the main code should call to deal with protocol specific issues.
+  In general, there's a source file named [protocol].c in which there's a
+  "struct `Curl_handler` `Curl_handler_[protocol]`" declared. In url.c there's
+  then the main array with all individual `Curl_handler` structs pointed to
+  from a single array which is scanned through when a URL is given to libcurl
+  to work with.
+
+  ->scheme is the URL scheme name, usually spelled out in uppercase. That's
+  "HTTP" or "FTP" etc. SSL versions of the protcol need its own `Curl_handler`
+  setup so HTTPS separate from HTTP.
+
+  ->setup_connection is called to allow the protocol code to allocate protocol
+  specific data that then gets associated with that SessionHandle for the rest
+  of this transfer. It gets freed again at the end of the transfer. It will be
+  called before the 'connectdata' for the transfer has been selected/created.
+  Most protocols will allocate its private 'struct [PROTOCOL]' here and assign
+  SessionHandle->req.protop to point to it.
+
+  ->connect_it allows a protocol to do some specific actions after the TCP
+  connect is done, that can still be considered part of the connection phase.
+
+  Some protocols will alter the connectdata->recv[] and connectdata->send[]
+  function pointers in this function.
+
+  ->connecting is similarly a function that keeps getting called as long as the
+  protocol considers itself still in the connecting phase.
+
+  ->do_it is the function called to issue the transfer request. What we call
+  the DO action internally. If the DO is not enough and things need to be kept
+  getting done for the entire DO sequence to complete, ->doing is then usually
+  also provided. Each protocol that needs to do multiple commands or similar
+  for do/doing need to implement their own state machines (see SCP, SFTP,
+  FTP). Some protocols (only FTP and only due to historical reasons) has a
+  separate piece of the DO state called `DO_MORE`.
+
+  ->doing keeps getting called while issuing the transfer request command(s)
+
+  ->done gets called when the transfer is complete and DONE. That's after the
+  main data has been transferred.
+
+  ->do_more gets called during the `DO_MORE` state. The FTP protocol uses this
+  state when setting up the second connection.
+
+  ->`proto_getsock`
+  ->`doing_getsock`
+  ->`domore_getsock`
+  ->`perform_getsock`
+  Functions that return socket information. Which socket(s) to wait for which
+  action(s) during the particular multi state.
+
+  ->disconnect is called immediately before the TCP connection is shutdown.
+
+  ->readwrite gets called during transfer to allow the protocol to do extra
+  reads/writes
+
+  ->defport is the default report TCP or UDP port this protocol uses
+
+  ->protocol is one or more bits in the `CURLPROTO_*` set. The SSL versions
+  have their "base" protocol set and then the SSL variation. Like
+  "HTTP|HTTPS".
+
+  ->flags is a bitmask with additional information about the protocol that will
+  make it get treated differently by the generic engine:
+
+  - `PROTOPT_SSL` - will make it connect and negotiate SSL
+
+  - `PROTOPT_DUAL` - this protocol uses two connections
+
+  - `PROTOPT_CLOSEACTION` - this protocol has actions to do before closing the
+    connection. This flag is no longer used by code, yet still set for a bunch
+    protocol handlers.
+  
+  - `PROTOPT_DIRLOCK` - "direction lock". The SSH protocols set this bit to
+    limit which "direction" of socket actions that the main engine will
+    concern itself about.
+
+  - `PROTOPT_NONETWORK` - a protocol that doesn't use network (read file:)
+
+  - `PROTOPT_NEEDSPWD` - this protocol needs a password and will use a default
+    one unless one is provided
+
+  - `PROTOPT_NOURLQUERY` - this protocol can't handle a query part on the URL
+    (?foo=bar)
+
+## conncache
 
- There's no magic to this. When you consider everything stable enough to be
- released, do this:
+  Is a hash table with connections for later re-use. Each SessionHandle has
+  a pointer to its connection cache. Each multi handle sets up a connection
+  cache that all added SessionHandles share by default.
 
-   1. Tag the source code accordingly.
+## Curl_share
+  
+  The libcurl share API allocates a `Curl_share` struct, exposed to the
+  external API as "CURLSH *".
 
-   2. run the 'maketgz' script (using 'make distcheck' will give you a pretty
-      good view on the status of the current sources). maketgz requires a
-      version number and creates the 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.
+  The idea is that the struct can have a set of own versions of caches and
+  pools and then by providing this struct in the `CURLOPT_SHARE` option, those
+  specific SessionHandles will use the caches/pools that this share handle
+  holds.
+
+  Then individual SessionHandle structs can be made to share specific things
+  that they otherwise wouldn't, such as cookies.
 
-   3. When that's complete, sign the output files.
+  The `Curl_share` struct can currently hold cookies, DNS cache and the SSL
+  session cache.
 
-   4. Upload
+## CookieInfo
 
-   5. Update web site and changelog on site
+  This is the main cookie struct. It holds all known cookies and related
+  information. Each SessionHandle has its own private CookieInfo even when
+  they are added to a multi handle. They can be made to share cookies by using
+  the share API.
 
-   6. Send announcement to the mailing lists
 
- NOTE: you must 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.
+[1]: https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+[2]: https://curl.haxx.se/libcurl/c/curl_easy_init.html
+[3]: http://c-ares.haxx.se/
+[4]: https://tools.ietf.org/html/rfc7230 "RFC 7230"
+[5]: https://curl.haxx.se/libcurl/c/CURLOPT_ACCEPT_ENCODING.html
+[6]: https://curl.haxx.se/docs/manpage.html#--compressed
+[7]: https://curl.haxx.se/libcurl/c/curl_multi_socket_action.html
+[8]: https://curl.haxx.se/libcurl/c/curl_multi_timeout.html
+[9]: https://curl.haxx.se/libcurl/c/curl_multi_setopt.html
+[10]: https://curl.haxx.se/libcurl/c/CURLMOPT_TIMERFUNCTION.html
+[11]: https://curl.haxx.se/libcurl/c/curl_multi_perform.html
+[12]: https://curl.haxx.se/libcurl/c/curl_multi_fdset.html
+[13]: https://curl.haxx.se/libcurl/c/curl_multi_add_handle.html
+[14]: https://curl.haxx.se/libcurl/c/curl_multi_info_read.html
index 7788567..a694ced 100644 (file)
@@ -3,6 +3,36 @@ 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!
 
+93. It is not possible to pass a 64-bit value using CURLFORM_CONTENTLEN with
+  CURLFORM_ARRAY, when compiled on 32-bit platforms that support 64-bit
+  integers. This is because the underlying structure 'curl_forms' uses a dual
+  purpose char* for storing these values in via casting. For more information
+  see the now closed related issue:
+  https://github.com/curl/curl/issues/608
+  
+92. curl tool 7.47.1 in Windows will not --output to literal paths \\?\ or to
+  reserved dos device names unless the device prefix \\.\ is used. To send
+  output to a device that has a reserved dos device name you can use the
+  Windows device prefix (eg: --output \\.\NUL). You can also use the
+  redirection operator to send output to a literal path or a reserved device
+  name (eg: > NUL).
+  The next release of curl will support --output in Windows to literal paths
+  and to reserved device names without the device prefix.
+  https://github.com/curl/curl/commit/c3aac48
+  https://github.com/curl/curl/commit/4fc80f3
+
+91. "curl_easy_perform hangs with imap and PolarSSL"
+  https://github.com/curl/curl/issues/334
+
+90. IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the
+  code reveals that pingpong.c contains some truncation code, at line 408,
+  when it deems the server response to be too large truncating it to 40
+  characters"
+  https://curl.haxx.se/bug/view.cgi?id=1366
+
+89. Disabling HTTP Pipelining when there are ongoing transfers can lead to
+  heap corruption and crash. https://curl.haxx.se/bug/view.cgi?id=1411
+
 88. libcurl doesn't support CURLINFO_FILETIME for SFTP transfers and thus
   curl's -R option also doesn't work then.
 
@@ -12,7 +42,7 @@ may have been fixed since this was written!
   mention that decoding also means that we need to check for nastiness that is
   attempted, like "../" sequences and the like. Probably everything to the left
   of any embedded slashes should be cut off.
-  http://curl.haxx.se/bug/view.cgi?id=1294
+  https://curl.haxx.se/bug/view.cgi?id=1294
 
 86. The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3
   and SMTP if a failure occurs during the authentication phase of a
@@ -23,7 +53,8 @@ may have been fixed since this was written!
   CURLINFO_STARTTRANSFER_TIME is wrong. While using POST
   CURLINFO_STARTTRANSFER_TIME minus CURLINFO_PRETRANSFER_TIME is near to zero
   every time.
-  http://curl.haxx.se/bug/view.cgi?id=1213
+  https://github.com/curl/curl/issues/218
+  https://curl.haxx.se/bug/view.cgi?id=1213
 
 84. CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS
   backends, so relying on this information in a generic app is flaky.
@@ -31,67 +62,57 @@ may have been fixed since this was written!
 82. When building with the Windows Borland compiler, it fails because the
   "tlib" tool doesn't support hyphens (minus signs) in file names and we have
   such in the build.
-  http://curl.haxx.se/bug/view.cgi?id=1222
+  https://curl.haxx.se/bug/view.cgi?id=1222
 
 81. When using -J (with -O), automatically resumed downloading together with
   "-C -" fails. Without -J the same command line works! This happens because
   the resume logic is worked out before the target file name (and thus its
   pre-transfer size) has been figured out!
-  http://curl.haxx.se/bug/view.cgi?id=1169
+  https://curl.haxx.se/bug/view.cgi?id=1169
 
 80. Curl doesn't recognize certificates in DER format in keychain, but it
   works with PEM.
-  http://curl.haxx.se/bug/view.cgi?id=1065
+  https://curl.haxx.se/bug/view.cgi?id=1065
 
 79. SMTP. When sending data to multiple recipients, curl will abort and return
   failure if one of the recipients indicate failure (on the "RCPT TO"
   command). Ordinary mail programs would proceed and still send to the ones
   that can receive data. This is subject for change in the future.
-  http://curl.haxx.se/bug/view.cgi?id=1116
-
-78. curl and libcurl don't always signal the client properly when "sending"
-  zero bytes files - it makes for example the command line client not creating
-  any file at all. Like when using FTP.
-  http://curl.haxx.se/bug/view.cgi?id=1063
-
-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.
+  https://curl.haxx.se/bug/view.cgi?id=1116
 
 75. NTLM authentication involving unicode user name or password only works
   properly if built with UNICODE defined together with the WinSSL/schannel
   backend. The original problem was mentioned in:
-  http://curl.haxx.se/mail/lib-2009-10/0024.html
-  http://curl.haxx.se/bug/view.cgi?id=896
+  https://curl.haxx.se/mail/lib-2009-10/0024.html
+  https://curl.haxx.se/bug/view.cgi?id=896
 
   The WinSSL/schannel version verified to work as mentioned in
-  http://curl.haxx.se/mail/lib-2012-07/0073.html
+  https://curl.haxx.se/mail/lib-2012-07/0073.html
 
 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=856
+  https://curl.haxx.se/bug/view.cgi?id=856
 
 72. "Pausing pipeline problems."
-  http://curl.haxx.se/mail/lib-2009-07/0214.html
+  https://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
+  https://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
+  https://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
+  https://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=846
+  https://curl.haxx.se/bug/view.cgi?id=846
 
 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
@@ -102,27 +123,27 @@ may have been fixed since this was written!
 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
+  https://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
+  https://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
+  https://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
+  not working: https://curl.haxx.se/mail/lib-2008-07/0295.html
 
 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=748
+  https://curl.haxx.se/bug/view.cgi?id=748
 
 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
@@ -131,13 +152,13 @@ may have been fixed since this was written!
 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
+  https://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://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
@@ -146,25 +167,25 @@ may have been fixed since this was written!
   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=649
+  https://curl.haxx.se/bug/view.cgi?id=649
 
 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=635
+  https://curl.haxx.se/bug/view.cgi?id=635
 
 39. Steffen Rumler's Race Condition in Curl_proxyCONNECT:
-  http://curl.haxx.se/mail/lib-2007-01/0045.html
+  https://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
+  https://curl.haxx.se/mail/lib-2007-01/0103.html
 
 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=604
+  not do it right: https://curl.haxx.se/bug/view.cgi?id=604
 
 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
@@ -172,7 +193,7 @@ may have been fixed since this was written!
 
 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=535
+  to what winhttp does. See https://curl.haxx.se/bug/view.cgi?id=535
 
 23. SOCKS-related problems:
   B) libcurl doesn't support FTPS over a SOCKS proxy.
@@ -218,8 +239,8 @@ may have been fixed since this was written!
 10. To get HTTP Negotiate (SPNEGO) 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=440 How?
-  http://curl.haxx.se/mail/lib-2004-08/0182.html
+  https://curl.haxx.se/bug/view.cgi?id=440 How?
+  https://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
@@ -235,14 +256,4 @@ may have been fixed since this was written!
 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
+  https://curl.haxx.se/mail/lib-2003-06/0146.html
diff --git a/docs/LIBCURL-STRUCTS b/docs/LIBCURL-STRUCTS
deleted file mode 100644 (file)
index 136d17c..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
-Structs in libcurl
-
-This document should cover 7.32.0 pretty accurately, but will make sense even
-for older and later versions as things don't change drastically that often.
-
- 1. The main structs in libcurl
-  1.1 SessionHandle
-  1.2 connectdata
-  1.3 Curl_multi
-  1.4 Curl_handler
-  1.5 conncache
-  1.6 Curl_share
-  1.7 CookieInfo
-
-==============================================================================
-
-1. The main structs in libcurl
-
-  1.1 SessionHandle
-
-  The SessionHandle handle struct is the one returned to the outside in the
-  external API as a "CURL *". This is usually known as an easy handle in API
-  documentations and examples.
-
-  Information and state that is related to the actual connection is in the
-  'connectdata' struct. When a transfer is about to be made, libcurl will
-  either create a new connection or re-use an existing one. The particular
-  connectdata that is used by this handle is pointed out by
-  SessionHandle->easy_conn.
-
-  Data and information that regard this particular single transfer is put in
-  the SingleRequest sub-struct.
-
-  When the SessionHandle struct is added to a multi handle, as it must be in
-  order to do any transfer, the ->multi member will point to the Curl_multi
-  struct it belongs to. The ->prev and ->next members will then be used by the
-  multi code to keep a linked list of SessionHandle structs that are added to
-  that same multi handle. libcurl always uses multi so ->multi *will* point to
-  a Curl_multi when a transfer is in progress.
-
-  ->mstate is the multi state of this particular SessionHandle. When
-  multi_runsingle() is called, it will act on this handle according to which
-  state it is in. The mstate is also what tells which sockets to return for a
-  specific SessionHandle when curl_multi_fdset() is called etc.
-
-  The libcurl source code generally use the name 'data' for the variable that
-  points to the SessionHandle.
-
-
-  1.2 connectdata
-
-  A general idea in libcurl is to keep connections around in a connection
-  "cache" after they have been used in case they will be used again and then
-  re-use an existing one instead of creating a new as it creates a significant
-  performance boost.
-
-  Each 'connectdata' identifies a single physical connection to a server. If
-  the connection can't be kept alive, the connection will be closed after use
-  and then this struct can be removed from the cache and freed.
-
-  Thus, the same SessionHandle can be used multiple times and each time select
-  another connectdata struct to use for the connection. Keep this in mind, as
-  it is then important to consider if options or choices are based on the
-  connection or the SessionHandle.
-
-  Functions in libcurl will assume that connectdata->data points to the
-  SessionHandle that uses this connection.
-
-  As a special complexity, some protocols supported by libcurl require a
-  special disconnect procedure that is more than just shutting down the
-  socket. It can involve sending one or more commands to the server before
-  doing so. Since connections are kept in the connection cache after use, the
-  original SessionHandle may no longer be around when the time comes to shut
-  down a particular connection. For this purpose, libcurl holds a special
-  dummy 'closure_handle' SessionHandle in the Curl_multi struct to 
-
-  FTP uses two TCP connections for a typical transfer but it keeps both in
-  this single struct and thus can be considered a single connection for most
-  internal concerns.
-
-  The libcurl source code generally use the name 'conn' for the variable that
-  points to the connectdata.
-
-
-  1.3 Curl_multi
-
-  Internally, the easy interface is implemented as a wrapper around multi
-  interface functions. This makes everything multi interface.
-
-  Curl_multi is the multi handle struct exposed as "CURLM *" in external APIs.
-
-  This struct holds a list of SessionHandle structs that have been added to
-  this handle with curl_multi_add_handle(). The start of the list is ->easyp
-  and ->num_easy is a counter of added SessionHandles.
-
-  ->msglist is a linked list of messages to send back when
-  curl_multi_info_read() is called. Basically a node is added to that list
-  when an individual SessionHandle's transfer has completed.
-
-  ->hostcache points to the name cache. It is a hash table for looking up name
-  to IP. The nodes have a limited life time in there and this cache is meant
-  to reduce the time for when the same name is wanted within a short period of
-  time.
-
-  ->timetree points to a tree of SessionHandles, sorted by the remaining time
-  until it should be checked - normally some sort of timeout. Each
-  SessionHandle has one node in the tree.
-
-  ->sockhash is a hash table to allow fast lookups of socket descriptor to
-  which SessionHandle that uses that descriptor. This is necessary for the
-  multi_socket API.
-
-  ->conn_cache points to the connection cache. It keeps track of all
-  connections that are kept after use. The cache has a maximum size.
-
-  ->closure_handle is described in the 'connectdata' section.
-
-  The libcurl source code generally use the name 'multi' for the variable that
-  points to the Curl_multi struct.
-
-
-  1.4 Curl_handler
-
-  Each unique protocol that is supported by libcurl needs to provide at least
-  one Curl_handler struct. It defines what the protocol is called and what
-  functions the main code should call to deal with protocol specific issues.
-  In general, there's a source file named [protocol].c in which there's a
-  "struct Curl_handler Curl_handler_[protocol]" declared. In url.c there's
-  then the main array with all individual Curl_handler structs pointed to from
-  a single array which is scanned through when a URL is given to libcurl to
-  work with.
-
-  ->scheme is the URL scheme name, usually spelled out in uppercase. That's
-  "HTTP" or "FTP" etc. SSL versions of the protcol need its own Curl_handler
-  setup so HTTPS separate from HTTP.
-
-  ->setup_connection is called to allow the protocol code to allocate protocol
-  specific data that then gets associated with that SessionHandle for the rest
-  of this transfer. It gets freed again at the end of the transfer. It will be
-  called before the 'connectdata' for the transfer has been selected/created.
-  Most protocols will allocate its private 'struct [PROTOCOL]' here and assign
-  SessionHandle->req.protop to point to it.
-
-  ->connect_it allows a protocol to do some specific actions after the TCP
-  connect is done, that can still be considered part of the connection phase.
-
-  Some protocols will alter the connectdata->recv[] and connectdata->send[]
-  function pointers in this function.
-
-  ->connecting is similarly a function that keeps getting called as long as the
-  protocol considers itself still in the connecting phase.
-
-  ->do_it is the function called to issue the transfer request. What we call
-  the DO action internally. If the DO is not enough and things need to be kept
-  getting done for the entire DO sequence to complete, ->doing is then usually
-  also provided. Each protocol that needs to do multiple commands or similar
-  for do/doing need to implement their own state machines (see SCP, SFTP,
-  FTP). Some protocols (only FTP and only due to historical reasons) has a
-  separate piece of the DO state called DO_MORE.
-
-  ->doing keeps getting called while issuing the transfer request command(s)
-
-  ->done gets called when the transfer is complete and DONE. That's after the
-  main data has been transferred.
-
-  ->do_more gets called during the DO_MORE state. The FTP protocol uses this
-  state when setting up the second connection.
-
-  ->proto_getsock
-  ->doing_getsock
-  ->domore_getsock
-  ->perform_getsock
-  Functions that return socket information. Which socket(s) to wait for which
-  action(s) during the particular multi state.
-
-  ->disconnect is called immediately before the TCP connection is shutdown.
-
-  ->readwrite gets called during transfer to allow the protocol to do extra
-  reads/writes
-
-  ->defport is the default report TCP or UDP port this protocol uses
-
-  ->protocol is one or more bits in the CURLPROTO_* set. The SSL versions have
-  their "base" protocol set and then the SSL variation. Like "HTTP|HTTPS".
-
-  ->flags is a bitmask with additional information about the protocol that will
-  make it get treated differently by the generic engine:
-
-    PROTOPT_SSL - will make it connect and negotiate SSL
-
-    PROTOPT_DUAL - this protocol uses two connections
-
-    PROTOPT_CLOSEACTION - this protocol has actions to do before closing the
-    connection. This flag is no longer used by code, yet still set for a bunch
-    protocol handlers.
-  
-    PROTOPT_DIRLOCK - "direction lock". The SSH protocols set this bit to
-    limit which "direction" of socket actions that the main engine will
-    concern itself about.
-
-    PROTOPT_NONETWORK - a protocol that doesn't use network (read file:)
-
-    PROTOPT_NEEDSPWD - this protocol needs a password and will use a default
-    one unless one is provided
-
-    PROTOPT_NOURLQUERY - this protocol can't handle a query part on the URL
-    (?foo=bar)
-
-
-  1.5 conncache
-
-  Is a hash table with connections for later re-use. Each SessionHandle has
-  a pointer to its connection cache. Each multi handle sets up a connection
-  cache that all added SessionHandles share by default.
-
-
-  1.6 Curl_share
-  
-  The libcurl share API allocates a Curl_share struct, exposed to the external
-  API as "CURLSH *".
-
-  The idea is that the struct can have a set of own versions of caches and
-  pools and then by providing this struct in the CURLOPT_SHARE option, those
-  specific SessionHandles will use the caches/pools that this share handle
-  holds.
-
-  Then individual SessionHandle structs can be made to share specific things
-  that they otherwise wouldn't, such as cookies.
-
-  The Curl_share struct can currently hold cookies, DNS cache and the SSL
-  session cache.
-
-  
-  1.7 CookieInfo
-
-  This is the main cookie struct. It holds all known cookies and related
-  information. Each SessionHandle has its own private CookieInfo even when
-  they are added to a multi handle. They can be made to share cookies by using
-  the share API.
index a53835c..68e7156 100644 (file)
@@ -18,34 +18,34 @@ 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
+libcurl https://curl.haxx.se/docs/copyright.html
 
         Uses an MIT (or Modified BSD)-style license that is as liberal as
         possible.
 
-OpenSSL http://www.openssl.org/source/license.html
+OpenSSL https://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.
+        licensing is a problem for you, consider using another TLS library.
 
 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
+        a problem for you, consider using another TLS library. 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/
+WolfSSL   https://www.wolfssl.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.
+        (May be used for SSL/TLS support) Uses the GPL[1] license or a
+        propietary license. If this is a problem for you, consider using
+        another TLS library.
 
-NSS     http://www.mozilla.org/projects/security/pki/nss/
+NSS     https://developer.mozilla.org/en-US/docs/Mozilla/Projects/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
@@ -57,13 +57,29 @@ axTLS   http://axtls.sourceforge.net/
 
         (May be used for SSL/TLS support) Uses a Modified BSD-style license.
 
-c-ares  http://daniel.haxx.se/projects/c-ares/license.html
+mbedTLS https://tls.mbed.org/
+
+        (May be used for SSL/TLS support) Uses the GPL[1] license or a
+        propietary license. If this is a problem for you, consider using
+        another TLS library.
+
+BoringSSL https://boringssl.googlesource.com/
+
+        (May be used for SSL/TLS support) As an OpenSSL fork, it has the same
+        license as that.
+
+libressl http://www.libressl.org/
+
+        (May be used for SSL/TLS support) As an OpenSSL fork, it has the same
+        license as that.
+
+c-ares  https://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
+zlib    http://www.zlib.net/zlib_license.html
 
         (Used for compressed Transfer-Encoding support) Uses an MIT-style
         license that shouldn't collide with any other library.
@@ -73,12 +89,12 @@ 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/
+Heimdal http://www.h5l.org
 
         (May be used for GSS support) Heimdal is Original BSD licensed with
         the announcement clause.
 
-GNU GSS http://www.gnu.org/software/gss/
+GNU GSS https://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
@@ -105,10 +121,10 @@ 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
+[1] = GPL - GNU General Public License: https://www.gnu.org/licenses/gpl.html
+[2] = https://www.gnu.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
+      https://www.gnu.org/licenses/lgpl.html
 [4] = MPL - Mozilla Public License:
-      http://www.mozilla.org/MPL/
+      https://www.mozilla.org/MPL/
index fb50312..7505800 100644 (file)
@@ -33,7 +33,7 @@ MAIL ETIQUETTE
   1.1 Mailing Lists
 
   The mailing lists we have are all listed and described at
-  http://curl.haxx.se/mail/
+  https://curl.haxx.se/mail/
 
   Each mailing list is targeted to a specific set of users and subjects,
   please use the one or the ones that suit you the most.
@@ -230,7 +230,7 @@ MAIL ETIQUETTE
   Quote as little as possible. Just enough to provide the context you cannot
   leave out. A lengthy description can be found here:
 
-      http://www.netmeister.org/news/learn2quote.html
+      https://www.netmeister.org/news/learn2quote.html
 
   2.7 Digest
 
index 113df20..08fdb57 100644 (file)
@@ -3,7 +3,7 @@ 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
+        https://curl.haxx.se
 
 SIMPLE USAGE
 
@@ -470,8 +470,8 @@ COOKIES
   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:
+  To 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
 
@@ -824,7 +824,7 @@ LDAP
   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
+  RFC 2255, "The LDAP URL Format" https://curl.haxx.se/rfc/rfc2255.txt
 
   To show you an example, this is how I can get all people from my local LDAP
   server that has a certain sub-domain in their email address:
@@ -1011,7 +1011,7 @@ 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:
+  https://curl.haxx.se/mail/. Some of the lists available are:
 
   curl-users
 
index 1f92911..b202a5d 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
@@ -33,22 +33,22 @@ 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 \
- MAIL-ETIQUETTE HTTP-COOKIES LIBCURL-STRUCTS SECURITY RELEASE-PROCEDURE  \
- SSL-PROBLEMS
+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 INSTALL.devcpp              \
+ MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE SSL-PROBLEMS   \
+ HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md
 
 MAN2HTML= roffit < $< >$@
 
 SUFFIXES = .1 .html .pdf
 
 html: $(HTMLPAGES)
-       cd libcurl; make html
+       cd libcurl && make html
 
 pdf: $(PDFPAGES)
-       cd libcurl; make pdf
+       cd libcurl && make pdf
 
 .1.html:
        $(MAN2HTML)
index 49f9338..8451f04 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
 #
 ###########################################################################
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -100,8 +110,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = docs
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs 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 \
@@ -122,7 +130,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -214,6 +223,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in INSTALL THANKS TODO
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -297,7 +307,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -317,6 +327,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -350,6 +361,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -361,17 +373,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -417,6 +430,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -434,12 +448,12 @@ PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.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 \
- MAIL-ETIQUETTE HTTP-COOKIES LIBCURL-STRUCTS SECURITY RELEASE-PROCEDURE  \
- SSL-PROBLEMS
+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 INSTALL.devcpp              \
+ MAIL-ETIQUETTE HTTP-COOKIES SECURITY RELEASE-PROCEDURE SSL-PROBLEMS   \
+ HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md
 
 MAN2HTML = roffit < $< >$@
 SUFFIXES = .1 .html .pdf
@@ -459,7 +473,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign docs/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -800,12 +813,14 @@ uninstall-man: uninstall-man1
        mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
        uninstall-am uninstall-man uninstall-man1
 
+.PRECIOUS: Makefile
+
 
 html: $(HTMLPAGES)
-       cd libcurl; make html
+       cd libcurl && make html
 
 pdf: $(PDFPAGES)
-       cd libcurl; make pdf
+       cd libcurl && make pdf
 
 .1.html:
        $(MAN2HTML)
index 2f85b3f..b0700f3 100644 (file)
@@ -1,9 +1,3 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
 curl release procedure - how to do a release
 ============================================
 
@@ -17,8 +11,8 @@ in the source code repo
 - make sure all relevant changes are committed on the master branch
 
 - tag the git repo in this style: `git tag -a curl-7_34_0`. -a annotates the
-  tag and we use underscores instead of dots in the version number. 
-   
+  tag and we use underscores instead of dots in the version number.
+
 - run "./maketgz 7.34.0" to build the release tarballs. It is important that
   you run this on a machine with the correct set of autotools etc installed
   as this is what then will be shipped and used by most users on *nix like
@@ -84,11 +78,10 @@ Coming dates
 Based on the description above, here are some planned release dates (at the
 time of this writing):
 
-- November 5, 2014 (version 7.39.0)
-- December 31, 2014
-- February 25, 2015
-- April 22, 2015
-- June 17, 2015
-- August 12, 2015
-- October 7, 2015
+- October 7, 2015 (version 7.45.0)
 - December 2, 2015
+- January 27, 2016
+- March 23, 2016
+- May 18, 2016
+- July 13, 2016
+- September 7, 2016
index 760e759..1ad8aac 100644 (file)
@@ -36,7 +36,7 @@ This document lists documents and standards used by curl.
 
   RFC 2109 - HTTP State Management Mechanism (cookie stuff)
            - Also, read Netscape's specification at
-             http://curl.haxx.se/rfc/cookie_spec.html
+             https://curl.haxx.se/rfc/cookie_spec.html
 
   RFC 2183 - The Content-Disposition Header Field
 
diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md
new file mode 100644 (file)
index 0000000..bad9084
--- /dev/null
@@ -0,0 +1,133 @@
+curl the next few years - perhaps
+=================================
+
+Roadmap of things Daniel Stenberg and Steve Holme want to work on next. It is
+intended to serve as a guideline for others for information, feedback and
+possible participation.
+
+HTTP/2
+------
+
+- test suite
+
+   Base this on existing nghttp2 server to start with to make functional
+   tests. Later on we can adopt that code or work with nghttp2 to provide ways
+   to have the http2 server respond with broken responses to make sure we deal
+   with that nicely as well.
+
+   To decide: if we need to bundle parts of the nghttp2 stuff that probably
+   won't be shipped by many distros.
+
+- provide option for HTTP/2 "prior knowledge" over clear text
+
+   As it would avoid the roundtrip-heavy Upgrade: procedures when you _know_
+   it speaks HTTP/2.
+
+HTTP cookies
+------------
+
+Two cookie drafts have been adopted by the httpwg in IETF and we should
+support them as the popular browsers will as well:
+
+[Deprecate modification of 'secure' cookies from non-secure
+origins](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-00)
+
+[Cookie Prefixes](https://tools.ietf.org/html/draft-ietf-httpbis-cookie-prefixes-00)
+
+[Firefox bug report about secure cookies](https://bugzilla.mozilla.org/show_bug.cgi?id=976073)
+
+SRV records
+-----------
+
+How to find services for specific domains/hosts.
+
+HTTPS to proxy
+--------------
+
+To avoid network traffic to/from the proxy getting snooped on. There's a git
+branch in the public git repository for this that we need to make sure works
+for all TLS backends and then merge!
+
+curl_formadd()
+--------------
+
+make sure there's an easy handle passed in to `curl_formadd()`,
+`curl_formget()` and `curl_formfree()` by adding replacement functions and
+deprecating the old ones to allow custom mallocs and more
+
+third-party SASL
+----------------
+
+add support for third-party SASL libraries such as Cyrus SASL - may need to
+move existing native and SSPI based authentication into vsasl folder after
+reworking HTTP and SASL code
+
+SASL authentication in LDAP
+---------------------------
+
+...
+
+Simplify the SMTP email
+-----------------------
+
+Simplify the SMTP email interface so that programmers don't have to
+construct the body of an email that contains all the headers, alternative
+content, images and attachments - maintain raw interface so that
+programmers that want to do this can
+
+email capabilities
+------------------
+
+Allow the email protocols to return the capabilities before
+authenticating. This will allow an application to decide on the best
+authentication mechanism
+
+Win32 pthreads
+--------------
+
+Allow Windows threading model to be replaced by Win32 pthreads port
+
+dynamic buffer size
+-------------------
+
+Implement a dynamic buffer size to allow SFTP to use much larger buffers and
+possibly allow the size to be customizable by applications. Use less memory
+when handles are not in use?
+
+New stuff - curl
+----------------
+
+1. Embed a language interpreter (lua?). For that middle ground where curl
+   isn’t enough and a libcurl binding feels “too much”. Build-time conditional
+   of course.
+
+2. Simplify the SMTP command line so that the headers and multi-part content
+   don't have to be constructed before calling curl
+
+Improve
+-------
+
+1. build for windows (considered hard by many users)
+
+2. curl -h output (considered overwhelming to users)
+
+3. we have > 170 command line options, is there a way to redo things to
+   simplify or improve the situation as we are likely to keep adding
+   features/options in the future too
+
+4. docs (considered "bad" by users but how do we make it better?)
+
+  - split up curl.1
+
+5. authentication framework (consider merging HTTP and SASL authentication to
+   give one API for protocols to call)
+
+6. Perform some of the clean up from the TODO document, removing old
+   definitions and such like that are currently earmarked to be removed years
+   ago
+
+Remove
+------
+
+1. makefile.vc files as there is no point in maintaining two sets of Windows
+   makefiles. Note: These are currently being used by the Windows autobuilds
index ee844d8..7b245d7 100644 (file)
@@ -14,7 +14,7 @@ Publishing Information
 ----------------------
 
 All known and public curl or libcurl related vulnerabilities are listed on
-[the curl web site security page](http://curl.haxx.se/docs/security.html).
+[the curl web site security page](https://curl.haxx.se/docs/security.html).
 
 Security vulnerabilities should not be entered in the project's public bug
 tracker unless the necessary configuration is in place to limit access to the
index 7ee4d14..e639871 100644 (file)
@@ -26,7 +26,7 @@ CA bundle missing intermediate certificates
   problems if your CA cert does not have the certificates for the
   intermediates in the whole trust chain.
 
-SSL version
+Protocol version
 
   Some broken servers fail to support the protocol negotiation properly that
   SSL servers are supposed to handle. This may cause the connection to fail
@@ -36,7 +36,9 @@ SSL version
   An additional complication can be that modern SSL libraries sometimes are
   built with support for older SSL and TLS versions disabled!
 
-SSL ciphers
+  All versions of SSL are considered insecure and should be avoided. Use TLS.
+
+Ciphers
 
   Clients give servers a list of ciphers to select from. If the list doesn't
   include any ciphers the server wants/can use, the connection handshake
@@ -51,10 +53,14 @@ SSL ciphers
   Note that these weak ciphers are identified as flawed. For example, this
   includes symmetric ciphers with less than 128 bit keys and RC4.
 
+  WinSSL in Windows XP is not able to connect to servers that no longer
+  support the legacy handshakes and algorithms used by those versions, so we
+  advice against building curl to use WinSSL on really old Windows versions.
+
   References:
 
-  http://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01
-  
+  https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01
+
 Allow BEAST
 
   BEAST is the name of a TLS 1.0 attack that surfaced 2011. When adding means
@@ -65,3 +71,17 @@ Allow BEAST
   introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability
   but on the other hand it allows curl to connect to that kind of strange
   servers.
+
+Disabling certificate revocation checks
+
+  Some SSL backends may do certificate revocation checks (CRL, OCSP, etc)
+  depending on the OS or build configuration. The --ssl-no-revoke option was
+  introduced in 7.44.0 to disable revocation checking but currently is only
+  supported for WinSSL (the native Windows SSL library), with an exception in
+  the case of Windows' Untrusted Publishers blacklist which it seems can't be
+  bypassed. This option may have broader support to accommodate other SSL
+  backends in the future.
+
+  References:
+
+  https://curl.haxx.se/docs/ssl-compared.html
index 89e5bb6..7755609 100644 (file)
@@ -20,8 +20,8 @@ support.
 It is about trust
 -----------------
 
-This system is about trust. In your local CA cert bundle you have certs from
-*trusted* Certificate Authorities that you then can use to verify that the
+This system is about trust. In your local CA certificate store you have certs
+from *trusted* Certificate Authorities that you then can use to verify that the
 server certificates you see are valid. They're signed by one of the CAs you
 trust.
 
@@ -35,16 +35,16 @@ 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.
+by using a CA certificate store that the SSL library can use to make sure the
+peer's server certificate is valid.
 
 If you communicate with HTTPS, FTPS or other TLS-using servers using
-certificates that are signed by CAs present in the bundle, you can be sure
+certificates that are signed by CAs present in the store, you can be sure
 that the remote server really is the one it claims to be.
 
 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
+cert store, if the server uses a certificate signed by a CA that isn't
+included in the store 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:
 
@@ -59,12 +59,22 @@ server, do one of the following:
 
     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.
+ 3. Add the CA cert for your server to the existing default CA certificate
+    store. The default CA certificate store can changed at compile time with the
+    following configure options:
 
-    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.
+    --with-ca-bundle=FILE: use the specified file as CA certificate store. CA
+    certificates need to be concatenated in PEM format into this file.
+
+    --with-ca-path=PATH: use the specified path as CA certificate store. CA
+    certificates need to be stored as individual PEM files in this directory.
+    You may need to run c_rehash after adding files there.
+
+    If neither of the two options is specified, configure will try to auto-detect
+    a setting. It's also possible to explicitly not hardcode any default store
+    but rely on the built in default the crypto library may provide instead.
+    You can achieve that by passing both --without-ca-bundle and
+    --without-ca-path to the configure script.
 
     If you use Internet Explorer, this is one way to get extract the CA cert
     for a particular server:
@@ -76,7 +86,7 @@ server, do one of the following:
      - Convert it from crt to PEM using the openssl tool:
        openssl x509 -inform DES -in yourdownloaded.crt \
        -out outcert.pem -text
-     - Append the 'outcert.pem' to the CA cert bundle or use it stand-alone
+     - Add the 'outcert.pem' to the CA certificate store or use it stand-alone
        as described below.
 
     If you use the 'openssl' tool, this is one way to get extract the CA cert
@@ -89,9 +99,9 @@ server, do one of the following:
      - 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.
-     - 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.
+     - If you want to trust the certificate, you can add it to your CA
+       certificate store 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
@@ -109,13 +119,13 @@ server, do one of the following:
  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: [CA Extract](http://curl.haxx.se/docs/caextract.html)
+    way for you: [CA Extract](https://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.
+certificate store, will cause SSL to report an error ("certificate verify
+failed") during the handshake and SSL will then refuse further communication
+with that server.
 
 Certificate Verification with NSS
 ---------------------------------
@@ -123,8 +133,8 @@ Certificate Verification with NSS
 If libcurl was built 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. This library is missing in
-OpenSuSE, and without it, NSS can only work with its own internal formats. NSS
+enables NSS to read the OpenSSL PEM CA bundle. On openSUSE you can install
+p11-kit-nss-trust which makes NSS use the system wide CA certificate store. NSS
 also has a new [database format](https://wiki.mozilla.org/NSS_Shared_DB).
 
 Starting with version 7.19.7, libcurl automatically adds the 'sql:' prefix to
index 0887881..a57a826 100644 (file)
@@ -36,10 +36,14 @@ Alex Suykov
 Alex Vinnik
 Alex aka WindEagle
 Alexander Beedie
+Alexander Dyagilev
+Alexander Elgert
 Alexander Klauer
 Alexander Kourakos
 Alexander Krasnostavsky
 Alexander Lazic
+Alexander Pepper
+Alexander Peslyak
 Alexander Zhuravlev
 Alexey Borzov
 Alexey Pesternikov
@@ -52,6 +56,7 @@ Alona Rossen
 Amol Pattekar
 Amr Shahin
 Anatoli Tubman
+Anders Bakken
 Anders Gustafsson
 Anders Havn
 Andi Jahja
@@ -79,6 +84,7 @@ Andrew Kurushin
 Andrew Moise
 Andrew Wansink
 Andrew de los Reyes
+Andrey Labunets
 Andrii Moiseiev
 Andrés García
 Andy Cedilnik
@@ -86,6 +92,7 @@ Andy Serpa
 Andy Tsouladze
 Angus Mackay
 Anthon Pang
+Anthony Avina
 Anthony Bryan
 Anthony G. Basile
 Antoine Calando
@@ -100,6 +107,7 @@ Arnaud Ebalard
 Arthur Murray
 Arve Knudsen
 Arvid Norberg
+Ashish Shukla
 Ask Bjørn Hansen
 Askar Safin
 Ates Goral
@@ -112,6 +120,7 @@ Balint Szilakszi
 Barry Abrahamson
 Bart Whiteley
 Bas Mevissen
+Ben Boeckel
 Ben Darnell
 Ben Greear
 Ben Madsen
@@ -122,11 +131,15 @@ Benbuck Nason
 Benjamin Gerard
 Benjamin Gilbert
 Benjamin Johnson
+Benjamin Kircher
 Benoit Neil
 Benoit Sigoure
 Bernard Leak
+Bernard Spil
 Bernhard Reutner-Fischer
+Bert Huijben
 Bertrand Demiddelaer
+Bertrand Simonnet
 Bill Doyle
 Bill Egert
 Bill Hoffman
@@ -142,6 +155,8 @@ Bob Richmond
 Bob Schader
 Bogdan Nicula
 Brad Burdick
+Brad Fitzpatrick
+Brad Harder
 Brad Hards
 Brad King
 Brad Spencer
@@ -151,8 +166,10 @@ Brandon Wang
 Brendan Jurd
 Brent Beardsley
 Brian Akins
+Brian Chrisman
 Brian Dessent
 Brian J. Murrell
+Brian Prodoehl
 Brian R Duffy
 Brian Ulm
 Brock Noland
@@ -172,9 +189,11 @@ Catalin Patulea
 Chad Monroe
 Chandrakant Bagul
 Charles Kerr
+Charles Romestant
 Chen Prog
 Chih-Chung Chang
 Chris "Bob Bob"
+Chris Araman
 Chris Combes
 Chris Conlon
 Chris Deidun
@@ -190,6 +209,7 @@ Christian Krause
 Christian Kurz
 Christian Robottom Reis
 Christian Schmitz
+Christian Stewart
 Christian Vogt
 Christian Weisgerber
 Christophe Demory
@@ -203,6 +223,7 @@ Claes Jakobsson
 Clarence Gardner
 Clemens Gruber
 Clifford Wolf
+Clint Clayton
 Cody Jones
 Cody Mack
 Colby Ranger
@@ -219,8 +240,10 @@ Cris Bailiff
 Cristian Rodríguez
 Curt Bogmine
 Cyrill Osterwalder
+Cédric Connes
 Cédric Deltheil
 D. Flinkmann
+Da-Yoon Chung
 Dag Ekengren
 Dagobert Michelsen
 Damian Dixon
@@ -236,8 +259,15 @@ Dan Zitter
 Daniel Black
 Daniel Cater
 Daniel Egger
+Daniel Hwang
 Daniel Johnson
+Daniel Kahn Gillmor
+Daniel Lee Hwang
+Daniel Melani
 Daniel Mentz
+Daniel Schauenberg
+Daniel Seither
+Daniel Shahaf
 Daniel Steinberg
 Daniel Stenberg
 Daniel Theron
@@ -251,7 +281,9 @@ Dave May
 Dave Reisner
 Dave Thompson
 Dave Vasilevsky
+Davey Shafik
 David Bau
+David Benjamin
 David Binderman
 David Blaikie
 David Byron
@@ -280,6 +312,7 @@ David Woodhouse
 David Wright
 David Yan
 Dengminwen
+Denis Feklushkin
 Dennis Clarke
 Derek Higgins
 Detlef Schmier
@@ -298,21 +331,25 @@ Dirk Manske
 Dmitri Shubin
 Dmitriy Sergeyev
 Dmitry Bartsevich
+Dmitry Eremin-Solenikov
 Dmitry Falko
 Dmitry Kurochkin
 Dmitry Popov
 Dmitry Rechkin
+Dmitry S. Baikov
 Dolbneff A.V
 Domenico Andreoli
 Dominick Meglio
 Dominique Leuenberger
 Doug Kaufman
 Doug Porter
+Douglas Creager
 Douglas E. Wegscheid
 Douglas Kilpatrick
 Douglas R. Horner
 Douglas Steinwand
 Dov Murik
+Drake Arconis
 Duane Cathey
 Duncan Mac-Vicar Prett
 Dustin Boswell
@@ -327,10 +364,12 @@ Edward Rudd
 Edward Sheldrake
 Eelco Dolstra
 Eetu Ojanen
+Egon Eckert
 Eldar Zaitov
 Ellis Pritchard
 Elmira A Semenova
 Emanuele Bovisio
+Emil Lerner
 Emil Romanus
 Emiliano Ida
 Enrico Scholz
@@ -343,12 +382,14 @@ Eric Lubin
 Eric Melville
 Eric Mertens
 Eric Rautman
+Eric Ridge
 Eric S. Raymond
 Eric Thelin
 Eric Vergnaud
 Eric Wong
 Eric Young
 Erick Nuwendam
+Erik Janssen
 Erik Johansson
 Ernest Beinrohr
 Erwan Legrand
@@ -363,12 +404,15 @@ Fabian Hiernaux
 Fabian Keil
 Fabrizio Ammollo
 Fedor Karpelevitch
+Feist Josselin
 Felix Yan
 Felix von Leitner
 Feng Tu
+Flavio Medeiros
 Florian Schoppmann
 Florian Weimer
 Forrest Cahoon
+Francisco Moraes
 Frank Gevaerts
 Frank Hempel
 Frank Keeney
@@ -381,6 +425,7 @@ François Charlier
 Fred Machado
 Fred New
 Fred Noz
+Fred Stluka
 Frederic Lepied
 Fredrik Thulin
 Gabriel Kuri
@@ -415,9 +460,11 @@ Glen A Johnson Jr.
 Glen Nakamura
 Glen Scott
 Glenn Sheridan
+Google Inc.
 Gordon Marler
 Gorilla Maguila
 Grant Erickson
+Grant Pannell
 Greg Hewgill
 Greg Morse
 Greg Onufer
@@ -430,12 +477,14 @@ Guido Berhoerster
 Guillaume Arluison
 Gunter Knauf
 Gustaf Hui
+Gustavo Grieco
 Gwenole Beauchesne
 Gökhan Şengün
 Götz Babin-Ebell
 Hamish Mackenzie
 Hang Kin Lau
 Hang Su
+Hanno Böck
 Hanno Kranzhoff
 Hans Steegers
 Hans-Jurgen May
@@ -473,16 +522,20 @@ Iida Yosiaki
 Ilguiz Latypov
 Ilja van Sprundel
 Immanuel Gregoire
+Inca R
 Ingmar Runge
 Ingo Ralf Blum
 Ingo Wilken
+Isaac Boukris
 Ishan SinghLevett
 Ivo Bellin Salarin
 Jack Zhang
 Jacky Lam
 Jacob Meuser
 Jacob Moshenko
+Jactry Zeng
 Jad Chamcham
+Jaime Fullaondo
 Jakub Zakrzewski
 James Bursa
 James Cheng
@@ -510,12 +563,14 @@ Jason Liu
 Jason McDonald
 Jason S. Priebe
 Javier Barroso
+Javier G. Sogo
 Jay Austin
 Jayesh A Shah
 Jaz Fresh
 Jean Jacques Drouin
 Jean-Claude Chauve
 Jean-Francois Bertrand
+Jean-Francois Durand
 Jean-Louis Lemaire
 Jean-Marc Ranger
 Jean-Noël Rouvignac
@@ -528,10 +583,13 @@ Jeff Lawson
 Jeff Phillips
 Jeff Pohlmeyer
 Jeff Weber
+Jeffrey Walton
+Jens Rantil
 Jeremy Friesner
 Jeremy Huddleston
 Jeremy Lin
 Jeroen Koekkoek
+Jeroen Ooms
 Jerome Muffat-Meridol
 Jerome Robert
 Jerome Vouillon
@@ -540,11 +598,13 @@ Jerry Wu
 Jes Badwal
 Jesper Jensen
 Jesse Noller
+Jesse Tan
 Jie He
 Jim Drash
 Jim Freeman
 Jim Hollinger
 Jim Meyering
+Jiri Dvorak
 Jiri Hruska
 Jiri Jaburek
 Jiri Malak
@@ -553,12 +613,15 @@ Joe Halpin
 Joe Malicki
 Joe Mason
 Joel Chen
+Joel Depooter
 Jofell Gallardo
 Johan Anderson
+Johan Lantz
 Johan Nilsson
 Johan van Selst
 Johannes Bauer
 Johannes Ernst
+Johannes Schindelin
 John Bradshaw
 John Coffey
 John Crow
@@ -569,9 +632,12 @@ John Gardiner Myers
 John Janssen
 John Joseph Bachir
 John Kelly
+John Kohl
 John Lask
+John Levon
 John Lightsey
 John Marino
+John Marshall
 John McGowan
 John P. McCaskey
 John Suprock
@@ -581,14 +647,18 @@ Johnny Luong
 Jon Grubbs
 Jon Nelson
 Jon Sargeant
+Jon Seymour
+Jon Spencer
 Jon Torrey
 Jon Travis
 Jon Turner
 Jonas Forsman
+Jonas Minnberg
 Jonas Schnelli
 Jonatan Lander
 Jonatan Vela
 Jonathan Cardoso Machado
+Jonathan Cardoso Machado Machado
 Jonathan Hseu
 Jonathan Nieder
 Jongki Suwandi
@@ -605,11 +675,14 @@ Judson Bishop
 Juergen Wilke
 Jukka Pihl
 Julian Noble
+Julian Ospald
 Julian Taylor
 Julien Chaffraix
+Julien Nabet
 Julien Royer
 Jun-ichiro itojun Hagino
 Jurij Smakov
+Justin Ehlert
 Justin Fletcher
 Justin Karneges
 Justin Maggard
@@ -621,11 +694,13 @@ Kai Sommerfeld
 Kai-Uwe Rommel
 Kalle Vahlman
 Kamil Dudka
+Kang Lin
 Kang-Jin Lee
 Karl Moerder
 Karol Pietrzak
 Kaspar Brand
 Katie Wang
+Kazuho Oku
 Kees Cook
 Keith MacDonald
 Keith McGuigan
@@ -652,6 +727,8 @@ Krishnendu Majumdar
 Krister Johansen
 Kristian Gunstone
 Kristian Köhntopp
+Kurt Fankhauser
+Kyle J. McKay
 Kyle L. Huff
 Kyle Sallee
 Lachlan O'Dea
@@ -667,9 +744,11 @@ Lars Nilsson
 Lars Torben Wilson
 Lau Hang Kin
 Laurent Rabret
+Lauri Kasanen
 Legoff Vincent
 Lehel Bernadt
 Leif W
+Leith Bade
 Len Krause
 Lenaic Lefever
 Lenny Rachitsky
@@ -681,7 +760,9 @@ Linas Vepstas
 Lindley French
 Ling Thio
 Linus Nielsen Feltzing
+Lior Kaplan
 Lisa Xu
+Liviu Chircu
 Liza Alenchery
 Lluís Batlle i Rossell
 Loic Dachary
@@ -692,6 +773,8 @@ Lucas Adamski
 Lucas Pardue
 Ludek Finstrle
 Ludovico Cavedon
+Ludwig Nussel
+Lukas Ruzicka
 Lukasz Czekierda
 Luke Amery
 Luke Call
@@ -702,6 +785,8 @@ Maciej Karpiuk
 Maciej Puzio
 Maciej W. Rozycki
 Maks Naumov
+Maksim Kuzevanov
+Maksim Stsepanenka
 Mamoru Tasaka
 Mandy Wu
 Manfred Schwarb
@@ -709,8 +794,10 @@ Manuel Massing
 Marc Boucher
 Marc Deslauriers
 Marc Doughty
+Marc Hesse
 Marc Hoersken
 Marc Kleine-Budde
+Marc Renault
 Marcel Raad
 Marcel Roelofs
 Marcelo Juchem
@@ -733,6 +820,7 @@ Mark Salisbury
 Mark Snelling
 Mark Tully
 Markus Duft
+Markus Elfring
 Markus Koetter
 Markus Moeller
 Markus Oberhumer
@@ -761,6 +849,7 @@ Matt Wixson
 Matteo Rocco
 Matthew Blain
 Matthew Clarke
+Matthew Hall
 Matthias Bolte
 Maurice Barnum
 Mauro Iorio
@@ -781,16 +870,23 @@ Michael Day
 Michael Goffioul
 Michael Jahn
 Michael Jerris
+Michael Kalinin
+Michael Kaufmann
+Michael König
 Michael Mealling
 Michael Mueller
 Michael Osipov
 Michael Smith
+Michael Stapelberg
 Michael Stillwell
 Michael Wallner
 Michal Bonino
 Michal Marek
+Michał Fita
 Michał Górny
 Michał Kowalczyk
+Michał Piechowski
+Michel Promonet
 Michele Bini
 Miguel Angel
 Miguel Diaz
@@ -814,12 +910,14 @@ Mitz Wark
 Mohamed Lrhazi
 Mohammad AlSaleh
 Mohun Biswas
+Mostyn Bramley-Moore
 Myk Taylor
 Nach M. S.
 Nagai H
 Nathan Coulter
 Nathan O'Sullivan
 Nathanael Nerode
+Nathaniel Waisbrot
 Naveen Chandran
 Naveen Noel
 Neil Bowers
@@ -843,18 +941,25 @@ Nikos Mavrogiannopoulos
 Ning Dong
 Nir Soffer
 Nis Jorgensen
+Nobuhiro Ban
 Nodak Sodak
 Norbert Frese
+Norbert Kett
 Norbert Novotny
+Octavio Schroeder
 Ofer
 Ola Mork
 Olaf Flebbe
 Olaf Stüben
 Oliver Gondža
+Oliver Graute
 Oliver Kuckertz
 Oliver Schindler
 Olivier Berger
+Orange Tsai
+Oren Souroujon
 Oren Tirosh
+Orgad Shaneh
 Ori Avtalion
 Oscar Koeroo
 Oscar Norlander
@@ -870,6 +975,7 @@ Patricia Muscalu
 Patrick Bihan-Faou
 Patrick McManus
 Patrick Monnerat
+Patrick Rapin
 Patrick Scott
 Patrick Smith
 Patrick Watson
@@ -882,6 +988,7 @@ Paul Marks
 Paul Marquis
 Paul Moore
 Paul Nolan
+Paul Oliver
 Paul Querna
 Paul Saab
 Pavel Cenek
@@ -898,6 +1005,7 @@ Peter Heuchert
 Peter Hjalmarsson
 Peter Korsgaard
 Peter Lamberg
+Peter Laser
 Peter O'Gorman
 Peter Pentchev
 Peter Silva
@@ -937,12 +1045,15 @@ Quanah Gibson-Mount
 Quinn Slack
 Radu Simionescu
 Rafa Muyo
+Rafael Antonio
 Rafael Sagula
+Rafayel Mkrtchyan
 Rafaël Carré
 Rainer Canavan
 Rainer Jung
 Rainer Koenig
 Rajesh Naganathan
+Rajkumar Mandal
 Ralf S. Engelschall
 Ralph Beckmann
 Ralph Mitchell
@@ -952,6 +1063,7 @@ Ravi Pratap
 Ray Dassen
 Ray Pekowski
 Ray Satiro
+Razvan Cojocaru
 Reinout van Schouwen
 Remi Gacogne
 Renato Botelho
@@ -963,6 +1075,7 @@ Rene Rebe
 Reuven Wachtfogel
 Reza Arbab
 Ricardo Cadime
+Rich Burridge
 Rich Gray
 Rich Rauenzahn
 Richard Archer
@@ -971,10 +1084,12 @@ Richard Bramante
 Richard Clayton
 Richard Cooper
 Richard Gorton
+Richard Hosking
 Richard Michael
 Richard Moore
 Richard Prescott
 Richard Silverman
+Richard van den Berg
 Rick Jones
 Rick Richardson
 Rob Crittenden
@@ -998,6 +1113,7 @@ Robson Braga Araujo
 Rodney Simmons
 Rodric Glaser
 Rodrigo Silva
+Roger Leigh
 Roland Blom
 Roland Krikava
 Roland Zimmermann
@@ -1021,6 +1137,9 @@ S. Moonesamy
 Salvador Dávila
 Salvatore Sorrentino
 Sam Deane
+Sam Hurst
+Sam Roth
+Sam Schanken
 Sampo Kellomaki
 Samuel Díaz García
 Samuel Listopad
@@ -1038,18 +1157,22 @@ Scott Barrett
 Scott Cantor
 Scott Davis
 Scott McCreary
+Sean Boudreau
+Sebastian Pohlschmidt
 Sebastian Rasmussen
 Senthil Raja Velu
 Sergei Nikulov
 Sergey Tatarincev
 Sergio Ballestrero
 Seshubabu Pasam
+Seth Mos
 Sh Diao
 Shao Shuchao
 Sharad Gupta
 Shard
 Shawn Landden
 Shawn Poulson
+Shine Fan
 Shmulik Regev
 Siddhartha Prakash Jain
 Sidney San Martin
@@ -1065,6 +1188,8 @@ Spork Schivago
 Stadler Stephan
 Stan van de Burgt
 Stanislav Ivochkin
+Stefan Bühler
+Stefan Eissing
 Stefan Esser
 Stefan Krause
 Stefan Neis
@@ -1079,6 +1204,7 @@ Stephen More
 Sterling Hughes
 Steve Green
 Steve H Truong
+Steve Havelka
 Steve Holme
 Steve Lhomme
 Steve Little
@@ -1095,21 +1221,28 @@ Sune Ahlgren
 Sven Anders
 Sven Neuhaus
 Sven Wegener
+Svyatoslav Mishyn
 Symeon Paraschoudis
 Sébastien Willemijns
 T. Bharath
 T. Yamada
+TJ Saunders
+Tae Hyoung Ahn
 Taneli Vahakangas
 Tanguy Fautre
 Tatsuhiro Tsujikawa
 Temprimus
+Terri Oda
 Thomas Braun
+Thomas Glanzmann
 Thomas J. Moore
 Thomas Klausner
 Thomas L. Shinnick
 Thomas Lopatic
+Thomas Ruecker
 Thomas Schwinge
 Thomas Tonino
+Thorsten Schöning
 Tiit Pikma
 Till Maas
 Tim Ansell
@@ -1120,17 +1253,19 @@ Tim Costello
 Tim Harder
 Tim Heckman
 Tim Newsome
-Tim Ruehsen
+Tim Rühsen
 Tim Sneddon
+Tim Stack
 Tim Starling
 Timo Sirainen
+Timotej Lazar
 Tinus van den Berg
 Tobias Markus
 Tobias Rundström
+Tobias Stoeckmann
 Toby Peterson
 Todd A Ouska
 Todd Kulesza
-Todd Ouska
 Todd Vierling
 Tom Benoist
 Tom Donovan
@@ -1147,6 +1282,8 @@ Tomas Hoger
 Tomas Mlcoch
 Tomas Pospisek
 Tomas Szepe
+Tomas Tomecek
+Tomasz Kojm
 Tomasz Lacki
 Tommie Gannert
 Tommy Tam
@@ -1173,6 +1310,7 @@ Victor Snezhko
 Vijay Panghal
 Vikram Saxena
 Viktor Szakáts
+Ville Skyttä
 Vilmos Nebehaj
 Vincent Bronner
 Vincent Le Normand
@@ -1185,10 +1323,13 @@ Vladimir Grishchenko
 Vladimir Lazarenko
 Vojtech Janota
 Vojtech Minarik
+Vojtěch Král
 Vsevolod Novikov
+W. Mark Kubacki
 Waldek Kozba
 Walter J. Mack
 Ward Willats
+Warren Menzer
 Wayne Haigh
 Werner Koch
 Wesley Laxton
@@ -1202,7 +1343,9 @@ Wojciech Zwiefka
 Wouter Van Rooy
 Wu Yongzheng
 Xavier Bouchoux
+Xiangbin Li
 Yaakov Selkowitz
+Yamada Yasuharu
 Yang Tse
 Yarram Sunil
 Yasuharu Yamada
@@ -1212,6 +1355,7 @@ Yi Huang
 Yingwei Liu
 Yousuke Kimoto
 Yukihiro Kawada
+Yun SangHo
 Yuriy Sosov
 Yves Arrouye
 Yves Lejeune
@@ -1222,4 +1366,5 @@ Zvi Har'El
 nk
 swalkaus at yahoo.com
 tommink[at]post.pl
+Štefan Kremeň
 Никита Дорохин
index 2b5a4c2..6521838 100644 (file)
--- a/docs/TODO
+++ b/docs/TODO
@@ -9,6 +9,11 @@
  Things to do in project cURL. Please tell us what you think, contribute and
  send us patches that improve things!
 
+ Be aware that these are things that we could do, or have once been considered
+ things we could do. If you want to work on any of these areas, please
+ consider bringing it up for discussions first on the mailing list so that we
+ all agree it is still a good idea for the project!
+
  All bugs documented in the KNOWN_BUGS document are subject for fixing!
 
  1. libcurl
  1.7 Detect when called from within callbacks
  1.8 Allow SSL (HTTPS) to proxy
  1.9 Cache negative name resolves
+ 1.10 Support IDNA2008
+ 1.11 minimize dependencies with dynamicly loaded modules
+ 1.12 have form functions use CURL handle argument
+ 1.13 Add CURLOPT_MAIL_CLIENT option
+ 1.14 Typesafe curl_easy_setopt()
+ 1.15 TCP Fast Open
+ 1.16 Try to URL encode given URL
 
  2. libcurl - multi interface
  2.1 More non-blocking
- 2.2 Fix HTTP Pipelining for PUT
- 2.3 Better support for same name resolves
+ 2.2 Better support for same name resolves
+ 2.3 Non-blocking curl_multi_remove_handle()
+ 2.4 Split connect and authentication process
 
  3. Documentation
  3.1 Update date and version in man pages
@@ -44,6 +57,8 @@
  5.3 Rearrange request header order
  5.4 SPDY
  5.5 auth= in URLs
+ 5.6 Refuse "downgrade" redirects
+ 5.7 More compressions
 
  6. TELNET
  6.1 ditch stdin
  7. SMTP
  7.1 Pipelining
  7.2 Enhanced capability support
+
  8. POP3
  8.1 Pipelining
  8.2 Enhanced capability support
+
  9. IMAP
  9.1 Enhanced capability support
+
  10. LDAP
  10.1 SASL based authentication mechanisms
- 11. New protocols
- 11.1 RSYNC
-
- 12. SSL
- 12.1 Disable specific versions
- 12.2 Provide mutex locking API
- 12.3 Evaluate SSL patches
- 12.4 Cache OpenSSL contexts
- 12.5 Export session ids
- 12.6 Provide callback for cert verification
- 12.7 improve configure --with-ssl
- 12.8 Support DANE
-
- 13. GnuTLS
- 13.1 SSL engine stuff
- 13.2 check connection
-
- 14. SASL
- 14.1 Other authentication mechanisms
- 14.2 Add QOP support to GSSAPI authentication
- 15. Client
- 15.1 sync
- 15.2 glob posts
- 15.3 prevent file overwriting
- 15.4 simultaneous parallel transfers
- 15.5 provide formpost headers
- 15.6 warning when setting an option
-
- 16. Build
- 16.1 roffit
-
- 17. Test suite
- 17.1 SSL tunnel
- 17.2 nicer lacking perl message
- 17.3 more protocols supported
- 17.4 more platforms supported
- 17.5 Add support for concurrent connections
-
- 18. Next SONAME bump
- 18.1 http-style HEAD output for FTP
- 18.2 combine error codes
- 18.3 extend CURLOPT_SOCKOPTFUNCTION prototype
-
- 19. Next major release
- 19.1 cleanup return codes
- 19.2 remove obsolete defines
- 19.3 size_t
- 19.4 remove several functions
- 19.5 remove CURLOPT_FAILONERROR
- 19.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
- 19.7 remove progress meter from libcurl
- 19.8 remove 'curl_httppost' from public
- 19.9 have form functions use CURL handle argument
- 19.10 Add CURLOPT_MAIL_CLIENT option
+
+ 11. SMB
+ 11.1 File listing support
+ 11.2 Honor file timestamps
+ 11.3 Use NTLMv2
+ 11.4 Create remote directories
+
+ 12. New protocols
+ 12.1 RSYNC
+
+ 13. SSL
+ 13.1 Disable specific versions
+ 13.2 Provide mutex locking API
+ 13.3 Evaluate SSL patches
+ 13.4 Cache OpenSSL contexts
+ 13.5 Export session ids
+ 13.6 Provide callback for cert verification
+ 13.7 improve configure --with-ssl
+ 13.8 Support DANE
+
+ 14. GnuTLS
+ 14.1 SSL engine stuff
+ 14.2 check connection
+
+ 15. WinSSL/SChannel
+ 15.1 Add support for client certificate authentication
+ 15.2 Add support for custom server certificate validation
+ 15.3 Add support for the --ciphers option
+
+ 16. SASL
+ 16.1 Other authentication mechanisms
+ 16.2 Add QOP support to GSSAPI authentication
+
+ 17. Command line tool
+ 17.1 sync
+ 17.2 glob posts
+ 17.3 prevent file overwriting
+ 17.4 simultaneous parallel transfers
+ 17.5 provide formpost headers
+ 17.6 warning when setting an option
+ 17.7 warning when sending binary output to terminal
+ 17.8 offer color-coded HTTP header output
+ 17.9 Choose the name of file in braces for complex URLs
+ 17.10 improve how curl works in a windows console window
+ 17.11 -w output to stderr
+ 17.12 keep running, read instructions from pipe/socket
+
+ 18. Build
+ 18.1 roffit
+
+ 19. Test suite
+ 19.1 SSL tunnel
+ 19.2 nicer lacking perl message
+ 19.3 more protocols supported
+ 19.4 more platforms supported
+ 19.5 Add support for concurrent connections
+ 19.6 Use the RFC6265 test suite
+
+ 20. Next SONAME bump
+ 20.1 http-style HEAD output for FTP
+ 20.2 combine error codes
+ 20.3 extend CURLOPT_SOCKOPTFUNCTION prototype
+
+ 21. Next major release
+ 21.1 cleanup return codes
+ 21.2 remove obsolete defines
+ 21.3 size_t
+ 21.4 remove several functions
+ 21.5 remove CURLOPT_FAILONERROR
+ 21.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
+ 21.7 remove progress meter from libcurl
+ 21.8 remove 'curl_httppost' from public
 
 ==============================================================================
 
  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
+ problem is available at https://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.
 
  To prevent local users from snooping on your traffic to the proxy. Supported
  by Chrome already:
- http://www.chromium.org/developers/design-documents/secure-web-proxy
+ https://www.chromium.org/developers/design-documents/secure-web-proxy
 
  ...and by Firefox soon:
  https://bugzilla.mozilla.org/show_bug.cgi?id=378637
  A name resolve that has failed is likely to fail when made again within a
  short period of time. Currently we only cache positive responses.
 
+1.10 Support IDNA2008
+
+ International Domain Names are supported in libcurl since years back, powered
+ by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008.
+ libidn2 is an existing library offering support for IDNA2008.
+
+1.11 minimize dependencies with dynamicly loaded modules
+
+ We can create a system with loadable modules/plug-ins, where these modules
+ would be the ones that link to 3rd party libs. That would allow us to avoid
+ having to load ALL dependencies since only the necessary ones for this
+ app/invoke/used protocols would be necessary to load.  See
+ https://github.com/curl/curl/issues/349
+
+1.12 have form functions use CURL handle argument
+
+ curl_formadd() and curl_formget() both currently have no CURL handle
+ argument, but both can use a callback that is set in the easy handle, and
+ thus curl_formget() with callback cannot function without first having
+ curl_easy_perform() (or similar) called - which is hard to grasp and a design
+ mistake.
+
+ The curl_formadd() design can probably also be reconsidered to make it easier
+ to use and less error-prone. Probably easiest by splitting it into several
+ function calls.
+
+1.13 Add CURLOPT_MAIL_CLIENT option
+
+ Rather than use the URL to specify the mail client string to present in the
+ HELO and EHLO commands, libcurl should support a new CURLOPT specifically for
+ specifying this data as the URL is non-standard and to be honest a bit of a
+ hack ;-)
+
+ Please see the following thread for more information:
+ https://curl.haxx.se/mail/lib-2012-05/0178.html
+
+1.14 Typesafe curl_easy_setopt()
+
+ One of the most common problems in libcurl using applications is the lack of
+ type checks for curl_easy_setopt() which happens because it accepts varargs
+ and thus can take any type.
+
+ One possible solution to this is to introduce a few different versions of the
+ setopt version for the different kinds of data you can set.
+
+  curl_easy_set_num() - sets a long value
+
+  curl_easy_set_large() - sets a curl_off_t value
+
+  curl_easy_set_ptr() - sets a pointer
+
+  curl_easy_set_cb() - sets a callback PLUS its callback data
+
+1.15 TCP Fast Open
+
+ RFC 7413 defines how to include data already in the TCP SYN handshake to
+ reduce latency.
+
+1.16 Try to URL encode given URL
+
+ Given a URL that for example contains spaces, libcurl could have an option
+ that would try somewhat harder than it does now and convert spaces to %20 and
+ perhaps URL encoded byte values over 128 etc (basically do what the redirect
+ following code already does).
+
+ https://github.com/curl/curl/issues/514
 
 2. libcurl - multi interface
 
  - 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 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.
-
-2.3 Better support for same name resolves
+2.2 Better support for same name resolves
 
  If a name resolve has been initiated for name NN and a second easy handle
  wants to resolve that name as well, make it wait for the first resolve to end
  especially needed when adding many simultaneous handles using the same host
  name when the DNS resolver can get flooded.
 
+2.3 Non-blocking curl_multi_remove_handle()
+
+ The multi interface has a few API calls that assume a blocking behavior, like
+ add_handle() and remove_handle() which limits what we can do internally. The
+ multi API need to be moved even more into a single function that "drives"
+ everything in a non-blocking manner and signals when something is done. A
+ remove or add would then only ask for the action to get started and then
+ multi_perform() etc still be called until the add/remove is completed.
+
+2.4 Split connect and authentication process
+
+ The multi interface treats the authentication process as part of the connect
+ phase. As such any failures during authentication won't trigger the relevant
+ QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP.
 
 3. Documentation
 
  HOST is a command for a client to tell which host name to use, to offer FTP
  servers named-based virtual hosting:
 
- http://tools.ietf.org/html/rfc7151
+ https://tools.ietf.org/html/rfc7151
 
 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
+ vice versa). https://curl.haxx.se/bug/feature.cgi?id=1754793
 
 4.3 Earlier bad letter detection
 
@@ -290,13 +395,13 @@ This is not detailed in any FTP specification.
 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
+ https://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
+ https://curl.haxx.se/bug/feature.cgi?id=1871388
 
 5.3 Rearrange request header order
 
@@ -326,10 +431,26 @@ This is not detailed in any FTP specification.
  For example:
 
  http://test:pass;auth=NTLM@example.com would be equivalent to specifying --user
- test:pass;auth=NTLM or --user test:pass --ntlm from the command line. 
+ test:pass;auth=NTLM or --user test:pass --ntlm from the command line.
 
  Additionally this should be implemented for proxy base URLs as well.
 
+5.6 Refuse "downgrade" redirects
+
+ See https://github.com/curl/curl/issues/226
+
+ Consider a way to tell curl to refuse to "downgrade" protocol with a redirect
+ and/or possibly a bit that refuses redirect to change protocol completely.
+
+5.7 More compressions
+
+ Compression algorithms that perform better than gzip are being considered for
+ use and inclusion in existing browsers. For example 'brotli'. If servers
+ follow along it is a good reason for us to also allow users to take advantage
+ of this. The algorithm: https://github.com/google/brotli The Firefox bug:
+ https://bugzilla.mozilla.org/show_bug.cgi?id=366559
+
+
 6. TELNET
 
 6.1 ditch stdin
@@ -393,32 +514,52 @@ to provide the data to send.
  be possible to use ldap_bind_s() instead specifying the security context
  information ourselves.
 
-11. New protocols
+11. SMB
+
+11.1 File listing support
+
+Add support for listing the contents of a SMB share. The output should probably
+be the same as/similar to FTP.
+
+11.2 Honor file timestamps
 
-11.1 RSYNC
+The timestamp of the transferred file should reflect that of the original file.
+
+11.3 Use NTLMv2
+
+Currently the SMB authentication uses NTLMv1.
+
+11.4 Create remote directories
+
+Support for creating remote directories when uploading a file to a directory
+that doesn't exist on the server, just like --ftp-create-dirs.
+
+12. New protocols
+
+12.1 RSYNC
 
  There's no RFC for the protocol or an URI/URL format.  An implementation
  should most probably use an existing rsync library, such as librsync.
 
-12. SSL
+13. SSL
 
-12.1 Disable specific versions
+13.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
+ SSLv2 https://curl.haxx.se/bug/feature.cgi?id=1767276
 
-12.2 Provide mutex locking API
+13.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.
 
-12.3 Evaluate SSL patches
+13.3 Evaluate SSL patches
 
  Evaluate/apply Gertjan van Wingerde's SSL patches:
- http://curl.haxx.se/mail/lib-2004-03/0087.html
+ https://curl.haxx.se/mail/lib-2004-03/0087.html
 
-12.4 Cache OpenSSL contexts
+13.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
@@ -428,7 +569,7 @@ to provide the data to send.
  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.
 
-12.5 Export session ids
+13.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
@@ -436,57 +577,92 @@ to provide the data to send.
  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".
 
-12.6 Provide callback for cert verification
+13.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!
 
-12.7 improve configure --with-ssl
+13.7 improve configure --with-ssl
 
  make the configure --with-ssl option first check for OpenSSL, then GnuTLS,
  then NSS...
 
-12.8 Support DANE
+13.8 Support DANE
 
  DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL
  keys and certs over DNS using DNSSEC as an alternative to the CA model.
- http://www.rfc-editor.org/rfc/rfc6698.txt
+ https://www.rfc-editor.org/rfc/rfc6698.txt
 
  An initial patch was posted by Suresh Krishnaswamy on March 7th 2013
- (http://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple
+ (https://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple
  approach. See Daniel's comments:
- http://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the
+ https://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the
  correct library to base this development on.
 
-13. GnuTLS
+14. GnuTLS
 
-13.1 SSL engine stuff
+14.1 SSL engine stuff
 
  Is this even possible?
 
-13.2 check connection
+14.2 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.
 
-14. SASL
+15. WinSSL/SChannel
+
+15.1 Add support for client certificate authentication
+
+ WinSSL/SChannel currently makes use of the OS-level system and user
+ certificate and private key stores. This does not allow the application
+ or the user to supply a custom client certificate using curl or libcurl.
+
+ Therefore support for the existing -E/--cert and --key options should be
+ implemented by supplying a custom certificate to the SChannel APIs, see:
+ - Getting a Certificate for Schannel
+   https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
+
+15.2 Add support for custom server certificate validation
+
+ WinSSL/SChannel currently makes use of the OS-level system and user
+ certificate trust store. This does not allow the application or user to
+ customize the server certificate validation process using curl or libcurl.
+
+ Therefore support for the existing --cacert or --capath options should be
+ implemented by supplying a custom certificate to the SChannel APIs, see:
+ - Getting a Certificate for Schannel
+   https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
+
+15.3 Add support for the --ciphers option
 
-14.1 Other authentication mechanisms
+ The cipher suites used by WinSSL/SChannel are configured on an OS-level
+ instead of an application-level. This does not allow the application or
+ the user to customize the configured cipher suites using curl or libcurl.
 
- Add support for other authentication mechanisms such as EXTERNAL, OLP,
+ Therefore support for the existing --ciphers option should be implemented
+ by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see
+ - Specifying Schannel Ciphers and Cipher Strengths
+   https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx
+
+16. SASL
+
+16.1 Other authentication mechanisms
+
+ Add support for other authentication mechanisms such as OLP,
  GSS-SPNEGO and others.
-14.2 Add QOP support to GSSAPI authentication
+
+16.2 Add QOP support to GSSAPI authentication
 
  Currently the GSSAPI authentication only supports the default QOP of auth
  (Authentication), whilst Kerberos V5 supports both auth-int (Authentication
  with integrity protection) and auth-conf (Authentication with integrity and
  privacy protection).
 
-15. Client
+17. Command line tool
 
-15.1 sync
+17.1 sync
 
  "curl --sync http://example.com/feed[1-100].rss" or
  "curl --sync http://example.net/{index,calendar,history}.html"
@@ -495,12 +671,12 @@ to provide the data to send.
  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.
 
-15.2 glob posts
+17.2 glob posts
 
  Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
  This is easily scripted though.
 
-15.3 prevent file overwriting
+17.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
@@ -508,14 +684,14 @@ to provide the data to send.
  existing). So that index.html becomes first index.html.1 and then
  index.html.2 etc.
 
-15.4 simultaneous parallel transfers
+17.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
+ multi interface. https://curl.haxx.se/bug/feature.cgi?id=1558595
 
-15.5 provide formpost headers
+17.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
@@ -529,43 +705,88 @@ to provide the data to send.
  which should overwrite the program reasonable defaults (plain/text,
  8bit...)
 
-15.6 warning when setting an option
+17.6 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.
+
+17.7 warning when sending binary output to terminal
+
+ Provide a way that prompts the user for confirmation before binary data is
+ sent to the terminal, much in the style 'less' does it.
+
+17.8 offer color-coded HTTP header output
+
+ By offering different color output on the header name and the header
+ contents, they could be made more readable and thus help users working on
+ HTTP services.
+
+17.9 Choose the name of file in braces for complex URLs
+
+ When using braces to download a list of URLs and you use complicated names
+ in the list of alternatives, it could be handy to allow curl to use other
+ names when saving.
+
+ Consider a way to offer that. Possibly like
+ {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the
+ colon is the output name.
 
-  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.
+ See https://github.com/curl/curl/issues/221
 
-16. Build
+17.10 improve how curl works in a windows console window
 
-16.1 roffit
+ If you pull the scrollbar when transferring with curl in a Windows console
+ window, the transfer is interrupted and can get disconnected. This can
+ probably be improved. See https://github.com/curl/curl/issues/322
+
+17.11 -w output to stderr
+
+ -w is quite useful, but not to those of us who use curl without -o or -O
+ (such as for scripting through a higher level language). It would be nice to
+ have an option that is exactly like -w but sends it to stderr
+ instead. Proposed name: --write-stderr. See
+ https://github.com/curl/curl/issues/613
+
+17.12 keep running, read instructions from pipe/socket
+
+ Provide an option that makes curl not exit after the last URL (or even work
+ without a given URL), and then make it read instructions passed on a pipe or
+ over a socket to make further instructions so that a second subsequent curl
+ invoke can talk to the still running instance and ask for transfers to get
+ done, and thus maintain its connection pool, DNS cache and more.
+
+18. Build
+
+18.1 roffit
 
  Consider extending 'roffit' to produce decent ASCII output, and use that
  instead of (g)nroff when building src/tool_hugehelp.c
 
-17. Test suite
+19. Test suite
 
-17.1 SSL tunnel
+19.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
 
-17.2 nicer lacking perl message
+19.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.
 
-17.3 more protocols supported
+19.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).
 
-17.4 more platforms supported
+19.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.
 
-17.5 Add support for concurrent connections
+19.5 Add support for concurrent connections
 
  Tests 836, 882 and 938 were designed to verify that separate connections aren't
  used when using different login credentials in protocols that shouldn't re-use
@@ -579,14 +800,24 @@ to provide the data to send.
  and thus the wait for connections loop is never entered to receive the second
  connection.
 
-18. Next SONAME bump
+19.6 Use the RFC6265 test suite
+
+ A test suite made for HTTP cookies (RFC 6265) by Adam Barth is available at
+ https://github.com/abarth/http-state/tree/master/tests
 
-18.1 http-style HEAD output for FTP
+ It'd be really awesome if someone would write a script/setup that would run
+ curl with that test suite and detect deviances. Ideally, that would even be
+ incorporated into our regular test suite.
+
+
+20. Next SONAME bump
+
+20.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
 
-18.2 combine error codes
+20.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
@@ -611,29 +842,29 @@ to provide the data to send.
 
     CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED
 
-18.3 extend CURLOPT_SOCKOPTFUNCTION prototype
+20.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.
 
-19. Next major release
+21. Next major release
 
-19.1 cleanup return codes
+21.1 cleanup return codes
 
  curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
  CURLMcode. These should be changed to be the same.
 
-19.2 remove obsolete defines
+21.2 remove obsolete defines
 
  remove obsolete defines from curl/curl.h
 
-19.3 size_t
+21.3 size_t
 
  make several functions use size_t instead of int in their APIs
 
-19.4 remove several functions
+21.4 remove several functions
 
  remove the following functions from the public API:
 
@@ -654,18 +885,18 @@ to provide the data to send.
 
  curl_multi_socket_all
 
-19.5 remove CURLOPT_FAILONERROR
+21.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.
 
-19.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE
+21.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".
 
-19.7 remove progress meter from libcurl
+21.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
@@ -675,7 +906,7 @@ to provide the data to send.
  variable types passed to it instead of doubles so that big files work
  correctly.
 
-19.8 remove 'curl_httppost' from public
+21.8 remove 'curl_httppost' from public
 
  curl_formadd() was made to fill in a public struct, but the fact that the
  struct is public is never really used by application for their own advantage
@@ -683,22 +914,3 @@ to provide the data to send.
 
  Changing them to return a private handle will benefit the implementation and
  allow us much greater freedoms while still maintaining a solid API and ABI.
-
-19.9 have form functions use CURL handle argument
-
- curl_formadd() and curl_formget() both currently have no CURL handle
- argument, but both can use a callback that is set in the easy handle, and
- thus curl_formget() with callback cannot function without first having
- curl_easy_perform() (or similar) called - which is hard to grasp and a design
- mistake.
-
-19.10 Add CURLOPT_MAIL_CLIENT option
-
- Rather than use the URL to specify the mail client string to present in the
- HELO and EHLO commands, libcurl should support a new CURLOPT specifically for
- specifying this data as the URL is non-standard and to be honest a bit of a
- hack ;-)
-
- Please see the following thread for more information:
- http://curl.haxx.se/mail/lib-2012-05/0178.html
index 7235f12..047db80 100644 (file)
@@ -1,4 +1,3 @@
-Updated: Dec 24, 2013 (http://curl.haxx.se/docs/httpscripting.html)
                                   _   _ ____  _
                               ___| | | |  _ \| |
                              / __| | | | |_) | |
@@ -23,6 +22,8 @@ The Art Of Scripting HTTP Requests Using Curl
  3. Fetch a page
  3.1 GET
  3.2 HEAD
+ 3.3 Multiple URLs in a single command line
+ 3.4 Multiple HTTP methods in a single command line
  4. HTML forms
  4.1 Forms explained
  4.2 GET
@@ -135,8 +136,8 @@ The Art Of Scripting HTTP Requests Using Curl
 
  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. RFC 3986 is the
- canonical spec.
+ https://curl.haxx.se or https://yourbank.com a million times. RFC 3986 is the
+ canonical spec. And yeah, the formal name is not URL, it is URI.
 
  2.2 Host
 
@@ -193,7 +194,6 @@ The Art Of Scripting HTTP Requests Using Curl
  the associated response. The path is what is to the right side of the slash
  that follows the host name and possibly port number.
 
-
 3. Fetch a page
 
  3.1 GET
@@ -203,7 +203,7 @@ The Art Of Scripting HTTP Requests Using Curl
  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
+        curl https://curl.haxx.se
 
  you get a web page returned in your terminal window. The entire HTML document
  that that URL holds.
@@ -224,6 +224,46 @@ The Art Of Scripting HTTP Requests Using Curl
  may see a Content-Length: in the response headers, but there must not be an
  actual body in the HEAD response.
 
+ 3.3 Multiple URLs in a single command line
+
+ A single curl command line may involve one or many URLs. The most common case
+ is probably to just use one, but you can specify any amount of URLs. Yes
+ any. No limits. You'll then get requests repeated over and over for all the
+ given URLs.
+
+ Example, send two GETs:
+
+    curl http://url1.example.com http://url2.example.com
+
+ If you use --data to POST to the URL, using multiple URLs means that you send
+ that same POST to all the given URLs.
+
+ Example, send two POSTs:
+
+    curl --data name=curl http://url1.example.com http://url2.example.com
+
+
+ 3.4 Multiple HTTP methods in a single command line
+
+ Sometimes you need to operate on several URLs in a single command line and do
+ different HTTP methods on each. For this, you'll enjoy the --next option. It
+ is basically a separator that separates a bunch of options from the next. All
+ the URLs before --next will get the same method and will get all the POST
+ data merged into one.
+
+ When curl reaches the --next on the command line, it'll sort of reset the
+ method and the POST data and allow a new set.
+
+ Perhaps this is best shown with a few examples. To send first a HEAD and then
+ a GET:
+
+   curl -I http://example.com --next http://example.com
+
+ To first send a POST and then a GET:
+
+   curl -d score=10 http://example.com/post.cgi --next http://example.com/results.html
+
+
 4. HTML forms
 
  4.1 Forms explained
@@ -302,6 +342,10 @@ The Art Of Scripting HTTP Requests Using Curl
 
         curl --data-urlencode "name=I am Daniel" http://www.example.com
 
+  If you repeat --data several times on the command line, curl will
+  concatenate all the given data pieces - and put a '&' symbol between each
+  data segment.
+
  4.4 File Upload POST
 
   Back in late 1995 they defined an additional way to post data over HTTP. It
@@ -557,8 +601,10 @@ The Art Of Scripting HTTP Requests Using Curl
  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 supports encrypted fetches when built to use a TLS library and it can be
+ built to use one out of a fairly large set of libraries - "curl -V" will show
+ which one your curl was built to use (if any!). To get a page from a HTTPS
+ server, simply run curl like:
 
         curl https://secure.example.com
 
@@ -582,7 +628,13 @@ The Art Of Scripting HTTP Requests Using Curl
   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
+        https://curl.haxx.se/docs/sslcerts.html
+
+  At times you may end up with your own CA cert store and then you can tell
+  curl to use that to verify the server's certificate:
+
+        curl --cacert ca-bundle.pem https://example.com/
+
 
 11. Custom Request Elements
 
@@ -692,7 +744,7 @@ The Art Of Scripting HTTP Requests Using Curl
 
  14.1 Standards
 
- RFC 2616 is a must to read if you want in-depth understanding of the HTTP
+ RFC 7230 is a must to read if you want in-depth understanding of the HTTP
  protocol
 
  RFC 3986 explains the URL syntax
@@ -703,4 +755,4 @@ The Art Of Scripting HTTP Requests Using Curl
 
  14.2 Sites
 
- http://curl.haxx.se is the home of the cURL project
+ https://curl.haxx.se is the home of the cURL project
index 0670089..72a4547 100644 (file)
@@ -1,22 +1,18 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
 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]
+        X.Y.Z
+
+  - X is main version number
+  - Y is release number
+  - Z is patch number
 
- Where
-   X is main version number
-   Y is release number
-   Z is patch number
+## Bumping numbers
 
  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
@@ -57,4 +53,4 @@ Version Numbers and Releases
  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.
`LIBCURL_VERSION_MAJOR`, `LIBCURL_VERSION_MINOR` and `LIBCURL_VERSION_PATCH`.
index 14a9d2b..4c1e323 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 1563d54..83bf13f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl-config man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -86,6 +91,6 @@ p.roffit {
 <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` -o example example.c `curl-config --libs` <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><span Class="manpage">curl (1)</span> <p class="roffit">
+<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>
index 3015304..ebbfaf8 100644 (file)
Binary files a/docs/curl-config.pdf and b/docs/curl-config.pdf differ
index 0b9971c..0b0f4d2 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -39,8 +39,7 @@ resume, Metalink, 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.
+\fIlibcurl(3)\fP for details.
 .SH URL
 The URL syntax is protocol-dependent. You'll find a detailed description in
 RFC 3986.
@@ -172,10 +171,11 @@ a level of control).
 .IP "-2, --sslv2"
 (SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL
 server. Sometimes curl is built without SSLv2 support. SSLv2 is widely
-considered insecure.
+considered insecure (see RFC 6176).
 .IP "-3, --sslv3"
 (SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL
-server. Sometimes curl is built without SSLv3 support.
+server. Sometimes curl is built without SSLv3 support. SSLv3 is widely
+considered insecure (see RFC 7568).
 .IP "-4, --ipv4"
 This option tells curl to resolve names to IPv4 addresses only, and not for
 example try IPv6.
@@ -213,16 +213,25 @@ 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
+if they match. Using this method also activates the cookie engine 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.
+file to read cookies from should be plain HTTP headers (Set-Cookie style) or
+the Netscape/Mozilla cookie file format.
 
 The file specified with \fI-b, --cookie\fP is only used as input. No cookies
 will be written to the file. To store cookies, use the \fI-c, --cookie-jar\fP
 option.
 
+Exercise caution if you are using this option and multiple transfers may occur.
+If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie format and
+don't specify a domain, then the cookie is sent for any domain (even after
+redirects are followed) and cannot be modified by a server-set cookie. If the
+cookie engine is enabled and a server sets a cookie of the same name then both
+will be sent on a future transfer to that server, likely not what you intended.
+To address these issues set a domain in Set-Cookie (doing that will include
+sub-domains) or use the Netscape format.
+
 If this option is used several times, the last one will be used.
 .IP "-B, --use-ascii"
 (FTP/LDAP) Enable ASCII transfer. For FTP, this can also be enforced by using
@@ -254,6 +263,9 @@ 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.
 
+Since 7.43.0 cookies that were imported in the Set-Cookie format without a
+domain name are not exported by this option.
+
 If this option is used several times, the last specified file name will be
 used.
 .IP "-C, --continue-at <offset>"
@@ -269,11 +281,11 @@ If this option is used several times, the last one will be used.
 .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
+\fIhttps://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://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP
+\fIhttps://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\fP
 
 If this option is used several times, the last one will be used.
 .IP "--compressed"
@@ -315,9 +327,10 @@ 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.
+\fI-d, --data\fP is the same as \fI--data-ascii\fP. \fI--data-raw\fP is almost
+the same but does not have a special interpretation of the @ character. 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
@@ -329,7 +342,8 @@ read the data from, or - if you want curl to read the data from
 stdin. Multiple files can also be specified. Posting data from a file
 named 'foobar' would thus be done with \fI--data\fP @foobar. When --data is
 told to read from a file like that, carriage returns and newlines will be
-stripped out.
+stripped out. If you don't want the @ character to have a special
+interpretation use \fI--data-raw\fP instead.
 .IP "-D, --dump-header <file>"
 Write the protocol headers to the specified file.
 
@@ -354,6 +368,10 @@ and carriage returns 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-raw <data>"
+(HTTP) This posts data similarly to \fI--data\fP but without the special
+interpretation of the @ character. See \fI-d, --data\fP.
+(Added in 7.43.0)
 .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)
@@ -412,6 +430,9 @@ 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.
 
+If the server is an IPv6 host, this option will have no effect as EPRT is
+necessary then.
+
 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.
@@ -423,6 +444,9 @@ but with this option, it will not try using EPSV.
 \fB--epsv\fP can be used to explicitly enable EPSV again and \fB--no-epsv\fP
 is an alias for \fB--disable-epsv\fP.
 
+If the server is an IPv6 host, this option will have no effect as EPSV is
+necessary then.
+
 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 "--dns-interface <interface>"
@@ -470,10 +494,10 @@ If this option is used several times, the last one will be used.
 (SSL) Tells curl to use the specified client certificate file when getting a
 file with HTTPS, FTPS or another SSL-based protocol. The certificate must be
 in PKCS#12 format if using Secure Transport, or PEM format if using any other
-engine.  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.
+engine.  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 client 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 can tell
 curl the nickname of the certificate to use within the NSS database defined
@@ -505,6 +529,13 @@ after having run curl.
 (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 "--expect100-timeout <seconds>"
+(HTTP) Maximum time in seconds that you allow curl to wait for a 100-continue
+response when curl emits an Expects: 100-continue header in its request. By
+default curl will wait one second. This option accepts decimal values! When
+curl stops waiting, it will continue as if the response has been received.
+
+(Added in 7.47.0)
 .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.
@@ -539,19 +570,42 @@ OpenSSL-powered curl to make SSL-connections much more efficiently than using
 
 If this option is set, the default capath value will be ignored, and if it is
 used several times, the last one will be used.
-.IP "--pinnedpubkey <pinned public key>"
-(SSL) Tells curl to use the specified public key file to verify the peer. The
-file must contain a single public key in PEM or DER format.
+.IP "--pinnedpubkey <pinned public key (hashes)>"
+(SSL) Tells curl to use the specified public key file (or hashes) to verify the
+peer. This can be a path to a file which contains a single public key in PEM or
+DER format, or any number of base64 encoded sha256 hashes preceded by
+\'sha256//\' and separated by \';\'
 
 When negotiating a TLS or SSL connection, the server sends a certificate
 indicating its identity. A public key is extracted from this certificate and
 if it does not exactly match the public key provided to this option, curl will
 abort the connection before sending or receiving any data.
 
-This is currently only implemented in the OpenSSL, GnuTLS and GSKit backends.
+Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and
+wolfSSL/CyaSSL. sha256 support added in 7.44.0 for OpenSSL,
+GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported.
 
 If this option is used several times, the last one will be used.
-(Added in 7.39.0)
+.IP "--cert-status"
+(SSL) Tells curl to verify the status of the server certificate by using the
+Certificate Status Request (aka. OCSP stapling) TLS extension.
+
+If this option is enabled and the server sends an invalid (e.g. expired)
+response, if the response suggests that the server certificate has been revoked,
+or no response at all is received, the verification fails.
+
+This is currently only implemented in the OpenSSL, GnuTLS and NSS backends.
+(Added in 7.41.0)
+.IP "--false-start"
+
+(SSL) Tells curl to use false start during the TLS handshake. False start is a
+mode where a TLS client will start sending application data before verifying
+the server's Finished message, thus saving a round trip when performing a full
+handshake.
+
+This is currently only implemented in the NSS and Secure Transport (on iOS 7.0
+or later, or OS X 10.9 or later) backends.
+(Added in 7.42.0)
 .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
@@ -579,7 +633,9 @@ input:
 \fBcurl\fP -F password=@/etc/passwd www.mypasswords.com
 
 To read content from stdin instead of a file, use - as the filename. This goes
-for both @ and < constructs.
+for both @ and < constructs. Unfortunately it does not support reading the
+file from a named pipe or similar, as it needs the full size before the
+transfer starts.
 
 You can also tell curl what Content-Type to use by using 'type=', in a manner
 similar to:
@@ -641,6 +697,7 @@ 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
+.IP
 (Added in 7.15.1)
 .IP "--ftp-pasv"
 (FTP) Use passive mode for the data connection. Passive is the internal default
@@ -733,16 +790,24 @@ Example:
 
 \&# curl -H "X-First-Name: Joe" http://192.168.0.1/
 
+\fBWARNING\fP: headers set with this option will be set in all requests - even
+after redirects are followed, like when told with \fB-L, --location\fP. This
+can lead to the header being sent to other hosts than the original host, so
+sensitive headers should be used with caution combined with following
+redirects.
+
 This option can be used multiple times to add/replace/remove multiple headers.
 .IP "--hostpubmd5 <md5>"
 (SCP/SFTP) 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. (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.
+For 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.
+
+For FTP (since 7.46.0), skip the RETR command to figure out the size before
+downloading a file.
 .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...
@@ -769,8 +834,17 @@ cookies when they're closed down.
 server-specified Content-Disposition filename instead of extracting a filename
 from the URL.
 
+If the server specifies a file name and a file with that name already exists
+in the current working directory it will not be overwritten and an error will
+occur. If the server doesn't specify a file name then this option has no
+effect.
+
 There's no attempt to decode %-sequences (yet) in the provided file name, so
 this option may provide you with rather unexpected file names.
+
+\fBWARNING\fP: Exercise judicious use of this option, especially on Windows. A
+rogue server could send you the name of a DLL or other file that could possibly
+be loaded automatically by Windows or some third party software.
 .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
@@ -778,7 +852,7 @@ 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
+\fBhttps://curl.haxx.se/docs/sslcerts.html\fP
 .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
@@ -805,7 +879,7 @@ 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/"
+url = "https://curl.haxx.se/docs/"
 
 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
@@ -903,7 +977,7 @@ re-send the following request using the same unmodified method.
 
 You can tell curl to not change the non-GET request method to GET after a 30x
 response by using the dedicated options for that: \fI--post301\fP,
-\fI--post302\fP and \fI-post303\fP.
+\fI--post302\fP and \fI--post303\fP.
 .IP "--libcurl <file>"
 Append this option to any ordinary curl command line, and you will get a
 libcurl-using C source code written to the file that does the equivalent
@@ -1027,13 +1101,10 @@ in Metalink file, hash check will fail.
 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.
+\fInetrc(5)\fP \fIftp(1)\fP 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
@@ -1134,12 +1205,15 @@ output to be done to stdout.
 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.
+The file will be saved in the current working directory. If you want the file
+saved in a different directory, make sure you change the current working
+directory before invoking curl with this option.
 
-Consequentially, the file will be saved in the current working directory. If
-you want the file saved in a different directory, make sure you change current
-working directory before you invoke curl with the \fB-O, --remote-name\fP flag!
+The remote file name to use for saving is extracted from the given URL, nothing
+else, and if it already exists it will be overwritten. If you want the server
+to be able to choose the file name refer to \fI-J, --remote-header-name\fP
+which can be used in addition to this option. If the server chooses a file name
+and that name already exists it will not be overwritten.
 
 There is no URL decoding done on the file name. If it has %20 or other URL
 encoded parts of the name, they will end up as-is as file name.
@@ -1195,7 +1269,7 @@ i.e "my.host.domain" to specify the machine
 make curl pick the same IP address that is already used for the control
 connection
 .RE
-
+.IP
 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++.
@@ -1209,22 +1283,28 @@ available.
 (SSL/SSH) Passphrase for the private key
 
 If this option is used several times, the last one will be used.
+.IP "--path-as-is"
+Tell curl to not handle sequences of /../ or /./ in the given URL
+path. Normally curl will squash or merge them according to standards but with
+this option set you tell it not to do that.
+
+(Added in 7.42.0)
 .IP "--post301"
-(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
+(HTTP) Tells curl to respect RFC 7230/6.4.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"
-(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
+(HTTP) Tells curl to respect RFC 7230/6.4.3 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 "--post303"
-(HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert POST requests
+(HTTP) Tells curl to respect RFC 7230/6.4.4 and not convert POST requests
 into GET requests when following a 303 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
@@ -1271,9 +1351,40 @@ 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-default <protocol>"
+Tells curl to use \fIprotocol\fP for any URL missing a scheme name.
+
+Example:
+
+.RS
+.IP "--proto-default https ftp.mozilla.org"
+https://ftp.mozilla.org
+.RE
+
+An unknown or unsupported protocol causes error
+\fICURLE_UNSUPPORTED_PROTOCOL\fP.
+
+This option does not change the default proxy protocol (http).
+
+Without this option curl would make a guess based on the host, see \fI--url\fP
+for details.
+
+(Added in 7.45.0)
 .IP "--proto-redir <protocols>"
-Tells curl to use the listed protocols after a redirect. See --proto for
-how protocols are represented.
+Tells curl to use the listed protocols on redirect. See --proto for how
+protocols are represented.
+
+Example:
+
+.RS
+.IP "--proto-redir -all,http,https"
+Allow only HTTP and HTTPS on redirect.
+.RE
+
+By default curl will allow all protocols on redirect except several disabled
+for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0
+SMB and SMBS are also disabled. Specifying \fIall\fP or \fI+all\fP enables all
+protocols on redirect, including those disabled for security.
 
 (Added in 7.20.2)
 .IP "--proxy-anyauth"
@@ -1294,6 +1405,11 @@ 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 "--proxy-service-name <servicename>"
+This option allows you to change the service name for proxy negotiation.
+
+Examples: --proxy-negotiate proxy-name \fI--proxy-service-name\fP sockd would use
+sockd/proxy-name.  (Added in 7.43.0).
 .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.
@@ -1383,15 +1499,12 @@ specifies the last 500 bytes
 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)
+specifies the first and last byte only(*)(HTTP)
 .TP
 .B 100-199,500-599
-specifies two separate 100-byte ranges(*)(H)
+specifies two separate 100-byte ranges(*) (HTTP)
 .RE
-
+.IP
 (*) = NOTE that this will cause the server to reply with a multipart
 response!
 
@@ -1475,6 +1588,11 @@ terminal/stdout unless you redirect it.
 .IP "--sasl-ir"
 Enable initial response in SASL authentication.
 (Added in 7.31.0)
+.IP "--service-name <servicename>"
+This option allows you to change the service name for SPNEGO.
+
+Examples: --negotiate \fI--service-name\fP sockd would use
+sockd/server-name.  (Added in 7.43.0).
 .IP "-S, --show-error"
 When used with \fI-s\fP it makes curl show an error message if it fails.
 .IP "--ssl"
@@ -1497,6 +1615,10 @@ and TLS1.0 protocols known as BEAST.  If this option isn't used, the SSL layer
 may use workarounds known to cause interoperability problems with some older
 SSL implementations. WARNING: this option loosens the SSL security, and by
 using this flag you ask for exactly that.  (Added in 7.25.0)
+.IP "--ssl-no-revoke"
+(WinSSL) This option tells curl to disable certificate revocation checks.
+WARNING: this option loosens the SSL security, and by using this flag you ask
+for exactly that.  (Added in 7.44.0)
 .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)
@@ -1608,6 +1730,14 @@ 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 "--tftp-no-options"
+(TFTP) Tells curl not to send TFTP options requests.
+
+This option improves interop with some legacy servers that do not acknowledge
+or properly implement TFTP options. When this option is used
+\fI--tftp-blksize\fP is ignored.
+
+(Added in 7.48.0)
 .IP "--tlsauthtype <authtype>"
 Set TLS authentication type. Currently, the only supported option is "SRP",
 for TLS-SRP (RFC 5054). If \fI--tlsuser\fP and \fI--tlspassword\fP are
@@ -1676,7 +1806,7 @@ impossible to use a colon in the user name with this option. The password can,
 still.
 
 When using Kerberos V5 with a Windows based server you should include the
-Windows domain name in the user name, in order for the server to succesfully
+Windows domain name in the user name, in order for the server to successfully
 obtain a Kerberos Ticket. If you don't then the initial authentication
 handshake may fail.
 
@@ -1706,6 +1836,12 @@ If this option is used several times, the last one will be used.
 Specify a URL to fetch. This option is mostly handy when you want to specify
 URL(s) in a config file.
 
+If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
+then curl will make a guess based on the host. If the outermost sub-domain name
+matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used,
+otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a
+default protocol, see \fI--proto-default\fP for details.
+
 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"
@@ -1850,7 +1986,7 @@ displayed with millisecond resolution.
 The URL that was fetched last. This is most meaningful if you've told curl
 to follow location: headers.
 .RE
-
+.IP
 If this option is used several times, the last one will be used.
 .IP "-x, --proxy <[protocol://][user:password@]proxyhost[:port]>"
 Use the specified proxy.
@@ -1884,7 +2020,7 @@ 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
+HTTP server.  The specified request method 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
@@ -1898,6 +2034,11 @@ alter the way curl behaves. So for example if you want to make a proper HEAD
 request, using -X HEAD will not suffice. You need to use the \fI-I, --head\fP
 option.
 
+The method string you set with -X will be used for all requests, which if you
+for example use \fB-L, --location\fP may cause unintended side-effects when
+curl doesn't change request method according to the HTTP 30x response codes -
+and similar.
+
 (FTP)
 Specifies a custom FTP command to use instead of LIST when doing file lists
 with FTP.
@@ -2220,7 +2361,7 @@ are meant to never change.
 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
+https://curl.haxx.se
 .SH FTP
 ftp://ftp.sunet.se/pub/www/utilities/curl/
 .SH "SEE ALSO"
index 2a961b7..7395338 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -50,23 +55,23 @@ p.roffit {
 <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, SMB, SMBS, 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, Metalink, 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">curl is powered by libcurl for all transfer-related features. See <span Class="emphasis">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 <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>. 
 <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">&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 
-<p class="level0">&nbsp; <a href="ftp://ftp.numericals.com/file">ftp://ftp.numericals.com/file</a>[001-100].txt    (with leading zeros) 
-<p class="level0">&nbsp; <a href="ftp://ftp.letters.com/file">ftp://ftp.letters.com/file</a>[a-z].txt 
+<p class="level0">&nbsp; <a href="ftp://ftp.numericals.com/file[1-100].txt">ftp://ftp.numericals.com/file[1-100].txt</a> 
+<p class="level0">&nbsp; <a href="ftp://ftp.numericals.com/file[001-100].txt">ftp://ftp.numericals.com/file[001-100].txt</a>    (with leading zeros) 
+<p class="level0">&nbsp; <a href="ftp://ftp.letters.com/file[a-z].txt">ftp://ftp.letters.com/file[a-z].txt</a> 
 <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">&nbsp; <a href="http://any.org/archive[1996-1999]/vol[1-4]/part">http://any.org/archive[1996-1999]/vol[1-4]/part</a>{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 
-<p class="level0">&nbsp; <a href="http://www.letters.com/file">http://www.letters.com/file</a>[a-z:2].txt 
+<p class="level0">&nbsp; <a href="http://www.numericals.com/file[1-100:10].txt">http://www.numericals.com/file[1-100:10].txt</a> 
+<p class="level0">&nbsp; <a href="http://www.letters.com/file[a-z:2].txt">http://www.letters.com/file[a-z:2].txt</a> 
 <p class="level0">When using [] or {} sequences when invoked from a command line prompt, you probably have to put the full URL within double quotes to avoid the shell from interfering with it. This also goes for other characters treated special, like for example '&', '?' and '*'. 
 <p class="level0">Provide the IPv6 zone index in the URL with an escaped percentage sign and the interface name. Like in 
-<p class="level0">&nbsp; http://[fe80::3%25eth0]/ 
+<p class="level0">&nbsp; <a href="http://[fe80::3%25eth0]/">http://[fe80::3%25eth0]/</a> 
 <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>
@@ -74,7 +79,7 @@ p.roffit {
 <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">If you prefer a progress "bar" instead of the regular meter, <span Class="emphasis">-&#35;</span> is your friend. <a name="OPTIONS"></a><h2 class="nroffsh">OPTIONS</h2>
 <p class="level0">Options start with one or two dashes. Many of the options require an additional value next to them. 
 <p class="level0">The short "single-dash" form of the options, -d for example, may be used with or without a space between it and its value, although a space is a recommended separator. The long "double-dash" form, --data for example, requires a space between it and its value. 
 <p class="level0">Short version options that don't need any additional values can be used immediately next to each other, like for example you can specify all the options -O, -L and -v at once as -OLv. 
@@ -98,9 +103,9 @@ p.roffit {
 <p class="level0"><a name="-1"></a><span class="nroffip">-1, --tlsv1</span> 
 <p class="level1">(SSL) Forces curl to use TLS version 1.x when negotiating with a remote TLS server. You can use options <a class="emphasis" href="#--tlsv10">--tlsv1.0</a>, <a class="emphasis" href="#--tlsv11">--tlsv1.1</a>, and <a class="emphasis" href="#--tlsv12">--tlsv1.2</a> to control the TLS version more precisely (if the SSL backend in use supports such a level of control). 
 <p class="level0"><a name="-2"></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. Sometimes curl is built without SSLv2 support. SSLv2 is widely considered insecure. 
+<p class="level1">(SSL) Forces curl to use SSL version 2 when negotiating with a remote SSL server. Sometimes curl is built without SSLv2 support. SSLv2 is widely considered insecure (see <a href="http://www.ietf.org/rfc/rfc6176.txt">RFC 6176</a>)
 <p class="level0"><a name="-3"></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. Sometimes curl is built without SSLv3 support. 
+<p class="level1">(SSL) Forces curl to use SSL version 3 when negotiating with a remote SSL server. Sometimes curl is built without SSLv3 support. SSLv3 is widely considered insecure (see <a href="http://www.ietf.org/rfc/rfc7568.txt">RFC 7568</a>). 
 <p class="level0"><a name="-4"></a><span class="nroffip">-4, --ipv4</span> 
 <p class="level1">This option tells curl to resolve names to IPv4 addresses only, and not for example try IPv6. 
 <p class="level0"><a name="-6"></a><span class="nroffip">-6, --ipv6</span> 
@@ -115,8 +120,9 @@ p.roffit {
 <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"></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">-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">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 engine 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">-L, --location</a> option. The file format of the file to read cookies from should be plain HTTP headers (Set-Cookie style) or the Netscape/Mozilla cookie file format. 
 <p class="level1">The file specified with <a class="emphasis" href="#-b">-b, --cookie</a> is only used as input. No cookies will be written to the file. To store cookies, use the <a class="emphasis" href="#-c">-c, --cookie-jar</a> option. 
+<p class="level1">Exercise caution if you are using this option and multiple transfers may occur. If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie format and don't specify a domain, then the cookie is sent for any domain (even after redirects are followed) and cannot be modified by a server-set cookie. If the cookie engine is enabled and a server sets a cookie of the same name then both will be sent on a future transfer to that server, likely not what you intended. To address these issues set a domain in Set-Cookie (doing that will include sub-domains) or use the Netscape format. 
 <p class="level1">If this option is used several times, the last one will be used. 
 <p class="level0"><a name="-B"></a><span class="nroffip">-B, --use-ascii</span> 
 <p class="level1">(FTP/LDAP) Enable ASCII transfer. 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. 
@@ -128,14 +134,15 @@ p.roffit {
 <p class="level1">(HTTP) 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 data 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">This command line option will activate the cookie engine that makes curl record and use cookies. Another way to activate it is to use the <span class="emphasis">-b, --cookie</span> option. 
 <p class="level1">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">Since 7.43.0 cookies that were imported in the Set-Cookie format without a domain name are not exported by this option. 
 <p class="level1">If this option is used several times, the last specified file name will be used. 
 <p class="level0"><a name="-C"></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="--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://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives">http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives</a></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">https://www.openssl.org/docs/apps/ciphers.html</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">https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html&#35;Directives</span> 
 <p class="level1">If this option is used several times, the last one will be used. 
 <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 curl supports, and save the uncompressed document.  If this option is used and the server sends an unsupported encoding, curl will report an error. 
@@ -155,9 +162,9 @@ p.roffit {
 <p class="level1">(Added in 7.19.7) 
 <p class="level0"><a name="-d"></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">-F, --form</a>. 
-<p class="level1"><a class="emphasis" href="#-d">-d, --data</a> is the same as <a class="emphasis" href="#--data-ascii">--data-ascii</a>. 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"><a class="emphasis" href="#-d">-d, --data</a> is the same as <a class="emphasis" href="#--data-ascii">--data-ascii</a>. <a class="emphasis" href="#--data-raw">--data-raw</a> is almost the same but does not have a special interpretation of the @ character. 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. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with <span Class="emphasis">--data</span> @foobar. When --data is told to read from a file like that, carriage returns and newlines will be stripped out. 
+<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. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with <span Class="emphasis">--data</span> @foobar. When --data is told to read from a file like that, carriage returns and newlines will be stripped out. If you don't want the @ character to have a special interpretation use <a class="emphasis" href="#--data-raw">--data-raw</a> instead. 
 <p class="level0"><a name="-D"></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 an 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">-b, --cookie</a> option! The <a class="emphasis" href="#-c">-c, --cookie-jar</a> option is a better way to store cookies. 
@@ -169,6 +176,8 @@ p.roffit {
 <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 <a class="emphasis" href="#--data-ascii">--data-ascii</a> does, except that newlines and carriage returns 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">-d, --data</a>. 
+<p class="level0"><a name="--data-raw"></a><span class="nroffip">--data-raw &lt;data&gt;</span> 
+<p class="level1">(HTTP) This posts data similarly to <span Class="emphasis">--data</span> but without the special interpretation of the @ character. See <a class="emphasis" href="#-d">-d, --data</a>. (Added in 7.43.0) 
 <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: 
@@ -200,10 +209,12 @@ p.roffit {
 <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">If the server is an IPv6 host, this option will have no effect as EPRT is necessary then. 
 <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">-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 EPSV again and <span Class="bold">--no-epsv</span> is an alias for <a class="bold" href="#--disable-epsv">--disable-epsv</a>. 
+<p class="level1">If the server is an IPv6 host, this option will have no effect as EPSV is necessary then. 
 <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">-P, --ftp-port</a>. 
 <p class="level0"><a name="--dns-interface"></a><span class="nroffip">--dns-interface &lt;interface&gt;</span> 
 <p class="level1">Tell curl to send outgoing DNS requests through &lt;interface&gt;. This option is a counterpart to <a class="emphasis" href="#--interface">--interface</a> (which does not affect DNS). The supplied string must be an interface name (not an address). 
@@ -221,9 +232,9 @@ p.roffit {
 <p class="level1">(HTTP) Sends the "Referrer Page" information to the HTTP server. This can also be set with the <a class="emphasis" href="#-H">-H, --header</a> flag of course.  When used with <a class="emphasis" href="#-L">-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="-E"></a><span class="nroffip">-E, --cert &lt;certificate[:password]&gt;</span> 
-<p class="level1">(SSL) Tells curl to use the specified client certificate file when getting a file with HTTPS, FTPS or another SSL-based protocol. The certificate must be in PKCS#12 format if using Secure Transport, or PEM format if using any other engine.  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 can tell 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 you want to use a file from the current directory, please precede it with "./" prefix, in order to avoid confusion with a nickname.  If the nickname contains ":", it needs to be preceded by "\" so that it is not recognized as password delimiter.  If the nickname contains "\", it needs to be escaped as "\\" so that it is not recognized as an escape character. 
-<p class="level1">(iOS and Mac OS X only) If curl is built against Secure Transport, then the certificate string can either be the name of a certificate/private key in the system or user keychain, or the path to a PKCS#12-encoded certificate and private key. If you want to use a file from the current directory, please precede it with "./" prefix, in order to avoid confusion with a nickname. 
+<p class="level1">(SSL) Tells curl to use the specified client certificate file when getting a file with HTTPS, FTPS or another SSL-based protocol. The certificate must be in PKCS&#35;12 format if using Secure Transport, or PEM format if using any other engine.  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 client 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 can tell 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&#35;11 module (libnsspem.so) is available then PEM files may be loaded. If you want to use a file from the current directory, please precede it with "./" prefix, in order to avoid confusion with a nickname.  If the nickname contains ":", it needs to be preceded by "\" so that it is not recognized as password delimiter.  If the nickname contains "\", it needs to be escaped as "\\" so that it is not recognized as an escape character. 
+<p class="level1">(iOS and Mac OS X only) If curl is built against Secure Transport, then the certificate string can either be the name of a certificate/private key in the system or user keychain, or the path to a PKCS&#35;12-encoded certificate and private key. If you want to use a file from the current directory, please precede it with "./" prefix, in order to avoid confusion with a nickname. 
 <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. 
@@ -231,6 +242,9 @@ p.roffit {
 <p class="level1">(RISC OS ONLY) Sets a range of environment variables, using the names the <a class="emphasis" href="#-w">-w</a> 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="--expect100-timeout"></a><span class="nroffip">--expect100-timeout &lt;seconds&gt;</span> 
+<p class="level1">(HTTP) Maximum time in seconds that you allow curl to wait for a 100-continue response when curl emits an Expects: 100-continue header in its request. By default curl will wait one second. This option accepts decimal values! When curl stops waiting, it will continue as if the response has been received. 
+<p class="level1">(Added in 7.47.0) 
 <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. 
@@ -238,16 +252,24 @@ p.roffit {
 <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, the NSS PEM PKCS#11 module (libnsspem.so) needs to be available for this option to work properly. 
+<p class="level1">If curl is built against the NSS SSL library, the NSS PEM PKCS&#35;11 module (libnsspem.so) needs to be available for this option to work properly. 
 <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. Multiple paths can be provided by separating them with ":" (e.g. "path1:path2:path3"). The certificates must be in PEM format, and if curl is built against OpenSSL, the directory must have been processed using the c_rehash utility supplied with OpenSSL. Using <a class="emphasis" href="#--capath">--capath</a> can allow OpenSSL-powered 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 set, the default capath value will be ignored, and if it is used several times, the last one will be used. 
-<p class="level0"><a name="--pinnedpubkey"></a><span class="nroffip">--pinnedpubkey &lt;pinned public key&gt;</span> 
-<p class="level1">(SSL) Tells curl to use the specified public key file to verify the peer. The file must contain a single public key in PEM or DER format. 
+<p class="level0"><a name="--pinnedpubkey"></a><span class="nroffip">--pinnedpubkey &lt;pinned public key (hashes)&gt;</span> 
+<p class="level1">(SSL) Tells curl to use the specified public key file (or hashes) to verify the peer. This can be a path to a file which contains a single public key in PEM or DER format, or any number of base64 encoded sha256 hashes preceded by &acute;sha256//&acute; and separated by &acute;;&acute; 
 <p class="level1">When negotiating a TLS or SSL connection, the server sends a certificate indicating its identity. A public key is extracted from this certificate and if it does not exactly match the public key provided to this option, curl will abort the connection before sending or receiving any data. 
-<p class="level1">This is currently only implemented in the OpenSSL, GnuTLS and GSKit backends. 
-<p class="level1">If this option is used several times, the last one will be used. (Added in 7.39.0) 
+<p class="level1">Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and wolfSSL/CyaSSL. sha256 support added in 7.44.0 for OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported. 
+<p class="level1">If this option is used several times, the last one will be used. 
+<p class="level0"><a name="--cert-status"></a><span class="nroffip">--cert-status</span> 
+<p class="level1">(SSL) Tells curl to verify the status of the server certificate by using the Certificate Status Request (aka. OCSP stapling) TLS extension. 
+<p class="level1">If this option is enabled and the server sends an invalid (e.g. expired) response, if the response suggests that the server certificate has been revoked, or no response at all is received, the verification fails. 
+<p class="level1">This is currently only implemented in the OpenSSL, GnuTLS and NSS backends. (Added in 7.41.0) 
+<p class="level0"><a name="--false-start"></a><span class="nroffip">--false-start</span> 
+<p class="level1">
+<p class="level1">(SSL) Tells curl to use false start during the TLS handshake. False start is a mode where a TLS client will start sending application data before verifying the server's Finished message, thus saving a round trip when performing a full handshake. 
+<p class="level1">This is currently only implemented in the NSS and Secure Transport (on iOS 7.0 or later, or OS X 10.9 or later) backends. (Added in 7.42.0) 
 <p class="level0"><a name="-f"></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 an 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). 
@@ -255,7 +277,7 @@ p.roffit {
 <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 <a href="http://www.ietf.org/rfc/rfc2388.txt">RFC 2388</a>. 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 content from stdin instead of a file, use - as the filename. This goes for both @ and &lt; constructs. 
+<p class="level1">To read content from stdin instead of a file, use - as the filename. This goes for both @ and &lt; constructs. Unfortunately it does not support reading the file from a named pipe or similar, as it needs the full size before the transfer starts. 
 <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 
@@ -285,6 +307,8 @@ p.roffit {
 <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">
+<p class="level0"><a name=""></a><span class="nroffip"></span> 
 <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 connection. 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) 
@@ -315,12 +339,14 @@ p.roffit {
 <p class="level1">See also the <a class="emphasis" href="#-A">-A, --user-agent</a> and <a class="emphasis" href="#-e">-e, --referer</a> options. 
 <p class="level1">Starting in 7.37.0, you need <a class="emphasis" href="#--proxy-header">--proxy-header</a> to send custom headers intended for a proxy. 
 <p class="level1">Example: 
-<p class="level1"># curl -H "X-First-Name: Joe" <a href="http://192.168.0.1/">http://192.168.0.1/</a> 
+<p class="level1">&#35; curl -H "X-First-Name: Joe" <a href="http://192.168.0.1/">http://192.168.0.1/</a> 
+<p class="level1"><span Class="bold">WARNING</span>: headers set with this option will be set in all requests - even after redirects are followed, like when told with <a class="bold" href="#-L">-L, --location</a>. This can lead to the header being sent to other hosts than the original host, so sensitive headers should be used with caution combined with following redirects. 
 <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">(SCP/SFTP) 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. (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="level1">For 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="level1">For FTP (since 7.46.0), skip the RETR command to figure out the size before downloading a file. 
 <p class="level0"><a name="-i"></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="-I"></a><span class="nroffip">-I, --head</span> 
@@ -333,32 +359,35 @@ p.roffit {
 <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"></a><span class="nroffip">-J, --remote-header-name</span> 
 <p class="level1">(HTTP) This option tells the <a class="emphasis" href="#-O">-O, --remote-name</a> option to use the server-specified Content-Disposition filename instead of extracting a filename from the URL. 
+<p class="level1">If the server specifies a file name and a file with that name already exists in the current working directory it will not be overwritten and an error will occur. If the server doesn't specify a file name then this option has no effect. 
 <p class="level1">There's no attempt to decode %-sequences (yet) in the provided file name, so this option may provide you with rather unexpected file names. 
+<p class="level1"><span Class="bold">WARNING</span>: Exercise judicious use of this option, especially on Windows. A rogue server could send you the name of a DLL or other file that could possibly be loaded automatically by Windows or some third party software. 
 <p class="level0"><a name="-k"></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">-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="level1">See this online resource for further details: <span Class="bold">https://curl.haxx.se/docs/sslcerts.html</span> 
 <p class="level0"><a name="-K"></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. 
 <p class="level1">Options and their parameters must be specified on the same config file line, separated by whitespace, colon, or the equals sign. Long option names can optionally be given in the config file without the initial double dashes and if so, the colon or equals characters can be used as separators. If the option is specified with one or two dashes, there can be no colon or equals character between the option and its parameter. 
-<p class="level1">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">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 '&#35;' 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">url = "<a href="https://curl.haxx.se/docs/">https://curl.haxx.se/docs/</a>" 
 <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"><pre class="level1">
+&#35; --- Example file ---
+&#35; this is a comment
+url = "curl.haxx.se"
+output = "curlhere.html"
+user-agent = "superagent/1.0"
+&nbsp;
+&#35; and fetch another URL too
+url = "curl.haxx.se/docs/manpage.html"
+-O
+referer = "http://nowhereatall.com/"
+&#35; --- End of example file ---
+</pre>
 
 <p class="level1">
 <p class="level1">This option can be used multiple times to load multiple config files. 
@@ -383,7 +412,7 @@ p.roffit {
 <p class="level0"><a name="-L"></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">-i, --include</a> or <a class="emphasis" href="#-I">-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="level1">You can tell curl to not change the non-GET request method to GET after a 30x response by using the dedicated options for that: <a class="emphasis" href="#--post301">--post301</a>, <a class="emphasis" href="#--post302">--post302</a> and <span Class="emphasis">-post303</span>. 
+<p class="level1">You can tell curl to not change the non-GET request method to GET after a 30x response by using the dedicated options for that: <a class="emphasis" href="#--post301">--post301</a>, <a class="emphasis" href="#--post302">--post302</a> and <a class="emphasis" href="#--post303">--post303</a>. 
 <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 C source code written to the file that does the equivalent of what your command-line operation does! 
 <p class="level1">If this option is used several times, the last given file name will be used. (Added in 7.16.1) 
@@ -402,7 +431,7 @@ p.roffit {
 <p class="level1">If this option is used several times, the last one will be used. 
 <p class="level0"><a name="--login-options"></a><span class="nroffip">--login-options &lt;options&gt;</span> 
 <p class="level1">Specify the login options to use during server authentication. 
-<p class="level1">You can use the login options to specify protocol specific options that may be used during authentication. At present only IMAP, POP3 and SMTP support login options. For more information about the login options please see <a href="http://www.ietf.org/rfc/rfc2384.txt">RFC 2384</a>, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt (Added in 7.34.0). 
+<p class="level1">You can use the login options to specify protocol specific options that may be used during authentication. At present only IMAP, POP3 and SMTP support login options. For more information about the login options please see <a href="http://www.ietf.org/rfc/rfc2384.txt">RFC 2384</a>, <a href="http://www.ietf.org/rfc/rfc5092.txt">RFC 5092</a> and IETF draft draft-earhart-url-smtp-00.txt (Added in 7.34.0). 
 <p class="level1">If this option is used several times, the last one will be used. 
 <p class="level0"><a name="--mail-auth"></a><span class="nroffip">--mail-auth &lt;address&gt;</span> 
 <p class="level1">(SMTP) Specify a single address. This will be used to specify the authentication address (identity) of a submitted message that is being relayed to another server. 
@@ -422,7 +451,7 @@ p.roffit {
 <p class="level1">Set maximum number of redirection-followings allowed. If <a class="emphasis" href="#-L">-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="--metalink"></a><span class="nroffip">--metalink</span> 
-<p class="level1">This option can tell curl to parse and process a given URI as Metalink file (both version 3 and 4 (<a href="http://www.ietf.org/rfc/rfc5854.txt">RFC 5854</a>) are supported) and make use of the mirrors listed within for failover if there are errors (such as the file or server not being available). It will also verify the hash of the file after the download completes. The Metalink file itself is downloaded and processed in memory and not stored in the local file system. 
+<p class="level1">This option can tell curl to parse and process a given URI as Metalink file (both version 3 and 4 (RFC 5854) are supported) and make use of the mirrors listed within for failover if there are errors (such as the file or server not being available). It will also verify the hash of the file after the download completes. The Metalink file itself is downloaded and processed in memory and not stored in the local file system. 
 <p class="level1">Example to use a remote Metalink file: 
 <p class="level1"><span Class="bold">curl</span> --metalink <a href="http://www.example.com/example.metalink">http://www.example.com/example.metalink</a> 
 <p class="level1">To use a Metalink file in the local file system, use FILE protocol (file://): 
@@ -430,7 +459,7 @@ p.roffit {
 <p class="level1">Please note that if FILE protocol is disabled, there is no way to use a local Metalink file at the time of this writing. Also note that if <a class="emphasis" href="#--metalink">--metalink</a> and <span Class="emphasis">--include</span> are used together, <span Class="emphasis">--include</span> will be ignored. This is because including headers in the response will break Metalink parser and if the headers are included in the file described in Metalink file, hash check will fail. 
 <p class="level1">(Added in 7.27.0, if built against the libmetalink library.) 
 <p class="level0"><a name="-n"></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">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="emphasis">netrc(5)</span> <span Class="emphasis">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="-N"></a><span class="nroffip">-N, --no-buffer</span> 
@@ -463,16 +492,16 @@ p.roffit {
 <p class="level1">This option requires a library built with SSL support. Use <a class="emphasis" href="#-V">-V, --version</a> to see if your curl supports NTLM. 
 <p class="level1">If this option is used several times, only the first one is used. 
 <p class="level0"><a name="-o"></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">Write output to &lt;file&gt; instead of stdout. If you are using {} or [] to fetch multiple documents, you can use '&#35;' 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_&#35;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">&nbsp; curl http://{site,host}.host[1-5].com -o "&#35;1_&#35;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"></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">Consequentially, the file will be saved in the current working directory. If you want the file saved in a different directory, make sure you change current working directory before you invoke curl with the <a class="bold" href="#-O">-O, --remote-name</a> flag! 
+<p class="level1">The file will be saved in the current working directory. If you want the file saved in a different directory, make sure you change the current working directory before invoking curl with this option
+<p class="level1">The remote file name to use for saving is extracted from the given URL, nothing else, and if it already exists it will be overwritten. If you want the server to be able to choose the file name refer to <a class="emphasis" href="#-J">-J, --remote-header-name</a> which can be used in addition to this option. If the server chooses a file name and that name already exists it will not be overwritten. 
 <p class="level1">There is no URL decoding done on the file name. If it has %20 or other URL encoded parts of the name, they will end up as-is as file name. 
 <p class="level1">You may use this option as many times as the number of URLs you have. 
 <p class="level0"><a name="--oauth2-bearer"></a><span class="nroffip">--oauth2-bearer</span> 
@@ -499,17 +528,21 @@ p.roffit {
 <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="level0"><a name=""></a><span class="nroffip"></span> 
 <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="--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="--path-as-is"></a><span class="nroffip">--path-as-is</span> 
+<p class="level1">Tell curl to not handle sequences of /../ or /./ in the given URL path. Normally curl will squash or merge them according to standards but with this option set you tell it not to do that. 
+<p class="level1">(Added in 7.42.0) 
 <p class="level0"><a name="--post301"></a><span class="nroffip">--post301</span> 
-<p class="level1">(HTTP) Tells curl to respect <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>/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">-L, --location</a> (Added in 7.17.1) 
+<p class="level1">(HTTP) Tells curl to respect <a href="http://www.ietf.org/rfc/rfc7230.txt">RFC 7230</a>/6.4.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">-L, --location</a> (Added in 7.17.1) 
 <p class="level0"><a name="--post302"></a><span class="nroffip">--post302</span> 
-<p class="level1">(HTTP) Tells curl to respect <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>/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">-L, --location</a> (Added in 7.19.1) 
+<p class="level1">(HTTP) Tells curl to respect <a href="http://www.ietf.org/rfc/rfc7230.txt">RFC 7230</a>/6.4.3 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">-L, --location</a> (Added in 7.19.1) 
 <p class="level0"><a name="--post303"></a><span class="nroffip">--post303</span> 
-<p class="level1">(HTTP) Tells curl to respect <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>/10.3.2 and not convert POST requests into GET requests when following a 303 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">-L, --location</a> (Added in 7.26.0) 
+<p class="level1">(HTTP) Tells curl to respect <a href="http://www.ietf.org/rfc/rfc7230.txt">RFC 7230</a>/6.4.4 and not convert POST requests into GET requests when following a 303 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">-L, --location</a> (Added in 7.26.0) 
 <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">
@@ -528,8 +561,27 @@ p.roffit {
 <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-default"></a><span class="nroffip">--proto-default &lt;protocol&gt;</span> 
+<p class="level1">Tells curl to use <span Class="emphasis">protocol</span> for any URL missing a scheme name. 
+<p class="level1">Example: 
+<p class="level1">
+<p class="level2">
+<p class="level1"><a name="--proto-default"></a><span class="nroffip">--proto-default https ftp.mozilla.org</span> 
+<p class="level2"><a href="https://ftp.mozilla.org">https://ftp.mozilla.org</a> 
+<p class="level1">
+<p class="level1">An unknown or unsupported protocol causes error <span Class="emphasis">CURLE_UNSUPPORTED_PROTOCOL</span>. 
+<p class="level1">This option does not change the default proxy protocol (http). 
+<p class="level1">Without this option curl would make a guess based on the host, see <a class="emphasis" href="#--url">--url</a> for details. 
+<p class="level1">(Added in 7.45.0) 
 <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">Tells curl to use the listed protocols on redirect. See --proto for how protocols are represented. 
+<p class="level1">Example: 
+<p class="level1">
+<p class="level2">
+<p class="level1"><a name="--proto-redir"></a><span class="nroffip">--proto-redir -all,http,https</span> 
+<p class="level2">Allow only HTTP and HTTPS on redirect. 
+<p class="level1">
+<p class="level1">By default curl will allow all protocols on redirect except several disabled for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS are also disabled. Specifying <span Class="emphasis">all</span> or <span Class="emphasis">+all</span> enables all protocols on redirect, including those disabled for security. 
 <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) 
@@ -541,6 +593,9 @@ p.roffit {
 <p class="level1">Tells curl to use HTTP Negotiate (SPNEGO) authentication when communicating with the given proxy. Use <a class="emphasis" href="#--negotiate">--negotiate</a> for enabling HTTP Negotiate (SPNEGO) 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="--proxy-service-name"></a><span class="nroffip">--proxy-service-name &lt;servicename&gt;</span> 
+<p class="level1">This option allows you to change the service name for proxy negotiation. 
+<p class="level1">Examples: --proxy-negotiate proxy-name <a class="emphasis" href="#--proxy-service-name">--proxy-service-name</a> sockd would use sockd/proxy-name.  (Added in 7.43.0). 
 <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">-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. 
@@ -582,10 +637,10 @@ p.roffit {
 <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="level2"><span Class="bold">0-0,-1</span> specifies the first and last byte only(*)(HTTP) 
+<p class="level2"><span Class="bold">100-199,500-599</span> specifies two separate 100-byte ranges(*) (HTTP) 
 <p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span> 
 <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. 
@@ -617,6 +672,9 @@ p.roffit {
 <p class="level1">Silent or quiet mode. Don't show progress meter or error messages.  Makes Curl mute. It will still output the data you ask for, potentially even to the terminal/stdout unless you redirect it. 
 <p class="level0"><a name="--sasl-ir"></a><span class="nroffip">--sasl-ir</span> 
 <p class="level1">Enable initial response in SASL authentication. (Added in 7.31.0) 
+<p class="level0"><a name="--service-name"></a><span class="nroffip">--service-name &lt;servicename&gt;</span> 
+<p class="level1">This option allows you to change the service name for SPNEGO. 
+<p class="level1">Examples: --negotiate <a class="emphasis" href="#--service-name">--service-name</a> sockd would use sockd/server-name.  (Added in 7.43.0). 
 <p class="level0"><a name="-S"></a><span class="nroffip">-S, --show-error</span> 
 <p class="level1">When used with <a class="emphasis" href="#-s">-s</a> it makes curl show an error message if it fails. 
 <p class="level0"><a name="--ssl"></a><span class="nroffip">--ssl</span> 
@@ -627,6 +685,8 @@ p.roffit {
 <p class="level1">This option was formerly known as <span Class="emphasis">--ftp-ssl-reqd</span> (added in 7.15.5). That option name can still be used but will be removed in a future version. 
 <p class="level0"><a name="--ssl-allow-beast"></a><span class="nroffip">--ssl-allow-beast</span> 
 <p class="level1">(SSL) This option tells curl to not work around a security flaw in the SSL3 and TLS1.0 protocols known as BEAST.  If this option isn't used, the SSL layer may use workarounds known to cause interoperability problems with some older SSL implementations. WARNING: this option loosens the SSL security, and by using this flag you ask for exactly that.  (Added in 7.25.0) 
+<p class="level0"><a name="--ssl-no-revoke"></a><span class="nroffip">--ssl-no-revoke</span> 
+<p class="level1">(WinSSL) This option tells curl to disable certificate revocation checks. WARNING: this option loosens the SSL security, and by using this flag you ask for exactly that.  (Added in 7.44.0) 
 <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">-x, --proxy</a>, as they are mutually exclusive. 
@@ -674,8 +734,12 @@ p.roffit {
 <p class="level1">(TFTP) Set TFTP BLKSIZE option (must be &gt;512). This is the block size that curl will try to use when transferring 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="--tftp-no-options"></a><span class="nroffip">--tftp-no-options</span> 
+<p class="level1">(TFTP) Tells curl not to send TFTP options requests. 
+<p class="level1">This option improves interop with some legacy servers that do not acknowledge or properly implement TFTP options. When this option is used <a class="emphasis" href="#--tftp-blksize">--tftp-blksize</a> is ignored. 
+<p class="level1">(Added in 7.48.0) 
 <p class="level0"><a name="--tlsauthtype"></a><span class="nroffip">--tlsauthtype &lt;authtype&gt;</span> 
-<p class="level1">Set TLS authentication type. Currently, the only supported option is "SRP", for TLS-SRP (<a href="http://www.ietf.org/rfc/rfc5054.txt">RFC 5054</a>). If <a class="emphasis" href="#--tlsuser">--tlsuser</a> and <a class="emphasis" href="#--tlspassword">--tlspassword</a> are specified but <a class="emphasis" href="#--tlsauthtype">--tlsauthtype</a> is not, then this option defaults to "SRP". (Added in 7.21.4) 
+<p class="level1">Set TLS authentication type. Currently, the only supported option is "SRP", for TLS-SRP (RFC 5054). If <a class="emphasis" href="#--tlsuser">--tlsuser</a> and <a class="emphasis" href="#--tlspassword">--tlspassword</a> are specified but <a class="emphasis" href="#--tlsauthtype">--tlsauthtype</a> is not, then this option defaults to "SRP". (Added in 7.21.4) 
 <p class="level0"><a name="--tlspassword"></a><span class="nroffip">--tlspassword &lt;password&gt;</span> 
 <p class="level1">Set password for use with the TLS authentication method specified with <a class="emphasis" href="#--tlsauthtype">--tlsauthtype</a>. Requires that <a class="emphasis" href="#--tlsuser">--tlsuser</a> also be set.  (Added in 7.21.4) 
 <p class="level0"><a name="--tlsuser"></a><span class="nroffip">--tlsuser &lt;user&gt;</span> 
@@ -706,7 +770,7 @@ p.roffit {
 <p class="level1">Specify the user name and password to use for server authentication. Overrides <a class="emphasis" href="#-n">-n, --netrc</a> and <a class="emphasis" href="#--netrc-optional">--netrc-optional</a>. 
 <p class="level1">If you simply specify the user name, curl will prompt for a password. 
 <p class="level1">The user name and passwords are split up on the first colon, which makes it impossible to use a colon in the user name with this option. The password can, still. 
-<p class="level1">When using Kerberos V5 with a Windows based server you should include the Windows domain name in the user name, in order for the server to succesfully obtain a Kerberos Ticket. If you don't then the initial authentication handshake may fail. 
+<p class="level1">When using Kerberos V5 with a Windows based server you should include the Windows domain name in the user name, in order for the server to successfully obtain a Kerberos Ticket. If you don't then the initial authentication handshake may fail. 
 <p class="level1">When using NTLM, the user name can be specified simply as the user name, without the domain, if there is a single domain and forest in your setup for example. 
 <p class="level1">To specify the domain name use either Down-Level Logon Name or UPN (User Principal Name) formats. For example, EXAMPLE\user and user@example.com respectively. 
 <p class="level1">If you use a Windows SSPI-enabled curl binary and perform Kerberos V5, Negotiate, NTLM or Digest authentication then you can tell curl to select the user name and password from your environment by specifying a single colon with this option: "-u :". 
@@ -717,6 +781,7 @@ p.roffit {
 <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">If the given URL is missing a scheme name (such as "http://" or "ftp://" etc) then curl will make a guess based on the host. If the outermost sub-domain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a default protocol, see <a class="emphasis" href="#--proto-default">--proto-default</a> for details. 
 <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">-o, --output</a> or the <a class="emphasis" href="#-O">-O, --remote-name</a> options. 
 <p class="level0"><a name="-v"></a><span class="nroffip">-v, --verbose</span> 
 <p class="level1">Be more verbose/talkative during the operation. Useful for debugging and seeing what's going on "under the hood". 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. 
@@ -758,6 +823,7 @@ p.roffit {
 <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">url_effective</span> The URL that was fetched last. This is most meaningful if you've told curl to follow location: headers. 
 <p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span> 
 <p class="level1">If this option is used several times, the last one will be used. 
 <p class="level0"><a name="-x"></a><span class="nroffip">-x, --proxy &lt;[protocol://][user:password@]proxyhost[:port]&gt;</span> 
 <p class="level1">Use the specified proxy. 
@@ -769,9 +835,10 @@ p.roffit {
 <p class="level1">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"></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">(HTTP) Specifies a custom request method to use when communicating with the HTTP server.  The specified request method 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">Normally you don't need this option. All sorts of GET, HEAD, POST and PUT requests are rather invoked by using dedicated command line options. 
 <p class="level1">This option only changes the actual word used in the HTTP request, it does not alter the way curl behaves. So for example if you want to make a proper HEAD request, using -X HEAD will not suffice. You need to use the <a class="emphasis" href="#-I">-I, --head</a> option. 
+<p class="level1">The method string you set with -X will be used for all requests, which if you for example use <a class="bold" href="#-L">-L, --location</a> may cause unintended side-effects when curl doesn't change request method according to the HTTP 30x response codes - and similar. 
 <p class="level1">(FTP) Specifies a custom FTP command to use instead of LIST when doing file lists with FTP. 
 <p class="level1">(POP3) Specifies a custom POP3 command to use instead of LIST or RETR. (Added in 7.26.0) 
 <p class="level1">(IMAP) Specifies a custom IMAP command to use instead of LIST. (Added in 7.30.0) 
@@ -830,7 +897,7 @@ p.roffit {
 <p class="level1"><a name="HTTP2"></a><span class="nroffip">HTTP2</span> 
 <p class="level2">HTTP/2 support has been built-in. 
 <p class="level1"><a name="Metalink"></a><span class="nroffip">Metalink</span> 
-<p class="level2">This curl supports Metalink (both version 3 and 4 (<a href="http://www.ietf.org/rfc/rfc5854.txt">RFC 5854</a>)), which describes mirrors and hashes.  curl will use mirrors for failover if there are errors (such as the file or server not being available). 
+<p class="level2">This curl supports Metalink (both version 3 and 4 (RFC 5854)), which describes mirrors and hashes.  curl will use mirrors for failover if there are errors (such as the file or server not being available). 
 <p class="level1"><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">-K, --config</a> for details. <a name="ENVIRONMENT"></a><h2 class="nroffsh">ENVIRONMENT</h2>
@@ -1016,8 +1083,8 @@ p.roffit {
 <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="https://curl.haxx.se">https://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="roffit">
+<p class="level0"><span Class="manpage">ftp (1)</span>, <span Class="manpage">wget (1)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 630cfdb..98e4a42 100644 (file)
Binary files a/docs/curl.pdf and b/docs/curl.pdf differ
index 5d95a8a..aa1862e 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* Example application source code using the multi interface to download many
- * files, but with a capped maximum amount of simultaneous transfers.
- *
+/* <DESC>
+ * Source code using the multi interface to download many
+ * files, with a capped maximum amount of simultaneous transfers.
+ * </DESC>
  * Written by Michael Wallner
  */
 
@@ -126,41 +127,42 @@ int main(void)
      uses */
   curl_multi_setopt(cm, CURLMOPT_MAXCONNECTS, (long)MAX);
 
-  for (C = 0; C < MAX; ++C) {
+  for(C = 0; C < MAX; ++C) {
     init(cm, C);
   }
 
-  while (U) {
+  while(U) {
     curl_multi_perform(cm, &U);
 
-    if (U) {
+    if(U) {
       FD_ZERO(&R);
       FD_ZERO(&W);
       FD_ZERO(&E);
 
-      if (curl_multi_fdset(cm, &R, &W, &E, &M)) {
+      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)) {
+      if(curl_multi_timeout(cm, &L)) {
         fprintf(stderr, "E: curl_multi_timeout\n");
         return EXIT_FAILURE;
       }
-      if (L == -1)
+      if(L == -1)
         L = 100;
 
-      if (M == -1) {
+      if(M == -1) {
 #ifdef WIN32
         Sleep(L);
 #else
-        sleep(L / 1000);
+        sleep((unsigned int)L / 1000);
 #endif
-      } else {
+      }
+      else {
         T.tv_sec = L/1000;
         T.tv_usec = (L%1000)*1000;
 
-        if (0 > select(M+1, &R, &W, &E, &T)) {
+        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;
@@ -168,8 +170,8 @@ int main(void)
       }
     }
 
-    while ((msg = curl_multi_info_read(cm, &Q))) {
-      if (msg->msg == CURLMSG_DONE) {
+    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);
@@ -181,7 +183,7 @@ int main(void)
       else {
         fprintf(stderr, "E: CURLMsg (%d)\n", msg->msg);
       }
-      if (C < CNT) {
+      if(C < CNT) {
         init(cm, C++);
         U++; /* just to prevent it from remaining at 0 if there are more
                 URLs to get */
index 8e2bc9a..dec53f5 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
@@ -61,3 +61,6 @@ endif
 include Makefile.inc
 
 all: $(check_PROGRAMS)
+
+checksrc:
+       @@PERL@ $(top_srcdir)/lib/checksrc.pl -D$(top_srcdir)/docs/examples *.c
index dfd1178..17e614e 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 554c405..bf3ec3d 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
 #
 ###########################################################################
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -122,9 +132,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 @USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \
-       $(top_srcdir)/depcomp README
 check_PROGRAMS = 10-at-a-time$(EXEEXT) anyauthput$(EXEEXT) \
        cookie_interface$(EXEEXT) debug$(EXEEXT) fileupload$(EXEEXT) \
        fopen$(EXEEXT) ftpget$(EXEEXT) ftpgetresp$(EXEEXT) \
@@ -149,7 +156,9 @@ check_PROGRAMS = 10-at-a-time$(EXEEXT) anyauthput$(EXEEXT) \
        imap-search$(EXEEXT) imap-create$(EXEEXT) imap-delete$(EXEEXT) \
        imap-copy$(EXEEXT) imap-noop$(EXEEXT) imap-ssl$(EXEEXT) \
        imap-tls$(EXEEXT) imap-multi$(EXEEXT) url2file$(EXEEXT) \
-       sftpget$(EXEEXT) ftpsget$(EXEEXT) postinmemory$(EXEEXT)
+       sftpget$(EXEEXT) ftpsget$(EXEEXT) postinmemory$(EXEEXT) \
+       http2-download$(EXEEXT) http2-upload$(EXEEXT) \
+       http2-serverpush$(EXEEXT) getredirect$(EXEEXT)
 subdir = docs/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
@@ -171,7 +180,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -297,6 +307,13 @@ getinmemory_LDADD = $(LDADD)
 @USE_EXPLICIT_LIB_DEPS_FALSE@  $(LIBDIR)/libcurl.la
 @USE_EXPLICIT_LIB_DEPS_TRUE@getinmemory_DEPENDENCIES =  \
 @USE_EXPLICIT_LIB_DEPS_TRUE@   $(LIBDIR)/libcurl.la
+getredirect_SOURCES = getredirect.c
+getredirect_OBJECTS = getredirect.$(OBJEXT)
+getredirect_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@getredirect_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_FALSE@  $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@getredirect_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_TRUE@   $(LIBDIR)/libcurl.la
 http_post_SOURCES = http-post.c
 http_post_OBJECTS = http-post.$(OBJEXT)
 http_post_LDADD = $(LDADD)
@@ -304,6 +321,27 @@ http_post_LDADD = $(LDADD)
 @USE_EXPLICIT_LIB_DEPS_FALSE@  $(LIBDIR)/libcurl.la
 @USE_EXPLICIT_LIB_DEPS_TRUE@http_post_DEPENDENCIES =  \
 @USE_EXPLICIT_LIB_DEPS_TRUE@   $(LIBDIR)/libcurl.la
+http2_download_SOURCES = http2-download.c
+http2_download_OBJECTS = http2-download.$(OBJEXT)
+http2_download_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@http2_download_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_FALSE@  $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@http2_download_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_TRUE@   $(LIBDIR)/libcurl.la
+http2_serverpush_SOURCES = http2-serverpush.c
+http2_serverpush_OBJECTS = http2-serverpush.$(OBJEXT)
+http2_serverpush_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@http2_serverpush_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_FALSE@  $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@http2_serverpush_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_TRUE@   $(LIBDIR)/libcurl.la
+http2_upload_SOURCES = http2-upload.c
+http2_upload_OBJECTS = http2-upload.$(OBJEXT)
+http2_upload_LDADD = $(LDADD)
+@USE_EXPLICIT_LIB_DEPS_FALSE@http2_upload_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_FALSE@  $(LIBDIR)/libcurl.la
+@USE_EXPLICIT_LIB_DEPS_TRUE@http2_upload_DEPENDENCIES =  \
+@USE_EXPLICIT_LIB_DEPS_TRUE@   $(LIBDIR)/libcurl.la
 httpcustomheader_SOURCES = httpcustomheader.c
 httpcustomheader_OBJECTS = httpcustomheader.$(OBJEXT)
 httpcustomheader_LDADD = $(LDADD)
@@ -702,7 +740,8 @@ am__v_CCLD_1 =
 SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
        cookie_interface.c debug.c externalsocket.c fileupload.c \
        fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \
-       ftpsget.c ftpupload.c getinfo.c getinmemory.c http-post.c \
+       ftpsget.c ftpupload.c getinfo.c getinmemory.c getredirect.c \
+       http-post.c http2-download.c http2-serverpush.c http2-upload.c \
        httpcustomheader.c httpput.c https.c imap-append.c imap-copy.c \
        imap-create.c imap-delete.c imap-examine.c imap-fetch.c \
        imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c \
@@ -718,7 +757,8 @@ SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
 DIST_SOURCES = 10-at-a-time.c anyauthput.c certinfo.c chkspeed.c \
        cookie_interface.c debug.c externalsocket.c fileupload.c \
        fopen.c ftp-wildcard.c ftpget.c ftpgetinfo.c ftpgetresp.c \
-       ftpsget.c ftpupload.c getinfo.c getinmemory.c http-post.c \
+       ftpsget.c ftpupload.c getinfo.c getinmemory.c getredirect.c \
+       http-post.c http2-download.c http2-serverpush.c http2-upload.c \
        httpcustomheader.c httpput.c https.c imap-append.c imap-copy.c \
        imap-create.c imap-delete.c imap-examine.c imap-fetch.c \
        imap-list.c imap-lsub.c imap-multi.c imap-noop.c imap-search.c \
@@ -755,6 +795,8 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+       $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -813,7 +855,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -835,6 +877,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -868,6 +911,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -879,17 +923,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -935,6 +980,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -991,7 +1037,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/examples/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign docs/examples/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -1000,7 +1045,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -1088,10 +1133,26 @@ getinmemory$(EXEEXT): $(getinmemory_OBJECTS) $(getinmemory_DEPENDENCIES) $(EXTRA
        @rm -f getinmemory$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(getinmemory_OBJECTS) $(getinmemory_LDADD) $(LIBS)
 
+getredirect$(EXEEXT): $(getredirect_OBJECTS) $(getredirect_DEPENDENCIES) $(EXTRA_getredirect_DEPENDENCIES) 
+       @rm -f getredirect$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(getredirect_OBJECTS) $(getredirect_LDADD) $(LIBS)
+
 http-post$(EXEEXT): $(http_post_OBJECTS) $(http_post_DEPENDENCIES) $(EXTRA_http_post_DEPENDENCIES) 
        @rm -f http-post$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(http_post_OBJECTS) $(http_post_LDADD) $(LIBS)
 
+http2-download$(EXEEXT): $(http2_download_OBJECTS) $(http2_download_DEPENDENCIES) $(EXTRA_http2_download_DEPENDENCIES) 
+       @rm -f http2-download$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(http2_download_OBJECTS) $(http2_download_LDADD) $(LIBS)
+
+http2-serverpush$(EXEEXT): $(http2_serverpush_OBJECTS) $(http2_serverpush_DEPENDENCIES) $(EXTRA_http2_serverpush_DEPENDENCIES) 
+       @rm -f http2-serverpush$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(http2_serverpush_OBJECTS) $(http2_serverpush_LDADD) $(LIBS)
+
+http2-upload$(EXEEXT): $(http2_upload_OBJECTS) $(http2_upload_DEPENDENCIES) $(EXTRA_http2_upload_DEPENDENCIES) 
+       @rm -f http2-upload$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(http2_upload_OBJECTS) $(http2_upload_LDADD) $(LIBS)
+
 httpcustomheader$(EXEEXT): $(httpcustomheader_OBJECTS) $(httpcustomheader_DEPENDENCIES) $(EXTRA_httpcustomheader_DEPENDENCIES) 
        @rm -f httpcustomheader$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(httpcustomheader_OBJECTS) $(httpcustomheader_LDADD) $(LIBS)
@@ -1323,7 +1384,11 @@ distclean-compile:
 @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)/getredirect.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http-post.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-download.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-serverpush.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http2-upload.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@
@@ -1611,11 +1676,16 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # Makefile.inc provides the check_PROGRAMS and COMPLICATED_EXAMPLES defines
 
 all: $(check_PROGRAMS)
 
+checksrc:
+       @@PERL@ $(top_srcdir)/lib/checksrc.pl -D$(top_srcdir)/docs/examples *.c
+
 # 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:
index 6c8df8e..8ce6f57 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
@@ -31,7 +31,8 @@ check_PROGRAMS = 10-at-a-time anyauthput cookie_interface debug fileupload \
   pop3-dele pop3-top pop3-stat pop3-noop pop3-ssl pop3-tls pop3-multi      \
   imap-list imap-lsub imap-fetch imap-store imap-append imap-examine       \
   imap-search imap-create imap-delete imap-copy imap-noop imap-ssl         \
-  imap-tls imap-multi url2file sftpget ftpsget postinmemory
+  imap-tls imap-multi url2file sftpget ftpsget postinmemory http2-download \
+  http2-upload http2-serverpush getredirect
 
 # These examples require external dependencies that may not be commonly
 # available on POSIX systems, so don't bother attempting to compile them here.
index f607013..e75b6d1 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -21,7 +21,7 @@
 ###########################################################################
 #
 ## Makefile for building curl examples with MingW (GCC-3.2 or later)
-## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3)
+## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4)
 ##
 ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
 ## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn
@@ -38,23 +38,23 @@ ZLIB_PATH = ../../../zlib-1.2.8
 endif
 # Edit the path below to point to the base of your OpenSSL package.
 ifndef OPENSSL_PATH
-OPENSSL_PATH = ../../../openssl-0.9.8zc
+OPENSSL_PATH = ../../../openssl-1.0.2a
 endif
 # Edit the path below to point to the base of your LibSSH2 package.
 ifndef LIBSSH2_PATH
-LIBSSH2_PATH = ../../../libssh2-1.4.3
+LIBSSH2_PATH = ../../../libssh2-1.5.0
 endif
 # Edit the path below to point to the base of your librtmp package.
 ifndef LIBRTMP_PATH
-LIBRTMP_PATH = ../../../librtmp-2.3
+LIBRTMP_PATH = ../../../librtmp-2.4
 endif
 # Edit the path below to point to the base of your libidn package.
 ifndef LIBIDN_PATH
-LIBIDN_PATH = ../../../libidn-1.18
+LIBIDN_PATH = ../../../libidn-1.32
 endif
 # Edit the path below to point to the base of your MS IDN package.
 # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
-# http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815
+# https://www.microsoft.com/en-us/download/details.aspx?id=734
 ifndef WINIDN_PATH
 WINIDN_PATH = ../../../Microsoft IDN Mitigation APIs
 endif
@@ -62,6 +62,10 @@ endif
 ifndef LDAP_SDK
 LDAP_SDK = c:/novell/ndk/cldapsdk/win32
 endif
+# Edit the path below to point to the base of your nghttp2 package.
+ifndef NGHTTP2_PATH
+NGHTTP2_PATH = ../../../nghttp2-1.0.0
+endif
 
 PROOT = ../..
 
@@ -72,14 +76,24 @@ endif
 
 # Edit the var below to set to your architecture or set environment var.
 ifndef ARCH
-ARCH = w32
+ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64)
+ARCH    = w64
+else
+ARCH    = w32
+endif
 endif
 
 CC     = $(CROSSPREFIX)gcc
 CFLAGS = -g -O2 -Wall
 CFLAGS += -fno-strict-aliasing
 ifeq ($(ARCH),w64)
-CFLAGS += -D_AMD64_
+CFLAGS += -m64 -D_AMD64_
+LDFLAGS += -m64
+RCFLAGS += -F pe-x86-64
+else
+CFLAGS += -m32
+LDFLAGS += -m32
+RCFLAGS += -F pe-i386
 endif
 # comment LDFLAGS below to keep debug info
 LDFLAGS        = -s
@@ -158,9 +172,12 @@ ifeq ($(findstring -metalink,$(CFG)),-metalink)
 METALINK = 1
 endif
 ifeq ($(findstring -winssl,$(CFG)),-winssl)
-SCHANNEL = 1
+WINSSL = 1
 SSPI = 1
 endif
+ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2)
+NGHTTP2 = 1
+endif
 
 INCLUDES = -I. -I$(PROOT) -I$(PROOT)/include -I$(PROOT)/lib
 
@@ -184,6 +201,10 @@ ifdef RTMP
   CFLAGS += -DUSE_LIBRTMP
   curl_LDADD += -L"$(LIBRTMP_PATH)/librtmp" -lrtmp -lwinmm
 endif
+ifdef NGHTTP2
+  CFLAGS += -DUSE_NGHTTP2
+  curl_LDADD += -L"$(NGHTTP2_PATH)/lib" -lnghttp2
+endif
 ifdef SSH2
   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
   curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
@@ -204,7 +225,7 @@ ifdef SSL
   ifndef DYN
     OPENSSL_LIBS += -lgdi32 -lcrypt32
   endif
-  CFLAGS += -DUSE_SSLEAY
+  CFLAGS += -DUSE_OPENSSL
   curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
 endif
 ifdef ZLIB
@@ -223,7 +244,7 @@ endif
 endif
 ifdef SSPI
   CFLAGS += -DUSE_WINDOWS_SSPI
-  ifdef SCHANNEL
+  ifdef WINSSL
     CFLAGS += -DUSE_SCHANNEL
   endif
 endif
index 3fd6b3e..2d85e73 100644 (file)
@@ -19,12 +19,12 @@ endif
 
 # Edit the path below to point to the base of your OpenSSL package.
 ifndef OPENSSL_PATH
-OPENSSL_PATH = ../../../openssl-0.9.8zc
+OPENSSL_PATH = ../../../openssl-1.0.2a
 endif
 
 # Edit the path below to point to the base of your LibSSH2 package.
 ifndef LIBSSH2_PATH
-LIBSSH2_PATH = ../../../libssh2-1.4.3
+LIBSSH2_PATH = ../../../libssh2-1.5.0
 endif
 
 # Edit the path below to point to the base of your axTLS package.
@@ -34,12 +34,12 @@ endif
 
 # Edit the path below to point to the base of your libidn package.
 ifndef LIBIDN_PATH
-LIBIDN_PATH = ../../../libidn-1.18
+LIBIDN_PATH = ../../../libidn-1.32
 endif
 
 # Edit the path below to point to the base of your librtmp package.
 ifndef LIBRTMP_PATH
-LIBRTMP_PATH = ../../../librtmp-2.3
+LIBRTMP_PATH = ../../../librtmp-2.4
 endif
 
 # Edit the path below to point to the base of your fbopenssl package.
index 1ca62a1..078cabe 100644 (file)
@@ -32,51 +32,7 @@ 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
-imap.c         - simple IMAP 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
-multi-uv.c     - a multi-interface app using libuv
-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
-pop3s.c        - POP3S transfer
-pop3slist.c    - POP3S LIST
-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
-url2file.c     - download a document and store it in a file
-xmlstream.c    - Stream-parse a document using the streaming Expat parser
-10-at-a-time.c - Download many files simultaneously, 10 at a time.
+Each example source code file is designed to be and work stand-alone and
+rather self-explanatory. The examples may at times lack the level of error
+checks you need in a real world, but that is then only for the sake of
+readability: to make the code smaller and easier to follow.
index b89dca2..b1367de 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * HTTP PUT upload with authentiction using "any" method. libcurl picks the
+ * one the server supports/wants.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <fcntl.h>
 #ifdef WIN32
@@ -73,7 +78,8 @@
 /* ioctl callback function */
 static curlioerr my_ioctl(CURL *handle, curliocmd cmd, void *userp)
 {
-  intptr_t fd = (intptr_t)userp;
+  int *fdp = (int *)userp;
+  int fd = *fdp;
 
   (void)handle; /* not used in here */
 
@@ -95,10 +101,11 @@ static curlioerr my_ioctl(CURL *handle, curliocmd cmd, void *userp)
 /* read callback function, fread() look alike */
 static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream)
 {
-  size_t retcode;
+  ssize_t retcode;
   curl_off_t nread;
 
-  intptr_t fd = (intptr_t)stream;
+  int *fdp = (int *)stream;
+  int fd = *fdp;
 
   retcode = read(fd, ptr, size * nmemb);
 
@@ -114,7 +121,7 @@ int main(int argc, char **argv)
 {
   CURL *curl;
   CURLcode res;
-  intptr_t hd ;
+  int hd;
   struct stat file_info;
 
   char *file;
@@ -127,7 +134,7 @@ int main(int argc, char **argv)
   url = argv[2];
 
   /* get the file size of the local file */
-  hd = open(file, O_RDONLY) ;
+  hd = open(file, O_RDONLY);
   fstat(hd, &file_info);
 
   /* In windows, this will init the winsock stuff */
@@ -140,20 +147,20 @@ int main(int argc, char **argv)
     curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
 
     /* which file to upload */
-    curl_easy_setopt(curl, CURLOPT_READDATA, (void*)hd);
+    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);
+    curl_easy_setopt(curl, CURLOPT_IOCTLDATA, (void*)&hd);
 
     /* enable "uploading" (which means PUT when doing HTTP) */
-    curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L) ;
+    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);
+    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 */
index eb5cd03..d6065e5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, 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.
+ * are also available at https://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
  *
  ***************************************************************************/
 
+/* <DESC>
+ * demonstrate the use of multi socket interface with boost::asio
+ * </DESC>
+ */
 /*
- * file: asiohiper.cpp
- * Example program to demonstrate the use of multi socket interface
- * with boost::asio
- *
  * This program is in c++ and uses boost::asio instead of libevent/libev.
  * Requires boost::asio, boost::bind and boost::system
  *
@@ -48,6 +48,7 @@
 #include <curl/curl.h>
 #include <boost/asio.hpp>
 #include <boost/bind.hpp>
+#include <iostream>
 
 #define MSG_OUT stdout /* Send info to stdout, change to stderr if you want */
 
@@ -378,9 +379,9 @@ static curl_socket_t opensocket(void *clientp, curlsocktype purpose,
 }
 
 /* CURLOPT_CLOSESOCKETFUNCTION */
-static int closesocket(void *clientp, curl_socket_t item)
+static int close_socket(void *clientp, curl_socket_t item)
 {
-  fprintf(MSG_OUT, "\nclosesocket : %d", item);
+  fprintf(MSG_OUT, "\nclose_socket : %d", item);
 
   std::map<curl_socket_t, boost::asio::ip::tcp::socket *>::iterator it = socket_map.find(item);
 
@@ -427,7 +428,7 @@ static void new_conn(char *url, GlobalInfo *g)
   curl_easy_setopt(conn->easy, CURLOPT_OPENSOCKETFUNCTION, opensocket);
 
   /* call this function to close a socket */
-  curl_easy_setopt(conn->easy, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
+  curl_easy_setopt(conn->easy, CURLOPT_CLOSESOCKETFUNCTION, close_socket);
 
   fprintf(MSG_OUT,
           "\nAdding easy %p to multi %p (%s)", conn->easy, g->multi, url);
@@ -441,7 +442,6 @@ static void new_conn(char *url, GlobalInfo *g)
 int main(int argc, char **argv)
 {
   GlobalInfo g;
-  CURLMcode rc;
 
   (void)argc;
   (void)argv;
index 30a5153..a3a4c8d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* Example using a "in core" PEM certificate to retrieve a https page.
- * Written by Theo Borm
+/* <DESC>
+ * CA cert in memory with OpenSSL to get a HTTPS page.
+ * </DESC>
  */
 
-/* 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);
+  fwrite(ptr, size, nmemb, stream);
+  return (nmemb*size);
 }
 
 static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm)
@@ -93,14 +87,14 @@ static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm)
    * structure that SSL can use
    */
   PEM_read_bio_X509(bio, &cert, 0, NULL);
-  if (cert == 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)
+  if(X509_STORE_add_cert(store, cert)==0)
     printf("error adding certificate\n");
 
   /* decrease reference counts */
@@ -108,7 +102,7 @@ static CURLcode sslctx_function(CURL * curl, void * sslctx, void * parm)
   BIO_free(bio);
 
   /* all set to go */
-  return CURLE_OK ;
+  return CURLE_OK;
 }
 
 int main(void)
@@ -118,22 +112,22 @@ int main(void)
 
   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_HEADERDATA, stderr);
-  rv=curl_easy_setopt(ch,CURLOPT_SSLCERTTYPE,"PEM");
-  rv=curl_easy_setopt(ch,CURLOPT_SSL_VERIFYPEER,1L);
+  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_HEADERDATA, 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)
+  if(rv==CURLE_OK)
     printf("*** transfer succeeded ***\n");
   else
     printf("*** transfer failed ***\n");
@@ -142,9 +136,9 @@ int main(void)
    * 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_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
   rv=curl_easy_perform(ch);
-  if (rv==CURLE_OK)
+  if(rv==CURLE_OK)
     printf("*** transfer succeeded ***\n");
   else
     printf("*** transfer failed ***\n");
index ac0109b..de2e310 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Extract lots of TLS certificate info.
+ * </DESC>
+ */
 #include <stdio.h>
 
 #include <curl/curl.h>
index 31949b8..de20567 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Show transfer timing info after download completes.
+ * </DESC>
+ */
 /* 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
@@ -64,63 +68,78 @@ int main(int argc, char *argv[])
   const char *url = URL_1M;
   char *appname = argv[0];
 
-  if (argc > 1) {
+  if(argc > 1) {
     /* parse input parameters */
-    for (argc--, argv++; *argv; argc--, argv++) {
-      if (strncasecmp(*argv, "-", 1) == 0) {
-        if (strncasecmp(*argv, "-H", 2) == 0) {
+    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) {
+        }
+        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, "-A", 2) == 0) {
+        }
+        else if(strncasecmp(*argv, "-A", 2) == 0) {
           prtall = 1;
-        } else if (strncasecmp(*argv, "-X", 2) == 0) {
+        }
+        else if(strncasecmp(*argv, "-X", 2) == 0) {
           prtsep = 1;
-        } else if (strncasecmp(*argv, "-T", 2) == 0) {
+        }
+        else if(strncasecmp(*argv, "-T", 2) == 0) {
           prttime = 1;
-        } else if (strncasecmp(*argv, "-M=", 3) == 0) {
+        }
+        else if(strncasecmp(*argv, "-M=", 3) == 0) {
           long m = strtol((*argv)+3, NULL, 10);
           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);
+          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 {
+        }
+        else {
           fprintf(stderr, "\r%s: invalid or unknown option %s\n",
                   appname, *argv);
           exit(1);
         }
-      } else {
+      }
+      else {
         url = *argv;
       }
     }
   }
 
   /* print separator line */
-  if (prtsep) {
+  if(prtsep) {
     printf("-------------------------------------------------\n");
   }
   /* print localtime */
-  if (prttime) {
+  if(prttime) {
     time_t t = time(NULL);
     printf("Localtime: %s", ctime(&t));
   }
@@ -163,7 +182,7 @@ int main(int argc, char *argv[])
     if((CURLE_OK == res) && (val>0))
       printf("Average download speed: %0.3f kbyte/sec.\n", val / 1024);
 
-    if (prtall) {
+    if(prtall) {
       /* check for name resolution time */
       res = curl_easy_getinfo(curl_handle, CURLINFO_NAMELOOKUP_TIME, &val);
       if((CURLE_OK == res) && (val>0))
@@ -174,8 +193,8 @@ int main(int argc, char *argv[])
       if((CURLE_OK == res) && (val>0))
         printf("Connect time: %0.3f sec.\n", val);
     }
-
-  else {
+  }
+  else {
     fprintf(stderr, "Error while fetching '%s' : %s\n",
             url, curl_easy_strerror(res));
   }
index 2e7c66d..064c7b3 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* This example shows usage of simple cookie interface. */
+/* <DESC>
+ * Import and export cookies with COOKIELIST.
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -39,17 +42,18 @@ print_cookies(CURL *curl)
 
   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));
+  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) {
+  while(nc) {
     printf("[%d]: %s\n", i, nc->data);
     nc = nc->next;
     i++;
   }
-  if (i == 1) {
+  if(i == 1) {
     printf("(none)\n");
   }
   curl_slist_free_all(cookies);
@@ -63,14 +67,14 @@ main(void)
 
   curl_global_init(CURL_GLOBAL_ALL);
   curl = curl_easy_init();
-  if (curl) {
+  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 */
+    curl_easy_setopt(curl, CURLOPT_COOKIEFILE, ""); /* start cookie engine */
     res = curl_easy_perform(curl);
-    if (res != CURLE_OK) {
+    if(res != CURLE_OK) {
       fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
       return 1;
     }
@@ -89,30 +93,41 @@ main(void)
 #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", (unsigned long)time(NULL) + 31337UL, "PREF", "hello google, i like you very much!");
+             ".google.com", "TRUE", "/", "FALSE",
+             (unsigned long)time(NULL) + 31337UL,
+             "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));
+    if(res != CURLE_OK) {
+      fprintf(stderr, "Curl curl_easy_setopt failed: %s\n",
+              curl_easy_strerror(res));
       return 1;
     }
 
-    /* HTTP-header style cookie */
+    /* HTTP-header style cookie. If you use the Set-Cookie format and don't
+    specify a domain then the cookie is sent for any domain and will not be
+    modified, likely not what you intended. Starting in 7.43.0 any-domain
+    cookies will not be exported either. For more information refer to the
+    CURLOPT_COOKIELIST documentation.
+    */
     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));
+    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) {
+    if(res != CURLE_OK) {
       fprintf(stderr, "Curl perform failed: %s\n", curl_easy_strerror(res));
       return 1;
     }
+
+    curl_easy_cleanup(curl);
   }
   else {
     fprintf(stderr, "Curl init failed!\n");
index 8cb9914..c3129c1 100644 (file)
@@ -5,9 +5,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ *  Copyright (c) 2000 David Odin (aka DindinX) for MandrakeSoft
+ */
+/* <DESC>
+ * use the libcurl in a gtk-threaded application
+ * </DESC>
  */
-/* 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>
@@ -47,9 +50,9 @@ void *my_thread(void *ptr)
   gchar *url = ptr;
 
   curl = curl_easy_init();
-  if(curl)
-  {
-    outfile = fopen("test.curl", "w");
+  if(curl) {
+    const char *filename = "test.curl";
+    outfile = fopen(filename, "wb");
 
     curl_easy_setopt(curl, CURLOPT_URL, url);
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
@@ -94,7 +97,7 @@ int main(int argc, char **argv)
   gtk_container_add(GTK_CONTAINER(Frame2), Bar);
   gtk_widget_show_all(Window);
 
-  if (!g_thread_create(&my_thread, argv[1], FALSE, NULL) != 0)
+  if(!g_thread_create(&my_thread, argv[1], FALSE, NULL) != 0)
     g_warning("can't create the thread");
 
 
index 89d5f40..7a18990 100644 (file)
@@ -9,7 +9,10 @@
   certificate presented during ssl session establishment.
 
 */
-
+/* <DESC>
+ * demonstrates use of SSL context callback, requires OpenSSL
+ * </DESC>
+ */
 
 /*
  * Copyright (c) 2003 The OpenEvidence Project.  All rights reserved.
@@ -33,7 +36,7 @@
  *    "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/)"
+ *    for use in the OpenSSL Toolkit (https://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)."
@@ -52,7 +55,7 @@
  *    "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/)"
+ *    for use in the OpenSSL Toolkit (https://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)."
@@ -72,7 +75,7 @@
  * ====================================================================
  *
  * This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)
+ * for use in the OpenSSL Toolkit (https://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).
 static const char *curlx_usage[]={
   "usage: curlx args\n",
   " -p12 arg         - tia  file ",
-  " -envpass arg     - environement variable which content the tia private key password",
+  " -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",
+  " -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
 };
 
@@ -125,22 +133,22 @@ static const char *curlx_usage[]={
 /* 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 ;
+  unsigned char * p12file;
+  const char * pst;
+  PKCS12 * p12;
+  EVP_PKEY * pkey;
+  X509 * usercert;
+  STACK_OF(X509) * ca;
   CURL * curl;
   BIO * errorbio;
-  int accesstype ;
+  int accesstype;
   int verbose;
 
 } sslctxparm;
 
 /* some helper function. */
 
-static char *i2s_ASN1_IA5STRING( ASN1_IA5STRING *ia5)
+static char *ia5string(ASN1_IA5STRING *ia5)
 {
   char *tmp;
   if(!ia5 || !ia5->length)
@@ -152,20 +160,20 @@ static char *i2s_ASN1_IA5STRING( ASN1_IA5STRING *ia5)
 }
 
 /* A conveniance routine to get an access URI. */
-
-static unsigned char *my_get_ext(X509 * cert, const int type, int extensiontype) {
-
+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) ;
+  STACK_OF(ACCESS_DESCRIPTION) * accessinfo;
+  accessinfo =  X509_get_ext_d2i(cert, extensiontype, NULL, NULL);
 
-  if (!sk_ACCESS_DESCRIPTION_num(accessinfo))
+  if(!sk_ACCESS_DESCRIPTION_num(accessinfo))
     return NULL;
-  for (i = 0; i < sk_ACCESS_DESCRIPTION_num(accessinfo); i++) {
+  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);
+    if(OBJ_obj2nid(ad->method) == type) {
+      if(ad->location->type == GEN_URI) {
+        return ia5string(ad->location->d.ia5);
       }
       return NULL;
     }
@@ -184,84 +192,86 @@ 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(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((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);
+    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);
+      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);
+    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);
+      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);
+  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:
+/* The SSL initialisation callback. 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) {
-
+static CURLcode sslctxfun(CURL * curl, void * sslctx, void * parm)
+{
   sslctxparm * p = (sslctxparm *) parm;
-  SSL_CTX * ctx = (SSL_CTX *) sslctx ;
+  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_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_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;
+  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_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(SSL_CTX_get_cert_store(ctx), 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);
+  X509_STORE_add_cert(SSL_CTX_get_cert_store(ctx),
+                      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 ;
+  return CURLE_OK;
   err:
   ERR_print_errors(p->errorbio);
   return CURLE_SSL_CERTPROBLEM;
 
 }
 
-int main(int argc, char **argv) {
-
+int main(int argc, char **argv)
+{
   BIO* in=NULL;
   BIO* out=NULL;
 
   char * outfile = NULL;
-  char * infile = NULL ;
+  char * infile = NULL;
 
   int tabLength=100;
   char *binaryptr;
@@ -270,7 +280,7 @@ int main(int argc, char **argv) {
   char* contenttype;
   const char** pp;
   unsigned char* hostporturl = NULL;
-  BIO * p12bio ;
+  BIO * p12bio;
   char **args = argv + 1;
   unsigned char * serverurl;
   sslctxparm p;
@@ -293,66 +303,91 @@ int main(int argc, char **argv) {
   OpenSSL_add_all_digests();
   ERR_load_crypto_strings();
 
-
-
-  while (*args && *args[0] == '-') {
-    if (!strcmp (*args, "-in")) {
-      if (args[1]) {
+  while(*args && *args[0] == '-') {
+    if(!strcmp (*args, "-in")) {
+      if(args[1]) {
         infile=*(++args);
-      } else badarg=1;
-    } else if (!strcmp (*args, "-out")) {
-      if (args[1]) {
+      }
+      else
+        badarg=1;
+    }
+    else if(!strcmp (*args, "-out")) {
+      if(args[1]) {
         outfile=*(++args);
-      } else badarg=1;
-    } else if (!strcmp (*args, "-p12")) {
-      if (args[1]) {
+      }
+      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]) {
+      }
+      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]) {
+      }
+      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]) {
+      }
+      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]) {
+      }
+      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) {
+      }
+      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;
+    }
+    else
+      badarg=1;
     args++;
   }
 
-  if (mimetype==NULL || mimetypeaccept == NULL) badarg = 1;
+  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");
+  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) {
+  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) {
+  }
+  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;
@@ -360,12 +395,13 @@ int main(int argc, char **argv) {
 
   /* set output  */
 
-  if ((out=BIO_new(BIO_s_file())) == NULL) {
+  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) {
+  }
+  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;
@@ -374,62 +410,66 @@ int main(int argc, char **argv) {
 
   p.errorbio = BIO_new_fp (stderr, BIO_NOCLOSE);
 
-  if (!(p.curl = curl_easy_init())) {
+  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(!(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;
+  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(!(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(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);
+  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);
+  if(hostporturl) {
+    size_t len = strlen(hostporturl) + 9;
+    serverurl = malloc(len);
+    snprintf(serverurl, len, "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))) {
+  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 "
+      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,
+      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,
+        if((serverurl = my_get_ext(sk_X509_value(p.ca, j), p.accesstype,
                                     NID_sinfo_access)))
           break;
       }
     }
   }
 
-  if (!serverurl) {
+  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)
+  if(p.verbose)
     BIO_printf(p.errorbio, "Service URL: <%s>\n", serverurl);
 
   curl_easy_setopt(p.curl, CURLOPT_URL, serverurl);
@@ -437,38 +477,39 @@ int main(int argc, char **argv) {
   /* Now specify the POST binary data */
 
   curl_easy_setopt(p.curl, CURLOPT_POSTFIELDS, binaryptr);
-  curl_easy_setopt(p.curl, CURLOPT_POSTFIELDSIZE,(long)tabLength);
+  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);
+  snprintf(contenttype, 15+strlen(mimetype), "Content-type: %s", mimetype);
+  headers = curl_slist_append(headers, contenttype);
   curl_easy_setopt(p.curl, CURLOPT_HTTPHEADER, headers);
 
-  if (p.verbose)
+  if(p.verbose)
     BIO_printf(p.errorbio, "Service URL: <%s>\n", serverurl);
 
   {
     FILE *outfp;
-    BIO_get_fp(out,&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)  ;
+  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);
+  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 ) {
+    while((lu = BIO_read (in, &binaryptr[i], tabLength-i)) >0 ) {
       i+=lu;
-      if (i== tabLength) {
+      if(i== tabLength) {
         tabLength+=100;
-        binaryptr=realloc(binaryptr,tabLength); /* should be more careful */
+        binaryptr=realloc(binaryptr, tabLength); /* should be more careful */
       }
     }
     tabLength = i;
@@ -476,23 +517,23 @@ int main(int argc, char **argv) {
   /* Now specify the POST binary data */
 
   curl_easy_setopt(p.curl, CURLOPT_POSTFIELDS, binaryptr);
-  curl_easy_setopt(p.curl, CURLOPT_POSTFIELDSIZE,(long)tabLength);
+  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",
+  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",
+    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 "
+        BIO_printf(p.errorbio, "the response doesn\'t have an acceptable "
                    "mime type, it is %s instead of %s\n",
-                   response,mimetypeaccept);
+                   response, mimetypeaccept);
   }
 
   /*** code d'erreur si accept mime ***, egalement code return HTTP != 200 ***/
@@ -508,6 +549,6 @@ int main(int argc, char **argv) {
   BIO_free(out);
   return (EXIT_SUCCESS);
 
-  err: BIO_printf(p.errorbio,"error");
+  err: BIO_printf(p.errorbio, "error");
   exit(1);
 }
index 36dd80d..f5d58bf 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Show how CURLOPT_DEBUGFUNCTION can be used.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -58,14 +62,14 @@ void dump(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 (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
+      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) {
+      if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
         i+=(c+3-width);
         break;
       }
index e03801d..6d7936b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * multi socket interface together with libev
+ * </DESC>
+ */
 /* Example application source code using the multi socket interface to
  * download many files at once.
  *
@@ -115,12 +119,12 @@ 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)
-  {
+  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
+  }
+  else
     timer_cb(g->loop, &g->timer_event, 0);
   return 0;
 }
@@ -128,20 +132,32 @@ static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
 /* Die if we get a bad CURLMcode somewhere */
 static void mcode_or_die(const char *where, CURLMcode code)
 {
-  if ( CURLM_OK != code )
-  {
+  if(CURLM_OK != code) {
     const char *s;
-    switch ( code )
-    {
-    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";
+    switch (code) {
+    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;
-    case     CURLM_BAD_SOCKET:         s="CURLM_BAD_SOCKET";
+    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;
@@ -164,8 +180,8 @@ static void check_multi_info(GlobalInfo *g)
   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) {
+  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);
@@ -193,8 +209,7 @@ static void event_cb(EV_P_ struct ev_io *w, int revents)
   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 )
-  {
+  if(g->still_running <= 0) {
     fprintf(MSG_OUT, "last transfer done, kill timeout\n");
     ev_timer_stop(g->loop, &g->timer_event);
   }
@@ -208,7 +223,8 @@ static void timer_cb(EV_P_ struct ev_timer *w, int revents)
   GlobalInfo *g = (GlobalInfo *)w->data;
   CURLMcode rc;
 
-  rc = curl_multi_socket_action(g->multi, CURL_SOCKET_TIMEOUT, 0, &g->still_running);
+  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);
 }
@@ -217,9 +233,8 @@ static void timer_cb(EV_P_ struct ev_timer *w, int revents)
 static void remsock(SockInfo *f, GlobalInfo *g)
 {
   printf("%s  \n", __PRETTY_FUNCTION__);
-  if ( f )
-  {
-    if ( f->evset )
+  if(f) {
+    if(f->evset)
       ev_io_stop(g->loop, &f->ev);
     free(f);
   }
@@ -237,7 +252,7 @@ static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
   f->sockfd = s;
   f->action = act;
   f->easy = e;
-  if ( f->evset )
+  if(f->evset)
     ev_io_stop(g->loop, &f->ev);
   ev_io_init(&f->ev, event_cb, f->sockfd, kind);
   f->ev.data = g;
@@ -269,18 +284,16 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
 
   fprintf(MSG_OUT,
           "socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
-  if ( what == CURL_POLL_REMOVE )
-  {
+  if(what == CURL_POLL_REMOVE) {
     fprintf(MSG_OUT, "\n");
     remsock(fdp, g);
-  } else
-  {
-    if ( !fdp )
-    {
+  }
+  else {
+    if(!fdp) {
       fprintf(MSG_OUT, "Adding data: %s\n", whatstr[what]);
       addsock(s, e, what, g);
-    } else
-    {
+    }
+    else {
       fprintf(MSG_OUT,
               "Changing action from %s to %s\n",
               whatstr[fdp->action], whatstr[what]);
@@ -326,8 +339,7 @@ static void new_conn(char *url, GlobalInfo *g )
   conn->error[0]='\0';
 
   conn->easy = curl_easy_init();
-  if ( !conn->easy )
-  {
+  if(!conn->easy) {
     fprintf(MSG_OUT, "curl_easy_init() failed, exiting!\n");
     exit(2);
   }
@@ -362,16 +374,16 @@ static void fifo_cb(EV_P_ struct ev_io *w, int revents)
   int n=0;
   GlobalInfo *g = (GlobalInfo *)w->data;
 
-  do
-  {
+  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 );
+    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 */
@@ -382,24 +394,20 @@ static int init_fifo (GlobalInfo *g)
   curl_socket_t sockfd;
 
   fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
-  if ( lstat (fifo, &st) == 0 )
-  {
-    if ( (st.st_mode & S_IFMT) == S_IFREG )
-    {
+  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 )
-  {
+  if(mkfifo (fifo, 0600) == -1) {
     perror("mkfifo");
     exit (1);
   }
   sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
-  if ( sockfd == -1 )
-  {
+  if(sockfd == -1) {
     perror("open");
     exit (1);
   }
@@ -408,7 +416,7 @@ static int init_fifo (GlobalInfo *g)
   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);
+  return (0);
 }
 
 int main(int argc, char **argv)
index 5486d12..8152515 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/*
- * This is an example demonstrating how an application can pass in a custom
+/* <DESC>
+ * An example demonstrating how an application can pass in a custom
  * socket to libcurl to use. This example also handles the connect itself.
+ * </DESC>
  */
 #include <stdio.h>
 #include <string.h>
@@ -53,7 +54,7 @@
 
 static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
 {
-  int written = fwrite(ptr, size, nmemb, (FILE *)stream);
+  size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
   return written;
 }
 
@@ -91,7 +92,7 @@ int main(void)
   WSADATA wsaData;
   int initwsa;
 
-  if((initwsa = WSAStartup(MAKEWORD(2,0), &wsaData)) != 0) {
+  if((initwsa = WSAStartup(MAKEWORD(2, 0), &wsaData)) != 0) {
     printf("WSAStartup failed: %d\n", initwsa);
     return 1;
   }
@@ -106,7 +107,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999");
 
     /* Create the socket "manually" */
-    if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) == CURL_SOCKET_BAD ) {
+    if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == CURL_SOCKET_BAD ) {
       printf("Error creating listening socket.\n");
       return 3;
     }
@@ -115,10 +116,10 @@ int main(void)
     servaddr.sin_family = AF_INET;
     servaddr.sin_port   = htons(PORTNUM);
 
-    if (INADDR_NONE == (servaddr.sin_addr.s_addr = inet_addr(IPADDR)))
+    if(INADDR_NONE == (servaddr.sin_addr.s_addr = inet_addr(IPADDR)))
       return 2;
 
-    if(connect(sockfd,(struct sockaddr *) &servaddr, sizeof(servaddr)) ==
+    if(connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) ==
        -1) {
       close(sockfd);
       printf("client error: connect: %s\n", strerror(errno));
index 665eca0..363fae6 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Upload to a file:// URL
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 #include <sys/stat.h>
index 3d2a817..71be178 100644 (file)
  *
  * This example requires libcurl 7.9.7 or later.
  */
+/* <DESC>
+ * implements an fopen() abstraction allowing reading from URLs
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -76,7 +80,7 @@ struct fcurl_data
 typedef struct fcurl_data URL_FILE;
 
 /* exported functions */
-URL_FILE *url_fopen(const char *url,const char *operation);
+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);
@@ -102,13 +106,13 @@ static size_t write_callback(char *buffer,
 
   if(size > rembuff) {
     /* not enough space in buffer */
-    newbuff=realloc(url->buffer,url->buffer_len + (size - rembuff));
+    newbuff=realloc(url->buffer, url->buffer_len + (size - rembuff));
     if(newbuff==NULL) {
-      fprintf(stderr,"callback buffer grow failed\n");
+      fprintf(stderr, "callback buffer grow failed\n");
       size=rembuff;
     }
     else {
-      /* realloc suceeded increase buffer size*/
+      /* realloc succeeded increase buffer size*/
       url->buffer_len+=size - rembuff;
       url->buffer=newbuff;
     }
@@ -131,7 +135,7 @@ static int fill_buffer(URL_FILE *file, size_t want)
   CURLMcode mc; /* curl_multi_fdset() return code */
 
   /* only attempt to fill buffer if transactions still running and buffer
-   * doesnt exceed required size already
+   * doesn't exceed required size already
    */
   if((!file->still_running) || (file->buffer_pos > want))
     return 0;
@@ -161,8 +165,7 @@ static int fill_buffer(URL_FILE *file, size_t want)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
@@ -205,14 +208,12 @@ static int fill_buffer(URL_FILE *file, size_t want)
 }
 
 /* use to remove want bytes from the front of a files buffer */
-static int use_buffer(URL_FILE *file,int want)
+static int use_buffer(URL_FILE *file, size_t want)
 {
   /* sort out buffer */
   if((file->buffer_pos - want) <=0) {
     /* ditch buffer - write will recreate */
-    if(file->buffer)
-      free(file->buffer);
-
+    free(file->buffer);
     file->buffer=NULL;
     file->buffer_pos=0;
     file->buffer_len=0;
@@ -228,10 +229,10 @@ static int use_buffer(URL_FILE *file,int want)
   return 0;
 }
 
-URL_FILE *url_fopen(const char *url,const char *operation)
+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 */
+     basically use the real fopen() for standard files */
 
   URL_FILE *file;
   (void)operation;
@@ -242,7 +243,7 @@ URL_FILE *url_fopen(const char *url,const char *operation)
 
   memset(file, 0, sizeof(URL_FILE));
 
-  if((file->handle.file=fopen(url,operation)))
+  if((file->handle.file=fopen(url, operation)))
     file->type = CFTYPE_FILE; /* marked as URL */
 
   else {
@@ -302,9 +303,7 @@ int url_fclose(URL_FILE *file)
     break;
   }
 
-  if(file->buffer)
-    free(file->buffer);/* free any allocated buffer space */
-
+  free(file->buffer);/* free any allocated buffer space */
   free(file);
 
   return ret;
@@ -338,13 +337,13 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
 
   switch(file->type) {
   case CFTYPE_FILE:
-    want=fread(ptr,size,nmemb,file->handle.file);
+    want=fread(ptr, size, nmemb, file->handle.file);
     break;
 
   case CFTYPE_CURL:
     want = nmemb * size;
 
-    fill_buffer(file,want);
+    fill_buffer(file, want);
 
     /* check if theres data in the buffer - if not fill_buffer()
      * either errored or EOF */
@@ -358,7 +357,7 @@ size_t url_fread(void *ptr, size_t size, size_t nmemb, URL_FILE *file)
     /* xfer data to caller */
     memcpy(ptr, file->buffer, want);
 
-    use_buffer(file,want);
+    use_buffer(file, want);
 
     want = want / size;     /* number of items */
     break;
@@ -379,11 +378,11 @@ char *url_fgets(char *ptr, size_t size, URL_FILE *file)
 
   switch(file->type) {
   case CFTYPE_FILE:
-    ptr = fgets(ptr,size,file->handle.file);
+    ptr = fgets(ptr, (int)size, file->handle.file);
     break;
 
   case CFTYPE_CURL:
-    fill_buffer(file,want);
+    fill_buffer(file, want);
 
     /* check if theres data in the buffer - if not fill either errored or
      * EOF */
@@ -407,7 +406,7 @@ char *url_fgets(char *ptr, size_t size, URL_FILE *file)
     memcpy(ptr, file->buffer, want);
     ptr[want]=0;/* allways null terminate */
 
-    use_buffer(file,want);
+    use_buffer(file, want);
 
     break;
 
@@ -435,9 +434,7 @@ void url_rewind(URL_FILE *file)
     curl_multi_add_handle(multi_handle, file->handle.curl);
 
     /* ditch buffer - write will recreate - resets stream pos*/
-    if(file->buffer)
-      free(file->buffer);
-
+    free(file->buffer);
     file->buffer=NULL;
     file->buffer_pos=0;
     file->buffer_len=0;
@@ -449,6 +446,10 @@ void url_rewind(URL_FILE *file)
   }
 }
 
+#define FGETSFILE "fgets.test"
+#define FREADFILE "fread.test"
+#define REWINDFILE "rewind.test"
+
 /* 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 */
@@ -457,7 +458,7 @@ int main(int argc, char *argv[])
   URL_FILE *handle;
   FILE *outf;
 
-  int nread;
+  size_t nread;
   char buffer[256];
   const char *url;
 
@@ -467,7 +468,7 @@ int main(int argc, char *argv[])
     url=argv[1];/* use passed url */
 
   /* copy from url line by line with fgets */
-  outf=fopen("fgets.test","w+");
+  outf=fopen(FGETSFILE, "wb+");
   if(!outf) {
     perror("couldn't open fgets output file\n");
     return 1;
@@ -481,8 +482,8 @@ int main(int argc, char *argv[])
   }
 
   while(!url_feof(handle)) {
-    url_fgets(buffer,sizeof(buffer),handle);
-    fwrite(buffer,1,strlen(buffer),outf);
+    url_fgets(buffer, sizeof(buffer), handle);
+    fwrite(buffer, 1, strlen(buffer), outf);
   }
 
   url_fclose(handle);
@@ -491,7 +492,7 @@ int main(int argc, char *argv[])
 
 
   /* Copy from url with fread */
-  outf=fopen("fread.test","w+");
+  outf=fopen(FREADFILE, "wb+");
   if(!outf) {
     perror("couldn't open fread output file\n");
     return 1;
@@ -505,8 +506,8 @@ int main(int argc, char *argv[])
   }
 
   do {
-    nread = url_fread(buffer, 1,sizeof(buffer), handle);
-    fwrite(buffer,1,nread,outf);
+    nread = url_fread(buffer, 1, sizeof(buffer), handle);
+    fwrite(buffer, 1, nread, outf);
   } while(nread);
 
   url_fclose(handle);
@@ -515,7 +516,7 @@ int main(int argc, char *argv[])
 
 
   /* Test rewind */
-  outf=fopen("rewind.test","w+");
+  outf=fopen(REWINDFILE, "wb+");
   if(!outf) {
     perror("couldn't open fread output file\n");
     return 1;
@@ -528,21 +529,19 @@ int main(int argc, char *argv[])
     return 2;
   }
 
-  nread = url_fread(buffer, 1,sizeof(buffer), handle);
-  fwrite(buffer,1,nread,outf);
+  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);
+  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 */
 }
index d175ddf..f249bc1 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * FTP wildcard pattern matching
+ * </DESC>
+ */
 #include <curl/curl.h>
 #include <stdio.h>
 
@@ -115,7 +119,7 @@ static long file_is_coming(struct curl_fileinfo *finfo,
       return CURL_CHUNK_BGN_FUNC_SKIP;
     }
 
-    data->output = fopen(finfo->filename, "w");
+    data->output = fopen(finfo->filename, "wb");
     if(!data->output) {
       return CURL_CHUNK_BGN_FUNC_FAIL;
     }
index bcb42bb..9b7dc02 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 
 #include <curl/curl.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.
+/* <DESC>
+ * Get a single file from an FTP server.
+ * </DESC>
  */
 
 struct FtpFile {
@@ -53,7 +51,7 @@ int main(void)
   CURL *curl;
   CURLcode res;
   struct FtpFile ftpfile={
-    "curl.tar.gz", /* name to store the file as if succesful */
+    "curl.tar.gz", /* name to store the file as if successful */
     NULL
   };
 
@@ -65,7 +63,7 @@ int main(void)
      * 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");
+                     "ftp://ftp.example.com/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 */
index dfdcf78..277e52b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -24,9 +24,9 @@
 
 #include <curl/curl.h>
 
-/*
- * This is an example showing how to check a single file's size and mtime
- * from an FTP server.
+/* <DESC>
+ * Checks a single file's size and mtime from an FTP server.
+ * </DESC>
  */
 
 static size_t throw_away(void *ptr, size_t size, size_t nmemb, void *data)
@@ -65,16 +65,18 @@ int main(void)
     res = curl_easy_perform(curl);
 
     if(CURLE_OK == res) {
-      /* http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */
+      /* https://curl.haxx.se/libcurl/c/curl_easy_getinfo.html */
       res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
       if((CURLE_OK == res) && (filetime >= 0)) {
         time_t file_time = (time_t)filetime;
         printf("filetime %s: %s", filename, ctime(&file_time));
       }
-      res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize);
+      res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
+                              &filesize);
       if((CURLE_OK == res) && (filesize>0.0))
         printf("filesize %s: %0.0f bytes\n", filename, filesize);
-    } else {
+    }
+    else {
       /* we failed */
       fprintf(stderr, "curl told us %d\n", res);
     }
index dcb296a..7dc3440 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 
 #include <curl/curl.h>
 
-/*
- * Similar to ftpget.c but this also stores the received response-lines
+/* <DESC>
+ * Similar to ftpget.c but also stores the received response-lines
  * in a separate file using our own callback!
- *
- * This functionality was introduced in libcurl 7.9.3.
+ * </DESC>
  */
-
 static size_t
 write_response(void *ptr, size_t size, size_t nmemb, void *data)
 {
@@ -37,6 +35,9 @@ write_response(void *ptr, size_t size, size_t nmemb, void *data)
   return fwrite(ptr, size, nmemb, writehere);
 }
 
+#define FTPBODY "ftp-list"
+#define FTPHEADERS "ftp-responses"
+
 int main(void)
 {
   CURL *curl;
@@ -45,10 +46,10 @@ int main(void)
   FILE *respfile;
 
   /* local file name to store the file as */
-  ftpfile = fopen("ftp-list", "wb"); /* b is binary, needed on win32 */
+  ftpfile = fopen(FTPBODY, "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 */
+  respfile = fopen(FTPHEADERS, "wb"); /* b is binary, needed on win32 */
 
   curl = curl_easy_init();
   if(curl) {
index 0cfe320..d53f088 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include <curl/curl.h>
 
-/*
- * This is an example showing how to get a single file from an FTPS 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.
+/* <DESC>
+ * Get a single file from an FTPS server.
+ * </DESC>
  */
 
 struct FtpFile {
@@ -55,7 +53,7 @@ int main(void)
   CURL *curl;
   CURLcode res;
   struct FtpFile ftpfile={
-    "yourfile.bin", /* name to store the file as if succesful */
+    "yourfile.bin", /* name to store the file as if successful */
     NULL
   };
 
index e79f8d8..bba0c4d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #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!
+/* <DESC>
+ * Performs an FTP upload and renames the file just after a successful
+ * transfer.
+ * </DESC>
  */
 
 #define LOCAL_FILE      "/tmp/uploadthis.txt"
@@ -105,7 +104,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 
     /* specify target */
-    curl_easy_setopt(curl,CURLOPT_URL, REMOTE_URL);
+    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);
index 55b8986..6415634 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* 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
+/* <DESC>
+ * Upload to FTP, resuming failed transfers.
+ * </DESC>
  */
 
 #include <stdlib.h>
@@ -40,7 +36,8 @@
 /* The MinGW headers are missing a few Win32 function definitions,
    you shouldn't need this if you use VC++ */
 #if defined(__MINGW32__) && !defined(__MINGW64__)
-int __cdecl _snscanf(const char * input, size_t length, const char * format, ...);
+int __cdecl _snscanf(const char * input, size_t length,
+                     const char * format, ...);
 #endif
 
 
@@ -53,7 +50,7 @@ size_t getcontentlengthfunc(void *ptr, size_t size, size_t nmemb, void *stream)
   /* _snscanf() is Win32 specific */
   r = _snscanf(ptr, size * nmemb, "Content-Length: %ld\n", &len);
 
-  if (r) /* Microsoft: we don't read the specs */
+  if(r) /* Microsoft: we don't read the specs */
     *((long *) stream) = len;
 
   return size * nmemb;
@@ -71,7 +68,7 @@ size_t readfunc(void *ptr, size_t size, size_t nmemb, void *stream)
   FILE *f = stream;
   size_t n;
 
-  if (ferror(f))
+  if(ferror(f))
     return CURL_READFUNC_ABORT;
 
   n = fread(ptr, size, nmemb, f) * size;
@@ -89,7 +86,7 @@ int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
   int c;
 
   f = fopen(localpath, "rb");
-  if (f == NULL) {
+  if(!f) {
     perror(NULL);
     return 0;
   }
@@ -98,7 +95,7 @@ int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
 
   curl_easy_setopt(curlhandle, CURLOPT_URL, remotepath);
 
-  if (timeout)
+  if(timeout)
     curl_easy_setopt(curlhandle, CURLOPT_FTP_RESPONSE_TIMEOUT, timeout);
 
   curl_easy_setopt(curlhandle, CURLOPT_HEADERFUNCTION, getcontentlengthfunc);
@@ -109,14 +106,15 @@ int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
   curl_easy_setopt(curlhandle, CURLOPT_READFUNCTION, readfunc);
   curl_easy_setopt(curlhandle, CURLOPT_READDATA, f);
 
-  curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-"); /* disable passive mode */
+  /* disable passive mode */
+  curl_easy_setopt(curlhandle, CURLOPT_FTPPORT, "-");
   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++) {
+  for(c = 0; (r != CURLE_OK) && (c < tries); c++) {
     /* are we resuming? */
-    if (c) { /* yes */
+    if(c) { /* yes */
       /* determine the length of the file already written */
 
       /*
@@ -131,7 +129,7 @@ int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
       curl_easy_setopt(curlhandle, CURLOPT_HEADER, 1L);
 
       r = curl_easy_perform(curlhandle);
-      if (r != CURLE_OK)
+      if(r != CURLE_OK)
         continue;
 
       curl_easy_setopt(curlhandle, CURLOPT_NOBODY, 0L);
@@ -150,7 +148,7 @@ int upload(CURL *curlhandle, const char * remotepath, const char * localpath,
 
   fclose(f);
 
-  if (r == CURLE_OK)
+  if(r == CURLE_OK)
     return 1;
   else {
     fprintf(stderr, "%s\n", curl_easy_strerror(r));
@@ -165,7 +163,8 @@ int main(int c, char **argv)
   curl_global_init(CURL_GLOBAL_ALL);
   curlhandle = curl_easy_init();
 
-  upload(curlhandle, "ftp://user:pass@example.com/path/file", "C:\\file", 0, 3);
+  upload(curlhandle, "ftp://user:pass@example.com/path/file", "C:\\file",
+         0, 3);
 
   curl_easy_cleanup(curlhandle);
   curl_global_cleanup();
index acbe1e1..5585564 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Use getinfo to get content-type after completed transfer.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -27,18 +31,14 @@ 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)
@@ -46,7 +46,6 @@ int main(void)
     }
 
     /* always cleanup */
-    /* http://curl.haxx.se/libcurl/c/curl_easy_cleanup.html */
     curl_easy_cleanup(curl);
   }
   return 0;
index 1608ec5..fb79478 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* 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.
+/* <DESC>
+ * Shows how the write callback function can be used to download data into a
+ * chunk of memory instead of storing it in a file.
+ * </DESC>
  */
 
 #include <stdio.h>
@@ -34,7 +36,6 @@ struct MemoryStruct {
   size_t size;
 };
 
-
 static size_t
 WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
 {
@@ -55,7 +56,6 @@ WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
   return realsize;
 }
 
-
 int main(void)
 {
   CURL *curl_handle;
@@ -106,8 +106,7 @@ int main(void)
   /* cleanup curl stuff */
   curl_easy_cleanup(curl_handle);
 
-  if(chunk.memory)
-    free(chunk.memory);
+  free(chunk.memory);
 
   /* we're done with libcurl, so clean it up */
   curl_global_cleanup();
diff --git a/docs/examples/getredirect.c b/docs/examples/getredirect.c
new file mode 100644 (file)
index 0000000..347b1e9
--- /dev/null
@@ -0,0 +1,70 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2016, 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 https://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.
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Show how to extract Location: header and URL to redirect to.
+ * </DESC>
+ */
+#include <stdio.h>
+#include <curl/curl.h>
+
+int main(void)
+{
+  CURL *curl;
+  CURLcode res;
+  char *location;
+  long response_code;
+
+  curl = curl_easy_init();
+  if(curl) {
+    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+    /* example.com is redirected, figure out the redirection! */
+
+    /* Perform the request, res will get the return code */
+    res = curl_easy_perform(curl);
+    /* Check for errors */
+    if(res != CURLE_OK)
+      fprintf(stderr, "curl_easy_perform() failed: %s\n",
+              curl_easy_strerror(res));
+    else {
+      res = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+      if((res == CURLE_OK) &&
+         ((response_code / 100) != 3)) {
+        /* a redirect implies a 3xx response code */
+        fprintf(stderr, "Not a redirect.\n");
+      }
+      else {
+        res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &location);
+
+        if((res == CURLE_OK) && location) {
+          /* This is the new absolute URL that you could redirect to, even if
+           * the Location: response header may have been a relative URL. */
+          printf("Redirected to: %s\n", location);
+        }
+      }
+    }
+
+    /* always cleanup */
+    curl_easy_cleanup(curl);
+  }
+  return 0;
+}
index 7571ffa..f78a943 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * multi socket API usage together with with glib2
+ * </DESC>
+ */
 /* 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().
+ 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.
+ 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"
+ 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.
+ 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
+ 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
+ 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.
+ 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.
+ 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>
@@ -60,13 +63,10 @@ callback.
 #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;
@@ -74,8 +74,6 @@ typedef struct _GlobalInfo {
   int still_running;
 } GlobalInfo;
 
-
-
 /* Information associated with a specific easy handle */
 typedef struct _ConnInfo {
   CURL *easy;
@@ -84,7 +82,6 @@ typedef struct _ConnInfo {
   char error[CURL_ERROR_SIZE];
 } ConnInfo;
 
-
 /* Information associated with a specific socket */
 typedef struct _SockInfo {
   curl_socket_t sockfd;
@@ -96,30 +93,25 @@ typedef struct _SockInfo {
   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 ) {
+  if(CURLM_OK != code) {
     const char *s;
     switch (code) {
-      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";
+    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)
 {
@@ -131,8 +123,8 @@ static void check_multi_info(GlobalInfo *g)
   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) {
+  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);
@@ -146,8 +138,6 @@ static void check_multi_info(GlobalInfo *g)
   }
 }
 
-
-
 /* Called by glib when our timeout expires */
 static gboolean timer_cb(gpointer data)
 {
@@ -155,14 +145,12 @@ static gboolean timer_cb(gpointer data)
   CURLMcode rc;
 
   rc = curl_multi_socket_action(g->multi,
-                                  CURL_SOCKET_TIMEOUT, 0, &g->still_running);
+                                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)
 {
@@ -172,15 +160,12 @@ static int update_timeout_cb(CURLM *multi, long timeout_ms, void *userp)
   timeout.tv_usec = (timeout_ms%1000)*1000;
 
   MSG_OUT("*** update_timeout_cb %ld => %ld:%ld ***\n",
-              timeout_ms, timeout.tv_sec, timeout.tv_usec);
+          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)
 {
@@ -198,41 +183,43 @@ static gboolean event_cb(GIOChannel *ch, GIOCondition condition, gpointer data)
   check_multi_info(g);
   if(g->still_running) {
     return TRUE;
-  } else {
+  }
+  else {
     MSG_OUT("last transfer done, kill timeout\n");
-    if (g->timer_event) { g_source_remove(g->timer_event); }
+    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); }
+  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);
+    (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);
-
+  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)
 {
@@ -244,8 +231,6 @@ static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *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)
 {
@@ -254,14 +239,15 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *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) {
+  if(what == CURL_POLL_REMOVE) {
     MSG_OUT("\n");
     remsock(fdp);
-  } else {
-    if (!fdp) {
+  }
+  else {
+    if(!fdp) {
       MSG_OUT("Adding data: %s%s\n",
-             what&CURL_POLL_IN?"READ":"",
-             what&CURL_POLL_OUT?"WRITE":"" );
+              what&CURL_POLL_IN?"READ":"",
+              what&CURL_POLL_OUT?"WRITE":"" );
       addsock(s, e, what, g);
     }
     else {
@@ -273,8 +259,6 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
   return 0;
 }
 
-
-
 /* CURLOPT_WRITEFUNCTION */
 static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
 {
@@ -285,18 +269,15 @@ static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
   return realsize;
 }
 
-
-
 /* CURLOPT_PROGRESSFUNCTION */
-static int prog_cb (void *p, double dltotal, double dlnow, double ult, double uln)
+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 )
 {
@@ -304,11 +285,9 @@ static void new_conn(char *url, GlobalInfo *g )
   CURLMcode rc;
 
   conn = g_malloc0(sizeof(ConnInfo));
-
   conn->error[0]='\0';
-
   conn->easy = curl_easy_init();
-  if (!conn->easy) {
+  if(!conn->easy) {
     MSG_OUT("curl_easy_init() failed, exiting!\n");
     exit(2);
   }
@@ -336,93 +315,90 @@ static void new_conn(char *url, GlobalInfo *g )
      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
+#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);
+    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 {
+    }
+    else {
       buf = g_malloc(BUF_SIZE+1);
-      while (TRUE) {
+      while(TRUE) {
         buf[BUF_SIZE]='\0';
-        g_io_channel_read_chars(ch,buf,BUF_SIZE,&len,&err);
-        if (len) {
+        g_io_channel_read_chars(ch, buf, BUF_SIZE, &len, &err);
+        if(len) {
           buf[len]='\0';
-          if (all) {
+          if(all) {
             tmp=all;
             all=g_strdup_printf("%s%s", tmp, buf);
             g_free(tmp);
-          } else {
+          }
+          else {
             all = g_strdup(buf);
           }
-        } else {
-           break;
+        }
+        else {
+          break;
         }
       }
-      if (all) {
-        new_conn(all,(GlobalInfo*)data);
+      if(all) {
+        new_conn(all, (GlobalInfo*)data);
         g_free(all);
       }
       g_free(buf);
     }
-    if ( err ) {
+    if(err) {
       g_error("fifo_cb: %s", err->message);
       g_free(err);
       break;
     }
-  } while ( (len) && (rv == G_IO_STATUS_NORMAL) );
+  } 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);
+  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);
+  unlink (fifo);
+  if(mkfifo (fifo, 0600) == -1) {
+    perror("mkfifo");
+    exit (1);
+  }
 
- if (socket == -1) {
-  perror("open");
-  exit (1);
- }
- MSG_OUT("Now, pipe some URL's into > %s\n", fifo);
+  socket = open (fifo, O_RDWR | O_NONBLOCK, 0);
 
- return socket;
+  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;
@@ -434,8 +410,8 @@ int main(int argc, char **argv)
 
   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_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);
index 84035aa..9b2cfb5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * multi socket API usage with libevent 2
+ * </DESC>
+ */
 /* Example application source code using the multi socket interface to
    download many files at once.
 
@@ -122,7 +126,7 @@ static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
 /* Die if we get a bad CURLMcode somewhere */
 static void mcode_or_die(const char *where, CURLMcode code)
 {
-  if ( CURLM_OK != code ) {
+  if(CURLM_OK != code) {
     const char *s;
     switch (code) {
       case     CURLM_BAD_HANDLE:         s="CURLM_BAD_HANDLE";         break;
@@ -156,8 +160,8 @@ static void check_multi_info(GlobalInfo *g)
   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) {
+  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);
@@ -187,9 +191,9 @@ static void event_cb(int fd, short kind, void *userp)
   mcode_or_die("event_cb: curl_multi_socket_action", rc);
 
   check_multi_info(g);
-  if ( g->still_running <= 0 ) {
+  if(g->still_running <= 0 ) {
     fprintf(MSG_OUT, "last transfer done, kill timeout\n");
-    if (evtimer_pending(g->timer_event, NULL)) {
+    if(evtimer_pending(g->timer_event, NULL)) {
       evtimer_del(g->timer_event);
     }
   }
@@ -216,8 +220,8 @@ static void timer_cb(int fd, short kind, void *userp)
 /* Clean up the SockInfo structure */
 static void remsock(SockInfo *f)
 {
-  if (f) {
-    if (f->evset)
+  if(f) {
+    if(f->evset)
       event_free(f->ev);
     free(f);
   }
@@ -234,7 +238,7 @@ static void setsock(SockInfo*f, curl_socket_t s, CURL*e, int act, GlobalInfo*g)
   f->sockfd = s;
   f->action = act;
   f->easy = e;
-  if (f->evset)
+  if(f->evset)
     event_free(f->ev);
   f->ev = event_new(g->evbase, f->sockfd, kind, event_cb, g);
   f->evset = 1;
@@ -262,12 +266,12 @@ static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
 
   fprintf(MSG_OUT,
           "socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
-  if (what == CURL_POLL_REMOVE) {
+  if(what == CURL_POLL_REMOVE) {
     fprintf(MSG_OUT, "\n");
     remsock(fdp);
   }
   else {
-    if (!fdp) {
+    if(!fdp) {
       fprintf(MSG_OUT, "Adding data: %s\n", whatstr[what]);
       addsock(s, e, what, g);
     }
@@ -318,7 +322,7 @@ static void new_conn(char *url, GlobalInfo *g )
   conn->error[0]='\0';
 
   conn->easy = curl_easy_init();
-  if (!conn->easy) {
+  if(!conn->easy) {
     fprintf(MSG_OUT, "curl_easy_init() failed, exiting!\n");
     exit(2);
   }
@@ -326,7 +330,7 @@ static void new_conn(char *url, GlobalInfo *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_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);
@@ -356,10 +360,12 @@ static void fifo_cb(int fd, short event, void *arg)
     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);
+    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 */
@@ -370,20 +376,20 @@ static int init_fifo (GlobalInfo *g)
   curl_socket_t sockfd;
 
   fprintf(MSG_OUT, "Creating named pipe \"%s\"\n", fifo);
-  if (lstat (fifo, &st) == 0) {
-    if ((st.st_mode & S_IFMT) == S_IFREG) {
+  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) {
+  if(mkfifo (fifo, 0600) == -1) {
     perror("mkfifo");
     exit (1);
   }
   sockfd = open(fifo, O_RDWR | O_NONBLOCK, 0);
-  if (sockfd == -1) {
+  if(sockfd == -1) {
     perror("open");
     exit (1);
   }
index c11325d..16f50c0 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2016, 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.
+ * are also available at https://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
  *
  ***************************************************************************/
 
+/* <DESC>
+ * Uses the "Streaming HTML parser" to extract the href pieces in a streaming
+ * manner from a downloaded HTML.
+ * </DESC>
+ */
 /*
- * This example uses the "Streaming HTML parser" to extract the href pieces in
- * a streaming manner from a downloaded HTML. Kindly donated by Michał
- * Kowalczyk.
- *
- * The parser is found at
- * http://code.google.com/p/htmlstreamparser/
+ * The HTML parser is found at http://code.google.com/p/htmlstreamparser/
  */
 
 #include <stdio.h>
@@ -38,11 +38,11 @@ static size_t write_callback(void *buffer, size_t size, size_t nmemb,
                              void *hsp)
 {
   size_t realsize = size * nmemb, p;
-  for (p = 0; p < realsize; p++) {
+  for(p = 0; p < realsize; p++) {
     html_parser_char_parse(hsp, ((char *)buffer)[p]);
-    if (html_parser_cmp_tag(hsp, "a", 1))
-      if (html_parser_cmp_attr(hsp, "href", 4))
-        if (html_parser_is_in(hsp, HTML_VALUE_ENDED)) {
+    if(html_parser_cmp_tag(hsp, "a", 1))
+      if(html_parser_cmp_attr(hsp, "href", 4))
+        if(html_parser_is_in(hsp, HTML_VALUE_ENDED)) {
           html_parser_val(hsp)[html_parser_val_length(hsp)] = '\0';
           printf("%s\n", html_parser_val(hsp));
         }
@@ -56,7 +56,7 @@ int main(int argc, char *argv[])
   CURL *curl;
   HTMLSTREAMPARSER *hsp;
 
-  if (argc != 2) {
+  if(argc != 2) {
     printf("Usage: %s URL\n", argv[0]);
     return EXIT_FAILURE;
   }
index a36e331..01b1e68 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* Download a document and use libtidy to parse the HTML.
- * Written by Jeff Pohlmeyer
- *
+/* <DESC>
+ * Download a document and use libtidy to parse the HTML.
+ * </DESC>
+ */
+/*
  * LibTidy => http://tidy.sourceforge.net
- *
- * gcc -Wall -I/usr/local/include tidycurl.c -lcurl -ltidy -o tidycurl
- *
  */
 
 #include <stdio.h>
@@ -39,23 +38,21 @@ uint write_cb(char *in, uint size, uint nmemb, TidyBuffer *out)
   uint r;
   r = size * nmemb;
   tidyBufAppend( out, in, r );
-  return(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) )
-  {
+  for(child = tidyGetChild(tnod); child; child = tidyGetNext(child) ) {
     ctmbstr name = tidyNodeGetName( child );
-    if ( name )
-    {
+    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) ) {
+      for(attr=tidyAttrFirst(child); attr; attr=tidyAttrNext(attr) ) {
         printf(tidyAttrName(attr));
         tidyAttrValue(attr)?printf("=\"%s\" ",
                                    tidyAttrValue(attr)):printf(" ");
@@ -83,7 +80,7 @@ int main(int argc, char **argv )
   TidyBuffer docbuf = {0};
   TidyBuffer tidy_errbuf = {0};
   int err;
-  if ( argc == 2) {
+  if(argc == 2) {
     curl = curl_easy_init();
     curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
     curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errbuf);
@@ -99,13 +96,13 @@ int main(int argc, char **argv )
 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, &docbuf);
     err=curl_easy_perform(curl);
-    if ( !err ) {
+    if(!err) {
       err = tidyParseBuffer(tdoc, &docbuf); /* parse the input */
-      if ( err >= 0 ) {
+      if(err >= 0) {
         err = tidyCleanAndRepair(tdoc); /* fix any problems */
-        if ( err >= 0 ) {
+        if(err >= 0) {
           err = tidyRunDiagnostics(tdoc); /* load tidy error buffer */
-          if ( err >= 0 ) {
+          if(err >= 0) {
             dumpNode( tdoc, tidyGetRoot(tdoc), 0 ); /* walk the tree */
             fprintf(stderr, "%s\n", tidy_errbuf.bp); /* show errors */
           }
@@ -120,11 +117,11 @@ int main(int argc, char **argv )
     tidyBufFree(&docbuf);
     tidyBufFree(&tidy_errbuf);
     tidyRelease(tdoc);
-    return(err);
+    return err;
 
   }
   else
     printf( "usage: %s <url>\n", argv[0] );
 
-  return(0);
+  return 0;
 }
index ab89bb6..5e6b4a0 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-// Get a web page, parse it with libxml.
-//
+/* <DESC>
+ * Get a web page, extract the title with libxml.
+ * </DESC>
+ */
 // Written by Lars Nilsson
 //
 // GNU C++ compile command line suggestion (edit paths accordingly):
@@ -40,7 +42,7 @@
 //
 
 #ifdef _MSC_VER
-#define COMPARE(a, b) (!stricmp((a), (b)))
+#define COMPARE(a, b) (!_stricmp((a), (b)))
 #else
 #define COMPARE(a, b) (!strcasecmp((a), (b)))
 #endif
index f1975b1..0175452 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * simple HTTP POST using the easy interface
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
diff --git a/docs/examples/http2-download.c b/docs/examples/http2-download.c
new file mode 100644 (file)
index 0000000..9e87a06
--- /dev/null
@@ -0,0 +1,292 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2016, 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 https://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.
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Multiplexed HTTP/2 downloads over a single connection
+ * </DESC>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+#ifndef CURLPIPE_MULTIPLEX
+/* This little trick will just make sure that we don't enable pipelining for
+   libcurls old enough to not have this symbol. It is _not_ defined to zero in
+   a recent libcurl header. */
+#define CURLPIPE_MULTIPLEX 0
+#endif
+
+#define NUM_HANDLES 1000
+
+void *curl_hnd[NUM_HANDLES];
+int num_transfers;
+
+/* a handle to number lookup, highly ineffective when we do many
+   transfers... */
+static int hnd2num(CURL *hnd)
+{
+  int i;
+  for(i=0; i< num_transfers; i++) {
+    if(curl_hnd[i] == hnd)
+      return i;
+  }
+  return 0; /* weird, but just a fail-safe */
+}
+
+static
+void dump(const char *text, int num, 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(stderr, "%d %s, %ld bytes (0x%lx)\n",
+          num, text, (long)size, (long)size);
+
+  for(i=0; i<size; i+= width) {
+
+    fprintf(stderr, "%4.4lx: ", (long)i);
+
+    if(!nohex) {
+      /* hex not disabled, show it */
+      for(c = 0; c < width; c++)
+        if(i+c < size)
+          fprintf(stderr, "%02x ", ptr[i+c]);
+        else
+          fputs("   ", stderr);
+    }
+
+    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(stderr, "%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', stderr); /* newline */
+  }
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+             char *data, size_t size,
+             void *userp)
+{
+  const char *text;
+  int num = hnd2num(handle);
+  (void)handle; /* prevent compiler warning */
+  (void)userp;
+  switch (type) {
+  case CURLINFO_TEXT:
+    fprintf(stderr, "== %d Info: %s", num, 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, num, (unsigned char *)data, size, 1);
+  return 0;
+}
+
+static void setup(CURL *hnd, int num)
+{
+  FILE *out;
+  char filename[128];
+
+  snprintf(filename, 128, "dl-%d", num);
+
+  out = fopen(filename, "wb");
+
+  /* write to this file */
+  curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
+
+  /* set the same URL */
+  curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html");
+
+  /* send it verbose for max debuggaility */
+  curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+  curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
+
+  /* HTTP/2 please */
+  curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+
+  /* we use a self-signed test server, skip verification during debugging */
+  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
+  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
+
+#if (CURLPIPE_MULTIPLEX > 0)
+  /* wait for pipe connection to confirm */
+  curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
+#endif
+
+  curl_hnd[num] = hnd;
+}
+
+/*
+ * Simply download two files over HTTP/2, using the same physical connection!
+ */
+int main(int argc, char **argv)
+{
+  CURL *easy[NUM_HANDLES];
+  CURLM *multi_handle;
+  int i;
+  int still_running; /* keep number of running handles */
+
+  if(argc > 1)
+    /* if given a number, do that many transfers */
+    num_transfers = atoi(argv[1]);
+
+  if(!num_transfers || (num_transfers > NUM_HANDLES))
+    num_transfers = 3; /* a suitable low default */
+
+  /* init a multi stack */
+  multi_handle = curl_multi_init();
+
+  for(i=0; i<num_transfers; i++) {
+    easy[i] = curl_easy_init();
+    /* set options */
+    setup(easy[i], i);
+
+    /* add the individual transfer */
+    curl_multi_add_handle(multi_handle, easy[i]);
+  }
+
+  curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+
+  /* we start some action by calling perform right away */
+  curl_multi_perform(multi_handle, &still_running);
+
+  do {
+    struct timeval timeout;
+    int rc; /* select() return code */
+    CURLMcode mc; /* curl_multi_fdset() 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 */
+    mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+    if(mc != CURLM_OK) {
+      fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
+      break;
+    }
+
+    /* On success the value of maxfd is guaranteed to be >= -1. We call
+       select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
+       no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
+       to sleep 100ms, which is the minimum suggested value in the
+       curl_multi_fdset() doc. */
+
+    if(maxfd == -1) {
+#ifdef _WIN32
+      Sleep(100);
+      rc = 0;
+#else
+      /* Portable sleep for platforms other than Windows. */
+      struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
+      rc = select(0, NULL, NULL, NULL, &wait);
+#endif
+    }
+    else {
+      /* Note that on some platforms 'timeout' may be modified by select().
+         If you need access to the original value save a copy beforehand. */
+      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;
+    }
+  } while(still_running);
+
+  curl_multi_cleanup(multi_handle);
+
+  for(i=0; i<num_transfers; i++)
+    curl_easy_cleanup(easy[i]);
+
+  return 0;
+}
diff --git a/docs/examples/http2-serverpush.c b/docs/examples/http2-serverpush.c
new file mode 100644 (file)
index 0000000..af557e5
--- /dev/null
@@ -0,0 +1,320 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2016, 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 https://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.
+ *
+ ***************************************************************************/
+/* <DESC>
+ * HTTP/2 server push
+ * </DESC>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+#ifndef CURLPIPE_MULTIPLEX
+#error "too old libcurl, can't do HTTP/2 server push!"
+#endif
+
+static
+void dump(const char *text, 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(stderr, "%s, %ld bytes (0x%lx)\n",
+          text, (long)size, (long)size);
+
+  for(i=0; i<size; i+= width) {
+
+    fprintf(stderr, "%4.4lx: ", (long)i);
+
+    if(!nohex) {
+      /* hex not disabled, show it */
+      for(c = 0; c < width; c++)
+        if(i+c < size)
+          fprintf(stderr, "%02x ", ptr[i+c]);
+        else
+          fputs("   ", stderr);
+    }
+
+    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(stderr, "%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', stderr); /* newline */
+  }
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+             char *data, size_t size,
+             void *userp)
+{
+  const char *text;
+  (void)handle; /* prevent compiler warning */
+  (void)userp;
+  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, (unsigned char *)data, size, 1);
+  return 0;
+}
+
+#define OUTPUTFILE "dl"
+
+static void setup(CURL *hnd)
+{
+  FILE *out = fopen(OUTPUTFILE, "wb");
+
+  /* write to this file */
+  curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
+
+  /* set the same URL */
+  curl_easy_setopt(hnd, CURLOPT_URL, "https://localhost:8443/index.html");
+
+  /* send it verbose for max debuggaility */
+  curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+  curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
+
+  /* HTTP/2 please */
+  curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+
+  /* we use a self-signed test server, skip verification during debugging */
+  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
+  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
+
+#if (CURLPIPE_MULTIPLEX > 0)
+  /* wait for pipe connection to confirm */
+  curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
+#endif
+
+}
+
+/* called when there's an incoming push */
+static int server_push_callback(CURL *parent,
+                                CURL *easy,
+                                size_t num_headers,
+                                struct curl_pushheaders *headers,
+                                void *userp)
+{
+  char *headp;
+  size_t i;
+  int *transfers = (int *)userp;
+  char filename[128];
+  FILE *out;
+  static unsigned int count = 0;
+
+  (void)parent; /* we have no use for this */
+
+  snprintf(filename, 128, "push%u", count++);
+
+  /* here's a new stream, save it in a new file for each new push */
+  out = fopen(filename, "wb");
+
+  /* write to this file */
+  curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
+
+  fprintf(stderr, "**** push callback approves stream %u, got %d headers!\n",
+          count, (int)num_headers);
+
+  for(i=0; i<num_headers; i++) {
+    headp = curl_pushheader_bynum(headers, i);
+    fprintf(stderr, "**** header %u: %s\n", (int)i, headp);
+  }
+
+  headp = curl_pushheader_byname(headers, ":path");
+  if(headp) {
+    fprintf(stderr, "**** The PATH is %s\n", headp /* skip :path + colon */ );
+  }
+
+  (*transfers)++; /* one more */
+  return CURL_PUSH_OK;
+}
+
+
+/*
+ * Download a file over HTTP/2, take care of server push.
+ */
+int main(void)
+{
+  CURL *easy;
+  CURLM *multi_handle;
+  int still_running; /* keep number of running handles */
+  int transfers=1; /* we start with one */
+  struct CURLMsg *m;
+
+  /* init a multi stack */
+  multi_handle = curl_multi_init();
+
+  easy = curl_easy_init();
+
+  /* set options */
+  setup(easy);
+
+  /* add the easy transfer */
+  curl_multi_add_handle(multi_handle, easy);
+
+  curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+  curl_multi_setopt(multi_handle, CURLMOPT_PUSHFUNCTION, server_push_callback);
+  curl_multi_setopt(multi_handle, CURLMOPT_PUSHDATA, &transfers);
+
+  /* we start some action by calling perform right away */
+  curl_multi_perform(multi_handle, &still_running);
+
+  do {
+    struct timeval timeout;
+    int rc; /* select() return code */
+    CURLMcode mc; /* curl_multi_fdset() 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 */
+    mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+    if(mc != CURLM_OK) {
+      fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
+      break;
+    }
+
+    /* On success the value of maxfd is guaranteed to be >= -1. We call
+       select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
+       no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
+       to sleep 100ms, which is the minimum suggested value in the
+       curl_multi_fdset() doc. */
+
+    if(maxfd == -1) {
+#ifdef _WIN32
+      Sleep(100);
+      rc = 0;
+#else
+      /* Portable sleep for platforms other than Windows. */
+      struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
+      rc = select(0, NULL, NULL, NULL, &wait);
+#endif
+    }
+    else {
+      /* Note that on some platforms 'timeout' may be modified by select().
+         If you need access to the original value save a copy beforehand. */
+      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;
+    }
+
+    /*
+     * A little caution when doing server push is that libcurl itself has
+     * created and added one or more easy handles but we need to clean them up
+     * when we are done.
+     */
+
+    do {
+      int msgq = 0;;
+      m = curl_multi_info_read(multi_handle, &msgq);
+      if(m && (m->msg == CURLMSG_DONE)) {
+        CURL *e = m->easy_handle;
+        transfers--;
+        curl_multi_remove_handle(multi_handle, e);
+        curl_easy_cleanup(e);
+      }
+    } while(m);
+
+  } while(transfers); /* as long as we have transfers going */
+
+  curl_multi_cleanup(multi_handle);
+
+
+  return 0;
+}
diff --git a/docs/examples/http2-upload.c b/docs/examples/http2-upload.c
new file mode 100644 (file)
index 0000000..b635371
--- /dev/null
@@ -0,0 +1,356 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2016, 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 https://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.
+ *
+ ***************************************************************************/
+/* <DESC>
+ * Multiplexed HTTP/2 uploads over a single connection
+ * </DESC>
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+/* somewhat unix-specific */
+#include <sys/time.h>
+#include <unistd.h>
+
+/* curl stuff */
+#include <curl/curl.h>
+
+#ifndef CURLPIPE_MULTIPLEX
+/* This little trick will just make sure that we don't enable pipelining for
+   libcurls old enough to not have this symbol. It is _not_ defined to zero in
+   a recent libcurl header. */
+#define CURLPIPE_MULTIPLEX 0
+#endif
+
+#define NUM_HANDLES 1000
+
+void *curl_hnd[NUM_HANDLES];
+int num_transfers;
+
+/* a handle to number lookup, highly ineffective when we do many
+   transfers... */
+static int hnd2num(CURL *hnd)
+{
+  int i;
+  for(i=0; i< num_transfers; i++) {
+    if(curl_hnd[i] == hnd)
+      return i;
+  }
+  return 0; /* weird, but just a fail-safe */
+}
+
+static
+void dump(const char *text, int num, 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(stderr, "%d %s, %ld bytes (0x%lx)\n",
+          num, text, (long)size, (long)size);
+
+  for(i=0; i<size; i+= width) {
+
+    fprintf(stderr, "%4.4lx: ", (long)i);
+
+    if(!nohex) {
+      /* hex not disabled, show it */
+      for(c = 0; c < width; c++)
+        if(i+c < size)
+          fprintf(stderr, "%02x ", ptr[i+c]);
+        else
+          fputs("   ", stderr);
+    }
+
+    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(stderr, "%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', stderr); /* newline */
+  }
+}
+
+static
+int my_trace(CURL *handle, curl_infotype type,
+             char *data, size_t size,
+             void *userp)
+{
+  char timebuf[20];
+  const char *text;
+  int num = hnd2num(handle);
+  static time_t epoch_offset;
+  static int    known_offset;
+  struct timeval tv;
+  time_t secs;
+  struct tm *now;
+
+  (void)handle; /* prevent compiler warning */
+  (void)userp;
+
+  gettimeofday(&tv, NULL);
+  if(!known_offset) {
+    epoch_offset = time(NULL) - tv.tv_sec;
+    known_offset = 1;
+  }
+  secs = epoch_offset + tv.tv_sec;
+  now = localtime(&secs);  /* not thread safe but we don't care */
+  snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld",
+           now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
+
+  switch (type) {
+  case CURLINFO_TEXT:
+    fprintf(stderr, "%s [%d] Info: %s", timebuf, num, 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, num, (unsigned char *)data, size, 1);
+  return 0;
+}
+
+struct input {
+  FILE *in;
+  size_t bytes_read; /* count up */
+  CURL *hnd;
+};
+
+static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
+{
+  struct input *i = userp;
+  size_t retcode = fread(ptr, size, nmemb, i->in);
+  i->bytes_read += retcode;
+  return retcode;
+}
+
+struct input indata[NUM_HANDLES];
+
+static void setup(CURL *hnd, int num, const char *upload)
+{
+  FILE *out;
+  char url[256];
+  char filename[128];
+  struct stat file_info;
+  curl_off_t uploadsize;
+
+  snprintf(filename, 128, "dl-%d", num);
+  out = fopen(filename, "wb");
+
+  snprintf(url, 256, "https://localhost:8443/upload-%d", num);
+
+  /* get the file size of the local file */
+  stat(upload, &file_info);
+  uploadsize = file_info.st_size;
+
+  indata[num].in = fopen(upload, "rb");
+  indata[num].hnd = hnd;
+
+  /* write to this file */
+  curl_easy_setopt(hnd, CURLOPT_WRITEDATA, out);
+
+  /* we want to use our own read function */
+  curl_easy_setopt(hnd, CURLOPT_READFUNCTION, read_callback);
+  /* read from this file */
+  curl_easy_setopt(hnd, CURLOPT_READDATA, &indata[num]);
+  /* provide the size of the upload */
+  curl_easy_setopt(hnd, CURLOPT_INFILESIZE_LARGE, uploadsize);
+
+  /* send in the URL to store the upload as */
+  curl_easy_setopt(hnd, CURLOPT_URL, url);
+
+  /* upload please */
+  curl_easy_setopt(hnd, CURLOPT_UPLOAD, 1L);
+
+  /* send it verbose for max debuggaility */
+  curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L);
+  curl_easy_setopt(hnd, CURLOPT_DEBUGFUNCTION, my_trace);
+
+  /* HTTP/2 please */
+  curl_easy_setopt(hnd, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
+
+  /* we use a self-signed test server, skip verification during debugging */
+  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, 0L);
+  curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYHOST, 0L);
+
+#if (CURLPIPE_MULTIPLEX > 0)
+  /* wait for pipe connection to confirm */
+  curl_easy_setopt(hnd, CURLOPT_PIPEWAIT, 1L);
+#endif
+
+  curl_hnd[num] = hnd;
+}
+
+/*
+ * Upload all files over HTTP/2, using the same physical connection!
+ */
+int main(int argc, char **argv)
+{
+  CURL *easy[NUM_HANDLES];
+  CURLM *multi_handle;
+  int i;
+  int still_running; /* keep number of running handles */
+  const char *filename = "index.html";
+
+  if(argc > 1)
+    /* if given a number, do that many transfers */
+    num_transfers = atoi(argv[1]);
+
+  if(argc > 2)
+    /* if given a file name, upload this! */
+    filename = argv[2];
+
+  if(!num_transfers || (num_transfers > NUM_HANDLES))
+    num_transfers = 3; /* a suitable low default */
+
+  /* init a multi stack */
+  multi_handle = curl_multi_init();
+
+  for(i=0; i<num_transfers; i++) {
+    easy[i] = curl_easy_init();
+    /* set options */
+    setup(easy[i], i, filename);
+
+    /* add the individual transfer */
+    curl_multi_add_handle(multi_handle, easy[i]);
+  }
+
+  curl_multi_setopt(multi_handle, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
+
+  /* We do HTTP/2 so let's stick to one connection per host */
+  curl_multi_setopt(multi_handle, CURLMOPT_MAX_HOST_CONNECTIONS, 1L);
+
+  /* we start some action by calling perform right away */
+  curl_multi_perform(multi_handle, &still_running);
+
+  do {
+    struct timeval timeout;
+    int rc; /* select() return code */
+    CURLMcode mc; /* curl_multi_fdset() 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 */
+    mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+    if(mc != CURLM_OK) {
+      fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
+      break;
+    }
+
+    /* On success the value of maxfd is guaranteed to be >= -1. We call
+       select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
+       no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
+       to sleep 100ms, which is the minimum suggested value in the
+       curl_multi_fdset() doc. */
+
+    if(maxfd == -1) {
+#ifdef _WIN32
+      Sleep(100);
+      rc = 0;
+#else
+      /* Portable sleep for platforms other than Windows. */
+      struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
+      rc = select(0, NULL, NULL, NULL, &wait);
+#endif
+    }
+    else {
+      /* Note that on some platforms 'timeout' may be modified by select().
+         If you need access to the original value save a copy beforehand. */
+      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;
+    }
+  } while(still_running);
+
+  curl_multi_cleanup(multi_handle);
+
+  for(i=0; i<num_transfers; i++)
+    curl_easy_cleanup(easy[i]);
+
+  return 0;
+}
index 8542ead..d22b7bc 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * HTTP request with custom modified, removed and added headers
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
index 2e9dc21..4f8aece 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * HTTP PUT with easy interface and read callback
+ * </DESC>
+ */
 #include <stdio.h>
 #include <fcntl.h>
 #include <sys/stat.h>
@@ -56,7 +60,7 @@ int main(int argc, char **argv)
 {
   CURL *curl;
   CURLcode res;
-  FILE * hd_src ;
+  FILE * hd_src;
   struct stat file_info;
 
   char *file;
index bd9a33b..cca83fe 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Simple HTTPS GET
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
index fa531a8..3f83289 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to send e-mails
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
@@ -38,7 +44,8 @@ static const char *payload_text[] = {
   "To: " TO "\r\n",
   "From: " FROM "(Example User)\r\n",
   "Cc: " CC "(Another example User)\r\n",
-  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
+  "Message-ID: "
+  "<dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
   "Subject: IMAP example message\r\n",
   "\r\n", /* empty line to divide headers from body, see RFC5322 */
   "The body of the message starts here.\r\n",
index fe2d91c..4c3b640 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to copy an e-mail from one folder to another
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 65ddede..8f72cb8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to create a new folder
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 5113be9..bd9d1a4 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to delete a folder
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index a7b41c5..4287f8a 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to obtain information about a folder
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 831d0dc..192d2e9 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to retreieve e-mails
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -40,7 +46,8 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
     /* This will fetch message 1 from the user's inbox */
-    curl_easy_setopt(curl, CURLOPT_URL, "imap://imap.example.com/INBOX/;UID=1");
+    curl_easy_setopt(curl, CURLOPT_URL,
+                     "imap://imap.example.com/INBOX/;UID=1");
 
     /* Perform the fetch */
     res = curl_easy_perform(curl);
index 4223052..291e1e6 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example to list the folders within a mailbox
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 8960b62..d130c3d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example to list the subscribed folders
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index c7dc130..8cd4858 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example using the multi interface
+ * </DESC>
+ */
+
 #include <stdio.h>
+#include <string.h>
 #include <curl/curl.h>
 
 /* This is a simple example showing how to fetch mail using libcurl's IMAP
@@ -113,8 +120,7 @@ int main(void)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
index 71a5572..566890e 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to perform a noop
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 0c1d267..f1261e1 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to search for new e-mails
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index e42ff39..69839ad 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example using SSL
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -42,7 +48,8 @@ int main(void)
 
     /* This will fetch message 1 from the user's inbox. Note the use of
     * imaps:// rather than imap:// to request a SSL based connection. */
-    curl_easy_setopt(curl, CURLOPT_URL, "imaps://imap.example.com/INBOX/;UID=1");
+    curl_easy_setopt(curl, CURLOPT_URL,
+                     "imaps://imap.example.com/INBOX/;UID=1");
 
     /* 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
@@ -60,7 +67,7 @@ int main(void)
      * 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. */
-#ifdef SKIP_HOSTNAME_VERFICATION
+#ifdef SKIP_HOSTNAME_VERIFICATION
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
 #endif
 
index 8f5e7d5..8479457 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example showing how to modify the properties of an e-mail
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index c439864..7daa0bf 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * IMAP example using TLS
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -41,7 +47,8 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
     /* This will fetch message 1 from the user's inbox */
-    curl_easy_setopt(curl, CURLOPT_URL, "imap://imap.example.com/INBOX/;UID=1");
+    curl_easy_setopt(curl, CURLOPT_URL,
+                     "imap://imap.example.com/INBOX/;UID=1");
 
     /* In this example, we'll start with a plain text connection, and upgrade
      * to Transport Layer Security (TLS) using the STARTTLS command. Be careful
@@ -55,12 +62,13 @@ int main(void)
      * CURLOPT_SSL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST options to 0 (false).
      *   curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
      *   curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+     *
      * That is, in general, a bad idea. It is still better than sending your
-     * authentication details in plain text though.
-     * Instead, you should get the issuer certificate (or the host certificate
-     * if the certificate is self-signed) and add it to the set of certificates
-     * that are known to libcurl using CURLOPT_CAINFO and/or CURLOPT_CAPATH. See
-     * docs/SSLCERTS for more information. */
+     * authentication details in plain text though.  Instead, you should get
+     * the issuer certificate (or the host certificate if the certificate is
+     * self-signed) and add it to the set of certificates that are known to
+     * libcurl using CURLOPT_CAINFO and/or CURLOPT_CAPATH. See docs/SSLCERTS
+     * for more information. */
     curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/certificate.pem");
 
     /* Since the traffic will be encrypted, it is very useful to turn on debug
index c18ef8a..af76113 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
 # KIND, either express or implied.
 #
 ###########################################################################
-#
-#  Adapted for djgpp / Watt-32 / DOS by
-#  Gisle Vanem <gvanem@broadpark.no>
-#
 
 TOPDIR = ../..
 
index b825897..f844793 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* This is an example application source code using the multi interface. */
+/* <DESC>
+ * A basic application source code using the multi interface doing two
+ * transfers in parallel.
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -51,8 +55,8 @@ int main(void)
   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();
+  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");
@@ -64,8 +68,8 @@ int main(void)
   multi_handle = curl_multi_init();
 
   /* add the individual transfers */
-  for (i=0; i<HANDLECOUNT; i++)
-      curl_multi_add_handle(multi_handle, handles[i]);
+  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);
@@ -102,8 +106,7 @@ int main(void)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
@@ -142,12 +145,12 @@ int main(void)
   } while(still_running);
 
   /* See how the transfers went */
-  while ((msg = curl_multi_info_read(multi_handle, &msgs_left))) {
-    if (msg->msg == CURLMSG_DONE) {
+  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++) {
+      for(idx=0; idx<HANDLECOUNT; idx++) {
         found = (msg->easy_handle == handles[idx]);
         if(found)
           break;
@@ -167,8 +170,8 @@ int main(void)
   curl_multi_cleanup(multi_handle);
 
   /* Free the CURL handles */
-  for (i=0; i<HANDLECOUNT; i++)
-      curl_easy_cleanup(handles[i]);
+  for(i=0; i<HANDLECOUNT; i++)
+    curl_easy_cleanup(handles[i]);
 
   return 0;
 }
index 5fb86be..d07cc3b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* This is an example showing the multi interface and the debug callback. */
+/* <DESC>
+ * multi interface and debug callback
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -66,14 +69,14 @@ void dump(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 (nohex && (i+c+1 < size) && ptr[i+c]==0x0D && ptr[i+c+1]==0x0A) {
+      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) {
+      if(nohex && (i+c+2 < size) && ptr[i+c+1]==0x0D && ptr[i+c+2]==0x0A) {
         i+=(c+3-width);
         break;
       }
@@ -176,8 +179,7 @@ int main(void)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
index 0d8d0de..4e50c76 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * multi interface code doing two parallel HTTP transfers
+ * </DESC>
+ */
 #include <stdio.h>
 #include <string.h>
 
@@ -91,8 +95,7 @@ int main(void)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
index f511d66..5d9abc1 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* This is an example application source code using the multi interface
- * to do a multipart formpost without "blocking". */
+/* <DESC>
+ * using the multi interface to do a multipart formpost without blocking
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <sys/time.h>
@@ -64,7 +67,7 @@ int main(void)
   curl = curl_easy_init();
   multi_handle = curl_multi_init();
 
-  /* initalize custom header list (stating that Expect: 100-continue is not
+  /* initialize custom header list (stating that Expect: 100-continue is not
      wanted */
   headerlist = curl_slist_append(headerlist, buf);
   if(curl && multi_handle) {
@@ -112,8 +115,7 @@ int main(void)
       /* get file descriptors from the transfers */
       mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-      if(mc != CURLM_OK)
-      {
+      if(mc != CURLM_OK) {
         fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
         break;
       }
index 47e23f5..70b6d24 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* This is a very simple example using the multi interface. */
+/* <DESC>
+ * using the multi interface to do a single download
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -74,14 +77,13 @@ int main(void)
     /* wait for activity, timeout or "nothing" */
     mc = curl_multi_wait(multi_handle, NULL, 0, 1000, &numfds);
 
-    if(mc != CURLM_OK)
-    {
-      fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
+    if(mc != CURLM_OK) {
+      fprintf(stderr, "curl_multi_wait() failed, code %d.\n", mc);
       break;
     }
 
     /* 'numfds' being zero means either a timeout or no file descriptors to
-       wait for. Try timeout on first occurance, then assume no file
+       wait for. Try timeout on first occurrence, then assume no file
        descriptors and no file descriptors to wait for means wait for 100
        milliseconds. */
 
index 0c0f8a2..51526c8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  *
  ***************************************************************************/
 
+/* <DESC>
+ * multi_socket API using libuv
+ * </DESC>
+ */
 /* Example application code using the multi socket interface to download
    multiple files at once, but instead of using curl_multi_perform and
    curl_multi_wait, which uses select(), we use libuv.
@@ -80,9 +84,9 @@ void add_download(const char *url, int num)
   FILE *file;
   CURL *handle;
 
-  sprintf(filename, "%d.download", num);
+  snprintf(filename, 50, "%d.download", num);
 
-  file = fopen(filename, "w");
+  file = fopen(filename, "wb");
   if(!file) {
     fprintf(stderr, "Error opening %s\n", filename);
     return;
index 831a074..475e8fc 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* A multi-threaded example that uses pthreads extensively to fetch
- * X remote files at once */
+/* <DESC>
+ * A multi-threaded example that uses pthreads to fetch several files at once
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <pthread.h>
   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
+  https://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
 
 */
 const char * const urls[NUMT]= {
-  "http://curl.haxx.se/",
+  "https://curl.haxx.se/",
   "ftp://cool.haxx.se/",
   "http://www.contactor.se/",
   "www.haxx.se"
index ad54f08..100ae46 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* 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.
- *
+/* <DESC>
+ * 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.
+ * </DESC>
+ */
+/*
  * This is not a complete stand-alone example.
  *
  * Author: Jeremy Brown
  */
 
-
 #include <stdio.h>
 #include <pthread.h>
 #include <openssl/err.h>
 #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); */
- }
+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)
+  if(mode & CRYPTO_LOCK)
     MUTEX_LOCK(mutex_buf[n]);
   else
     MUTEX_UNLOCK(mutex_buf[n]);
@@ -69,9 +70,9 @@ int thread_setup(void)
   int i;
 
   mutex_buf = malloc(CRYPTO_num_locks(  ) * sizeof(MUTEX_TYPE));
-  if (!mutex_buf)
+  if(!mutex_buf)
     return 0;
-  for (i = 0;  i < CRYPTO_num_locks(  );  i++)
+  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);
@@ -82,11 +83,11 @@ int thread_cleanup(void)
 {
   int i;
 
-  if (!mutex_buf)
+  if(!mutex_buf)
     return 0;
   CRYPTO_set_id_callback(NULL);
   CRYPTO_set_locking_callback(NULL);
-  for (i = 0;  i < CRYPTO_num_locks(  );  i++)
+  for(i = 0;  i < CRYPTO_num_locks(  );  i++)
     MUTEX_CLEANUP(mutex_buf[i]);
   free(mutex_buf);
   mutex_buf = NULL;
index 0917dfd..a1e614b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * re-using handles to do HTTP persistent connections
+ * </DESC>
+ */
 #include <stdio.h>
 #include <unistd.h>
 #include <curl/curl.h>
index fab598f..1449783 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example showing how to delete e-mails
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index aebcea6..b530a04 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example to list the contents of a mailbox
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 4353086..f932918 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example using the multi interface
+ * </DESC>
+ */
+
 #include <stdio.h>
+#include <string.h>
 #include <curl/curl.h>
 
 /* This is a simple example showing how to retrieve mail using libcurl's POP3
@@ -69,7 +76,7 @@ int main(void)
   curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
   curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
-  /* This will retreive message 1 from the user's mailbox */
+  /* This will retrieve message 1 from the user's mailbox */
   curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
 
   /* Tell the multi stack about our easy handle */
@@ -113,8 +120,7 @@ int main(void)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
index 4efe671..bc162d0 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example showing how to perform a noop
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index e5a50f2..b36ddb5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example showing how to retrieve e-mails
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -39,7 +45,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
     curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
-    /* This will retreive message 1 from the user's mailbox */
+    /* This will retrieve message 1 from the user's mailbox */
     curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
 
     /* Perform the retr */
index 45e0054..f0d4e26 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example using SSL
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -40,7 +46,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
     curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
-    /* This will retreive message 1 from the user's mailbox. Note the use of
+    /* This will retrieve message 1 from the user's mailbox. Note the use of
      * pop3s:// rather than pop3:// to request a SSL based connection. */
     curl_easy_setopt(curl, CURLOPT_URL, "pop3s://pop.example.com/1");
 
@@ -60,7 +66,7 @@ int main(void)
      * 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. */
-#ifdef SKIP_HOSTNAME_VERFICATION
+#ifdef SKIP_HOSTNAME_VERIFICATION
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
 #endif
 
index 7b318fc..46a0a45 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example showing how to obtain message statistics
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 812d89b..1a6c447 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example using TLS
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
@@ -40,7 +46,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_USERNAME, "user");
     curl_easy_setopt(curl, CURLOPT_PASSWORD, "secret");
 
-    /* This will retreive message 1 from the user's mailbox */
+    /* This will retrieve message 1 from the user's mailbox */
     curl_easy_setopt(curl, CURLOPT_URL, "pop3://pop.example.com/1");
 
     /* In this example, we'll start with a plain text connection, and upgrade
@@ -55,12 +61,13 @@ int main(void)
      * CURLOPT_SSL_VERIFYPEER and CURLOPT_SSL_VERIFYHOST options to 0 (false).
      *   curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
      *   curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
+     *
      * That is, in general, a bad idea. It is still better than sending your
-     * authentication details in plain text though.
-     * Instead, you should get the issuer certificate (or the host certificate
-     * if the certificate is self-signed) and add it to the set of certificates
-     * that are known to libcurl using CURLOPT_CAINFO and/or CURLOPT_CAPATH. See
-     * docs/SSLCERTS for more information. */
+     * authentication details in plain text though.  Instead, you should get
+     * the issuer certificate (or the host certificate if the certificate is
+     * self-signed) and add it to the set of certificates that are known to
+     * libcurl using CURLOPT_CAINFO and/or CURLOPT_CAPATH. See docs/SSLCERTS
+     * for more information. */
     curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/certificate.pem");
 
     /* Since the traffic will be encrypted, it is very useful to turn on debug
index 21cee88..f452b41 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example showing how to retreive only the headers of an e-mail
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index debb179..f127120 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * POP3 example to list the contents of a mailbox by unique ID
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <curl/curl.h>
 
index 3e1cfb0..f4cd50c 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* An example source code that issues a HTTP POST and we provide the actual
+/* <DESC>
+ * An example source code that issues a HTTP POST and we provide the actual
  * data through a read callback.
+ * </DESC>
  */
 #include <stdio.h>
 #include <string.h>
index cd2bd13..9dd4cb6 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Make a HTTP POST with data from memory and receive response in memory.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -101,8 +105,7 @@ int main(void)
     /* always cleanup */
     curl_easy_cleanup(curl);
 
-    if(chunk.memory)
-      free(chunk.memory);
+    free(chunk.memory);
 
     /* we're done with libcurl, so clean it up */
     curl_global_cleanup();
index 67dcc13..67e685f 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * HTTP Multipart formpost with file upload and two additional parts.
+ * </DESC>
+ */
 /* 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.
  *
@@ -73,13 +77,13 @@ int main(int argc, char *argv[])
                CURLFORM_END);
 
   curl = curl_easy_init();
-  /* initalize custom header list (stating that Expect: 100-continue is not
+  /* initialize 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")) )
+    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);
index b2635bc..ab34ef9 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Use the progress callbacks, old and/or new one depending on available
+ * libcurl version.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
index 7b3e565..15e343f 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Use CURLOPT_RESOLVE to feed custom IP addresses for given host name + port
+ * number combinations.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
index fed343d..5c00c14 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+/* <DESC>
+ * A basic RTSP transfer
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -58,12 +62,12 @@ static int _getch(void)
 
 /* error handling macros */
 #define my_curl_easy_setopt(A, B, C) \
-  if ((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) \
+  if((res = curl_easy_setopt((A), (B), (C))) != CURLE_OK) \
     fprintf(stderr, "curl_easy_setopt(%s, %s, %s) failed: %d\n", \
             #A, #B, #C, res);
 
 #define my_curl_easy_perform(A) \
-  if ((res = curl_easy_perform((A))) != CURLE_OK) \
+  if((res = curl_easy_perform((A))) != CURLE_OK) \
     fprintf(stderr, "curl_easy_perform(%s) failed: %d\n", #A, res);
 
 
@@ -83,9 +87,9 @@ static void rtsp_describe(CURL *curl, const char *uri,
                           const char *sdp_filename)
 {
   CURLcode res = CURLE_OK;
-  FILE *sdp_fp = fopen(sdp_filename, "wt");
+  FILE *sdp_fp = fopen(sdp_filename, "wb");
   printf("\nRTSP: DESCRIBE %s\n", uri);
-  if (sdp_fp == NULL) {
+  if(sdp_fp == NULL) {
     fprintf(stderr, "Could not open '%s' for writing\n", sdp_filename);
     sdp_fp = stdout;
   }
@@ -96,7 +100,7 @@ static void rtsp_describe(CURL *curl, const char *uri,
   my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_DESCRIBE);
   my_curl_easy_perform(curl);
   my_curl_easy_setopt(curl, CURLOPT_WRITEDATA, stdout);
-  if (sdp_fp != stdout) {
+  if(sdp_fp != stdout) {
     fclose(sdp_fp);
   }
 }
@@ -137,14 +141,15 @@ static void rtsp_teardown(CURL *curl, const char *uri)
 
 
 /* convert url into an sdp filename */
-static void get_sdp_filename(const char *url, char *sdp_filename)
+static void get_sdp_filename(const char *url, char *sdp_filename,
+                             size_t namelen)
 {
   const char *s = strrchr(url, '/');
   strcpy(sdp_filename, "video.sdp");
-  if (s != NULL) {
+  if(s != NULL) {
     s++;
-    if (s[0] != '\0') {
-      sprintf(sdp_filename, "%s.sdp", s);
+    if(s[0] != '\0') {
+      snprintf(sdp_filename, namelen, "%s.sdp", s);
     }
   }
 }
@@ -156,10 +161,10 @@ static void get_media_control_attribute(const char *sdp_filename,
 {
   int max_len = 256;
   char *s = malloc(max_len);
-  FILE *sdp_fp = fopen(sdp_filename, "rt");
+  FILE *sdp_fp = fopen(sdp_filename, "rb");
   control[0] = '\0';
-  if (sdp_fp != NULL) {
-    while (fgets(s, max_len - 2, sdp_fp) != NULL) {
+  if(sdp_fp != NULL) {
+    while(fgets(s, max_len - 2, sdp_fp) != NULL) {
       sscanf(s, " a = control: %s", control);
     }
     fclose(sdp_fp);
@@ -174,7 +179,8 @@ int main(int argc, char * const argv[])
 #if 1
   const char *transport = "RTP/AVP;unicast;client_port=1234-1235";  /* UDP */
 #else
-  const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235";  /* TCP */
+  /* TCP */
+  const char *transport = "RTP/AVP/TCP;unicast;client_port=1234-1235";
 #endif
   const char *range = "0.000-";
   int rc = EXIT_SUCCESS;
@@ -185,50 +191,53 @@ int main(int argc, char * const argv[])
   printf("    Requires cURL V7.20 or greater\n\n");
 
   /* check command line */
-  if ((argc != 2) && (argc != 3)) {
+  if((argc != 2) && (argc != 3)) {
     base_name = strrchr(argv[0], '/');
-    if (base_name == NULL) {
+    if(base_name == NULL) {
       base_name = strrchr(argv[0], '\\');
     }
-    if (base_name == NULL) {
+    if(base_name == NULL) {
       base_name = argv[0];
-    } else {
+    }
+    else {
       base_name++;
     }
     printf("Usage:   %s url [transport]\n", base_name);
     printf("         url of video server\n");
-    printf("         transport (optional) specifier for media stream protocol\n");
+    printf("         transport (optional) specifier for media stream"
+           " protocol\n");
     printf("         default transport: %s\n", transport);
     printf("Example: %s rtsp://192.168.0.2/media/video1\n\n", base_name);
     rc = EXIT_FAILURE;
-  } else {
+  }
+  else {
     const char *url = argv[1];
     char *uri = malloc(strlen(url) + 32);
     char *sdp_filename = malloc(strlen(url) + 32);
     char *control = malloc(strlen(url) + 32);
     CURLcode res;
-    get_sdp_filename(url, sdp_filename);
-    if (argc == 3) {
+    get_sdp_filename(url, sdp_filename, strlen(url) + 32);
+    if(argc == 3) {
       transport = argv[2];
     }
 
     /* initialize curl */
     res = curl_global_init(CURL_GLOBAL_ALL);
-    if (res == CURLE_OK) {
+    if(res == CURLE_OK) {
       curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
       CURL *curl;
       fprintf(stderr, "    cURL V%s loaded\n", data->version);
 
       /* initialize this curl session */
       curl = curl_easy_init();
-      if (curl != NULL) {
+      if(curl != NULL) {
         my_curl_easy_setopt(curl, CURLOPT_VERBOSE, 0L);
         my_curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
         my_curl_easy_setopt(curl, CURLOPT_HEADERDATA, stdout);
         my_curl_easy_setopt(curl, CURLOPT_URL, url);
 
         /* request server options */
-        sprintf(uri, "%s", url);
+        snprintf(uri, strlen(url) + 32, "%s", url);
         rtsp_options(curl, uri);
 
         /* request session description and write response to sdp file */
@@ -238,11 +247,11 @@ int main(int argc, char * const argv[])
         get_media_control_attribute(sdp_filename, control);
 
         /* setup media stream */
-        sprintf(uri, "%s/%s", url, control);
+        snprintf(uri, strlen(url) + 32, "%s/%s", url, control);
         rtsp_setup(curl, uri, transport);
 
         /* start playing media stream */
-        sprintf(uri, "%s/", url);
+        snprintf(uri, strlen(url) + 32, "%s/", url);
         rtsp_play(curl, uri, range);
         printf("Playing video, press any key to stop ...");
         _getch();
@@ -254,11 +263,13 @@ int main(int argc, char * const argv[])
         /* cleanup */
         curl_easy_cleanup(curl);
         curl = NULL;
-      } else {
+      }
+      else {
         fprintf(stderr, "curl_easy_init() failed\n");
       }
       curl_global_cleanup();
-    } else {
+    }
+    else {
       fprintf(stderr, "curl_global_init(%s) failed: %d\n",
               "CURL_GLOBAL_ALL", res);
     }
index 3db3160..eece6aa 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * 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.
+ * </DESC>
+ */
 /*
-   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.
@@ -46,10 +49,11 @@ CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t 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);
+    if(rc == PLATFORM_CONV_OK) {
+      return CURLE_OK;
+    }
+    else {
+      return CURLE_CONV_FAILED;
     }
 }
 
@@ -60,10 +64,11 @@ CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t 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);
+    if(rc == PLATFORM_CONV_OK) {
+      return CURLE_OK;
+    }
+    else {
+      return CURLE_CONV_FAILED;
     }
 }
 
@@ -74,10 +79,11 @@ CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t 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);
+    if(rc == PLATFORM_CONV_OK) {
+      return CURLE_OK;
+    }
+    else {
+      return CURLE_CONV_FAILED;
     }
 }
 
index 88fddf5..41e283c 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* An example of curl_easy_send() and curl_easy_recv() usage. */
+/* <DESC>
+ * An example of curl_easy_send() and curl_easy_recv() usage.
+ * </DESC>
+ */
 
 #include <stdio.h>
 #include <string.h>
@@ -41,12 +44,10 @@ static int wait_on_socket(curl_socket_t sockfd, int for_recv, long timeout_ms)
 
   FD_SET(sockfd, &errfd); /* always check for error */
 
-  if(for_recv)
-  {
+  if(for_recv) {
     FD_SET(sockfd, &infd);
   }
-  else
-  {
+  else {
     FD_SET(sockfd, &outfd);
   }
 
@@ -66,6 +67,14 @@ int main(void)
   size_t iolen;
   curl_off_t nread;
 
+  /* A general note of caution here: if you're using curl_easy_recv() or
+     curl_easy_send() to implement HTTP or _any_ other protocol libcurl
+     supports "natively", you're doing it wrong and you should stop.
+
+     This example uses HTTP only to show how to use this API, it does not
+     suggest that writing an application doing this is sensible.
+  */
+
   curl = curl_easy_init();
   if(curl) {
     curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
@@ -73,8 +82,7 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
     res = curl_easy_perform(curl);
 
-    if(CURLE_OK != res)
-    {
+    if(CURLE_OK != res) {
       printf("Error: %s\n", strerror(res));
       return 1;
     }
@@ -85,17 +93,15 @@ int main(void)
      */
     res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockextr);
 
-    if(CURLE_OK != res)
-    {
+    if(CURLE_OK != res) {
       printf("Error: %s\n", curl_easy_strerror(res));
       return 1;
     }
 
-    sockfd = sockextr;
+    sockfd = (curl_socket_t)sockextr;
 
     /* wait for the socket to become ready for sending */
-    if(!wait_on_socket(sockfd, 0, 60000L))
-    {
+    if(!wait_on_socket(sockfd, 0, 60000L)) {
       printf("Error: timeout.\n");
       return 1;
     }
@@ -105,16 +111,14 @@ int main(void)
      * to see if all the request has been sent */
     res = curl_easy_send(curl, request, strlen(request), &iolen);
 
-    if(CURLE_OK != res)
-    {
+    if(CURLE_OK != res) {
       printf("Error: %s\n", curl_easy_strerror(res));
       return 1;
     }
     puts("Reading response.");
 
     /* read the response */
-    for(;;)
-    {
+    for(;;) {
       char buf[1024];
 
       wait_on_socket(sockfd, 1, 60000L);
index 7402e35..a865d57 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Simple HTTP GET that stores the headers in a separate file
+ * </DESC>
+ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -27,7 +31,7 @@
 
 static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)
 {
-  int written = fwrite(ptr, size, nmemb, (FILE *)stream);
+  size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);
   return written;
 }
 
index 2641c71..11c87cd 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Uses the CURLINFO_TLS_SESSION data.
+ * </DESC>
+ */
 
 /* Note that this example currently requires cURL to be linked against
    GnuTLS (and this program must also be linked against -lgnutls). */
index 8317462..1ca7448 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Gets a file using an SFTP URL.
+ * </DESC>
+ */
 
 #include <stdio.h>
 
@@ -58,7 +62,7 @@ int main(void)
   CURL *curl;
   CURLcode res;
   struct FtpFile ftpfile={
-    "yourfile.bin", /* name to store the file as if succesful */
+    "yourfile.bin", /* name to store the file as if successful */
     NULL
   };
 
index 1912ce6..7226f4b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Very simple HTTP GET
+ * </DESC>
+ */
 #include <stdio.h>
 #include <curl/curl.h>
 
index 8657771..99df057 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Very simple HTTP POST
+ * </DESC>
+ */
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
index aefb79f..81713ab 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Shows HTTPS usage with client certs and optional ssl engine use.
+ * </DESC>
+ */
 #include <stdio.h>
 
 #include <curl/curl.h>
@@ -43,7 +47,6 @@
 
 int main(void)
 {
-  int i;
   CURL *curl;
   CURLcode res;
   FILE *headerfile;
@@ -51,6 +54,7 @@ int main(void)
 
   static const char *pCertFile = "testcert.pem";
   static const char *pCACertFile="cacert.pem";
+  static const char *pHeaderFile = "dumpit";
 
   const char *pKeyName;
   const char *pKeyType;
@@ -67,7 +71,7 @@ int main(void)
   pEngine   = NULL;
 #endif
 
-  headerfile = fopen("dumpit", "w");
+  headerfile = fopen(pHeaderFile, "wb");
 
   curl_global_init(CURL_GLOBAL_DEFAULT);
 
@@ -77,47 +81,46 @@ int main(void)
     curl_easy_setopt(curl, CURLOPT_URL, "HTTPS://your.favourite.ssl.site");
     curl_easy_setopt(curl, CURLOPT_HEADERDATA, headerfile);
 
-    for(i = 0; i < 1; i++) /* single-iteration loop, just to break out from */
-    {
-      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");
+    do { /* dummy loop, just to break out from */
+      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 */
+        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");
+          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");
+      curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
 
       /* set the cert for client authentication */
-      curl_easy_setopt(curl,CURLOPT_SSLCERT,pCertFile);
+      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(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);
+      curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, pKeyType);
 
       /* set the private key (file or ID in engine) */
-      curl_easy_setopt(curl,CURLOPT_SSLKEY,pKeyName);
+      curl_easy_setopt(curl, CURLOPT_SSLKEY, pKeyName);
 
       /* set the file with the certs vaildating the server */
-      curl_easy_setopt(curl,CURLOPT_CAINFO,pCACertFile);
+      curl_easy_setopt(curl, CURLOPT_CAINFO, pCACertFile);
 
       /* disconnect if we can't validate server's cert */
-      curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,1L);
+      curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
 
       /* Perform the request, res will get the return code */
       res = curl_easy_perform(curl);
@@ -127,7 +130,7 @@ int main(void)
                 curl_easy_strerror(res));
 
       /* we are done... */
-    }
+    } while(0);
     /* always cleanup */
     curl_easy_cleanup(curl);
   }
index 932f6e3..8756494 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* This is a multi threaded application that uses a progress bar to show
+/* <DESC>
+ * A multi threaded application that uses a progress bar to show
  * status.  It uses Gtk+ to make a smooth pulse.
- *
+ * </DESC>
+ */
+/*
  * Written by Jud Bishop after studying the other examples provided with
  * libcurl.
  *
@@ -71,8 +74,7 @@ void *pull_one_url(void *NaN)
 
   /* Stop threads from entering unless j is incremented */
   pthread_mutex_lock(&lock);
-  while ( j < num_urls )
-  {
+  while(j < num_urls) {
     printf("j = %d\n", j);
 
     http =
@@ -82,11 +84,9 @@ void *pull_one_url(void *NaN)
     printf( "http %s", http );
 
     curl = curl_easy_init();
-    if(curl)
-    {
+    if(curl) {
 
-      outfile = fopen(urls[j], "w");
-      /* printf("fopen\n"); */
+      outfile = fopen(urls[j], "wb");
 
       /* Set the URL and transfer type */
       curl_easy_setopt(curl, CURLOPT_URL, http);
@@ -216,7 +216,7 @@ int main(int argc, char **argv)
   g_signal_connect(G_OBJECT (top_window), "delete-event",
                    G_CALLBACK(cb_delete), NULL);
 
-  if (!g_thread_create(&create_thread, progress_bar, FALSE, NULL) != 0)
+  if(!g_thread_create(&create_thread, progress_bar, FALSE, NULL) != 0)
     g_warning("can't create the thread");
 
   gtk_main();
@@ -225,4 +225,3 @@ int main(int argc, char **argv)
 
   return 0;
 }
-
index 0322d2f..fb0ed1d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * SMTP example showing how to expand an e-mail mailing list
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
 
-/* This is a simple example showing how to expand an email mailing list.
+/* This is a simple example showing how to expand an e-mail mailing list.
  *
  * Notes:
  *
index af4d1b6..315bb2c 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * SMTP example showing how to send e-mails
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
 
 /* This is a simple example showing how to send mail using libcurl's SMTP
- * capabilities. For an exmaple of using the multi interface please see
+ * capabilities. For an example of using the multi interface please see
  * smtp-multi.c.
  *
  * Note that this example requires libcurl 7.20.0 or above.
@@ -39,7 +45,8 @@ static const char *payload_text[] = {
   "To: " TO "\r\n",
   "From: " FROM "(Example User)\r\n",
   "Cc: " CC "(Another example User)\r\n",
-  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
+  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
+  "rfcpedant.example.org>\r\n",
   "Subject: SMTP example message\r\n",
   "\r\n", /* empty line to divide headers from body, see RFC5322 */
   "The body of the message starts here.\r\n",
@@ -89,11 +96,12 @@ int main(void)
     /* This is the URL for your mailserver */
     curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.example.com");
 
-    /* Note that this option isn't strictly required, omitting it will result in
-     * libcurl sending the MAIL FROM command with empty sender data. All
+    /* Note that this option isn't strictly required, omitting it will result
+     * in libcurl sending the MAIL FROM command with empty sender data. All
      * autoresponses should have an empty reverse-path, and should be directed
-     * to the address in the reverse-path which triggered them. Otherwise, they
-     * could cause an endless loop. See RFC 5321 Section 4.5.5 for more details.
+     * to the address in the reverse-path which triggered them. Otherwise,
+     * they could cause an endless loop. See RFC 5321 Section 4.5.5 for more
+     * details.
      */
     curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
 
@@ -122,13 +130,13 @@ int main(void)
     /* Free the list of recipients */
     curl_slist_free_all(recipients);
 
-    /* curl won't send the QUIT command until you call cleanup, so you should be
-     * able to re-use this connection for additional messages (setting
+    /* curl won't send the QUIT command until you call cleanup, so you should
+     * be able to re-use this connection for additional messages (setting
      * CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and calling
      * curl_easy_perform() again. It may not be a good idea to keep the
-     * connection open for a very long time though (more than a few minutes may
-     * result in the server timing out the connection), and you do want to clean
-     * up in the end.
+     * connection open for a very long time though (more than a few minutes
+     * may result in the server timing out the connection), and you do want to
+     * clean up in the end.
      */
     curl_easy_cleanup(curl);
   }
index 4098c7d..89e1d94 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * SMTP example using the multi interface
+ * </DESC>
+ */
+
 #include <string.h>
 #include <curl/curl.h>
 
@@ -40,7 +46,8 @@ static const char *payload_text[] = {
   "To: " TO "\r\n",
   "From: " FROM "(Example User)\r\n",
   "Cc: " CC "(Another example User)\r\n",
-  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
+  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
+  "rfcpedant.example.org>\r\n",
   "Subject: SMTP multi example message\r\n",
   "\r\n", /* empty line to divide headers from body, see RFC5322 */
   "The body of the message starts here.\r\n",
@@ -180,8 +187,7 @@ int main(void)
     /* get file descriptors from the transfers */
     mc = curl_multi_fdset(mcurl, &fdread, &fdwrite, &fdexcep, &maxfd);
 
-    if(mc != CURLM_OK)
-    {
+    if(mc != CURLM_OK) {
       fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
       break;
     }
index 9a68a7f..f012340 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * SMTP example using SSL
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
@@ -40,7 +46,8 @@ static const char *payload_text[] = {
   "To: " TO "\r\n",
   "From: " FROM "(Example User)\r\n",
   "Cc: " CC "(Another example User)\r\n",
-  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
+  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
+  "rfcpedant.example.org>\r\n",
   "Subject: SMTP SSL example message\r\n",
   "\r\n", /* empty line to divide headers from body, see RFC5322 */
   "The body of the message starts here.\r\n",
@@ -111,15 +118,16 @@ int main(void)
      * 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. */
-#ifdef SKIP_HOSTNAME_VERFICATION
+#ifdef SKIP_HOSTNAME_VERIFICATION
     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
 #endif
 
-    /* Note that this option isn't strictly required, omitting it will result in
-     * libcurl sending the MAIL FROM command with empty sender data. All
+    /* Note that this option isn't strictly required, omitting it will result
+     * in libcurl sending the MAIL FROM command with empty sender data. All
      * autoresponses should have an empty reverse-path, and should be directed
-     * to the address in the reverse-path which triggered them. Otherwise, they
-     * could cause an endless loop. See RFC 5321 Section 4.5.5 for more details.
+     * to the address in the reverse-path which triggered them. Otherwise,
+     * they could cause an endless loop. See RFC 5321 Section 4.5.5 for more
+     * details.
      */
     curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
 
index 4872dbd..c863e05 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * SMTP example using TLS
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
@@ -40,7 +46,8 @@ static const char *payload_text[] = {
   "To: " TO "\r\n",
   "From: " FROM "(Example User)\r\n",
   "Cc: " CC "(Another example User)\r\n",
-  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@rfcpedant.example.org>\r\n",
+  "Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
+  "rfcpedant.example.org>\r\n",
   "Subject: SMTP TLS example message\r\n",
   "\r\n", /* empty line to divide headers from body, see RFC5322 */
   "The body of the message starts here.\r\n",
@@ -110,18 +117,19 @@ int main(void)
      *   curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
      *   curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
      * That is, in general, a bad idea. It is still better than sending your
-     * authentication details in plain text though.
-     * Instead, you should get the issuer certificate (or the host certificate
-     * if the certificate is self-signed) and add it to the set of certificates
-     * that are known to libcurl using CURLOPT_CAINFO and/or CURLOPT_CAPATH. See
-     * docs/SSLCERTS for more information. */
+     * authentication details in plain text though.  Instead, you should get
+     * the issuer certificate (or the host certificate if the certificate is
+     * self-signed) and add it to the set of certificates that are known to
+     * libcurl using CURLOPT_CAINFO and/or CURLOPT_CAPATH. See docs/SSLCERTS
+     * for more information. */
     curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/certificate.pem");
 
-    /* Note that this option isn't strictly required, omitting it will result in
-     * libcurl sending the MAIL FROM command with empty sender data. All
+    /* Note that this option isn't strictly required, omitting it will result
+     * in libcurl sending the MAIL FROM command with empty sender data. All
      * autoresponses should have an empty reverse-path, and should be directed
-     * to the address in the reverse-path which triggered them. Otherwise, they
-     * could cause an endless loop. See RFC 5321 Section 4.5.5 for more details.
+     * to the address in the reverse-path which triggered them. Otherwise,
+     * they could cause an endless loop. See RFC 5321 Section 4.5.5 for more
+     * details.
      */
     curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
 
index 4e44cea..4e0623f 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+
+/* <DESC>
+ * SMTP example showing how to verify an e-mail address
+ * </DESC>
+ */
+
 #include <stdio.h>
 #include <string.h>
 #include <curl/curl.h>
 
-/* This is a simple example showing how to verify an email address from an
+/* This is a simple example showing how to verify an e-mail address from an
  * SMTP server.
  *
  * Notes:
index cd7d073..1c787bb 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Set your system time from a remote HTTP server's Date: header.
+ * </DESC>
+ */
 /* This example code only builds as-is on Windows.
  *
  * While Unix/Linux user, you do not need this software.
@@ -125,7 +129,7 @@ size_t SyncTime_CURL_WriteOutput(void *ptr, size_t size, size_t nmemb,
                                  void *stream)
 {
   fwrite(ptr, size, nmemb, stream);
-  return(nmemb*size);
+  return (nmemb*size);
 }
 
 size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
@@ -134,17 +138,17 @@ size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
   int   i, RetVal;
   char  TmpStr1[26], TmpStr2[26];
 
-  if (ShowAllHeader == 1)
+  if(ShowAllHeader == 1)
     fprintf(stderr, "%s", (char *)(ptr));
 
-  if (strncmp((char *)(ptr), "Date:", 5) == 0) {
-    if (ShowAllHeader == 0)
+  if(strncmp((char *)(ptr), "Date:", 5) == 0) {
+    if(ShowAllHeader == 0)
       fprintf(stderr, "HTTP Server. %s", (char *)(ptr));
 
-    if (AutoSyncTime == 1) {
+    if(AutoSyncTime == 1) {
       *TmpStr1 = 0;
       *TmpStr2 = 0;
-      if (strlen((char *)(ptr)) > 50) /* Can prevent buffer overflow to
+      if(strlen((char *)(ptr)) > 50) /* Can prevent buffer overflow to
                                          TmpStr1 & 2? */
         AutoSyncTime = 0;
       else {
@@ -152,11 +156,10 @@ size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
                          TmpStr1, &SYSTime.wDay, TmpStr2, &SYSTime.wYear,
                          &SYSTime.wHour, &SYSTime.wMinute, &SYSTime.wSecond);
 
-        if (RetVal == 7) {
-
+        if(RetVal == 7) {
           SYSTime.wMilliseconds = 500;    /* adjust to midpoint, 0.5 sec */
-          for (i=0; i<12; i++) {
-            if (strcmp(MthStr[i], TmpStr2) == 0) {
+          for(i=0; i<12; i++) {
+            if(strcmp(MthStr[i], TmpStr2) == 0) {
               SYSTime.wMonth = i+1;
               break;
             }
@@ -170,21 +173,21 @@ size_t SyncTime_CURL_WriteHeader(void *ptr, size_t size, size_t nmemb,
     }
   }
 
-  if (strncmp((char *)(ptr), "X-Cache: HIT", 12) == 0) {
+  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);
+  return (nmemb*size);
 }
 
 void SyncTime_CURL_Init(CURL *curl, char *proxy_port,
                         char *proxy_user_password)
 {
-  if (strlen(proxy_port) > 0)
+  if(strlen(proxy_port) > 0)
     curl_easy_setopt(curl, CURLOPT_PROXY, proxy_port);
 
-  if (strlen(proxy_user_password) > 0)
+  if(strlen(proxy_user_password) > 0)
     curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, proxy_user_password);
 
 #ifdef SYNCTIME_UA
@@ -201,7 +204,7 @@ int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName,
   CURLcode res;
 
   outfile = NULL;
-  if (HttpGetBody == HTTP_COMMAND_HEAD)
+  if(HttpGetBody == HTTP_COMMAND_HEAD)
     curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
   else {
     outfile = fopen(OutFileName, "wb");
@@ -210,7 +213,7 @@ int SyncTime_CURL_Fetch(CURL *curl, char *URL_Str, char *OutFileName,
 
   curl_easy_setopt(curl, CURLOPT_URL, URL_Str);
   res = curl_easy_perform(curl);
-  if (outfile != NULL)
+  if(outfile != NULL)
     fclose(outfile);
   return res;  /* (CURLE_OK) */
 }
@@ -240,7 +243,7 @@ int conf_init(conf_t *conf)
   int i;
 
   *conf->http_proxy       = 0;
-  for (i=0; i<MAX_STRING1; i++)
+  for(i=0; i<MAX_STRING1; i++)
     conf->proxy_user[i]     = 0;    /* Clean up password from memory */
   *conf->timeserver       = 0;
   return 1;
@@ -268,24 +271,24 @@ int main(int argc, char *argv[])
   RetValue        = 0;    /* Successful Exit */
   conf_init(conf);
 
-  if (argc > 1) {
-    while (OptionIndex < argc) {
-      if (strncmp(argv[OptionIndex], "--server=", 9) == 0)
+  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)
+      if(strcmp(argv[OptionIndex], "--showall") == 0)
         ShowAllHeader = 1;
 
-      if (strcmp(argv[OptionIndex], "--synctime") == 0)
+      if(strcmp(argv[OptionIndex], "--synctime") == 0)
         AutoSyncTime = 1;
 
-      if (strncmp(argv[OptionIndex], "--proxy-user=", 13) == 0)
+      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)
+      if(strncmp(argv[OptionIndex], "--proxy=", 8) == 0)
         snprintf(conf->http_proxy, MAX_STRING, "%s", &argv[OptionIndex][8]);
 
-      if ((strcmp(argv[OptionIndex], "--help") == 0) ||
+      if((strcmp(argv[OptionIndex], "--help") == 0) ||
           (strcmp(argv[OptionIndex], "/?") == 0)) {
         showUsage();
         return 0;
@@ -294,13 +297,13 @@ int main(int argc, char *argv[])
     }
   }
 
-  if (*conf->timeserver == 0)     /* Use default server for time information */
+  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) {
+  if(curl) {
     SyncTime_CURL_Init(curl, conf->http_proxy, conf->proxy_user);
 
     /* Calculating time diff between GMT and localtime */
@@ -312,7 +315,7 @@ int main(int argc, char *argv[])
     tzonediffFloat = difftime(tt_local, tt_gmt);
     tzonediffWord  = (int)(tzonediffFloat/3600.0);
 
-    if ((double)(tzonediffWord * 3600) == tzonediffFloat)
+    if((double)(tzonediffWord * 3600) == tzonediffFloat)
       snprintf(tzoneBuf, 15, "%+03d'00'", tzonediffWord);
     else
       snprintf(tzoneBuf, 15, "%+03d'30'", tzonediffWord);
@@ -341,9 +344,9 @@ int main(int argc, char *argv[])
              LOCALTime.wMilliseconds);
     fprintf(stderr, "\nAfter  HTTP. Date: %s%s\n", timeBuf, tzoneBuf);
 
-    if (AutoSyncTime == 3) {
+    if(AutoSyncTime == 3) {
       /* Synchronising computer clock */
-      if (!SetSystemTime(&SYSTime)) {  /* Set system time */
+      if(!SetSystemTime(&SYSTime)) {  /* Set system time */
         fprintf(stderr, "ERROR: Unable to set system time.\n");
         RetValue = 1;
       }
index a7e9c2d..5f1d9b9 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Show the required mutex callback setups for GnuTLS and OpenSSL when using
+ * libcurl multi-threaded.
+ * </DESC>
+ */
 /* 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
+ *   https://www.openssl.org/docs/crypto/threads.html
  * gcrypt docs for this:
- *   http://gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html
+ *   https://gnupg.org/documentation/manuals/gcrypt/Multi_002dThreading.html
  */
 
 #define USE_OPENSSL /* or USE_GNUTLS accordingly */
@@ -46,7 +51,7 @@ static void lock_callback(int mode, int type, char *file, int line)
 {
   (void)file;
   (void)line;
-  if (mode & CRYPTO_LOCK) {
+  if(mode & CRYPTO_LOCK) {
     pthread_mutex_lock(&(lockarray[type]));
   }
   else {
@@ -59,7 +64,7 @@ static unsigned long thread_id(void)
   unsigned long ret;
 
   ret=(unsigned long)pthread_self();
-  return(ret);
+  return ret;
 }
 
 static void init_locks(void)
@@ -68,8 +73,8 @@ static void init_locks(void)
 
   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);
+  for(i=0; i<CRYPTO_num_locks(); i++) {
+    pthread_mutex_init(&(lockarray[i]), NULL);
   }
 
   CRYPTO_set_id_callback((unsigned long (*)())thread_id);
@@ -81,7 +86,7 @@ static void kill_locks(void)
   int i;
 
   CRYPTO_set_locking_callback(NULL);
-  for (i=0; i<CRYPTO_num_locks(); i++)
+  for(i=0; i<CRYPTO_num_locks(); i++)
     pthread_mutex_destroy(&(lockarray[i]));
 
   OPENSSL_free(lockarray);
index adf696c..30a2ab0 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
+ * Download a given URL into a local file named page.out.
+ * </DESC>
+ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -61,7 +65,7 @@ int main(int argc, char *argv[])
 
   /* open the file */
   pagefile = fopen(pagefilename, "wb");
-  if (pagefile) {
+  if(pagefile) {
 
     /* write the page body to this file handle */
     curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, pagefile);
index dd56c61..47573eb 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2013 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
+/* <DESC>
 /* Example using an in memory PEM user certificate and RSA key to retrieve an
  * https page.
- * Written by Ishan SinghLevett, based on Theo Borm's cacertinmem.c.
- * Note that to maintain simplicity this example does not use a CA certificate 
+ * </DESC>
+ */
+/* Written by Ishan SinghLevett, based on Theo Borm's cacertinmem.c.
+ * Note that to maintain simplicity this example does not use a CA certificate
  * for peer verification.  However, some form of peer verification
  * must be used in real circumstances when a secure connection is required.
  */
@@ -35,8 +38,8 @@
 
 static size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream)
 {
-  fwrite(ptr,size,nmemb,stream);
-  return(nmemb*size);
+  fwrite(ptr, size, nmemb, stream);
+  return (nmemb*size);
 }
 
 static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
@@ -117,7 +120,7 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
   /* get a BIO */
   bio = BIO_new_mem_buf((char *)mypem, -1);
 
-  if (bio == NULL) {
+  if(bio == NULL) {
     printf("BIO_new_mem_buf failed\n");
   }
 
@@ -125,49 +128,49 @@ static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
    * structure that SSL can use
    */
   cert = PEM_read_bio_X509(bio, NULL, 0, NULL);
-  if (cert == NULL) {
+  if(cert == NULL) {
     printf("PEM_read_bio_X509 failed...\n");
   }
 
   /*tell SSL to use the X509 certificate*/
   ret = SSL_CTX_use_certificate((SSL_CTX*)sslctx, cert);
-  if (ret != 1) {
+  if(ret != 1) {
     printf("Use certificate failed\n");
   }
 
   /*create a bio for the RSA key*/
   kbio = BIO_new_mem_buf((char *)mykey, -1);
-  if (kbio == NULL) {
+  if(kbio == NULL) {
     printf("BIO_new_mem_buf failed\n");
   }
 
   /*read the key bio into an RSA object*/
   rsa = PEM_read_bio_RSAPrivateKey(kbio, NULL, 0, NULL);
-  if (rsa == NULL) {
+  if(rsa == NULL) {
     printf("Failed to create key bio\n");
   }
 
   /*tell SSL to use the RSA key from memory*/
   ret = SSL_CTX_use_RSAPrivateKey((SSL_CTX*)sslctx, rsa);
-  if (ret != 1) {
+  if(ret != 1) {
     printf("Use Key failed\n");
   }
 
   /* free resources that have been allocated by openssl functions */
-  if (bio)
+  if(bio)
     BIO_free(bio);
 
-  if (kbio)
+  if(kbio)
     BIO_free(kbio);
 
-  if (rsa)
+  if(rsa)
     RSA_free(rsa);
 
-  if (cert)
+  if(cert)
     X509_free(cert);
 
   /* all set to go */
-  return CURLE_OK ;
+  return CURLE_OK;
 }
 
 int main(void)
@@ -177,28 +180,28 @@ int main(void)
 
   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_HEADERDATA, stderr);
-  rv = curl_easy_setopt(ch,CURLOPT_SSLCERTTYPE,"PEM");
+  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_HEADERDATA, stderr);
+  rv = curl_easy_setopt(ch, CURLOPT_SSLCERTTYPE, "PEM");
 
   /* both VERIFYPEER and VERIFYHOST are set to 0 in this case because there is
      no CA certificate*/
 
-  rv = curl_easy_setopt(ch,CURLOPT_SSL_VERIFYPEER, 0L);
-  rv = curl_easy_setopt(ch,CURLOPT_SSL_VERIFYHOST, 0L);
+  rv = curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 0L);
+  rv = curl_easy_setopt(ch, CURLOPT_SSL_VERIFYHOST, 0L);
   rv = curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
   rv = curl_easy_setopt(ch, CURLOPT_SSLKEYTYPE, "PEM");
 
   /* first try: retrieve page without user certificate and key -> will fail
    */
   rv = curl_easy_perform(ch);
-  if (rv==CURLE_OK) {
+  if(rv==CURLE_OK) {
     printf("*** transfer succeeded ***\n");
   }
   else {
@@ -209,9 +212,9 @@ int main(void)
    * load the certificate and key by installing a function doing the necessary
    * "modifications" to the SSL CONTEXT just before link init
    */
-  rv = curl_easy_setopt(ch,CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
+  rv = curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
   rv = curl_easy_perform(ch);
-  if (rv==CURLE_OK) {
+  if(rv==CURLE_OK) {
     printf("*** transfer succeeded ***\n");
   }
   else {
index 92f0808..074e50d 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
index 4d67f98..8066828 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  * KIND, either express or implied.
  *
  ***************************************************************************/
-/* Stream-parse a document using the streaming Expat parser.
- * Written by David Strauss
+/* <DESC>
+ * Stream-parse a document using the streaming Expat parser.
+ * </DESC>
+ */
+/* Written by David Strauss
  *
  * Expat => http://www.libexpat.org/
  *
@@ -48,7 +51,8 @@ struct ParserStruct {
   struct MemoryStruct characters;
 };
 
-static void startElement(void *userData, const XML_Char *name, const XML_Char **atts)
+static void startElement(void *userData, const XML_Char *name,
+                         const XML_Char **atts)
 {
   struct ParserStruct *state = (struct ParserStruct *) userData;
   state->tags++;
@@ -86,16 +90,18 @@ static void endElement(void *userData, const XML_Char *name)
   printf("%5lu   %10lu   %s\n", state->depth, state->characters.size, name);
 }
 
-static size_t parseStreamCallback(void *contents, size_t length, size_t nmemb, void *userp)
+static size_t parseStreamCallback(void *contents, size_t length, size_t nmemb,
+                                  void *userp)
 {
   XML_Parser parser = (XML_Parser) userp;
   size_t real_size = length * nmemb;
   struct ParserStruct *state = (struct ParserStruct *) XML_GetUserData(parser);
 
   /* Only parse if we're not already in a failure state. */
-  if (state->ok && XML_Parse(parser, contents, real_size, 0) == 0) {
+  if(state->ok && XML_Parse(parser, contents, real_size, 0) == 0) {
     int error_code = XML_GetErrorCode(parser);
-    fprintf(stderr, "Parsing response buffer of length %lu failed with error code %d (%s).\n",
+    fprintf(stderr, "Parsing response buffer of length %lu failed"
+            " with error code %d (%s).\n",
             real_size, error_code, XML_ErrorString(error_code));
     state->ok = 0;
   }
@@ -120,10 +126,11 @@ int main(void)
   XML_SetElementHandler(parser, startElement, endElement);
   XML_SetCharacterDataHandler(parser, characterDataHandler);
 
-  /* Initalize a libcurl handle. */
+  /* Initialize a libcurl handle. */
   curl_global_init(CURL_GLOBAL_ALL ^ CURL_GLOBAL_SSL);
   curl_handle = curl_easy_init();
-  curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.w3schools.com/xml/simple.xml");
+  curl_easy_setopt(curl_handle, CURLOPT_URL,
+                   "http://www.w3schools.com/xml/simple.xml");
   curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, parseStreamCallback);
   curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)parser);
 
@@ -135,9 +142,9 @@ int main(void)
     fprintf(stderr, "curl_easy_perform() failed: %s\n",
             curl_easy_strerror(res));
   }
-  else if (state.ok) {
+  else if(state.ok) {
     /* Expat requires one final call to finalize parsing. */
-    if (XML_Parse(parser, NULL, 0, 1) == 0) {
+    if(XML_Parse(parser, NULL, 0, 1) == 0) {
       int error_code = XML_GetErrorCode(parser);
       fprintf(stderr, "Finalizing parsing failed with error code %d (%s).\n",
               error_code, XML_ErrorString(error_code));
index ef0caa6..c7c9142 100644 (file)
@@ -1,63 +1,55 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
-                          libcurl's binary interface
-
 ABI - Application Binary Interface
-----------------------------------
+==================================
 
 "ABI" describes the low-level interface between an application program and a
 library. Calling conventions, function arguments, return values, struct
 sizes/defines and more.
+ "ABI" describes the low-level interface between an application program and a
+ library. Calling conventions, function arguments, return values, struct
+ sizes/defines and more.
 
 [Wikipedia has a longer description](http://en.wikipedia.org/wiki/Application_binary_interface)
[Wikipedia has a longer description](https://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.
+ 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.
+ 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.
+ 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.
+ During the first seven years of libcurl releases, there have only been four
+ ABI breakages.
 
 We are determined to bump the SONAME as rarely as possible.  Ideally, we
 never do it again.
+ We are determined to bump the SONAME as rarely as possible.  Ideally, we
+ never do it again.
 
 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.
+ 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
 -------
index c47678b..88c4f8d 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -29,18 +29,19 @@ man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.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_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 curl_multi_wait.3
+ curl_multi_socket_action.3 curl_multi_wait.3 libcurl-symbols.3         \
+ libcurl-thread.3
 
 HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html              \
  curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html      \
@@ -60,46 +61,51 @@ HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.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 curl_multi_wait.html
+ curl_multi_socket_action.html curl_multi_wait.html                    \
+ libcurl-symbols.html libcurl-thread.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_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 curl_multi_wait.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     \
+ curl_multi_wait.pdf libcurl-symbols.pdf libcurl-thread.pdf
 
 m4macrodir = $(datadir)/aclocal
 dist_m4macro_DATA = libcurl.m4
 
-CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
+CLEANFILES = $(HTMLPAGES) $(PDFPAGES) $(TESTS) libcurl-symbols.3
 
 EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) ABI \
-  symbols-in-versions symbols.pl
+  symbols-in-versions symbols.pl mksymbolsmanpage.pl
 MAN2HTML= roffit --mandir=. < $< >$@
 
 SUFFIXES = .3 .html
 
+libcurl-symbols.3: $(srcdir)/symbols-in-versions $(srcdir)/mksymbolsmanpage.pl
+       perl $(srcdir)/mksymbolsmanpage.pl < $(srcdir)/symbols-in-versions > $@
+
 html: $(HTMLPAGES)
-       cd opts; make html
+       cd opts && make html
 
 .3.html:
        $(MAN2HTML)
 
 pdf: $(PDFPAGES)
-       cd opts; make pdf
+       cd opts && make pdf
 
 .3.pdf:
        @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
@@ -107,3 +113,17 @@ pdf: $(PDFPAGES)
        ps2pdf $$foo.ps $@; \
        rm $$foo.ps; \
        echo "converted $< to $@")
+
+# Make sure each option man page is referenced in the main man page
+TESTS = check-easy check-multi
+LOG_COMPILER = $(PERL)
+# The test fails if the log file contains any text
+AM_LOG_FLAGS = -p -e 'die "$$_" if ($$_);'
+
+check-easy: $(srcdir)/curl_easy_setopt.3 $(srcdir)/opts/CURLOPT*.3
+       OPTS="$$(ls $(srcdir)/opts/CURLOPT*.3 | $(SED) -e 's,^.*/,,' -e 's,\.3$$,,')" && \
+       for opt in $$OPTS; do grep "^\.IP $$opt$$" $(srcdir)/curl_easy_setopt.3 >/dev/null || echo Missing $$opt; done > $@
+
+check-multi: $(srcdir)/curl_multi_setopt.3 $(srcdir)/opts/CURLMOPT*.3
+       OPTS="$$(ls $(srcdir)/opts/CURLMOPT*.3 | $(SED) -e 's,^.*/,,' -e 's,\.3$$,,')" && \
+       for opt in $$OPTS; do grep "^\.IP $$opt$$" $(srcdir)/curl_multi_setopt.3 >/dev/null || echo Missing $$opt; done > $@
index 7430e81..3fd4e90 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
 ###########################################################################
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -101,8 +111,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = docs/libcurl
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs $(dist_m4macro_DATA)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -123,7 +131,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(dist_m4macro_DATA) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -195,7 +205,7 @@ am__recursive_targets = \
   $(RECURSIVE_CLEAN_TARGETS) \
   $(am__extra_recursive_targets)
 AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-       distdir
+       check recheck distdir
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 # Read a list of newline-separated strings from the standard input,
 # and print each of them once, without duplicates.  Input order is
@@ -215,7 +225,184 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/test-driver
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -299,7 +486,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -319,6 +506,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -352,6 +540,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -363,17 +552,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -419,6 +609,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -435,18 +626,19 @@ man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.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_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 curl_multi_wait.3
+ curl_multi_socket_action.3 curl_multi_wait.3 libcurl-symbols.3         \
+ libcurl-thread.3
 
 HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html              \
  curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html      \
@@ -466,39 +658,47 @@ HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.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 curl_multi_wait.html
+ curl_multi_socket_action.html curl_multi_wait.html                    \
+ libcurl-symbols.html libcurl-thread.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_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 curl_multi_wait.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     \
+ curl_multi_wait.pdf libcurl-symbols.pdf libcurl-thread.pdf
 
 m4macrodir = $(datadir)/aclocal
 dist_m4macro_DATA = libcurl.m4
-CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
+CLEANFILES = $(HTMLPAGES) $(PDFPAGES) $(TESTS) libcurl-symbols.3
 EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) ABI \
-  symbols-in-versions symbols.pl
+  symbols-in-versions symbols.pl mksymbolsmanpage.pl
 
 MAN2HTML = roffit --mandir=. < $< >$@
 SUFFIXES = .3 .html
+
+# Make sure each option man page is referenced in the main man page
+TESTS = check-easy check-multi
+LOG_COMPILER = $(PERL)
+# The test fails if the log file contains any text
+AM_LOG_FLAGS = -p -e 'die "$$_" if ($$_);'
 all: all-recursive
 
 .SUFFIXES:
-.SUFFIXES: .3 .html .pdf
+.SUFFIXES: .3 .html .log .pdf .test .test$(EXEEXT) .trs
 $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -511,7 +711,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/libcurl/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign docs/libcurl/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -699,6 +898,176 @@ cscopelist-am: $(am__tagged_files)
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS:
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all 
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+check-easy.log: check-easy
+       @p='check-easy'; \
+       b='check-easy'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+check-multi.log: check-multi
+       @p='check-multi'; \
+       b='check-multi'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
 distdir: $(DISTFILES)
        @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
        topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@@ -755,6 +1124,7 @@ distdir: $(DISTFILES)
          fi; \
        done
 check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
 check: check-recursive
 all-am: Makefile $(MANS) $(DATA)
 installdirs: installdirs-recursive
@@ -782,6 +1152,9 @@ install-strip:
            "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
        fi
 mostlyclean-generic:
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
 clean-generic:
        -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
@@ -857,32 +1230,38 @@ uninstall-am: uninstall-dist_m4macroDATA uninstall-man
 
 uninstall-man: uninstall-man3
 
-.MAKE: $(am__recursive_targets) install-am install-strip
+.MAKE: $(am__recursive_targets) check-am install-am install-strip
 
 .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
-       check-am clean clean-generic clean-libtool cscopelist-am ctags \
-       ctags-am distclean 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-dist_m4macroDATA install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-man3 \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       installdirs-am maintainer-clean maintainer-clean-generic \
-       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
-       ps ps-am tags tags-am uninstall uninstall-am \
-       uninstall-dist_m4macroDATA uninstall-man uninstall-man3
+       check-TESTS check-am clean clean-generic clean-libtool \
+       cscopelist-am ctags ctags-am distclean 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-dist_m4macroDATA install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-man3 install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs installdirs-am maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
+       uninstall uninstall-am uninstall-dist_m4macroDATA \
+       uninstall-man uninstall-man3
 
+.PRECIOUS: Makefile
+
+
+libcurl-symbols.3: $(srcdir)/symbols-in-versions $(srcdir)/mksymbolsmanpage.pl
+       perl $(srcdir)/mksymbolsmanpage.pl < $(srcdir)/symbols-in-versions > $@
 
 html: $(HTMLPAGES)
-       cd opts; make html
+       cd opts && make html
 
 .3.html:
        $(MAN2HTML)
 
 pdf: $(PDFPAGES)
-       cd opts; make pdf
+       cd opts && make pdf
 
 .3.pdf:
        @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \
@@ -891,6 +1270,14 @@ pdf: $(PDFPAGES)
        rm $$foo.ps; \
        echo "converted $< to $@")
 
+check-easy: $(srcdir)/curl_easy_setopt.3 $(srcdir)/opts/CURLOPT*.3
+       OPTS="$$(ls $(srcdir)/opts/CURLOPT*.3 | $(SED) -e 's,^.*/,,' -e 's,\.3$$,,')" && \
+       for opt in $$OPTS; do grep "^\.IP $$opt$$" $(srcdir)/curl_easy_setopt.3 >/dev/null || echo Missing $$opt; done > $@
+
+check-multi: $(srcdir)/curl_multi_setopt.3 $(srcdir)/opts/CURLMOPT*.3
+       OPTS="$$(ls $(srcdir)/opts/CURLMOPT*.3 | $(SED) -e 's,^.*/,,' -e 's,\.3$$,,')" && \
+       for opt in $$OPTS; do grep "^\.IP $$opt$$" $(srcdir)/curl_multi_setopt.3 >/dev/null || echo Missing $$opt; done > $@
+
 # 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:
index 403bfd3..cc5990e 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -63,5 +63,6 @@ if(curl) {
 }
 .fi
 .SH "SEE ALSO"
-.BR curl_easy_init "(3), "
-
+.BR curl_easy_init "(3), " curl_easy_duphandle "(3), "
+.BR curl_easy_reset "(3), "
+.BR curl_multi_cleanup "(3), " curl_multi_remove_handle "(3) "
index 752461e..f5be22b 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_cleanup man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -55,18 +60,17 @@ p.roffit {
 <p class="level0">Any use of the <span Class="bold">handle</span> after this function has been called and have returned, is illegal. <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a> kills the handle and all memory associated with it! 
 <p class="level0">For libcurl versions before 7.17,: after you've called this function, 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="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; CURLcode res;
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- &nbsp; res = curl_easy_perform(curl);
- &nbsp; curl_easy_cleanup(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; CURLcode res;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; res = curl_easy_perform(curl);
+&nbsp; curl_easy_cleanup(curl);
+}
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <span Class="manpage"> </span> 
-<p class="level0"><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_duphandle.html">curl_easy_duphandle</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a>, <a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_remove_handle.html">curl_multi_remove_handle</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7e22eed..f0ea88b 100644 (file)
Binary files a/docs/libcurl/curl_easy_cleanup.pdf and b/docs/libcurl/curl_easy_cleanup.pdf differ
index 080723a..262cebd 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -47,4 +47,6 @@ in a synchronous way, the input handle may not be in use when cloned.
 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)"
+.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_reset "(3),"
+.BR curl_global_init "(3)"
+
index 19b1f6f..4a46435 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_duphandle man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -55,6 +60,7 @@ p.roffit {
 <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</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a>, <a Class="manpage" href="./curl_global_init.html">curl_global_init</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>
index b0fadf1..a014a98 100644 (file)
Binary files a/docs/libcurl/curl_easy_duphandle.pdf and b/docs/libcurl/curl_easy_duphandle.pdf differ
index 7c8c658..d2b6cd2 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -26,16 +26,17 @@ curl_easy_escape - URL encodes the given string
 .SH SYNOPSIS
 .B #include <curl/curl.h>
 .sp
-.BI "char *curl_easy_escape( CURL *" curl ", char *" string ", int "length " );"
+.BI "char *curl_easy_escape( CURL *" curl ", const char *" string
+.BI ", int "length " );"
 .ad
 .SH DESCRIPTION
-This function converts the given input \fBstring\fP to an URL encoded string
+This function converts the given input \fIstring\fP to a URL encoded string
 and returns that as a new allocated string. All input characters that are not
 a-z, A-Z, 0-9, '-', '.', '_' or '~' 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.
+If \fIlength\fP is set to 0 (zero), \fIcurl_easy_escape(3)\fP uses strlen() on
+the input \fIstring\fP to find out the size.
 
 You must \fIcurl_free(3)\fP the returned string when you're done with it.
 .SH AVAILABILITY
@@ -48,10 +49,10 @@ CURL *curl = curl_easy_init();
 if(curl) {
   char *output = curl_easy_escape(curl, "data to convert", 15);
   if(output) {
-    printf("Encoded: %s\n", output);
+    printf("Encoded: %s\\n", output);
     curl_free(output);
   }
-}}
+}
 .fi
 .SH "SEE ALSO"
 .BR curl_easy_unescape "(3), " curl_free "(3), " RFC 3986
index 1852342..ae7852a 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_escape man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -48,25 +53,25 @@ p.roffit {
 <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 * string , int length  );</span> 
+<p class="level0"><span Class="bold">char *curl_easy_escape( CURL * curl , const char * string</span> <span Class="bold">, int length  );</span> 
 <p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">This function converts the given input <span Class="bold">string</span> to an URL encoded string and returns that as a new allocated string. All input characters that are not a-z, A-Z, 0-9, '-', '.', '_' or '~' 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</a> uses strlen() on the input <span Class="bold">url</span> to find out the size. 
+<p class="level0">This function converts the given input <span Class="emphasis">string</span> to a URL encoded string and returns that as a new allocated string. All input characters that are not a-z, A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped" version (%NN where NN is a two-digit hexadecimal number). 
+<p class="level0">If <span Class="emphasis">length</span> is set to 0 (zero), <a Class="emphasis" href="./curl_easy_escape.html">curl_easy_escape</a> uses strlen() on the input <span Class="emphasis">string</span> to find out the size. 
 <p class="level0">You must <a Class="emphasis" href="./curl_free.html">curl_free</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</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="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; char *output = curl_easy_escape(curl, "data to convert", 15);
- &nbsp; if(output) {
- &nbsp;   printf("Encoded: %sn", output);
- &nbsp;   curl_free(output);
- &nbsp; }
- }}
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; char *output = curl_easy_escape(curl, "data to convert", 15);
+&nbsp; if(output) {
+&nbsp;   printf("Encoded: %s\n", output);
+&nbsp;   curl_free(output);
+&nbsp; }
+}
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <a Class="manpage" href="./curl_free.html">curl_free</a>, <span Class="manpage">  <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a></span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <a Class="manpage" href="./curl_free.html">curl_free</a>, <span Class="manpage">RFC 3986</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d6ca4c2..29db077 100644 (file)
Binary files a/docs/libcurl/curl_easy_escape.pdf and b/docs/libcurl/curl_easy_escape.pdf differ
index 0f0fd2e..6ca712f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -34,236 +34,190 @@ 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
+this function AFTER a performed transfer if you want to get transfer related
 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.
+Last used URL.
+See \fICURLINFO_EFFECTIVE_URL(3)\fP
+
 .IP CURLINFO_RESPONSE_CODE
-Pass a pointer to a long to receive the last received HTTP, FTP or SMTP
-response code. This option was previously known as CURLINFO_HTTP_CODE in
-libcurl 7.10.7 and earlier. The value 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.
+Last received response code.
+See \fICURLINFO_RESPONSE_CODE(3)\fP
 
-Support for SMTP responses added in 7.25.0.
 .IP CURLINFO_HTTP_CONNECTCODE
-Pass a pointer to a long to receive the last received proxy response code to a
-CONNECT request.
+Last proxy CONNECT response code.
+See \fICURLINFO_HTTP_CONNECTCODE(3)\fP
+
 .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
-\fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or you will
-unconditionally get a -1 back. (Added in 7.5)
+Remote time of the retrieved document.
+See \fICURLINFO_FILETIME(3)\fP
+
 .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.
+Total time of previous transfer.
+See \fICURLINFO_TOTAL_TIME(3)\fP
+
 .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.
+Time from start until name resolving completed.
+See \fICURLINFO_NAMELOOKUP_TIME(3)\fP
+
 .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.
+Time from start until remote host or proxy completed.
+See \fICURLINFO_CONNECT_TIME(3)\fP
+
 .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 pipelining where the pretransfer time can be delayed due to waits
-in line for the pipeline and more. (Added in 7.19.0)
+Time from start until SSL/SSH handshake completed.
+See \fICURLINFO_APPCONNECT_TIME(3)\fP
+
 .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. It does \fInot\fP involve the sending of the protocol-
-specific request that triggers a transfer.
+Time from start until just before the transfer begins.
+See \fICURLINFO_PRETRANSFER_TIME(3)\fP
+
 .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 received by libcurl. This includes
-CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the
-result.
+Time from start until just when the first byte is received.
+See \fICURLINFO_STARTTRANSFER_TIME(3)\fP
+
 .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)
+Time taken for all redirect steps before the final transfer.
+See \fICURLINFO_REDIRECT_TIME(3)\fP
+
 .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)
+Total number of redirects that were followed.
+See \fICURLINFO_REDIRECT_COUNT(3)\fP
+
 .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 \fICURLOPT_FOLLOWLOCATION(3)\fP. 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)
+URL a redirect would take you to, had you enabled redirects.
+See \fICURLINFO_REDIRECT_URL(3)\fP
+
 .IP CURLINFO_SIZE_UPLOAD
-Pass a pointer to a double to receive the total amount of bytes that were
-uploaded.
+Number of bytes uploaded.
+See \fICURLINFO_SIZE_UPLOAD(3)\fP
+
 .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. This counts actual payload data, what's also commonly
-called body. All meta and header data are excluded and will not be counted in
-this number.
+Number of bytes downloaded.
+See \fICURLINFO_SIZE_DOWNLOAD(3)\fP
+
 .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.
+Average download speed.
+See \fICURLINFO_SPEED_DOWNLOAD(3)\fP
+
 .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.
+Average upload speed.
+See \fICURLINFO_SPEED_UPLOAD(3)\fP
+
 .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.
+Number of bytes of all headers received.
+See \fICURLINFO_HEADER_SIZE(3)\fP
+
 .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.
+Number of bytes sent in the issued HTTP requests.
+See \fICURLINFO_REQUEST_SIZE(3)\fP
+
 .IP CURLINFO_SSL_VERIFYRESULT
-Pass a pointer to a long to receive the result of the certification
-verification that was requested (using the \fICURLOPT_SSL_VERIFYPEER(3)\fP
-option to \fIcurl_easy_setopt(3)\fP).
+Certificate verification result.
+See \fICURLINFO_SSL_VERIFYRESULT(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)
+A list of OpenSSL crypto engines.
+See \fICURLINFO_SSL_ENGINES(3)\fP
+
 .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.
+Content length from the Content-Length header.
+See \fICURLINFO_CONTENT_LENGTH_DOWNLOAD(3)\fP
+
 .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.
+Upload size.
+See \fICURLINFO_CONTENT_LENGTH_UPLOAD(3)\fP
+
 .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.
+Content type from the Content-Type header.
+See \fICURLINFO_CONTENT_TYPE(3)\fP
+
 .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 \fICURLOPT_PRIVATE(3)\fP 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)
+User's private data pointer.
+See \fICURLINFO_PRIVATE(3)\fP
+
 .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
-\fICURLOPT_HTTPAUTH(3)\fP option for \fIcurl_easy_setopt(3)\fP.  (Added in
-7.10.8)
+Available HTTP authentication methods.
+See \fICURLINFO_HTTPAUTH_AVAIL(3)\fP
+
 .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)
+Available HTTP proxy authentication methods.
+See \fICURLINFO_PROXYAUTH_AVAIL(3)\fP
+
 .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
-successful operation.  (Added in 7.12.2)
+The errno from the last failure to connect.
+See \fICURLINFO_OS_ERRNO(3)\fP
+
 .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)
+Number of new successful connections used for previous transfer.
+See \fICURLINFO_NUM_CONNECTS(3)\fP
+
 .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 address of the last connection.
+See \fICURLINFO_PRIMARY_IP(3)\fP
+
 .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)
+Port of the last connection.
+See \fICURLINFO_PRIMARY_PORT(3)\fP
+
 .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)
+Local-end IP address of last connection.
+See \fICURLINFO_LOCAL_IP(3)\fP
+
 .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)
+Local-end port of last connection.
+See \fICURLINFO_LOCAL_PORT(3)\fP
+
 .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)
+List of all known cookies.
+See \fICURLINFO_COOKIELIST(3)\fP
+
 .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(3)\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.
+Last socket used.
+See \fICURLINFO_LASTSOCKET(3)\fP
+
+.IP CURLINFO_ACTIVESOCKET
+The session's active socket.
+See \fICURLINFO_ACTIVESOCKET(3)\fP
+
 .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)
+The entry path after logging in to an FTP server.
+See \fICURLINFO_FTP_ENTRY_PATH(3)\fP
 
-Also works for SFTP since 7.21.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 \fICURLOPT_CERTINFO(3)\fP 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, NSS or GSKit
-support. (Added in 7.19.1)
-.IP CURLINFO_TLS_SESSION
-Pass a pointer to a 'struct curl_tlssessioninfo *'.  The pointer will be
-initialized to refer to a 'struct curl_tlssessioninfo *' that will contain an
-enum indicating the SSL library used for the handshake and the respective
-internal TLS session structure of this underlying SSL library.
-
-This may then be used to extract certificate information in a format
-convenient for further processing, such as manual validation. NOTE: this
-option may not be available for all SSL backends; unsupported SSL backends
-will return 'CURLSSLBACKEND_NONE' to indicate that they are not supported;
-this does not mean that no SSL backend was used. (Added in 7.34.0)
+Certificate chain.
+See \fICURLINFO_CERTINFO(3)\fP
+
+.IP CURLINFO_TLS_SSL_PTR
+TLS session info that can be used for further processing.
+See \fICURLINFO_TLS_SSL_PTR(3)\fP
 
 .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(3)\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)
+Whether or not a time conditional was met.
+See \fICURLINFO_CONDITION_UNMET(3)\fP
+
 .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.
+RTSP session ID.
+See \fICURLINFO_RTSP_SESSION_ID(3)\fP
 
-Applications wishing to resume an RTSP session on another connection should
-retrieve 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.
+RTSP CSeq that will next be used.
+See \fICURLINFO_RTSP_CLIENT_CSEQ(3)\fP
 
-\fI(NOTE: listening for server initiated requests is currently
-unimplemented).\fP
+.IP CURLINFO_RTSP_SERVER_CSEQ
+RTSP CSeq that will next be expected.
+See \fICURLINFO_RTSP_SERVER_CSEQ(3)\fP
 
-Applications wishing to resume an RTSP session on another connection should
-retrieve 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.
+RTSP CSeq last received.
+See \fICURLINFO_RTSP_CSEQ_RECV(3)\fP
+
 .SH TIMES
 .nf
 An overview of the six time values available from curl_easy_getinfo()
index af26a2f..9174ad0 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_getinfo man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -50,115 +55,155 @@ p.roffit {
 <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">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 related 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">
 <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="level1">Last used URL. See <span Class="emphasis">CURLINFO_EFFECTIVE_URL(3)</span> 
+<p class="level1">
 <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, FTP or SMTP response code. This option was previously known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. The value 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="level1">Support for SMTP responses added in 7.25.0. 
+<p class="level1">Last received response code. See <span Class="emphasis">CURLINFO_RESPONSE_CODE(3)</span> 
+<p class="level1">
 <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="level1">Last proxy CONNECT response code. See <span Class="emphasis">CURLINFO_HTTP_CONNECTCODE(3)</span> 
+<p class="level1">
 <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 <span Class="emphasis">CURLOPT_FILETIME(3)</span> option to <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> or you will unconditionally get a -1 back. (Added in 7.5) 
+<p class="level1">Remote time of the retrieved document. See <span Class="emphasis">CURLINFO_FILETIME(3)</span> 
+<p class="level1">
 <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="level1">Total time of previous transfer. See <span Class="emphasis">CURLINFO_TOTAL_TIME(3)</span> 
+<p class="level1">
 <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="level1">Time from start until name resolving completed. See <span Class="emphasis">CURLINFO_NAMELOOKUP_TIME(3)</span> 
+<p class="level1">
 <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="level1">Time from start until remote host or proxy completed. See <span Class="emphasis">CURLINFO_CONNECT_TIME(3)</span> 
+<p class="level1">
 <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 pipelining where the pretransfer time can be delayed due to waits in line for the pipeline and more. (Added in 7.19.0) 
+<p class="level1">Time from start until SSL/SSH handshake completed. See <span Class="emphasis">CURLINFO_APPCONNECT_TIME(3)</span> 
+<p class="level1">
 <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. It does <span Class="emphasis">not</span> involve the sending of the protocol- specific request that triggers a transfer. 
+<p class="level1">Time from start until just before the transfer begins. See <span Class="emphasis">CURLINFO_PRETRANSFER_TIME(3)</span> 
+<p class="level1">
 <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 received by libcurl. This includes CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the result. 
+<p class="level1">Time from start until just when the first byte is received. See <span Class="emphasis">CURLINFO_STARTTRANSFER_TIME(3)</span> 
+<p class="level1">
 <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="level1">Time taken for all redirect steps before the final transfer. See <span Class="emphasis">CURLINFO_REDIRECT_TIME(3)</span> 
+<p class="level1">
 <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="level1">Total number of redirects that were followed. See <span Class="emphasis">CURLINFO_REDIRECT_COUNT(3)</span> 
+<p class="level1">
 <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 <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span>. 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="level1">URL a redirect would take you to, had you enabled redirects. See <span Class="emphasis">CURLINFO_REDIRECT_URL(3)</span> 
+<p class="level1">
 <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="level1">Number of bytes uploaded. See <span Class="emphasis">CURLINFO_SIZE_UPLOAD(3)</span> 
+<p class="level1">
 <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. This counts actual payload data, what's also commonly called body. All meta and header data are excluded and will not be counted in this number. 
+<p class="level1">Number of bytes downloaded. See <span Class="emphasis">CURLINFO_SIZE_DOWNLOAD(3)</span> 
+<p class="level1">
 <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="level1">Average download speed. See <span Class="emphasis">CURLINFO_SPEED_DOWNLOAD(3)</span> 
+<p class="level1">
 <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="level1">Average upload speed. See <span Class="emphasis">CURLINFO_SPEED_UPLOAD(3)</span> 
+<p class="level1">
 <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="level1">Number of bytes of all headers received. See <span Class="emphasis">CURLINFO_HEADER_SIZE(3)</span> 
+<p class="level1">
 <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="level1">Number of bytes sent in the issued HTTP requests. See <span Class="emphasis">CURLINFO_REQUEST_SIZE(3)</span> 
+<p class="level1">
 <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 <span Class="emphasis">CURLOPT_SSL_VERIFYPEER(3)</span> option to <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>). 
+<p class="level1">Certificate verification result. See <span Class="emphasis">CURLINFO_SSL_VERIFYRESULT(3)</span> 
+<p class="level1">
 <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</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="level1">A list of OpenSSL crypto engines. See <span Class="emphasis">CURLINFO_SSL_ENGINES(3)</span> 
+<p class="level1">
 <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="level1">Content length from the Content-Length header. See <span Class="emphasis">CURLINFO_CONTENT_LENGTH_DOWNLOAD(3)</span> 
+<p class="level1">
 <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="level1">Upload size. See <span Class="emphasis">CURLINFO_CONTENT_LENGTH_UPLOAD(3)</span> 
+<p class="level1">
 <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="level1">Content type from the Content-Type header. See <span Class="emphasis">CURLINFO_CONTENT_TYPE(3)</span> 
+<p class="level1">
 <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 <span Class="emphasis">CURLOPT_PRIVATE(3)</span> option to <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</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="level1">User's private data pointer. See <span Class="emphasis">CURLINFO_PRIVATE(3)</span> 
+<p class="level1">
 <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 <span Class="emphasis">CURLOPT_HTTPAUTH(3)</span> option for <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>.  (Added in 7.10.8) 
+<p class="level1">Available HTTP authentication methods. See <span Class="emphasis">CURLINFO_HTTPAUTH_AVAIL(3)</span> 
+<p class="level1">
 <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="level1">Available HTTP proxy authentication methods. See <span Class="emphasis">CURLINFO_PROXYAUTH_AVAIL(3)</span> 
+<p class="level1">
 <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 successful operation.  (Added in 7.12.2) 
+<p class="level1">The errno from the last failure to connect. See <span Class="emphasis">CURLINFO_OS_ERRNO(3)</span> 
+<p class="level1">
 <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</a> to see how libcurl tries to make persistent connections to save time.  (Added in 7.12.3) 
+<p class="level1">Number of new successful connections used for previous transfer. See <span Class="emphasis">CURLINFO_NUM_CONNECTS(3)</span> 
+<p class="level1">
 <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="level1">IP address of the last connection. See <span Class="emphasis">CURLINFO_PRIMARY_IP(3)</span> 
+<p class="level1">
 <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="level1">Port of the last connection. See <span Class="emphasis">CURLINFO_PRIMARY_PORT(3)</span> 
+<p class="level1">
 <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="level1">Local-end IP address of last connection. See <span Class="emphasis">CURLINFO_LOCAL_IP(3)</span> 
+<p class="level1">
 <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="level1">Local-end port of last connection. See <span Class="emphasis">CURLINFO_LOCAL_PORT(3)</span> 
+<p class="level1">
 <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</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="level1">List of all known cookies. See <span Class="emphasis">CURLINFO_COOKIELIST(3)</span> 
+<p class="level1">
 <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(3)</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="level1">Last socket used. See <span Class="emphasis">CURLINFO_LASTSOCKET(3)</span> 
+<p class="level1">
+<p class="level0"><a name="CURLINFOACTIVESOCKET"></a><span class="nroffip">CURLINFO_ACTIVESOCKET</span> 
+<p class="level1">The session's active socket. See <span Class="emphasis">CURLINFO_ACTIVESOCKET(3)</span> 
+<p class="level1">
 <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="level1">Also works for SFTP since 7.21.4 
+<p class="level1">The entry path after logging in to an FTP server. See <span Class="emphasis">CURLINFO_FTP_ENTRY_PATH(3)</span> 
+<p class="level1">
 <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 <span Class="emphasis">CURLOPT_CERTINFO(3)</span> 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, NSS or GSKit support. (Added in 7.19.1) 
-<p class="level0"><a name="CURLINFOTLSSESSION"></a><span class="nroffip">CURLINFO_TLS_SESSION</span> 
-<p class="level1">Pass a pointer to a 'struct curl_tlssessioninfo *'.  The pointer will be initialized to refer to a 'struct curl_tlssessioninfo *' that will contain an enum indicating the SSL library used for the handshake and the respective internal TLS session structure of this underlying SSL library. 
-<p class="level1">This may then be used to extract certificate information in a format convenient for further processing, such as manual validation. NOTE: this option may not be available for all SSL backends; unsupported SSL backends will return 'CURLSSLBACKEND_NONE' to indicate that they are not supported; this does not mean that no SSL backend was used. (Added in 7.34.0) 
+<p class="level1">Certificate chain. See <span Class="emphasis">CURLINFO_CERTINFO(3)</span> 
+<p class="level1">
+<p class="level0"><a name="CURLINFOTLSSSLPTR"></a><span class="nroffip">CURLINFO_TLS_SSL_PTR</span> 
+<p class="level1">TLS session info that can be used for further processing. See <span Class="emphasis">CURLINFO_TLS_SSL_PTR(3)</span> 
 <p class="level1">
 <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(3)</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="level1">Whether or not a time conditional was met. See <span Class="emphasis">CURLINFO_CONDITION_UNMET(3)</span> 
+<p class="level1">
 <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 retrieve this info before closing the active connection. 
+<p class="level1">RTSP session ID. See <span Class="emphasis">CURLINFO_RTSP_SESSION_ID(3)</span> 
+<p class="level1">
 <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="level1">RTSP CSeq that will next be used. See <span Class="emphasis">CURLINFO_RTSP_CLIENT_CSEQ(3)</span> 
+<p class="level1">
 <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 retrieve this info before closing the active connection. 
+<p class="level1">RTSP CSeq that will next be expected. See <span Class="emphasis">CURLINFO_RTSP_SERVER_CSEQ(3)</span> 
+<p class="level1">
 <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="level1">RTSP CSeq last received. See <span Class="emphasis">CURLINFO_RTSP_CSEQ_RECV(3)</span> 
+<p class="level1"><a name="TIMES"></a><h2 class="nroffsh">TIMES</h2>
+<p class="level0"><pre class="level0">
+An overview of the six time values available from curl_easy_getinfo()
+&nbsp;
+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> 
@@ -176,6 +221,6 @@ p.roffit {
 <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</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9801b97..aa4098d 100644 (file)
Binary files a/docs/libcurl/curl_easy_getinfo.pdf and b/docs/libcurl/curl_easy_getinfo.pdf differ
index 4f7f004..371a3b8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 28ec035..dba66b6 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_init man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -53,17 +58,17 @@ p.roffit {
 <p class="level0">If you did not already call <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a>, <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> does it automatically.  This may be lethal in multi-threaded cases, since <a Class="emphasis" href="./curl_global_init.html">curl_global_init</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</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. <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="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; CURLcode res;
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- &nbsp; res = curl_easy_perform(curl);
- &nbsp; curl_easy_cleanup(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; CURLcode res;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; res = curl_easy_perform(curl);
+&nbsp; curl_easy_cleanup(curl);
+}
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_easy_perform.html">curl_easy_perform</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a>, <a Class="manpage" href="./curl_easy_perform.html">curl_easy_perform</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index faa85c1..b37f88c 100644 (file)
Binary files a/docs/libcurl/curl_easy_init.pdf and b/docs/libcurl/curl_easy_init.pdf differ
index 0f6ad5a..cb79404 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -62,7 +62,7 @@ function is called again without this bit set. Thus, the read callback
 .IP CURLPAUSE_ALL
 Convenience define that pauses both directions.
 .IP CURLPAUSE_CONT
-Convenience define that unpauses both directions
+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
index bb646e5..a853b40 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_pause man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -63,7 +68,7 @@ p.roffit {
 <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="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 <a Class="emphasis" href="./libcurl-errors.html">libcurl-errors</a> man page for the full list with descriptions. <a name="LIMITATIONS"></a><h2 class="nroffsh">LIMITATIONS</h2>
 <p class="level0">The pausing of transfers does not work with protocols that work without network connectivity, like FILE://. Trying to pause such a transfer, in any direction, will cause problems in the worst case or an error in the best case. <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="USAGE"></a><h2 class="nroffsh">USAGE WITH THE MULTI-SOCKET INTERFACE</h2>
@@ -71,6 +76,6 @@ p.roffit {
 <p class="level0">Starting in libcurl 7.32.0, unpausing a transfer will schedule a timeout trigger for that handle 1 millisecond into the future, so that a curl_multi_socket_action( ... CURL_SOCKET_TIMEOUT) can be used immediately afterwards to get the transfer going again as desired. <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</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1ce558f..b399d39 100644 (file)
Binary files a/docs/libcurl/curl_easy_pause.pdf and b/docs/libcurl/curl_easy_pause.pdf differ
index e40c1e4..e0a88cb 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -66,7 +66,7 @@ if(curl) {
   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
   res = curl_easy_perform(curl);
   curl_easy_cleanup(curl);
-}}
+}
 .fi
 .SH "SEE ALSO"
 .BR curl_easy_init "(3), " curl_easy_setopt "(3), "
index c5b90b2..a1601e4 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_perform man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -56,18 +61,18 @@ p.roffit {
 <p class="level0">You must never call this function simultaneously from two places using the same <span Class="bold">easy_handle</span>. Let the function return first before invoking it another time. If you want parallel transfers, you must use several curl easy_handles. 
 <p class="level0">While the <span Class="bold">easy_handle</span> is added to a multi handle, it cannot be used by <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a>. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">CURLE_OK (0) means everything was ok, non-zero means an error occurred as <span Class="emphasis">&lt;curl/curl.h&gt;</span> defines - see <a Class="emphasis" href="./libcurl-errors.html">libcurl-errors</a>. If the <span Class="bold">CURLOPT_ERRORBUFFER(3)</span> was set with <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> there will be a readable error message in the error buffer when non-zero is returned. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; CURLcode res;
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- &nbsp; res = curl_easy_perform(curl);
- &nbsp; curl_easy_cleanup(curl);
- }}
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; CURLcode res;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; res = curl_easy_perform(curl);
+&nbsp; curl_easy_cleanup(curl);
+}
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_add_handle.html">curl_multi_add_handle</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a>, <span Class="manpage"> </span> <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <span Class="manpage"> </span> 
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./curl_multi_add_handle.html">curl_multi_add_handle</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a>, <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</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>
index 2f47acb..5443558 100644 (file)
Binary files a/docs/libcurl/curl_easy_perform.pdf and b/docs/libcurl/curl_easy_perform.pdf differ
index c661f4b..aed40b9 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -42,13 +42,14 @@ buffer. The variable \fBn\fP points to will receive the number of received
 bytes.
 
 To establish the connection, set \fBCURLOPT_CONNECT_ONLY(3)\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.
+calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_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
+\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_ACTIVESOCKET(3)\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
index 1eb2534..c65ca7f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_recv man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -52,8 +57,8 @@ p.roffit {
 <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</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(3)</span> option before calling <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a>. Note that <a Class="emphasis" href="./curl_easy_recv.html">curl_easy_recv</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</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</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">To establish the connection, set <span Class="bold">CURLOPT_CONNECT_ONLY(3)</span> option before calling <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> or <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>. Note that <a Class="emphasis" href="./curl_easy_recv.html">curl_easy_recv</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</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</a> with <span Class="bold">CURLINFO_ACTIVESOCKET(3)</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. 
@@ -61,6 +66,6 @@ p.roffit {
 <p class="level0">Reading exactly 0 bytes would indicate a closed connection. 
 <p class="level0">If there's no socket available to use from the previous transfer, this function returns CURLE_UNSUPPORTED_PROTOCOL. <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</a>, <a Class="manpage" href="./curl_easy_perform.html">curl_easy_perform</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_easy_getinfo.html">curl_easy_getinfo</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_easy_send.html">curl_easy_send</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./curl_easy_perform.html">curl_easy_perform</a>, <a Class="manpage" href="./curl_easy_getinfo.html">curl_easy_getinfo</a>, <a Class="manpage" href="./curl_easy_send.html">curl_easy_send</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index afdd743..1dee7c9 100644 (file)
Binary files a/docs/libcurl/curl_easy_recv.pdf and b/docs/libcurl/curl_easy_recv.pdf differ
index cb69bdd..0bafb64 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6a290fb..c0b2197 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_reset man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -54,7 +59,7 @@ p.roffit {
 <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</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./curl_easy_duphandle.html">curl_easy_duphandle</a>
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./curl_easy_duphandle.html">curl_easy_duphandle</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>
index 58ce522..458ff34 100644 (file)
Binary files a/docs/libcurl/curl_easy_reset.pdf and b/docs/libcurl/curl_easy_reset.pdf differ
index 28e8866..c1c4ce4 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -40,13 +40,14 @@ connection set-up.
 The variable \fBn\fP points to will receive the number of sent bytes.
 
 To establish the connection, set \fBCURLOPT_CONNECT_ONLY(3)\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.
+calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform()\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
+\fIcurl_easy_getinfo(3)\fP with \fBCURLINFO_ACTIVESOCKET(3)\fP to obtain the
 socket; use your operating system facilities like \fIselect(2)\fP to check if
 it can be written to.
 .SH AVAILABILITY
index 4d52db5..658c6f6 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_send man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -52,13 +57,13 @@ p.roffit {
 <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</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(3)</span> option before calling <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a>. Note that <a Class="emphasis" href="./curl_easy_send.html">curl_easy_send</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</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</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">To establish the connection, set <span Class="bold">CURLOPT_CONNECT_ONLY(3)</span> option before calling <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> or <span Class="emphasis">curl_multi_perform()</span>. Note that <a Class="emphasis" href="./curl_easy_send.html">curl_easy_send</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</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</a> with <span Class="bold">CURLINFO_ACTIVESOCKET(3)</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. 
 <p class="level0">If there's no socket available to use from the previous transfer, this function returns CURLE_UNSUPPORTED_PROTOCOL. <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</a>, <a Class="manpage" href="./curl_easy_perform.html">curl_easy_perform</a>, <a Class="manpage" href="./curl_easy_getinfo.html">curl_easy_getinfo</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_easy_recv.html">curl_easy_recv</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./curl_easy_perform.html">curl_easy_perform</a>, <a Class="manpage" href="./curl_easy_getinfo.html">curl_easy_getinfo</a>, <a Class="manpage" href="./curl_easy_recv.html">curl_easy_recv</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 32e30a1..30ff055 100644 (file)
Binary files a/docs/libcurl/curl_easy_send.pdf and b/docs/libcurl/curl_easy_send.pdf differ
index ecfa38f..60d5492 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -50,6 +50,8 @@ really \fICURLOPT_POSTFIELDS(3)\fP, but the alternative that copies the string
 \fICURLOPT_COPYPOSTFIELDS(3)\fP has some usage characteristics you need to
 read up on.
 
+The order in which the options are set does not matter.
+
 Before version 7.17.0, strings were not copied. Instead the user was forced
 keep them available until libcurl no longer needed them.
 
@@ -145,10 +147,14 @@ Fail on HTTP 4xx errors. \fICURLOPT_FAILONERROR(3)\fP
 .SH NETWORK OPTIONS
 .IP CURLOPT_URL
 URL to work on. See \fICURLOPT_URL(3)\fP
+.IP CURLOPT_PATH_AS_IS
+Disable squashing /../ and /./ sequences in the path. See \fICURLOPT_PATH_AS_IS(3)\fP
 .IP CURLOPT_PROTOCOLS
 Allowed protocols. See \fICURLOPT_PROTOCOLS(3)\fP
 .IP CURLOPT_REDIR_PROTOCOLS
 Protocols to allow redirects to. See \fICURLOPT_REDIR_PROTOCOLS(3)\fP
+.IP CURLOPT_DEFAULT_PROTOCOL
+Default protocol. See \fICURLOPT_DEFAULT_PROTOCOL(3)\fP
 .IP CURLOPT_PROXY
 Proxy to use. See \fICURLOPT_PROXY(3)\fP
 .IP CURLOPT_PROXYPORT
@@ -163,6 +169,10 @@ Tunnel through the HTTP proxy. \fICURLOPT_HTTPPROXYTUNNEL(3)\fP
 Socks5 GSSAPI service name. \fICURLOPT_SOCKS5_GSSAPI_SERVICE(3)\fP
 .IP CURLOPT_SOCKS5_GSSAPI_NEC
 Socks5 GSSAPI NEC mode. See \fICURLOPT_SOCKS5_GSSAPI_NEC(3)\fP
+.IP CURLOPT_PROXY_SERVICE_NAME
+Proxy service name. \fICURLOPT_PROXY_SERVICE_NAME(3)\fP
+.IP CURLOPT_SERVICE_NAME
+SPNEGO service name. \fICURLOPT_SERVICE_NAME(3)\fP
 .IP CURLOPT_INTERFACE
 Bind connection locally to this. See \fICURLOPT_INTERFACE(3)\fP
 .IP CURLOPT_LOCALPORT
@@ -214,6 +224,8 @@ HTTP server authentication methods. See \fICURLOPT_HTTPAUTH(3)\fP
 TLS authentication user name. See \fICURLOPT_TLSAUTH_USERNAME(3)\fP
 .IP CURLOPT_TLSAUTH_PASSWORD
 TLS authentication password. See \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
+.IP CURLOPT_TLSAUTH_TYPE
+TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP
 .IP CURLOPT_PROXYAUTH
 HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP
 .IP CURLOPT_SASL_IR
@@ -283,6 +295,15 @@ Disable Content decoding. See \fICURLOPT_HTTP_CONTENT_DECODING(3)\fP
 Disable Transfer decoding. See \fICURLOPT_HTTP_TRANSFER_DECODING(3)\fP
 .IP CURLOPT_EXPECT_100_TIMEOUT_MS
 100-continue timeout. See \fICURLOPT_EXPECT_100_TIMEOUT_MS(3)\fP
+.IP CURLOPT_PIPEWAIT
+Wait on connection to pipeline on it. See \fICURLOPT_PIPEWAIT(3)\fP
+.IP CURLOPT_STREAM_DEPENDS
+This HTTP/2 stream depends on another. See \fICURLOPT_STREAM_DEPENDS(3)\fP
+.IP CURLOPT_STREAM_DEPENDS_E
+This HTTP/2 stream depends on another exclusively. See
+\fICURLOPT_STREAM_DEPENDS_E(3)\fP
+.IP CURLOPT_STREAM_WEIGHT
+Set this HTTP/2 stream's weight. See \fICURLOPT_STREAM_WEIGHT(3)\fP
 .SH SMTP OPTIONS
 .IP CURLOPT_MAIL_FROM
 Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
@@ -293,6 +314,8 @@ Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP
 .SH TFTP OPTIONS
 .IP CURLOPT_TFTP_BLKSIZE
 TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP
+.IP CURLOPT_TFTP_NO_OPTIONS
+Do not send TFTP options requests. See \fICURLOPT_TFTP_NO_OPTIONS(3)\fP
 .SH FTP OPTIONS
 .IP CURLOPT_FTPPORT
 Use active FTP. See \fICURLOPT_FTPPORT(3)\fP
@@ -411,6 +434,8 @@ Bind name resolves to this interface. See \fICURLOPT_DNS_INTERFACE(3)\fP
 Bind name resolves to this IP4 address. See \fICURLOPT_DNS_LOCAL_IP4(3)\fP
 .IP CURLOPT_DNS_LOCAL_IP6
 Bind name resolves to this IP6 address. See \fICURLOPT_DNS_LOCAL_IP6(3)\fP
+.IP CURLOPT_DNS_SERVERS
+Preferred DNS servers. See \fICURLOPT_DNS_SERVERS(3)\fP
 .IP CURLOPT_ACCEPTTIMEOUT_MS
 Timeout for waiting for the server's connect back to be accepted. See \fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP
 .SH SSL and SECURITY OPTIONS
@@ -432,10 +457,16 @@ Enable use of NPN. See \fICURLOPT_SSL_ENABLE_NPN(3)\fP
 Use identifier with SSL engine. See \fICURLOPT_SSLENGINE(3)\fP
 .IP CURLOPT_SSLENGINE_DEFAULT
 Default SSL engine. See \fICURLOPT_SSLENGINE_DEFAULT(3)\fP
+.IP CURLOPT_SSL_FALSESTART
+Enable TLS False Start. See \fICURLOPT_SSL_FALSESTART(3)\fP
 .IP CURLOPT_SSLVERSION
 SSL version to use. See \fICURLOPT_SSLVERSION(3)\fP
+.IP CURLOPT_SSL_VERIFYHOST
+Verify the host name in the SSL certificate. See \fICURLOPT_SSL_VERIFYHOST(3)\fP
 .IP CURLOPT_SSL_VERIFYPEER
 Verify the SSL certificate. See \fICURLOPT_SSL_VERIFYPEER(3)\fP
+.IP CURLOPT_SSL_VERIFYSTATUS
+Verify the SSL certificate's status. See \fICURLOPT_SSL_VERIFYSTATUS(3)\fP
 .IP CURLOPT_CAINFO
 CA cert bundle. See \fICURLOPT_CAINFO(3)\fP
 .IP CURLOPT_ISSUERCERT
@@ -444,8 +475,6 @@ Issuer certificate. See \fICURLOPT_ISSUERCERT(3)\fP
 Path to CA cert bundle. See \fICURLOPT_CAPATH(3)\fP
 .IP CURLOPT_CRLFILE
 Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP
-.IP CURLOPT_SSL_VERIFYHOST
-Verify the host name in the SSL certificate. See \fICURLOPT_SSL_VERIFYHOST(3)\fP
 .IP CURLOPT_CERTINFO
 Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP
 .IP CURLOPT_PINNEDPUBLICKEY
@@ -509,8 +538,8 @@ if(curl) {
   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
   res = curl_easy_perform(curl);
   curl_easy_cleanup(curl);
-}}
+}
 .fi
 .SH "SEE ALSO"
 .BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), "
-.BR curl_multi_setopt "(3), "
+.BR curl_easy_getinfo "(3), " curl_multi_setopt "(3), "
index 43e0b43..14f472b 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_setopt man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <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">&#35;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"><a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> is used to tell libcurl how to behave. By setting the appropriate options, the application can change libcurl's behavior.  All options are set with an <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 <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> 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</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 <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> returns. The only exception to this rule is really <span Class="emphasis">CURLOPT_POSTFIELDS(3)</span>, but the alternative that copies the string <span Class="emphasis">CURLOPT_COPYPOSTFIELDS(3)</span> has some usage characteristics you need to read up on. 
+<p class="level0">The order in which the options are set does not matter. 
 <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</a> or <a Class="emphasis" href="./curl_easy_duphandle.html">curl_easy_duphandle</a> call. <a name="BEHAVIOR"></a><h2 class="nroffsh">BEHAVIOR OPTIONS</h2>
 <p class="level0">
@@ -144,10 +150,14 @@ p.roffit {
 <p class="level0">
 <p class="level0"><a name="CURLOPTURL"></a><span class="nroffip">CURLOPT_URL</span> 
 <p class="level1">URL to work on. See <span Class="emphasis">CURLOPT_URL(3)</span> 
+<p class="level0"><a name="CURLOPTPATHASIS"></a><span class="nroffip">CURLOPT_PATH_AS_IS</span> 
+<p class="level1">Disable squashing /../ and /./ sequences in the path. See <span Class="emphasis">CURLOPT_PATH_AS_IS(3)</span> 
 <p class="level0"><a name="CURLOPTPROTOCOLS"></a><span class="nroffip">CURLOPT_PROTOCOLS</span> 
 <p class="level1">Allowed protocols. See <span Class="emphasis">CURLOPT_PROTOCOLS(3)</span> 
 <p class="level0"><a name="CURLOPTREDIRPROTOCOLS"></a><span class="nroffip">CURLOPT_REDIR_PROTOCOLS</span> 
 <p class="level1">Protocols to allow redirects to. See <span Class="emphasis">CURLOPT_REDIR_PROTOCOLS(3)</span> 
+<p class="level0"><a name="CURLOPTDEFAULTPROTOCOL"></a><span class="nroffip">CURLOPT_DEFAULT_PROTOCOL</span> 
+<p class="level1">Default protocol. See <span Class="emphasis">CURLOPT_DEFAULT_PROTOCOL(3)</span> 
 <p class="level0"><a name="CURLOPTPROXY"></a><span class="nroffip">CURLOPT_PROXY</span> 
 <p class="level1">Proxy to use. See <span Class="emphasis">CURLOPT_PROXY(3)</span> 
 <p class="level0"><a name="CURLOPTPROXYPORT"></a><span class="nroffip">CURLOPT_PROXYPORT</span> 
@@ -162,6 +172,10 @@ p.roffit {
 <p class="level1">Socks5 GSSAPI service name. <span Class="emphasis">CURLOPT_SOCKS5_GSSAPI_SERVICE(3)</span> 
 <p class="level0"><a name="CURLOPTSOCKS5GSSAPINEC"></a><span class="nroffip">CURLOPT_SOCKS5_GSSAPI_NEC</span> 
 <p class="level1">Socks5 GSSAPI NEC mode. See <span Class="emphasis">CURLOPT_SOCKS5_GSSAPI_NEC(3)</span> 
+<p class="level0"><a name="CURLOPTPROXYSERVICENAME"></a><span class="nroffip">CURLOPT_PROXY_SERVICE_NAME</span> 
+<p class="level1">Proxy service name. <span Class="emphasis">CURLOPT_PROXY_SERVICE_NAME(3)</span> 
+<p class="level0"><a name="CURLOPTSERVICENAME"></a><span class="nroffip">CURLOPT_SERVICE_NAME</span> 
+<p class="level1">SPNEGO service name. <span Class="emphasis">CURLOPT_SERVICE_NAME(3)</span> 
 <p class="level0"><a name="CURLOPTINTERFACE"></a><span class="nroffip">CURLOPT_INTERFACE</span> 
 <p class="level1">Bind connection locally to this. See <span Class="emphasis">CURLOPT_INTERFACE(3)</span> 
 <p class="level0"><a name="CURLOPTLOCALPORT"></a><span class="nroffip">CURLOPT_LOCALPORT</span> 
@@ -213,6 +227,8 @@ p.roffit {
 <p class="level1">TLS authentication user name. See <span Class="emphasis">CURLOPT_TLSAUTH_USERNAME(3)</span> 
 <p class="level0"><a name="CURLOPTTLSAUTHPASSWORD"></a><span class="nroffip">CURLOPT_TLSAUTH_PASSWORD</span> 
 <p class="level1">TLS authentication password. See <span Class="emphasis">CURLOPT_TLSAUTH_PASSWORD(3)</span> 
+<p class="level0"><a name="CURLOPTTLSAUTHTYPE"></a><span class="nroffip">CURLOPT_TLSAUTH_TYPE</span> 
+<p class="level1">TLS authentication methods. See <span Class="emphasis">CURLOPT_TLSAUTH_TYPE(3)</span> 
 <p class="level0"><a name="CURLOPTPROXYAUTH"></a><span class="nroffip">CURLOPT_PROXYAUTH</span> 
 <p class="level1">HTTP proxy authentication methods. See <span Class="emphasis">CURLOPT_PROXYAUTH(3)</span> 
 <p class="level0"><a name="CURLOPTSASLIR"></a><span class="nroffip">CURLOPT_SASL_IR</span> 
@@ -281,7 +297,15 @@ p.roffit {
 <p class="level0"><a name="CURLOPTHTTPTRANSFERDECODING"></a><span class="nroffip">CURLOPT_HTTP_TRANSFER_DECODING</span> 
 <p class="level1">Disable Transfer decoding. See <span Class="emphasis">CURLOPT_HTTP_TRANSFER_DECODING(3)</span> 
 <p class="level0"><a name="CURLOPTEXPECT100TIMEOUTMS"></a><span class="nroffip">CURLOPT_EXPECT_100_TIMEOUT_MS</span> 
-<p class="level1">100-continue timeout. See <span Class="emphasis">CURLOPT_EXPECT_100_TIMEOUT_MS(3)</span> <a name="SMTP"></a><h2 class="nroffsh">SMTP OPTIONS</h2>
+<p class="level1">100-continue timeout. See <span Class="emphasis">CURLOPT_EXPECT_100_TIMEOUT_MS(3)</span> 
+<p class="level0"><a name="CURLOPTPIPEWAIT"></a><span class="nroffip">CURLOPT_PIPEWAIT</span> 
+<p class="level1">Wait on connection to pipeline on it. See <span Class="emphasis">CURLOPT_PIPEWAIT(3)</span> 
+<p class="level0"><a name="CURLOPTSTREAMDEPENDS"></a><span class="nroffip">CURLOPT_STREAM_DEPENDS</span> 
+<p class="level1">This HTTP/2 stream depends on another. See <span Class="emphasis">CURLOPT_STREAM_DEPENDS(3)</span> 
+<p class="level0"><a name="CURLOPTSTREAMDEPENDSE"></a><span class="nroffip">CURLOPT_STREAM_DEPENDS_E</span> 
+<p class="level1">This HTTP/2 stream depends on another exclusively. See <span Class="emphasis">CURLOPT_STREAM_DEPENDS_E(3)</span> 
+<p class="level0"><a name="CURLOPTSTREAMWEIGHT"></a><span class="nroffip">CURLOPT_STREAM_WEIGHT</span> 
+<p class="level1">Set this HTTP/2 stream's weight. See <span Class="emphasis">CURLOPT_STREAM_WEIGHT(3)</span> <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">Address of the sender. See <span Class="emphasis">CURLOPT_MAIL_FROM(3)</span> 
@@ -291,7 +315,9 @@ p.roffit {
 <p class="level1">Authentication address. See <span Class="emphasis">CURLOPT_MAIL_AUTH(3)</span> <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">TFTP block size. See <span Class="emphasis">CURLOPT_TFTP_BLKSIZE(3)</span> <a name="FTP"></a><h2 class="nroffsh">FTP OPTIONS</h2>
+<p class="level1">TFTP block size. See <span Class="emphasis">CURLOPT_TFTP_BLKSIZE(3)</span> 
+<p class="level0"><a name="CURLOPTTFTPNOOPTIONS"></a><span class="nroffip">CURLOPT_TFTP_NO_OPTIONS</span> 
+<p class="level1">Do not send TFTP options requests. See <span Class="emphasis">CURLOPT_TFTP_NO_OPTIONS(3)</span> <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">Use active FTP. See <span Class="emphasis">CURLOPT_FTPPORT(3)</span> 
@@ -410,6 +436,8 @@ p.roffit {
 <p class="level1">Bind name resolves to this IP4 address. See <span Class="emphasis">CURLOPT_DNS_LOCAL_IP4(3)</span> 
 <p class="level0"><a name="CURLOPTDNSLOCALIP6"></a><span class="nroffip">CURLOPT_DNS_LOCAL_IP6</span> 
 <p class="level1">Bind name resolves to this IP6 address. See <span Class="emphasis">CURLOPT_DNS_LOCAL_IP6(3)</span> 
+<p class="level0"><a name="CURLOPTDNSSERVERS"></a><span class="nroffip">CURLOPT_DNS_SERVERS</span> 
+<p class="level1">Preferred DNS servers. See <span Class="emphasis">CURLOPT_DNS_SERVERS(3)</span> 
 <p class="level0"><a name="CURLOPTACCEPTTIMEOUTMS"></a><span class="nroffip">CURLOPT_ACCEPTTIMEOUT_MS</span> 
 <p class="level1">Timeout for waiting for the server's connect back to be accepted. See <span Class="emphasis">CURLOPT_ACCEPTTIMEOUT_MS(3)</span> <a name="SSL"></a><h2 class="nroffsh">SSL and SECURITY OPTIONS</h2>
 <p class="level0">
@@ -431,10 +459,16 @@ p.roffit {
 <p class="level1">Use identifier with SSL engine. See <span Class="emphasis">CURLOPT_SSLENGINE(3)</span> 
 <p class="level0"><a name="CURLOPTSSLENGINEDEFAULT"></a><span class="nroffip">CURLOPT_SSLENGINE_DEFAULT</span> 
 <p class="level1">Default SSL engine. See <span Class="emphasis">CURLOPT_SSLENGINE_DEFAULT(3)</span> 
+<p class="level0"><a name="CURLOPTSSLFALSESTART"></a><span class="nroffip">CURLOPT_SSL_FALSESTART</span> 
+<p class="level1">Enable TLS False Start. See <span Class="emphasis">CURLOPT_SSL_FALSESTART(3)</span> 
 <p class="level0"><a name="CURLOPTSSLVERSION"></a><span class="nroffip">CURLOPT_SSLVERSION</span> 
 <p class="level1">SSL version to use. See <span Class="emphasis">CURLOPT_SSLVERSION(3)</span> 
+<p class="level0"><a name="CURLOPTSSLVERIFYHOST"></a><span class="nroffip">CURLOPT_SSL_VERIFYHOST</span> 
+<p class="level1">Verify the host name in the SSL certificate. See <span Class="emphasis">CURLOPT_SSL_VERIFYHOST(3)</span> 
 <p class="level0"><a name="CURLOPTSSLVERIFYPEER"></a><span class="nroffip">CURLOPT_SSL_VERIFYPEER</span> 
 <p class="level1">Verify the SSL certificate. See <span Class="emphasis">CURLOPT_SSL_VERIFYPEER(3)</span> 
+<p class="level0"><a name="CURLOPTSSLVERIFYSTATUS"></a><span class="nroffip">CURLOPT_SSL_VERIFYSTATUS</span> 
+<p class="level1">Verify the SSL certificate's status. See <span Class="emphasis">CURLOPT_SSL_VERIFYSTATUS(3)</span> 
 <p class="level0"><a name="CURLOPTCAINFO"></a><span class="nroffip">CURLOPT_CAINFO</span> 
 <p class="level1">CA cert bundle. See <span Class="emphasis">CURLOPT_CAINFO(3)</span> 
 <p class="level0"><a name="CURLOPTISSUERCERT"></a><span class="nroffip">CURLOPT_ISSUERCERT</span> 
@@ -443,8 +477,6 @@ p.roffit {
 <p class="level1">Path to CA cert bundle. See <span Class="emphasis">CURLOPT_CAPATH(3)</span> 
 <p class="level0"><a name="CURLOPTCRLFILE"></a><span class="nroffip">CURLOPT_CRLFILE</span> 
 <p class="level1">Certificate Revocation List. See <span Class="emphasis">CURLOPT_CRLFILE(3)</span> 
-<p class="level0"><a name="CURLOPTSSLVERIFYHOST"></a><span class="nroffip">CURLOPT_SSL_VERIFYHOST</span> 
-<p class="level1">Verify the host name in the SSL certificate. See <span Class="emphasis">CURLOPT_SSL_VERIFYHOST(3)</span> 
 <p class="level0"><a name="CURLOPTCERTINFO"></a><span class="nroffip">CURLOPT_CERTINFO</span> 
 <p class="level1">Extract certificate info. See <span Class="emphasis">CURLOPT_CERTINFO(3)</span> 
 <p class="level0"><a name="CURLOPTPINNEDPUBLICKEY"></a><span class="nroffip">CURLOPT_PINNEDPUBLICKEY</span> 
@@ -492,17 +524,17 @@ p.roffit {
 <p class="level1">TELNET options. See <span Class="emphasis">CURLOPT_TELNETOPTIONS(3)</span> <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0"><span Class="emphasis">CURLE_OK</span> (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 <a Class="emphasis" href="./libcurl-errors.html">libcurl-errors</a> 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_UNKNOWN_OPTION</span>. If support for the option was disabled at compile-time, it will return <span Class="emphasis">CURLE_NOT_BUILT_IN</span>. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; CURLcode res;
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- &nbsp; res = curl_easy_perform(curl);
- &nbsp; curl_easy_cleanup(curl);
- }}
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; CURLcode res;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; res = curl_easy_perform(curl);
+&nbsp; curl_easy_cleanup(curl);
+}
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_reset.html">curl_easy_reset</a>, <a Class="manpage" href="./curl_easy_getinfo.html">curl_easy_getinfo</a>, <a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4f2c948..71e8356 100644 (file)
Binary files a/docs/libcurl/curl_easy_setopt.pdf and b/docs/libcurl/curl_easy_setopt.pdf differ
index 557d467..ac94122 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index e279cb6..45bbded 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_strerror man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,12 @@ p.roffit {
 
 <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">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">const char *curl_easy_strerror(CURLcode errornum); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">The <a Class="emphasis" href="./curl_easy_strerror.html">curl_easy_strerror</a> function returns a string describing the CURLcode error code passed in the argument <span Class="emphasis">errornum</span>. 
 <p class="level0">Typically applications also appreciate <span Class="emphasis">CURLOPT_ERRORBUFFER(3)</span> for more specific error descriptions generated at run-time. <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"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./curl_multi_strerror.html">curl_multi_strerror</a>, <a Class="manpage" href="./curl_share_strerror.html">curl_share_strerror</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./curl_multi_strerror.html">curl_multi_strerror</a>, <a Class="manpage" href="./curl_share_strerror.html">curl_share_strerror</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5997beb..9e9c848 100644 (file)
Binary files a/docs/libcurl/curl_easy_strerror.pdf and b/docs/libcurl/curl_easy_strerror.pdf differ
index 357ad23..06fd6fc 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -26,8 +26,8 @@ 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 " );"
+.BI "char *curl_easy_unescape( CURL *" curl ", const char *" url
+.BI ", int "inlength ", int *" outlength " );"
 .ad
 .SH DESCRIPTION
 This function converts the given URL encoded input string to a "plain string"
@@ -48,4 +48,4 @@ 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"
-.BR curl_easy_escape "(3), " curl_free "(3)," RFC 2396
+.BR curl_easy_escape "(3), " curl_free "(3)," RFC 3986
index a2538ad..537dbd4 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_easy_unescape man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -48,7 +53,7 @@ p.roffit {
 <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"><span Class="bold">char *curl_easy_unescape( CURL * curl , const char * url</span> <span Class="bold">, int inlength , 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</a> will use strlen() on the input <span Class="emphasis">url</span> string to find out the size. 
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">You must <a Class="emphasis" href="./curl_free.html">curl_free</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</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_escape.html">curl_easy_escape</a>, <a Class="manpage" href="./curl_free.html">curl_free</a>, <span Class="manpage"> <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a></span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_escape.html">curl_easy_escape</a>, <a Class="manpage" href="./curl_free.html">curl_free</a>, <span Class="manpage">RFC 3986</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index e7880c2..7861b4a 100644 (file)
Binary files a/docs/libcurl/curl_easy_unescape.pdf and b/docs/libcurl/curl_easy_unescape.pdf differ
index 75fd51f..03f02d3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -25,7 +25,7 @@ curl_escape - URL encodes the given string
 .SH SYNOPSIS
 .B #include <curl/curl.h>
 .sp
-.BI "char *curl_escape( char *" url ", int "length " );"
+.BI "char *curl_escape( const char *" url ", int "length " );"
 .ad
 .SH DESCRIPTION
 Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!
index 2178839..28db84f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_escape man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -48,7 +53,7 @@ p.roffit {
 <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"><span Class="bold">char *curl_escape( const 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</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). 
@@ -56,6 +61,6 @@ p.roffit {
 <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</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</a>, <a Class="manpage" href="./curl_free.html">curl_free</a>, <span Class="manpage">  <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a></span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_unescape.html">curl_unescape</a>, <a Class="manpage" href="./curl_free.html">curl_free</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>
index 3c9fea2..29ab6b8 100644 (file)
Binary files a/docs/libcurl/curl_escape.pdf and b/docs/libcurl/curl_escape.pdf differ
index 3e48149..716d82b 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -83,7 +83,18 @@ 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_CONTENTLEN
+followed by a curl_off_t value giving the length of the contents. Note that
+for \fICURLFORM_STREAM\fP contents, this option is mandatory.
+
+If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on
+the contents to figure out the size. If you really want to send a zero byte
+content then you must make sure strlen() on the data pointer returns zero.
+
+(Option added in 7.46.0)
 .IP CURLFORM_CONTENTSLENGTH
+(This option is deprecated. Use \fICURLFORM_CONTENTLEN\fP instead!)
+
 followed by a long giving the length of the contents. Note that for
 \fICURLFORM_STREAM\fP contents, this option is mandatory.
 
@@ -103,6 +114,9 @@ given file match one of the internally known file extensions.  For
 providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
 (and each \fICURLFORM_FILE\fP is allowed to have a
 \fICURLFORM_CONTENTTYPE\fP).
+
+The given upload file has to exist in its full in the file system already when
+the upload starts, as libcurl needs to read the correct file size beforehand.
 .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
index dbf8a80..6a2aa4c 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_formadd man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -65,13 +70,19 @@ p.roffit {
 <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</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="CURLFORMCONTENTLEN"></a><span class="nroffip">CURLFORM_CONTENTLEN</span> 
+<p class="level1">followed by a curl_off_t value giving the length of the contents. Note that for <a class="emphasis" href="#CURLFORMSTREAM">CURLFORM_STREAM</a> contents, this option is mandatory. 
+<p class="level1">If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on the contents to figure out the size. If you really want to send a zero byte content then you must make sure strlen() on the data pointer returns zero. 
+<p class="level1">(Option added in 7.46.0) 
 <p class="level0"><a name="CURLFORMCONTENTSLENGTH"></a><span class="nroffip">CURLFORM_CONTENTSLENGTH</span> 
+<p class="level1">(This option is deprecated. Use <a class="emphasis" href="#CURLFORMCONTENTLEN">CURLFORM_CONTENTLEN</a> instead!) 
 <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="level1">If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on the contents to figure out the size. If you really want to send a zero byte content then you must make sure strlen() on the data pointer returns zero. 
 <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="level1">The given upload file has to exist in its full in the file system already when the upload starts, as libcurl needs to read the correct file size beforehand. 
 <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> 
@@ -91,74 +102,87 @@ p.roffit {
 <p class="level1">When you've passed the HttpPost pointer to <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a> (using the <span Class="emphasis">CURLOPT_HTTPPOST(3)</span> option), you must not free the list until after you've called <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</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>
+<p class="level0"><pre class="level0">
+&nbsp;
+&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';
+&nbsp;
+&nbsp;/* Add simple name/content section */
+&nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
+&nbsp;             CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
+&nbsp;
+&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);
+&nbsp;
+&nbsp;/* Add name/ptrcontent section */
+&nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
+&nbsp;             CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
+&nbsp;
+&nbsp;/* Add ptrname/ptrcontent section */
+&nbsp;curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
+&nbsp;             CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
+&nbsp;             namelength, CURLFORM_END);
+&nbsp;
+&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);
+&nbsp;
+&nbsp;/* Add simple file section */
+&nbsp;curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
+&nbsp;             CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
+&nbsp;
+&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);
+&nbsp;
+&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);
+&nbsp;
+&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;
+&nbsp;
+&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);
+&nbsp;
+&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);
+&nbsp;
+</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</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_formfree.html">curl_formfree</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./curl_formfree.html">curl_formfree</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 50f2a7c..5057b36 100644 (file)
Binary files a/docs/libcurl/curl_formadd.pdf and b/docs/libcurl/curl_formadd.pdf differ
index fd19491..e651b8e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 620220e..b13fe1f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_formfree man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -54,6 +59,6 @@ p.roffit {
 <p class="level0">The pointer to free is the same pointer you passed to the <span Class="bold">CURLOPT_HTTPPOST(3)</span> option, which is the <span Class="emphasis">firstitem</span> pointer from the <a Class="emphasis" href="./curl_formadd.html">curl_formadd</a> invoke(s). 
 <p class="level0"><span Class="bold">form</span> is the pointer as returned from a previous call to <a Class="emphasis" href="./curl_formadd.html">curl_formadd</a> and may be NULL. <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</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_formadd.html">curl_formadd</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3182daa..a540b75 100644 (file)
Binary files a/docs/libcurl/curl_formfree.pdf and b/docs/libcurl/curl_formfree.pdf differ
index b526221..635c487 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -26,7 +26,7 @@ curl_formget - serialize a previously built multipart/formdata HTTP POST chain
 .nf
 .B #include <curl/curl.h>
 
-void curl_formget(struct curl_httppost * form, void *userp,
+int curl_formget(struct curl_httppost * form, void *userp,
                   curl_formget_callback append );
 .SH DESCRIPTION
 curl_formget() is used to serialize data previously built/appended with
index 29c0868..66119d2 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_formget man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,35 +52,38 @@ p.roffit {
 
 <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"><pre>
-<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> 
-<p class="level0">void curl_formget(struct curl_httppost * form, void *userp,
- &nbsp;                 curl_formget_callback append );
- </pre>
+<p class="level0"><pre class="level0">
+<span class="bold">#include &lt;curl/curl.h&gt;</span> 
+&nbsp;
+int curl_formget(struct curl_httppost * form, void *userp,
+&nbsp;                 curl_formget_callback append );
+</pre>
 <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</a>. Accepts a void pointer as second argument named <span Class="emphasis">userp</span> which will be passed as the first argument to the curl_formget_callback function. 
 <p class="level0"><span Class="bold">typedef size_t (*curl_formget_callback)(void * userp,  const char * buf,</span> <span Class="bold"> size_t  len );</span> 
 <p class="level0">The curl_formget_callback will be executed for each part of the HTTP POST chain. The character buffer passed to the callback must not be freed. The callback should return the buffer length passed to it on success. 
 <p class="level0">If the <span Class="bold">CURLFORM_STREAM</span> option is used in the formpost, it will prevent <a Class="emphasis" href="./curl_formget.html">curl_formget</a> from working until you've performed the actual HTTP request as only then will libcurl get the actual read callback to use! <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;}
- <p class="level0">&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>
+<p class="level0"><pre class="level0">
+&nbsp;
+&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;
+&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</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_formadd.html">curl_formadd</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 6b50dc5..18cf3b7 100644 (file)
Binary files a/docs/libcurl/curl_formget.pdf and b/docs/libcurl/curl_formget.pdf differ
index 9e5570f..5bbf745 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 87fd071..70ffd12 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_free man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -51,6 +56,6 @@ p.roffit {
 <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 <a Class="emphasis" href="./curl_free.html">curl_free</a> 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="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <a Class="manpage" href="./curl_easy_escape.html">curl_easy_escape</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <a Class="manpage" href="./curl_easy_escape.html">curl_easy_escape</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 20e226c..249a82c 100644 (file)
Binary files a/docs/libcurl/curl_free.pdf and b/docs/libcurl/curl_free.pdf differ
index ff31ac7..d09980d 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -91,7 +91,7 @@ Sat, 11 Sep 2004 21:32:11 +0200
 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.
+only ones RFC 7231 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.
index 53cd9bb..ed6d217 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_getdate man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -58,36 +63,36 @@ p.roffit {
 <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"><pre 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 <a href="http://www.ietf.org/rfc/rfc822.txt">RFC 822</a> (including the update in <a href="http://www.ietf.org/rfc/rfc1123.txt">RFC 1123</a>) using time zone name or time zone delta and RFC 850 (obsoleted by <a href="http://www.ietf.org/rfc/rfc1036.txt">RFC 1036</a>) and ANSI C's asctime() format. These formats are the only ones <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a> says HTTP applications may use. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">This parser was written to handle date formats specified in <a href="http://www.ietf.org/rfc/rfc822.txt">RFC 822</a> (including the update in <a href="http://www.ietf.org/rfc/rfc1123.txt">RFC 1123</a>) using time zone name or time zone delta and <a href="http://www.ietf.org/rfc/rfc850.txt">RFC 850</a> (obsoleted by <a href="http://www.ietf.org/rfc/rfc1036.txt">RFC 1036</a>) and ANSI C's asctime() format. These formats are the only ones <a href="http://www.ietf.org/rfc/rfc7231.txt">RFC 7231</a> 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(), <a Class="emphasis" href="./curl_getdate.html">curl_getdate</a> will return -1 in this case. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_escape.html">curl_easy_escape</a>, <a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <span Class="manpage"> </span> <span Class="manpage">CURLOPT_TIMECONDITION (3)</span> <span Class="manpage">  CURLOPT_TIMEVALUE (3) </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_escape.html">curl_easy_escape</a>, <a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <span Class="manpage">CURLOPT_TIMECONDITION (3)</span>, <span Class="manpage">CURLOPT_TIMEVALUE (3)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c004c5a..2bf1748 100644 (file)
Binary files a/docs/libcurl/curl_getdate.pdf and b/docs/libcurl/curl_getdate.pdf differ
index 3355447..c6bee98 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 0cb0c38..caa5d86 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_getenv man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -54,6 +59,6 @@ p.roffit {
 <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</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">
+<p class="level0"><span Class="manpage">getenv (3C)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index fe807fa..c4faedf 100644 (file)
Binary files a/docs/libcurl/curl_getenv.pdf and b/docs/libcurl/curl_getenv.pdf differ
index 83a54e4..d232263 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f46b009..baea92c 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_global_cleanup man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -55,7 +60,7 @@ p.roffit {
 <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</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</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</a>, <span Class="manpage"> </span> <a Class="manpage" href="./libcurl.html">libcurl</a>, <span Class="manpage"> </span> 
+<p class="level0"><a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <a Class="manpage" href="./libcurl.html">libcurl</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>
index 2fcac63..e2b93f1 100644 (file)
Binary files a/docs/libcurl/curl_global_cleanup.pdf and b/docs/libcurl/curl_global_cleanup.pdf differ
index 77172be..c578414 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -50,6 +50,10 @@ This doesn't just mean no other thread that is using libcurl.  Because
 similarly thread unsafe, it could conflict with any other thread that uses
 these other libraries.
 
+If you are initializing libcurl from a Windows DLL you should not initialize it
+from DllMain or a static initializer because Windows holds the loader lock
+during that time and it could cause a deadlock.
+
 See the description in \fBlibcurl(3)\fP of global environment requirements for
 details of how to use this function.
 
index 1552321..b2e7716 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_global_init man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -54,6 +59,7 @@ p.roffit {
 <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 <a Class="emphasis" href="./curl_global_init.html">curl_global_init</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">If you are initializing libcurl from a Windows DLL you should not initialize it from DllMain or a static initializer because Windows holds the loader lock during that time and it could cause a deadlock. 
 <p class="level0">See the description in <a Class="bold" href="./libcurl.html">libcurl</a> 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">
@@ -64,6 +70,6 @@ p.roffit {
 <p class="level0"><span Class="bold">CURL_GLOBAL_DEFAULT</span> A sensible default. It will init both SSL and Win32. Right now, this equals the functionality of the <span Class="bold">CURL_GLOBAL_ALL</span> mask. 
 <p class="level0"><span Class="bold">CURL_GLOBAL_ACK_EINTR</span> When this flag is set, curl will acknowledge EINTR condition when connecting or when waiting for data.  Otherwise, curl waits until full timeout elapses. (Added in 7.30.0) <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</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_global_cleanup.html">curl_global_cleanup</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./libcurl.html">libcurl</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_global_init_mem.html">curl_global_init_mem</a>, <a Class="manpage" href="./curl_global_cleanup.html">curl_global_cleanup</a>, <a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./libcurl.html">libcurl</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f10df0d..528b505 100644 (file)
Binary files a/docs/libcurl/curl_global_init.pdf and b/docs/libcurl/curl_global_init.pdf differ
index 9cddef7..7252cf9 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -36,11 +36,13 @@ 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.
+If you are using libcurl from multiple threads or libcurl was built with the
+threaded resolver option then the callback functions must be thread safe. The
+threaded resolver is a common build option to enable (and in some cases the
+default) so we strongly urge you to make your callback functions thread safe.
 
-The prototypes for the given callbacks should match these:
+All callback arguments must be set to valid function pointers. The
+prototypes for the given callbacks must match these:
 .IP "void *malloc_callback(size_t size);"
 To replace malloc()
 .IP "void free_callback(void *ptr);"
@@ -51,6 +53,9 @@ To replace realloc()
 To replace strdup()
 .IP "void *calloc_callback(size_t nmemb, size_t size);"
 To replace calloc()
+.RE
+This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer
+to that man page for documentation.
 .SH "CAUTION"
 Manipulating these gives considerable powers to the application to severely
 screw things up for libcurl. Take care!
index 883277c..407ec7f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_global_init_mem man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,18 +52,18 @@ p.roffit {
 
 <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> 
+<p class="level0"><span Class="bold">#include &lt;curl/curl.h&gt;</span> <pre 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</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</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">If you are using libcurl from multiple threads or libcurl was built with the threaded resolver option then the callback functions must be thread safe. The threaded resolver is a common build option to enable (and in some cases the default) so we strongly urge you to make your callback functions thread safe
+<p class="level0">All callback arguments must be set to valid function pointers. The prototypes for the given callbacks must 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> 
@@ -68,9 +73,10 @@ p.roffit {
 <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="level1">To replace calloc() 
+<p class="level0">This function is otherwise the same as <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a>, please refer to that man page for documentation. <a name="CAUTION"></a><h2 class="nroffsh">CAUTION</h2>
 <p class="level0">Manipulating these gives considerable powers to the application to severely 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</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_global_cleanup.html">curl_global_cleanup</a>, <span Class="manpage"> </span> 
+<p class="level0"><a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <a Class="manpage" href="./curl_global_cleanup.html">curl_global_cleanup</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>
index fb9b164..545531e 100644 (file)
Binary files a/docs/libcurl/curl_global_init_mem.pdf and b/docs/libcurl/curl_global_init_mem.pdf differ
index cbf10e1..6c986ca 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 9bc9790..0175862 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_printf man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -63,10 +68,10 @@ p.roffit {
 <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">To easily use all these cloned functions instead of the normal ones, &#35;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">
+<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>
index 37c754a..80982a7 100644 (file)
Binary files a/docs/libcurl/curl_mprintf.pdf and b/docs/libcurl/curl_mprintf.pdf differ
index 253b864..4c294f5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -31,7 +31,7 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
 Adds a standard easy handle to the multi stack. This function call will make
 this \fImulti_handle\fP control the specified \fIeasy_handle\fP.
 
-While an easy handle is added to a multi stack, you can not and you must not
+While an easy handle is added to a multi stack, you cannot and you must not
 use \fIcurl_easy_perform(3)\fP on that handle. After having removed the easy
 handle from the multi stack again, it is perfectly fine to use it with the
 easy interface again.
index a0f2ae2..e8b4def 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_add_handle man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,11 @@ p.roffit {
 
 <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">&#35;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>. 
-<p class="level0">While an easy handle is added to a multi stack, you can not and you must not use <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> on that handle. After having removed the easy handle from the multi stack again, it is perfectly fine to use it with the easy interface again. 
+<p class="level0">While an easy handle is added to a multi stack, you cannot and you must not use <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> on that handle. After having removed the easy handle from the multi stack again, it is perfectly fine to use it with the easy interface again. 
 <p class="level0">If the easy handle is not set to use a shared (<span Class="emphasis">CURLOPT_SHARE(3)</span>) or global DNS cache (<span Class="emphasis">CURLOPT_DNS_USE_GLOBAL_CACHE(3)</span>), 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</a> is called. 
 <p class="level0">When an easy interface is added to a multi handle, it will use a shared connection cache owned by the multi handle. Removing and adding new easy handles will not affect the pool of connections or the ability to do connection re-use. 
 <p class="level0">If you have CURLMOPT_TIMERFUNCTION set in the multi handle (and you really should if you're working event-based with <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> and friends), that callback will be called from within this function to ask for an updated timer so that your main event loop will get the activity on this handle to get started. 
@@ -61,6 +66,6 @@ p.roffit {
 <p class="level0">2 - <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</a> 
 <p class="level0">3 - <a Class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup</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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a>, <a Class="manpage" href="./curl_multi_socket_action.html">curl_multi_socket_action</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a>, <a Class="manpage" href="./curl_multi_socket_action.html">curl_multi_socket_action</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c5fa51b..f00d940 100644 (file)
Binary files a/docs/libcurl/curl_multi_add_handle.pdf and b/docs/libcurl/curl_multi_add_handle.pdf differ
index 0a2378d..75cb86b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 64a7da4..1e3f83f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_assign man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">curl_multi_assign - set data to associate 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">&#35;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 creates an association in the multi handle between the given socket and a private pointer of the application. This is designed for <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</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. 
@@ -58,6 +63,6 @@ p.roffit {
 <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_action.html">curl_multi_socket_action</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</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. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a>, <a Class="manpage" href="./curl_multi_socket_action.html">curl_multi_socket_action</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a>, <a Class="manpage" href="./curl_multi_socket_action.html">curl_multi_socket_action</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4ec8b3e..5108ca0 100644 (file)
Binary files a/docs/libcurl/curl_multi_assign.pdf and b/docs/libcurl/curl_multi_assign.pdf differ
index 50bc8ad..07d9216 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b0a52bf..492bca7 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_cleanup man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">2 - <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</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</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. On success, CURLM_OK is returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 6db40f0..d0b4976 100644 (file)
Binary files a/docs/libcurl/curl_multi_cleanup.pdf and b/docs/libcurl/curl_multi_cleanup.pdf differ
index 908ef55..beef4de 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 64678bd..dac545f 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_fdset man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,15 @@ p.roffit {
 
 <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>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+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);
+</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</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</a> function should be called as soon as one of them is ready to be read from or written to. 
 <p class="level0">If the <span Class="emphasis">read_fd_set</span> argument is not a null pointer, it points to an object of type fd_set that on returns specifies the file descriptors to be checked for being ready to read. 
@@ -64,6 +70,6 @@ p.roffit {
 <p class="level0">When doing select(), you should use <a Class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout</a> to figure out how long to wait for action. Call <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> 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. 
 <p class="level0">If one of the sockets used by libcurl happens to be larger than what can be set in an fd_set, which on POSIX systems means that the file descriptor is larger than FD_SETSIZE, then libcurl will try to not set it. Setting a too large file descriptor in an fd_set implies an out of bounds write which can cause crashes, or worse. The effect of NOT storing it will possibly save you from the crash, but will make your program NOT wait for sockets it should wait for... <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">CURLMcode type, general libcurl multi interface error code. See <a Class="emphasis" href="./libcurl-errors.html">libcurl-errors</a> <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_wait.html">curl_multi_wait</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_timeout.html">curl_multi_timeout</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a>, <span Class="manpage">  select (2) </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_wait.html">curl_multi_wait</a>, <a Class="manpage" href="./curl_multi_timeout.html">curl_multi_timeout</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a>, <span Class="manpage">select (2)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9333266..32491a9 100644 (file)
Binary files a/docs/libcurl/curl_multi_fdset.pdf and b/docs/libcurl/curl_multi_fdset.pdf differ
index 8751764..736183d 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -49,8 +49,8 @@ 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
+If more involved information is wanted, the particular "easy handle" is
+present in that struct and can be used in subsequent regular
 \fIcurl_easy_getinfo(3)\fP calls (or similar):
 
 .nf
@@ -68,6 +68,24 @@ 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 EXAMPLE
+.nf
+struct CURLMsg *m;
+
+/* call curl_multi_perform or curl_multi_socket_action first, then loop
+   through and check if there are any transfers that have completed */
+
+do {
+  int msgq = 0;
+  m = curl_multi_info_read(multi_handle, &msgq);
+  if(m && (m->msg == CURLMSG_DONE)) {
+    CURL *e = m->easy_handle;
+    transfers--;
+    curl_multi_remove_handle(multi_handle, e);
+    curl_easy_cleanup(e);
+  }
+} while(m);
+.fi
 .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
index 816f55b..698d418 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_info_read man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,28 +52,47 @@ p.roffit {
 
 <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">&#35;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</a>, <a Class="emphasis" href="./curl_multi_remove_handle.html">curl_multi_remove_handle</a> or <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</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</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">The 'CURLMsg' struct is very simple and only contains very basic information. If more involved information is wanted, the particular "easy handle" is present in that struct and can be used in subsequent regular <a Class="emphasis" href="./curl_easy_getinfo.html">curl_easy_getinfo</a> calls (or similar): 
+<p class="level0"><pre 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">At this point, there are no other <span Class="bold">msg</span> types defined. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+struct CURLMsg *m;
+&nbsp;
+/* call curl_multi_perform or curl_multi_socket_action first, then loop
+&nbsp;  through and check if there are any transfers that have completed */
+&nbsp;
+do {
+&nbsp; int msgq = 0;
+&nbsp; m = curl_multi_info_read(multi_handle, &msgq);
+&nbsp; if(m && (m-&gt;msg == CURLMSG_DONE)) {
+&nbsp;   CURL *e = m-&gt;easy_handle;
+&nbsp;   transfers--;
+&nbsp;   curl_multi_remove_handle(multi_handle, e);
+&nbsp;   curl_easy_cleanup(e);
+&nbsp; }
+} while(m);
+</pre>
+
+<p class="level0"><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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 569c045..3146b9f 100644 (file)
Binary files a/docs/libcurl/curl_multi_info_read.pdf and b/docs/libcurl/curl_multi_info_read.pdf differ
index ca9374e..e84eb76 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 9fe752d..6efcf84 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_init man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -52,7 +57,7 @@ p.roffit {
 <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</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</a>, <a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_global_init.html">curl_global_init</a>, <a Class="manpage" href="./curl_easy_init.html">curl_easy_init</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>
index 68ed873..349a693 100644 (file)
Binary files a/docs/libcurl/curl_multi_init.pdf and b/docs/libcurl/curl_multi_init.pdf differ
index e0e5b02..d2ae541 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -49,6 +49,55 @@ 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 EXAMPLE
+.nf
+#ifdef _WIN32
+#define SHORT_SLEEP Sleep(100)
+#else
+#define SHORT_SLEEP usleep(100000)
+#endif
+
+fd_set fdread;
+fd_set fdwrite;
+fd_set fdexcep;
+int maxfd = -1;
+
+long curl_timeo;
+
+curl_multi_timeout(multi_handle, &curl_timeo);
+if(curl_timeo < 0)
+  curl_timeo = 1000;
+
+timeout.tv_sec = curl_timeo / 1000;
+timeout.tv_usec = (curl_timeo % 1000) * 1000;
+
+FD_ZERO(&fdread);
+FD_ZERO(&fdwrite);
+FD_ZERO(&fdexcep);
+
+/* get file descriptors from the transfers */
+mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+if(maxfd == -1) {
+  SHORT_SLEEP;
+  rc = 0;
+}
+else
+  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;
+}
+
+/* if there are still transfers, loop! */
+.fi
 .SH "RETURN VALUE"
 CURLMcode type, general libcurl multi interface error code.
 
index 27c3cbb..f033986 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_perform man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,17 +52,67 @@ p.roffit {
 
 <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">&#35;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">This function handles transfers on all the added handles that need attention in an non-blocking fashion. 
 <p class="level0">When an application has found out there's data available for the multi_handle or a timeout has elapsed, the application should call this function to read/write whatever there is to read or write right now etc. <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> 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">If 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</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">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="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+&#35;ifdef _WIN32
+&#35;define SHORT_SLEEP Sleep(100)
+&#35;else
+&#35;define SHORT_SLEEP usleep(100000)
+&#35;endif
+&nbsp;
+fd_set fdread;
+fd_set fdwrite;
+fd_set fdexcep;
+int maxfd = -1;
+&nbsp;
+long curl_timeo;
+&nbsp;
+curl_multi_timeout(multi_handle, &curl_timeo);
+if(curl_timeo &lt; 0)
+&nbsp; curl_timeo = 1000;
+&nbsp;
+timeout.tv_sec = curl_timeo / 1000;
+timeout.tv_usec = (curl_timeo % 1000) * 1000;
+&nbsp;
+FD_ZERO(&fdread);
+FD_ZERO(&fdwrite);
+FD_ZERO(&fdexcep);
+&nbsp;
+/* get file descriptors from the transfers */
+mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+&nbsp;
+if(maxfd == -1) {
+&nbsp; SHORT_SLEEP;
+&nbsp; rc = 0;
+}
+else
+&nbsp; rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+&nbsp;
+switch(rc) {
+case -1:
+&nbsp; /* select error */
+&nbsp; break;
+case 0:
+default:
+&nbsp; /* timeout or readable/writable sockets */
+&nbsp; curl_multi_perform(multi_handle, &still_running);
+&nbsp; break;
+}
+&nbsp;
+/* if there are still transfers, loop! */
+</pre>
+
+<p class="level0"><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_perform.html">curl_multi_perform</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". Do note that <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</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>. Use <a Class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read</a> to figure out how individual transfers did. <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</a> to get the multi_handle's file descriptors, and <a Class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout</a> to get a suitable timeout period, then it'll wait for action on the file descriptors using <span Class="bold">select(3)</span>. As soon as one or more file descriptor is ready, <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_wait.html">curl_multi_wait</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <span Class="manpage"> </span> <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_wait.html">curl_multi_wait</a>, <a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index eeb7ea3..c17c0e3 100644 (file)
Binary files a/docs/libcurl/curl_multi_perform.pdf and b/docs/libcurl/curl_multi_perform.pdf differ
index 1c2165b..b9daae9 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -28,7 +28,7 @@ curl_multi_remove_handle - remove an easy handle from a multi session
 CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
 .ad
 .SH DESCRIPTION
-Removes a given \fIeasy_handle\fI from the \fImulti_handle\fI. This will make
+Removes a given \fIeasy_handle\fP from the \fImulti_handle\fP. 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
index aff0d60..f0c71d2 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_remove_handle man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,13 +52,13 @@ p.roffit {
 
 <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">&#35;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 <span class="emphasis">easy_handle<span class="emphasis"> from the <span class="emphasis">multi_handle<span class="emphasis">. This will make the specified easy handle be removed from this multi handle's control. 
+<p class="level0">Removes a given <span Class="emphasis">easy_handle</span> from the <span Class="emphasis">multi_handle</span>. 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 <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> on this easy handle. 
 <p class="level0">Removing an easy handle while being used is perfectly legal and 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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_add_handle.html">curl_multi_add_handle</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_add_handle.html">curl_multi_add_handle</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8aeff5f..6badb0a 100644 (file)
Binary files a/docs/libcurl/curl_multi_remove_handle.pdf and b/docs/libcurl/curl_multi_remove_handle.pdf differ
index 4cd4075..d27c524 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -37,30 +37,36 @@ 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
-See \fICURLMOPT_SOCKETFUNCTION(3)\fP
-.IP CURLMOPT_SOCKETDATA
-See \fICURLMOPT_SOCKETDATA(3)\fP
-.IP CURLMOPT_PIPELINING
-See \fICURLMOPT_PIPELINING(3)\fP
-.IP CURLMOPT_TIMERFUNCTION
-See \fICURLMOPT_TIMERFUNCTION(3)\fP
-.IP CURLMOPT_TIMERDATA
-See \fICURLMOPT_TIMERDATA(3)\fP
+.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
+See \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP
+.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
+See \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP
 .IP CURLMOPT_MAX_HOST_CONNECTIONS
 See \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP
 .IP CURLMOPT_MAX_PIPELINE_LENGTH
 See \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP
-.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
-See \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP
-.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
-See \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP
+.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
+See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP
+.IP CURLMOPT_MAXCONNECTS
+See \fICURLMOPT_MAXCONNECTS(3)\fP
+.IP CURLMOPT_PIPELINING
+See \fICURLMOPT_PIPELINING(3)\fP
 .IP CURLMOPT_PIPELINING_SITE_BL
 See \fICURLMOPT_PIPELINING_SITE_BL(3)\fP
 .IP CURLMOPT_PIPELINING_SERVER_BL
 See \fICURLMOPT_PIPELINING_SERVER_BL(3)\fP
-.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
-See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP
+.IP CURLMOPT_PUSHFUNCTION
+See \fICURLMOPT_PUSHFUNCTION(3)\fP
+.IP CURLMOPT_PUSHDATA
+See \fICURLMOPT_PUSHDATA(3)\fP
+.IP CURLMOPT_SOCKETFUNCTION
+See \fICURLMOPT_SOCKETFUNCTION(3)\fP
+.IP CURLMOPT_SOCKETDATA
+See \fICURLMOPT_SOCKETDATA(3)\fP
+.IP CURLMOPT_TIMERFUNCTION
+See \fICURLMOPT_TIMERFUNCTION(3)\fP
+.IP CURLMOPT_TIMERDATA
+See \fICURLMOPT_TIMERDATA(3)\fP
 .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
index 55d4208..804e7ba 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_setopt man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,37 +52,43 @@ p.roffit {
 
 <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">&#35;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"><a Class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt</a> 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</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">See <span Class="emphasis">CURLMOPT_SOCKETFUNCTION(3)</span> 
-<p class="level0"><a name="CURLMOPTSOCKETDATA"></a><span class="nroffip">CURLMOPT_SOCKETDATA</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_SOCKETDATA(3)</span> 
-<p class="level0"><a name="CURLMOPTPIPELINING"></a><span class="nroffip">CURLMOPT_PIPELINING</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_PIPELINING(3)</span> 
-<p class="level0"><a name="CURLMOPTTIMERFUNCTION"></a><span class="nroffip">CURLMOPT_TIMERFUNCTION</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_TIMERFUNCTION(3)</span> 
-<p class="level0"><a name="CURLMOPTTIMERDATA"></a><span class="nroffip">CURLMOPT_TIMERDATA</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_TIMERDATA(3)</span> 
+<p class="level0"><a name="CURLMOPTCHUNKLENGTHPENALTYSIZE"></a><span class="nroffip">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)</span> 
+<p class="level0"><a name="CURLMOPTCONTENTLENGTHPENALTYSIZE"></a><span class="nroffip">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)</span> 
 <p class="level0"><a name="CURLMOPTMAXHOSTCONNECTIONS"></a><span class="nroffip">CURLMOPT_MAX_HOST_CONNECTIONS</span> 
 <p class="level1">See <span Class="emphasis">CURLMOPT_MAX_HOST_CONNECTIONS(3)</span> 
 <p class="level0"><a name="CURLMOPTMAXPIPELINELENGTH"></a><span class="nroffip">CURLMOPT_MAX_PIPELINE_LENGTH</span> 
 <p class="level1">See <span Class="emphasis">CURLMOPT_MAX_PIPELINE_LENGTH(3)</span> 
-<p class="level0"><a name="CURLMOPTCONTENTLENGTHPENALTYSIZE"></a><span class="nroffip">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)</span> 
-<p class="level0"><a name="CURLMOPTCHUNKLENGTHPENALTYSIZE"></a><span class="nroffip">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)</span> 
+<p class="level0"><a name="CURLMOPTMAXTOTALCONNECTIONS"></a><span class="nroffip">CURLMOPT_MAX_TOTAL_CONNECTIONS</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_MAX_TOTAL_CONNECTIONS(3)</span> 
+<p class="level0"><a name="CURLMOPTMAXCONNECTS"></a><span class="nroffip">CURLMOPT_MAXCONNECTS</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_MAXCONNECTS(3)</span> 
+<p class="level0"><a name="CURLMOPTPIPELINING"></a><span class="nroffip">CURLMOPT_PIPELINING</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_PIPELINING(3)</span> 
 <p class="level0"><a name="CURLMOPTPIPELININGSITEBL"></a><span class="nroffip">CURLMOPT_PIPELINING_SITE_BL</span> 
 <p class="level1">See <span Class="emphasis">CURLMOPT_PIPELINING_SITE_BL(3)</span> 
 <p class="level0"><a name="CURLMOPTPIPELININGSERVERBL"></a><span class="nroffip">CURLMOPT_PIPELINING_SERVER_BL</span> 
 <p class="level1">See <span Class="emphasis">CURLMOPT_PIPELINING_SERVER_BL(3)</span> 
-<p class="level0"><a name="CURLMOPTMAXTOTALCONNECTIONS"></a><span class="nroffip">CURLMOPT_MAX_TOTAL_CONNECTIONS</span> 
-<p class="level1">See <span Class="emphasis">CURLMOPT_MAX_TOTAL_CONNECTIONS(3)</span> <a name="RETURNS"></a><h2 class="nroffsh">RETURNS</h2>
+<p class="level0"><a name="CURLMOPTPUSHFUNCTION"></a><span class="nroffip">CURLMOPT_PUSHFUNCTION</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_PUSHFUNCTION(3)</span> 
+<p class="level0"><a name="CURLMOPTPUSHDATA"></a><span class="nroffip">CURLMOPT_PUSHDATA</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_PUSHDATA(3)</span> 
+<p class="level0"><a name="CURLMOPTSOCKETFUNCTION"></a><span class="nroffip">CURLMOPT_SOCKETFUNCTION</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_SOCKETFUNCTION(3)</span> 
+<p class="level0"><a name="CURLMOPTSOCKETDATA"></a><span class="nroffip">CURLMOPT_SOCKETDATA</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_SOCKETDATA(3)</span> 
+<p class="level0"><a name="CURLMOPTTIMERFUNCTION"></a><span class="nroffip">CURLMOPT_TIMERFUNCTION</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_TIMERFUNCTION(3)</span> 
+<p class="level0"><a name="CURLMOPTTIMERDATA"></a><span class="nroffip">CURLMOPT_TIMERDATA</span> 
+<p class="level1">See <span Class="emphasis">CURLMOPT_TIMERDATA(3)</span> <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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_socket.html">curl_multi_socket</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_socket.html">curl_multi_socket</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3f45250..34bb65a 100644 (file)
Binary files a/docs/libcurl/curl_multi_setopt.pdf and b/docs/libcurl/curl_multi_setopt.pdf differ
index 6b262f2..77d2a4f 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 3cc80c7..ed6a5e8 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_socket man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,13 +52,14 @@ p.roffit {
 
 <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"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,
+&nbsp;                           int *running_handles);
+&nbsp;
+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</a> instead! 
@@ -63,13 +69,15 @@ p.roffit {
 <p class="level0">Usage of <a Class="emphasis" href="./curl_multi_socket.html">curl_multi_socket</a> is deprecated, whereas the function is equivalent to <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</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</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 socket <span Class="bold">callback</span> function uses a prototype like this <pre class="level0">
+&nbsp;
+&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 */
+&nbsp;
+</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. 
@@ -103,6 +111,6 @@ p.roffit {
 <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</a> is deprecated, use <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <span Class="manpage"> </span> <span Class="manpage">the hiperfifo.c example</span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <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>
index a40cb23..1e4dfbd 100644 (file)
Binary files a/docs/libcurl/curl_multi_socket.pdf and b/docs/libcurl/curl_multi_socket.pdf differ
index 45b6105..6285e6f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -27,7 +27,8 @@ curl_multi_socket_action \- reads/writes available data given an action
 #include <curl/curl.h>
 
 CURLMcode curl_multi_socket_action(CURLM * multi_handle,
-                                   curl_socket_t sockfd, int ev_bitmask,
+                                   curl_socket_t sockfd,
+                                   int ev_bitmask,
                                    int *running_handles);
 .fi
 .SH DESCRIPTION
index 319754b..fa88f7b 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_socket_action man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,14 @@ p.roffit {
 
 <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"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLMcode curl_multi_socket_action(CURLM * multi_handle,
+&nbsp;                                  curl_socket_t sockfd,
+&nbsp;                                  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</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. It is also permissible to pass CURL_SOCKET_TIMEOUT to the <span Class="bold">sockfd</span> parameter in order to initiate the whole process or when a timeout occurs. 
@@ -60,16 +67,18 @@ p.roffit {
 <p class="level0">The <a Class="bold" href="./curl_multi_socket_action.html">curl_multi_socket_action</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</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</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</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</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,
- &nbsp;                                             <span Class="bold">NULL</span> if not
- &nbsp;                                             previously assigned with
- &nbsp;                                             <a Class="bold" href="./curl_multi_assign.html">curl_multi_assign</a> */
- <p class="level0"></pre>
+<p class="level0">The socket <span Class="bold">callback</span> function uses a prototype like this <pre class="level0">
+&nbsp;
+&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,
+&nbsp;                                             <span class="bold">NULL</span> if not
+&nbsp;                                             previously assigned with
+&nbsp;                                             <span class="bold">curl_multi_assign(3)</span> */
+&nbsp;
+</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. 
@@ -101,6 +110,6 @@ p.roffit {
 <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</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</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <span Class="manpage"> </span> <span Class="manpage">the hiperfifo.c example</span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_cleanup.html">curl_multi_cleanup</a>, <a Class="manpage" href="./curl_multi_init.html">curl_multi_init</a>, <a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <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>
index a492238..f5f3d92 100644 (file)
Binary files a/docs/libcurl/curl_multi_socket_action.pdf and b/docs/libcurl/curl_multi_socket_action.pdf differ
index 40d0974..b5aa7af 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 34b20a9..b04e734 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_strerror man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <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> 
+<p class="level0"><pre 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"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./curl_easy_strerror.html">curl_easy_strerror</a>, <a Class="manpage" href="./curl_share_strerror.html">curl_share_strerror</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./curl_easy_strerror.html">curl_easy_strerror</a>, <a Class="manpage" href="./curl_share_strerror.html">curl_share_strerror</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a9c4d89..afb78a4 100644 (file)
Binary files a/docs/libcurl/curl_multi_strerror.pdf and b/docs/libcurl/curl_multi_strerror.pdf differ
index e18b935..6f9e818 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -49,6 +49,22 @@ SHOULD instead use \fIcurl_multi_setopt(3)\fP and its
 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 EXAMPLE
+.nf
+struct timeval timeout;
+long timeo;
+
+curl_multi_timeout(multi_handle, &timeo);
+if(timeo < 0)
+  /* no set timeout, use a default */
+  timeo = 980;
+
+timeout.tv_sec = timeo / 1000;
+timeout.tv_usec = (timeo % 1000) * 1000;
+
+/* wait for activities no longer than the set timeout */
+select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+.fi
 .SH "RETURN VALUE"
 The standard CURLMcode for multi interface error codes.
 .SH "TYPICAL USAGE"
index 952a6ff..34d33d0 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_timeout man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,18 +52,35 @@ p.roffit {
 
 <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">&#35;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</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</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</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</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">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="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+struct timeval timeout;
+long timeo;
+&nbsp;
+curl_multi_timeout(multi_handle, &timeo);
+if(timeo &lt; 0)
+&nbsp; /* no set timeout, use a default */
+&nbsp; timeo = 980;
+&nbsp;
+timeout.tv_sec = timeo / 1000;
+timeout.tv_usec = (timeo % 1000) * 1000;
+&nbsp;
+/* wait for activities no longer than the set timeout */
+select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+</pre>
+
+<p class="level0"><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</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</a> or by a previous call to <a Class="bold" href="./curl_multi_socket.html">curl_multi_socket</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</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_multi_socket.html">curl_multi_socket</a>, <a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</a>, 
+<p class="level0"><a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_info_read.html">curl_multi_info_read</a>, <a Class="manpage" href="./curl_multi_socket.html">curl_multi_socket</a>, <a Class="manpage" href="./curl_multi_setopt.html">curl_multi_setopt</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>
index b5d5501..1c07513 100644 (file)
Binary files a/docs/libcurl/curl_multi_timeout.pdf and b/docs/libcurl/curl_multi_timeout.pdf differ
index a76fba3..9f15c5f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -44,7 +44,7 @@ The calling application may pass additional curl_waitfd structures which are
 similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call.
 
 On completion, if \fInumfds\fP is non-NULL, it will be populated with the
-total number of file descriptors on which interesting events occured. This
+total number of file descriptors on which interesting events occurred. This
 number can include both libcurl internal descriptors as well as descriptors
 provided in \fIextra_fds\fP.
 
@@ -71,6 +71,48 @@ priority read events such as out of band data.
 .IP CURL_WAIT_POLLOUT
 Bit flag to curl_waitfd.events indicating the socket should poll on write
 events such as the socket being clear to write without blocking.
+.SH EXAMPLE
+.nf
+CURL *easy_handle;
+CURLM *multi_handle;
+
+/* add the individual easy handle */
+curl_multi_add_handle(multi_handle, easy_handle);
+
+do {
+  CURLMcode mc;
+  int numfds;
+
+  mc = curl_multi_perform(multi_handle, &still_running);
+
+  if(mc == CURLM_OK ) {
+    /* wait for activity, timeout or "nothing" */
+    mc = curl_multi_wait(multi_handle, NULL, 0, 1000, &numfds);
+  }
+
+  if(mc != CURLM_OK) {
+    fprintf(stderr, "curl_multi failed, code %d.\n", mc);
+    break;
+  }
+
+  /* 'numfds' being zero means either a timeout or no file descriptors to
+     wait for. Try timeout on first occurrence, then assume no file
+     descriptors and no file descriptors to wait for means wait for 100
+     milliseconds. */
+
+  if(!numfds) {
+    repeats++; /* count number of repeated zero numfds */
+    if(repeats > 1) {
+      WAITMS(100); /* sleep 100 milliseconds */
+    }
+  }
+  else
+    repeats = 0;
+
+} while(still_running);
+
+curl_multi_remove_handle(multi_handle, easy_handle);
+.fi
 .SH RETURN VALUE
 CURLMcode type, general libcurl multi interface error code. See
 \fIlibcurl-errors(3)\fP
index fa10dee..9911c95 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_multi_wait man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,27 +52,28 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">curl_multi_wait - polls on all easy handles in 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_wait(CURLM *multi_handle,
- &nbsp;                         struct curl_waitfd extra_fds[],
- &nbsp;                         unsigned int extra_nfds,
- &nbsp;                         int timeout_ms,
- &nbsp;                         int *numfds);
- <p class="level0"></pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLMcode curl_multi_wait(CURLM *multi_handle,
+&nbsp;                         struct curl_waitfd extra_fds[],
+&nbsp;                         unsigned int extra_nfds,
+&nbsp;                         int timeout_ms,
+&nbsp;                         int *numfds);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0"><a Class="emphasis" href="./curl_multi_wait.html">curl_multi_wait</a> polls all file descriptors used by the curl easy handles contained in the given multi handle set.  It will block until activity is detected on at least one of the handles or <span Class="emphasis">timeout_ms</span> has passed. Alternatively, if the multi handle has a pending internal timeout that has a shorter expiry time than <span Class="emphasis">timeout_ms</span>, that shorter time will be used instead to make sure timeout accuracy is reasonably kept. 
 <p class="level0">The calling application may pass additional curl_waitfd structures which are similar to <span Class="emphasis">poll(2)</span>'s pollfd structure to be waited on in the same call. 
-<p class="level0">On completion, if <span Class="emphasis">numfds</span> is non-NULL, it will be populated with the total number of file descriptors on which interesting events occured. This number can include both libcurl internal descriptors as well as descriptors provided in <span Class="emphasis">extra_fds</span>. 
+<p class="level0">On completion, if <span Class="emphasis">numfds</span> is non-NULL, it will be populated with the total number of file descriptors on which interesting events occurred. This number can include both libcurl internal descriptors as well as descriptors provided in <span Class="emphasis">extra_fds</span>. 
 <p class="level0">If no extra file descriptors are provided and libcurl has no file descriptor to offer to wait for, this function will return immediately. 
 <p class="level0">This function is encouraged to be used instead of select(3) when using the multi interface to allow applications to easier circumvent the common problem with 1024 maximum file descriptors. <a name="curlwaitfd"></a><h2 class="nroffsh">curl_waitfd</h2>
-<p class="level0"><pre>
-<p class="level0">struct curl_waitfd {
- &nbsp; curl_socket_t fd;
- &nbsp; short events;
- &nbsp; short revents;
- };
- </pre>
+<p class="level0"><pre class="level0">
+struct curl_waitfd {
+&nbsp; curl_socket_t fd;
+&nbsp; short events;
+&nbsp; short revents;
+};
+</pre>
 
 <p class="level0">
 <p class="level0"><a name="CURLWAITPOLLIN"></a><span class="nroffip">CURL_WAIT_POLLIN</span> 
@@ -75,9 +81,52 @@ p.roffit {
 <p class="level0"><a name="CURLWAITPOLLPRI"></a><span class="nroffip">CURL_WAIT_POLLPRI</span> 
 <p class="level1">Bit flag to curl_waitfd.events indicating the socket should poll on high priority read events such as out of band data. 
 <p class="level0"><a name="CURLWAITPOLLOUT"></a><span class="nroffip">CURL_WAIT_POLLOUT</span> 
-<p class="level1">Bit flag to curl_waitfd.events indicating the socket should poll on write events such as the socket being clear to write without blocking. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level1">Bit flag to curl_waitfd.events indicating the socket should poll on write events such as the socket being clear to write without blocking. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *easy_handle;
+CURLM *multi_handle;
+&nbsp;
+/* add the individual easy handle */
+curl_multi_add_handle(multi_handle, easy_handle);
+&nbsp;
+do {
+&nbsp; CURLMcode mc;
+&nbsp; int numfds;
+&nbsp;
+&nbsp; mc = curl_multi_perform(multi_handle, &still_running);
+&nbsp;
+&nbsp; if(mc == CURLM_OK ) {
+&nbsp;   /* wait for activity, timeout or "nothing" */
+&nbsp;   mc = curl_multi_wait(multi_handle, NULL, 0, 1000, &numfds);
+&nbsp; }
+&nbsp;
+&nbsp; if(mc != CURLM_OK) {
+&nbsp;   fprintf(stderr, "curl_multi failed, code %d.n", mc);
+&nbsp;   break;
+&nbsp; }
+&nbsp;
+&nbsp; /* 'numfds' being zero means either a timeout or no file descriptors to
+&nbsp;    wait for. Try timeout on first occurrence, then assume no file
+&nbsp;    descriptors and no file descriptors to wait for means wait for 100
+&nbsp;    milliseconds. */
+&nbsp;
+&nbsp; if(!numfds) {
+&nbsp;   repeats++; /* count number of repeated zero numfds */
+&nbsp;   if(repeats &gt; 1) {
+&nbsp;     WAITMS(100); /* sleep 100 milliseconds */
+&nbsp;   }
+&nbsp; }
+&nbsp; else
+&nbsp;   repeats = 0;
+&nbsp;
+} while(still_running);
+&nbsp;
+curl_multi_remove_handle(multi_handle, easy_handle);
+</pre>
+
+<p class="level0"><a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">CURLMcode type, general libcurl multi interface error code. See <a Class="emphasis" href="./libcurl-errors.html">libcurl-errors</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This function was added in libcurl 7.28.0. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_multi_fdset.html">curl_multi_fdset</a>, <a Class="manpage" href="./curl_multi_perform.html">curl_multi_perform</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1c65e52..bf84c8d 100644 (file)
Binary files a/docs/libcurl/curl_multi_wait.pdf and b/docs/libcurl/curl_multi_wait.pdf differ
index 3af1707..0b265e8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 55d7174..d2526b7 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_share_cleanup man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -53,6 +58,6 @@ p.roffit {
 <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</a>, <a Class="manpage" href="./curl_share_setopt.html">curl_share_setopt</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_share_init.html">curl_share_init</a>, <a Class="manpage" href="./curl_share_setopt.html">curl_share_setopt</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8aa8433..14474d4 100644 (file)
Binary files a/docs/libcurl/curl_share_cleanup.pdf and b/docs/libcurl/curl_share_cleanup.pdf differ
index 4833a8a..545ba03 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index aa7f54c..249c885 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_share_init man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -53,7 +58,7 @@ p.roffit {
 <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(3)</span> option with <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</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</a>, <a Class="manpage" href="./curl_share_setopt.html">curl_share_setopt</a>
+<p class="level0"><a Class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup</a>, <a Class="manpage" href="./curl_share_setopt.html">curl_share_setopt</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>
index 026cc71..e263043 100644 (file)
Binary files a/docs/libcurl/curl_share_init.pdf and b/docs/libcurl/curl_share_init.pdf differ
index c196743..cbdbdc5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 9b36241..934122c 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_share_setopt man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -78,6 +83,6 @@ p.roffit {
 <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</a>, <a Class="manpage" href="./curl_share_init.html">curl_share_init</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup</a>, <a Class="manpage" href="./curl_share_init.html">curl_share_init</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index dfa711b..6def6c4 100644 (file)
Binary files a/docs/libcurl/curl_share_setopt.pdf and b/docs/libcurl/curl_share_setopt.pdf differ
index f1bc398..faa5299 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 7dc5423..44a914a 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_share_strerror man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <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> 
+<p class="level0"><pre 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"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./curl_multi_strerror.html">curl_multi_strerror</a>, <a Class="manpage" href="./curl_easy_strerror.html">curl_easy_strerror</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./curl_multi_strerror.html">curl_multi_strerror</a>, <a Class="manpage" href="./curl_easy_strerror.html">curl_easy_strerror</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 99d3c2e..920d650 100644 (file)
Binary files a/docs/libcurl/curl_share_strerror.pdf and b/docs/libcurl/curl_share_strerror.pdf differ
index 529560e..9015e0f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -46,6 +46,10 @@ pointer is returned.
  struct curl_slist *slist=NULL;
 
  slist = curl_slist_append(slist, "pragma:");
+
+ if (slist == NULL)
+   return -1;
+
  curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
 
  curl_easy_perform(handle);
index 4134777..bf3938e 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_slist_append man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -53,16 +58,23 @@ p.roffit {
 <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</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"><pre class="level0">
+&nbsp;CURL handle;
+&nbsp;struct curl_slist *slist=NULL;
+&nbsp;
+&nbsp;slist = curl_slist_append(slist, "pragma:");
+&nbsp;
+&nbsp;if (slist == NULL)
+&nbsp;  return -1;
+&nbsp;
+&nbsp;curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
+&nbsp;
+&nbsp;curl_easy_perform(handle);
+&nbsp;
+&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</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_slist_free_all.html">curl_slist_free_all</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 740f9a2..1475dbe 100644 (file)
Binary files a/docs/libcurl/curl_slist_append.pdf and b/docs/libcurl/curl_slist_append.pdf differ
index fab3d60..31d81da 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f2f4084..4ed487b 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_slist_free_all man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -52,7 +57,7 @@ p.roffit {
 <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</a>, <span Class="manpage"> </span> 
+<p class="level0"><a Class="manpage" href="./curl_slist_append.html">curl_slist_append</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>
index f7cf88b..3c5fbfe 100644 (file)
Binary files a/docs/libcurl/curl_slist_free_all.pdf and b/docs/libcurl/curl_slist_free_all.pdf differ
index ce575d7..a745f7e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c4f6b55..33a4620 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_strequal man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -55,6 +60,6 @@ p.roffit {
 <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">
+<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>
index 9618b8e..e49b6cc 100644 (file)
Binary files a/docs/libcurl/curl_strequal.pdf and b/docs/libcurl/curl_strequal.pdf differ
index 8d16852..061fbbf 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -25,7 +25,7 @@ curl_unescape - URL decodes the given string
 .SH SYNOPSIS
 .B #include <curl/curl.h>
 .sp
-.BI "char *curl_unescape( char *" url ", int "length " );"
+.BI "char *curl_unescape( const char *" url ", int "length " );"
 .ad
 .SH DESCRIPTION
 Obsolete function. Use \fIcurl_easy_unescape(3)\fP instead!
index e8180b2..1f6c654 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_unescape man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -48,7 +53,7 @@ p.roffit {
 <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"><span Class="bold">char *curl_unescape( const 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</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. 
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">You must <a Class="emphasis" href="./curl_free.html">curl_free</a> 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</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_easy_escape.html">curl_easy_escape</a>, <a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <a Class="manpage" href="./curl_free.html">curl_free</a>, <span Class="manpage"> <a href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a></span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_escape.html">curl_easy_escape</a>, <a Class="manpage" href="./curl_easy_unescape.html">curl_easy_unescape</a>, <a Class="manpage" href="./curl_free.html">curl_free</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>
index d3f74c1..877a586 100644 (file)
Binary files a/docs/libcurl/curl_unescape.pdf and b/docs/libcurl/curl_unescape.pdf differ
index 03922c9..4acd73a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ab308d0..39b258a 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_version man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -53,6 +58,6 @@ p.roffit {
 <p class="level0">Returns a human readable string with the version number of libcurl and some of its important components (like OpenSSL version). 
 <p class="level0">We recommend using <a Class="emphasis" href="./curl_version_info.html">curl_version_info</a> instead! <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">A pointer to a zero terminated string. The string resides in a statically allocated buffer and must not be freed by the caller. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_version_info.html">curl_version_info</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_version_info.html">curl_version_info</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 81f0d9c..2e453ff 100644 (file)
Binary files a/docs/libcurl/curl_version.pdf and b/docs/libcurl/curl_version.pdf differ
index 1b8f9c1..5244c21 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -57,7 +57,7 @@ typedef struct {
   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 */
+  const char * const *protocols; /* protocols */
 
   /* when 'age' is 1 or higher, the members below also exist: */
   const char *ares;         /* human readable string */
@@ -76,9 +76,9 @@ typedef struct {
 .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.
+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.
 
@@ -149,6 +149,10 @@ libcurl was built with support for HTTP2.
 .IP CURL_VERSION_UNIX_SOCKETS
 libcurl was built with support for Unix domain sockets.
 (Added in 7.40.0)
+.IP CURL_VERSION_PSL
+libcurl was built with support for Mozilla's Public Suffix List. This makes
+libcurl ignore cookies with a domain that's on the list.
+(Added in 7.47.0)
 .RE
 \fIssl_version\fP is an ASCII string for the OpenSSL version used. If libcurl
 has no SSL support, this is NULL.
index 793fc2a..535af3b 100644 (file)
@@ -4,15 +4,20 @@
 <title>curl_version_info man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -54,29 +59,35 @@ p.roffit {
 <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 (7.16.1 or later), the members below also
- &nbsp;    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"><pre class="level0">
+typedef struct {
+&nbsp; CURLversion age;          /* see description below */
+&nbsp;
+&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 * const *protocols; /* protocols */
+&nbsp;
+&nbsp; /* when 'age' is 1 or higher, the members below also exist: */
+&nbsp; const char *ares;         /* human readable string */
+&nbsp; int ares_num;             /* number */
+&nbsp;
+&nbsp; /* when 'age' is 2 or higher, the member below also exists: */
+&nbsp; const char *libidn;       /* human readable string */
+&nbsp;
+&nbsp; /* when 'age' is 3 or higher (7.16.1 or later), the members below also
+&nbsp;    exist  */
+&nbsp; int iconv_ver_num;       /* '_libiconv_version' if iconv support enabled */
+&nbsp;
+&nbsp; const char *libssh_version; /* human readable string */
+&nbsp;
+} 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. 
@@ -125,6 +136,8 @@ p.roffit {
 <p class="level1">libcurl was built with support for HTTP2. (Added in 7.33.0) 
 <p class="level0"><a name="CURLVERSIONUNIXSOCKETS"></a><span class="nroffip">CURL_VERSION_UNIX_SOCKETS</span> 
 <p class="level1">libcurl was built with support for Unix domain sockets. (Added in 7.40.0) 
+<p class="level0"><a name="CURLVERSIONPSL"></a><span class="nroffip">CURL_VERSION_PSL</span> 
+<p class="level1">libcurl was built with support for Mozilla's Public Suffix List. This makes libcurl ignore cookies with a domain that's on the list. (Added in 7.47.0) 
 <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 always 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. 
index 2f9b24f..450558e 100644 (file)
Binary files a/docs/libcurl/curl_version_info.pdf and b/docs/libcurl/curl_version_info.pdf differ
index ca77313..f46cc85 100644 (file)
@@ -17,6 +17,7 @@
 <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>
+<br><a href="libcurl-thread.html">libcurl-thread</a>
 
 <H2>Library Functions (A-Z)</H2>
 <a href="curl_easy_cleanup.html">curl_easy_cleanup</A>
index f8506a2..d112632 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index fb1de25..c92eee5 100644 (file)
@@ -4,15 +4,20 @@
 <title>libcurl man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -53,6 +58,6 @@ p.roffit {
 <p class="level0">If you at any point would like to blank all previously set options for a single easy handle, you can call <a Class="emphasis" href="./curl_easy_reset.html">curl_easy_reset</a> and you can also make a clone of an easy handle (with all its set options) using <a Class="emphasis" href="./curl_easy_duphandle.html">curl_easy_duphandle</a>. 
 <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</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</a>. If you want persistent connections, you don't cleanup immediately, but instead run ahead and perform other transfers using the same easy handle. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <span Class="manpage"> </span> <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-multi.html">libcurl-multi</a>, <a Class="manpage" href="./libcurl.html">libcurl</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_init.html">curl_easy_init</a>, <a Class="manpage" href="./curl_easy_cleanup.html">curl_easy_cleanup</a>, <a Class="manpage" href="./curl_easy_setopt.html">curl_easy_setopt</a>, <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-multi.html">libcurl-multi</a>, <a Class="manpage" href="./libcurl.html">libcurl</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1539974..65c629f 100644 (file)
Binary files a/docs/libcurl/libcurl-easy.pdf and b/docs/libcurl/libcurl-easy.pdf differ
index 07091b5..5d52538 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -74,7 +74,7 @@ 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_ACCEPT_TIMEOUT (12)"
 During an active FTP session while waiting for the server to connect, the
-\fICURLOPT_ACCEPTTIMOUT_MS(3)\fP (or the internal default) timeout expired.
+\fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP (or the internal default) timeout expired.
 .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.
@@ -247,6 +247,10 @@ Chunk callback reported error.
 .IP "CURLE_NO_CONNECTION_AVAILABLE (89)"
 (For internal use only, will never be returned by libcurl) No connection
 available, the session will be queued. (added in 7.30.0)
+.IP "CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)"
+Failed to match the pinned key specified with \fICURLOPT_PINNEDPUBLICKEY(3)\fP.
+.IP "CURLE_SSL_INVALIDCERTSTATUS (91)"
+Status returned failure when asked with \fICURLOPT_SSL_VERIFYSTATUS(3)\fP.
 .IP "CURLE_OBSOLETE*"
 These error codes will never be returned. They were used in an old libcurl
 version and are currently unused.
index 8c9f47b..43269ad 100644 (file)
@@ -4,15 +4,20 @@
 <title>libcurl-errors man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -75,7 +80,7 @@ p.roffit {
 <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="CURLEFTPACCEPTTIMEOUT"></a><span class="nroffip">CURLE_FTP_ACCEPT_TIMEOUT (12)</span> 
-<p class="level1">During an active FTP session while waiting for the server to connect, the <span Class="emphasis">CURLOPT_ACCEPTTIMOUT_MS(3)</span> (or the internal default) timeout expired. 
+<p class="level1">During an active FTP session while waiting for the server to connect, the <span Class="emphasis">CURLOPT_ACCEPTTIMEOUT_MS(3)</span> (or the internal default) timeout expired. 
 <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> 
@@ -212,6 +217,10 @@ p.roffit {
 <p class="level1">Chunk callback reported error. 
 <p class="level0"><a name="CURLENOCONNECTIONAVAILABLE"></a><span class="nroffip">CURLE_NO_CONNECTION_AVAILABLE (89)</span> 
 <p class="level1">(For internal use only, will never be returned by libcurl) No connection available, the session will be queued. (added in 7.30.0) 
+<p class="level0"><a name="CURLESSLPINNEDPUBKEYNOTMATCH"></a><span class="nroffip">CURLE_SSL_PINNEDPUBKEYNOTMATCH (90)</span> 
+<p class="level1">Failed to match the pinned key specified with <span Class="emphasis">CURLOPT_PINNEDPUBLICKEY(3)</span>. 
+<p class="level0"><a name="CURLESSLINVALIDCERTSTATUS"></a><span class="nroffip">CURLE_SSL_INVALIDCERTSTATUS (91)</span> 
+<p class="level1">Status returned failure when asked with <span Class="emphasis">CURLOPT_SSL_VERIFYSTATUS(3)</span>. 
 <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</a>. 
@@ -246,6 +255,6 @@ p.roffit {
 <p class="level1">Not enough memory was available. (Added in 7.12.0) 
 <p class="level0"><a name="CURLSHENOTBUILTIN"></a><span class="nroffip">CURLSHE_NOT_BUILT_IN (5)</span> 
 <p class="level1">The requested sharing could not be done because the library you use don't have that particular feature enabled. (Added in 7.23.0) <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./curl_easy_strerror.html">curl_easy_strerror</a>, <a Class="manpage" href="./curl_multi_strerror.html">curl_multi_strerror</a>, <span Class="manpage"> </span> <a Class="manpage" href="./curl_share_strerror.html">curl_share_strerror</a>, <span Class="manpage">  CURLOPT_ERRORBUFFER (3)</span> <span Class="manpage"> </span> <span Class="manpage">CURLOPT_VERBOSE (3)</span> <span Class="manpage">  CURLOPT_DEBUGFUNCTION (3) </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_easy_strerror.html">curl_easy_strerror</a>, <a Class="manpage" href="./curl_multi_strerror.html">curl_multi_strerror</a>, <a Class="manpage" href="./curl_share_strerror.html">curl_share_strerror</a>, <span Class="manpage">CURLOPT_ERRORBUFFER (3)</span>, <span Class="manpage">CURLOPT_VERBOSE (3)</span>, <span Class="manpage">CURLOPT_DEBUGFUNCTION (3)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 351c1b8..15cef53 100644 (file)
Binary files a/docs/libcurl/libcurl-errors.pdf and b/docs/libcurl/libcurl-errors.pdf differ
index 770d4a5..a7f3dbb 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -51,28 +51,27 @@ 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.
 
-With a multi handle and the multi interface you can do any amount of
-simultaneous transfers in parallel. Each single transfer is built up around an
-easy handle. You must create the easy handles you need, and setup the
-appropriate options for each easy handle, as outlined in the \fIlibcurl(3)\fP
-man page, using \fIcurl_easy_setopt(3)\fP.
+With a multi handle and the multi interface you can do several simultaneous
+transfers in parallel. Each single transfer is built up around an easy
+handle. You create all the easy handles you need, and setup the appropriate
+options for each easy handle using \fIcurl_easy_setopt(3)\fP.
 
 There are two flavours of the multi interface, the select() oriented one and
-the event based one we called multi_socket. You will benefit from reading
-through the description of both versions to full understand how they work and
+the event based one we call multi_socket. You will benefit from reading
+through the description of both versions to fully understand how they work and
 differentiate. We start out with the select() oriented version.
 
-When an easy handle is setup for a transfer, then instead of using
+When an easy handle is setup and ready for transfer, then instead of using
 \fIcurl_easy_perform(3)\fP like when using the easy interface for transfers,
 you should add the easy handle to the multi handle with
-\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.
+\fIcurl_multi_add_handle(3)\fP. You can add more easy handles to a multi
+handle at any point, even if other transfers are already running.
 
 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.
+\fIcurl_easy_perform(3)\fP on the handle or whatever you think is
+necessary. You can remove handles at any point in time during transfers.
 
 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
@@ -84,16 +83,16 @@ current transfers in the multi stack that are ready to transfer anything. It
 may be all, it may be none. When there's nothing more to do for now, it
 returns back to the calling application.
 
-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. \fIcurl_multi_timeout(3)\fP
-also helps you with providing a suitable timeout period for your select()
-call.
+Your application extracts info from libcurl about when it would like to get
+invoked to transfer data or do other work. The most convenient way is to use
+\fIcurl_multi_wait(3)\fP that will help you wait until the application should
+call libcurl again. The older API to accomplish the same thing is
+\fIcurl_multi_fdset(3)\fP that extracts 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. Both these APIs allow for your program to
+wait for input on your own private file descriptors at the same time
+\fIcurl_multi_timeout(3)\fP also helps you with providing a suitable timeout
+period for your select() calls.
 
 \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
@@ -114,9 +113,9 @@ the multi stack. You need to first remove the easy handle 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
+When all transfers in the multi stack are done, close 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
+invoke separate \fIcurl_easy_cleanup(3)\fP calls for 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
@@ -136,7 +135,7 @@ normal multi interface. Then you also set two callbacks with the
 CURLMOPT_SOCKETFUNCTION and CURLMOPT_TIMERFUNCTION options to
 \fIcurl_multi_setopt(3)\fP. They are two callback functions that libcurl will
 call with information about what sockets to wait for, and for what activity,
-and what the curret timeout time is - if that expires libcurl should be
+and what the current timeout time is - if that expires libcurl should be
 notified.
 
 The multi_socket API is designed to inform your application about which
index a16f3e6..07f5a7a 100644 (file)
@@ -4,15 +4,20 @@
 <title>libcurl-multi man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -55,20 +60,20 @@ p.roffit {
 <p class="level0">3. Enable the application to wait for action on its own file descriptors and curl's file descriptors simultaneous easily. 
 <p class="level0">4. Enable event-based handling and scaling transfers up to and beyond thousands of parallel connections. <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</a>. This handle is then used as input to all further curl_multi_* functions. 
-<p class="level0">With a multi handle and the multi interface you can do any amount of simultaneous transfers in parallel. Each single transfer is built up around an easy handle. You must create the easy handles you need, and setup the appropriate options for each easy handle, as outlined in the <a Class="emphasis" href="./libcurl.html">libcurl</a> man page, using <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>. 
-<p class="level0">There are two flavours of the multi interface, the select() oriented one and the event based one we called multi_socket. You will benefit from reading through the description of both versions to full understand how they work and differentiate. We start out with the select() oriented version. 
-<p class="level0">When an easy handle is setup for a transfer, then instead of using <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> like when using the easy interface for transfers, you should add the easy handle to the multi handle with <a Class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle</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</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</a> on the handle or whatever you think is necessary. 
+<p class="level0">With a multi handle and the multi interface you can do several simultaneous transfers in parallel. Each single transfer is built up around an easy handle. You create all the easy handles you need, and setup the appropriate options for each easy handle using <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</a>. 
+<p class="level0">There are two flavours of the multi interface, the select() oriented one and the event based one we call multi_socket. You will benefit from reading through the description of both versions to fully understand how they work and differentiate. We start out with the select() oriented version. 
+<p class="level0">When an easy handle is setup and ready for transfer, then instead of using <a Class="emphasis" href="./curl_easy_perform.html">curl_easy_perform</a> like when using the easy interface for transfers, you should add the easy handle to the multi handle with <a Class="emphasis" href="./curl_multi_add_handle.html">curl_multi_add_handle</a>. You can add more easy handles to a multi handle at any point, even if other transfers are already running
+<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</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</a> on the handle or whatever you think is necessary. You can remove handles at any point in time during transfers. 
 <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</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. When there's nothing more to do for now, it returns back to the calling application. 
-<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</a> like crazy. <a Class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset</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. <a Class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout</a> also helps you with providing a suitable timeout period for your select() call
+<p class="level0">Your application extracts info from libcurl about when it would like to get invoked to transfer data or do other work. The most convenient way is to use <a Class="emphasis" href="./curl_multi_wait.html">curl_multi_wait</a> that will help you wait until the application should call libcurl again. The older API to accomplish the same thing is <a Class="emphasis" href="./curl_multi_fdset.html">curl_multi_fdset</a> that extracts 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. Both these APIs allow for your program to wait for input on your own private file descriptors at the same time <a Class="emphasis" href="./curl_multi_timeout.html">curl_multi_timeout</a> also helps you with providing a suitable timeout period for your select() calls
 <p class="level0"><a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</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</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</a> and then close it with <a Class="emphasis" href="./curl_easy_cleanup.html">curl_easy_cleanup</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</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</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</a> calls on every single easy handle to clean them up properly. 
+<p class="level0">When all transfers in the multi stack are done, close the multi handle with <a Class="emphasis" href="./curl_multi_cleanup.html">curl_multi_cleanup</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</a> calls for 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"><a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</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</a> is then used instead of <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>. 
-<p class="level0">When using this API, you add easy handles to the multi handle just as with the normal multi interface. Then you also set two callbacks with the CURLMOPT_SOCKETFUNCTION and CURLMOPT_TIMERFUNCTION options to <a Class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt</a>. They are two callback functions that libcurl will call with information about what sockets to wait for, and for what activity, and what the curret timeout time is - if that expires libcurl should be notified. 
+<p class="level0">When using this API, you add easy handles to the multi handle just as with the normal multi interface. Then you also set two callbacks with the CURLMOPT_SOCKETFUNCTION and CURLMOPT_TIMERFUNCTION options to <a Class="emphasis" href="./curl_multi_setopt.html">curl_multi_setopt</a>. They are two callback functions that libcurl will call with information about what sockets to wait for, and for what activity, and what the current timeout time is - if that expires libcurl should be notified. 
 <p class="level0">The multi_socket API is designed to inform your application about which sockets libcurl is currently using and for what activities (read and/or write) on those sockets your application is expected to wait for. 
 <p class="level0">Your application must make sure to receive all sockets informed about in the CURLMOPT_SOCKETFUNCTION callback and make sure it reacts on the given activity on them. When a socket has the given activity, you call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> specifying which socket and action there are. 
 <p class="level0">The CURLMOPT_TIMERFUNCTION callback is called to set a timeout. When that timeout expires, your application should call the <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> function saying it was due to a timeout. 
@@ -76,16 +81,16 @@ p.roffit {
 <p class="level0">When you've added your initial set of handles, you call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> with CURL_SOCKET_TIMEOUT set in the sockfd argument, and you'll get callbacks call that sets you up and you then continue to call <a Class="emphasis" href="./curl_multi_socket_action.html">curl_multi_socket_action</a> accordingly when you get activity on the sockets you've been asked to wait on, or if the timeout timer expires. 
 <p class="level0">You can poll <a Class="emphasis" href="./curl_multi_info_read.html">curl_multi_info_read</a> to see if any transfer has completed, as it then has a message saying so. <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 unless the c-ares or threaded-resolver backends are used
- &nbsp;- NSS SSL connections
- &nbsp;- HTTP proxy CONNECT operations
- &nbsp;- SOCKS proxy handshakes
- &nbsp;- file:// transfers
- &nbsp;- TELNET transfers
- </pre>
+<p class="level0"><pre class="level0">
+&nbsp;- Name resolves unless the c-ares or threaded-resolver backends are used
+&nbsp;- NSS SSL connections
+&nbsp;- HTTP proxy CONNECT operations
+&nbsp;- SOCKS proxy handshakes
+&nbsp;- file:// transfers
+&nbsp;- TELNET transfers
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-easy.html">libcurl-easy</a>, <a Class="manpage" href="./libcurl.html">libcurl</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-easy.html">libcurl-easy</a>, <a Class="manpage" href="./libcurl.html">libcurl</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ac6bb1f..5a9a468 100644 (file)
Binary files a/docs/libcurl/libcurl-multi.pdf and b/docs/libcurl/libcurl-multi.pdf differ
index b46eeda..c7cd655 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6aa66c8..e5c94eb 100644 (file)
@@ -4,15 +4,20 @@
 <title>libcurl-share man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -58,6 +63,6 @@ p.roffit {
 <p class="level0">Then, you make an easy handle to use this share, you set the <span Class="emphasis">CURLOPT_SHARE(3)</span> option with <a Class="emphasis" href="./curl_easy_setopt.html">curl_easy_setopt</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(3)</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</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</a>, <a Class="manpage" href="./curl_share_setopt.html">curl_share_setopt</a>, <a Class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup</a>, <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-easy.html">libcurl-easy</a>, <a Class="manpage" href="./libcurl-multi.html">libcurl-multi</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./curl_share_init.html">curl_share_init</a>, <a Class="manpage" href="./curl_share_setopt.html">curl_share_setopt</a>, <a Class="manpage" href="./curl_share_cleanup.html">curl_share_cleanup</a>, <a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-easy.html">libcurl-easy</a>, <a Class="manpage" href="./libcurl-multi.html">libcurl-multi</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f7bde54..eed5606 100644 (file)
Binary files a/docs/libcurl/libcurl-share.pdf and b/docs/libcurl/libcurl-share.pdf differ
diff --git a/docs/libcurl/libcurl-symbols.3 b/docs/libcurl/libcurl-symbols.3
new file mode 100644 (file)
index 0000000..f0398c4
--- /dev/null
@@ -0,0 +1,1659 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2016, 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 https://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-symbols 3 "mar 22, 2016" "libcurl 7.41.0" "libcurl symbols"
+.SH NAME
+libcurl-symbols \- libcurl symbol version information
+.SH "libcurl symbols"
+This man page details version information for public symbols provided in the
+libcurl header files. This lists the first version in which the symbol was
+introduced and for some symbols two additional information pieces:
+
+The first version in which the symbol is marked "deprecated" - meaning that
+since that version no new code should be written to use the symbol as it is
+marked for getting removed in a future.
+
+The last version that featured the specific symbol. Using the symbol in source
+code will make it no longer compile error-free after that specified version.
+
+This man page is automatically generated from the symbols-in-versions file.
+.IP CURLAUTH_ANY
+Introduced in 7.10.6
+.IP CURLAUTH_ANYSAFE
+Introduced in 7.10.6
+.IP CURLAUTH_BASIC
+Introduced in 7.10.6
+.IP CURLAUTH_DIGEST
+Introduced in 7.10.6
+.IP CURLAUTH_DIGEST_IE
+Introduced in 7.19.3
+.IP CURLAUTH_GSSNEGOTIATE
+Introduced in 7.10.6
+Deprecated since 7.38.0
+.IP CURLAUTH_NEGOTIATE
+Introduced in 7.38.0
+.IP CURLAUTH_NONE
+Introduced in 7.10.6
+.IP CURLAUTH_NTLM
+Introduced in 7.10.6
+.IP CURLAUTH_NTLM_WB
+Introduced in 7.22.0
+.IP CURLAUTH_ONLY
+Introduced in 7.21.3
+.IP CURLCLOSEPOLICY_CALLBACK
+Introduced in 7.7
+.IP CURLCLOSEPOLICY_LEAST_RECENTLY_USED
+Introduced in 7.7
+.IP CURLCLOSEPOLICY_LEAST_TRAFFIC
+Introduced in 7.7
+.IP CURLCLOSEPOLICY_NONE
+Introduced in 7.7
+.IP CURLCLOSEPOLICY_OLDEST
+Introduced in 7.7
+.IP CURLCLOSEPOLICY_SLOWEST
+Introduced in 7.7
+.IP CURLE_ABORTED_BY_CALLBACK
+Introduced in 7.1
+.IP CURLE_AGAIN
+Introduced in 7.18.2
+.IP CURLE_ALREADY_COMPLETE
+Introduced in 7.7.2
+.IP CURLE_BAD_CALLING_ORDER
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_BAD_CONTENT_ENCODING
+Introduced in 7.10
+.IP CURLE_BAD_DOWNLOAD_RESUME
+Introduced in 7.10
+.IP CURLE_BAD_FUNCTION_ARGUMENT
+Introduced in 7.1
+.IP CURLE_BAD_PASSWORD_ENTERED
+Introduced in 7.4.2
+Deprecated since 7.17.0
+.IP CURLE_CHUNK_FAILED
+Introduced in 7.21.0
+.IP CURLE_CONV_FAILED
+Introduced in 7.15.4
+.IP CURLE_CONV_REQD
+Introduced in 7.15.4
+.IP CURLE_COULDNT_CONNECT
+Introduced in 7.1
+.IP CURLE_COULDNT_RESOLVE_HOST
+Introduced in 7.1
+.IP CURLE_COULDNT_RESOLVE_PROXY
+Introduced in 7.1
+.IP CURLE_FAILED_INIT
+Introduced in 7.1
+.IP CURLE_FILESIZE_EXCEEDED
+Introduced in 7.10.8
+.IP CURLE_FILE_COULDNT_READ_FILE
+Introduced in 7.1
+.IP CURLE_FTP_ACCEPT_FAILED
+Introduced in 7.24.0
+.IP CURLE_FTP_ACCEPT_TIMEOUT
+Introduced in 7.24.0
+.IP CURLE_FTP_ACCESS_DENIED
+Introduced in 7.1
+.IP CURLE_FTP_BAD_DOWNLOAD_RESUME
+Introduced in 7.1
+Deprecated since 7.1
+.IP CURLE_FTP_BAD_FILE_LIST
+Introduced in 7.21.0
+.IP CURLE_FTP_CANT_GET_HOST
+Introduced in 7.1
+.IP CURLE_FTP_CANT_RECONNECT
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_COULDNT_GET_SIZE
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_COULDNT_RETR_FILE
+Introduced in 7.1
+.IP CURLE_FTP_COULDNT_SET_ASCII
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_COULDNT_SET_BINARY
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_COULDNT_SET_TYPE
+Introduced in 7.17.0
+.IP CURLE_FTP_COULDNT_STOR_FILE
+Introduced in 7.1
+.IP CURLE_FTP_COULDNT_USE_REST
+Introduced in 7.1
+.IP CURLE_FTP_PARTIAL_FILE
+Introduced in 7.1
+Deprecated since 7.1
+.IP CURLE_FTP_PORT_FAILED
+Introduced in 7.1
+.IP CURLE_FTP_PRET_FAILED
+Introduced in 7.20.0
+.IP CURLE_FTP_QUOTE_ERROR
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_SSL_FAILED
+Introduced in 7.11.0
+Deprecated since 7.17.0
+.IP CURLE_FTP_USER_PASSWORD_INCORRECT
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_WEIRD_227_FORMAT
+Introduced in 7.1
+.IP CURLE_FTP_WEIRD_PASS_REPLY
+Introduced in 7.1
+.IP CURLE_FTP_WEIRD_PASV_REPLY
+Introduced in 7.1
+.IP CURLE_FTP_WEIRD_SERVER_REPLY
+Introduced in 7.1
+.IP CURLE_FTP_WEIRD_USER_REPLY
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FTP_WRITE_ERROR
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_FUNCTION_NOT_FOUND
+Introduced in 7.1
+.IP CURLE_GOT_NOTHING
+Introduced in 7.9.1
+.IP CURLE_HTTP2
+Introduced in 7.38.0
+.IP CURLE_HTTP_NOT_FOUND
+Introduced in 7.1
+.IP CURLE_HTTP_PORT_FAILED
+Introduced in 7.3
+Deprecated since 7.12.0
+.IP CURLE_HTTP_POST_ERROR
+Introduced in 7.1
+.IP CURLE_HTTP_RANGE_ERROR
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_HTTP_RETURNED_ERROR
+Introduced in 7.10.3
+.IP CURLE_INTERFACE_FAILED
+Introduced in 7.12.0
+.IP CURLE_LDAP_CANNOT_BIND
+Introduced in 7.1
+.IP CURLE_LDAP_INVALID_URL
+Introduced in 7.10.8
+.IP CURLE_LDAP_SEARCH_FAILED
+Introduced in 7.1
+.IP CURLE_LIBRARY_NOT_FOUND
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_LOGIN_DENIED
+Introduced in 7.13.1
+.IP CURLE_MALFORMAT_USER
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_NOT_BUILT_IN
+Introduced in 7.21.5
+.IP CURLE_NO_CONNECTION_AVAILABLE
+Introduced in 7.30.0
+.IP CURLE_OK
+Introduced in 7.1
+.IP CURLE_OPERATION_TIMEDOUT
+Introduced in 7.10.2
+.IP CURLE_OPERATION_TIMEOUTED
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_OUT_OF_MEMORY
+Introduced in 7.1
+.IP CURLE_PARTIAL_FILE
+Introduced in 7.1
+.IP CURLE_PEER_FAILED_VERIFICATION
+Introduced in 7.17.1
+.IP CURLE_QUOTE_ERROR
+Introduced in 7.17.0
+.IP CURLE_RANGE_ERROR
+Introduced in 7.17.0
+.IP CURLE_READ_ERROR
+Introduced in 7.1
+.IP CURLE_RECV_ERROR
+Introduced in 7.10
+.IP CURLE_REMOTE_ACCESS_DENIED
+Introduced in 7.17.0
+.IP CURLE_REMOTE_DISK_FULL
+Introduced in 7.17.0
+.IP CURLE_REMOTE_FILE_EXISTS
+Introduced in 7.17.0
+.IP CURLE_REMOTE_FILE_NOT_FOUND
+Introduced in 7.16.1
+.IP CURLE_RTSP_CSEQ_ERROR
+Introduced in 7.20.0
+.IP CURLE_RTSP_SESSION_ERROR
+Introduced in 7.20.0
+.IP CURLE_SEND_ERROR
+Introduced in 7.10
+.IP CURLE_SEND_FAIL_REWIND
+Introduced in 7.12.3
+.IP CURLE_SHARE_IN_USE
+Introduced in 7.9.6
+Deprecated since 7.17.0
+.IP CURLE_SSH
+Introduced in 7.16.1
+.IP CURLE_SSL_CACERT
+Introduced in 7.10
+.IP CURLE_SSL_CACERT_BADFILE
+Introduced in 7.16.0
+.IP CURLE_SSL_CERTPROBLEM
+Introduced in 7.10
+.IP CURLE_SSL_CIPHER
+Introduced in 7.10
+.IP CURLE_SSL_CONNECT_ERROR
+Introduced in 7.1
+.IP CURLE_SSL_CRL_BADFILE
+Introduced in 7.19.0
+.IP CURLE_SSL_ENGINE_INITFAILED
+Introduced in 7.12.3
+.IP CURLE_SSL_ENGINE_NOTFOUND
+Introduced in 7.9.3
+.IP CURLE_SSL_ENGINE_SETFAILED
+Introduced in 7.9.3
+.IP CURLE_SSL_INVALIDCERTSTATUS
+Introduced in 7.41.0
+.IP CURLE_SSL_ISSUER_ERROR
+Introduced in 7.19.0
+.IP CURLE_SSL_PEER_CERTIFICATE
+Introduced in 7.8
+Deprecated since 7.17.1
+.IP CURLE_SSL_PINNEDPUBKEYNOTMATCH
+Introduced in 7.39.0
+.IP CURLE_SSL_SHUTDOWN_FAILED
+Introduced in 7.16.1
+.IP CURLE_TELNET_OPTION_SYNTAX
+Introduced in 7.7
+.IP CURLE_TFTP_DISKFULL
+Introduced in 7.15.0
+Deprecated since 7.17.0
+.IP CURLE_TFTP_EXISTS
+Introduced in 7.15.0
+Deprecated since 7.17.0
+.IP CURLE_TFTP_ILLEGAL
+Introduced in 7.15.0
+.IP CURLE_TFTP_NOSUCHUSER
+Introduced in 7.15.0
+.IP CURLE_TFTP_NOTFOUND
+Introduced in 7.15.0
+.IP CURLE_TFTP_PERM
+Introduced in 7.15.0
+.IP CURLE_TFTP_UNKNOWNID
+Introduced in 7.15.0
+.IP CURLE_TOO_MANY_REDIRECTS
+Introduced in 7.5
+.IP CURLE_UNKNOWN_OPTION
+Introduced in 7.21.5
+.IP CURLE_UNKNOWN_TELNET_OPTION
+Introduced in 7.7
+.IP CURLE_UNSUPPORTED_PROTOCOL
+Introduced in 7.1
+.IP CURLE_UPLOAD_FAILED
+Introduced in 7.16.3
+.IP CURLE_URL_MALFORMAT
+Introduced in 7.1
+.IP CURLE_URL_MALFORMAT_USER
+Introduced in 7.1
+Deprecated since 7.17.0
+.IP CURLE_USE_SSL_FAILED
+Introduced in 7.17.0
+.IP CURLE_WRITE_ERROR
+Introduced in 7.1
+.IP CURLFILETYPE_DEVICE_BLOCK
+Introduced in 7.21.0
+.IP CURLFILETYPE_DEVICE_CHAR
+Introduced in 7.21.0
+.IP CURLFILETYPE_DIRECTORY
+Introduced in 7.21.0
+.IP CURLFILETYPE_DOOR
+Introduced in 7.21.0
+.IP CURLFILETYPE_FILE
+Introduced in 7.21.0
+.IP CURLFILETYPE_NAMEDPIPE
+Introduced in 7.21.0
+.IP CURLFILETYPE_SOCKET
+Introduced in 7.21.0
+.IP CURLFILETYPE_SYMLINK
+Introduced in 7.21.0
+.IP CURLFILETYPE_UNKNOWN
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_FILENAME
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_FILETYPE
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_GID
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_HLINKCOUNT
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_PERM
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_SIZE
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_TIME
+Introduced in 7.21.0
+.IP CURLFINFOFLAG_KNOWN_UID
+Introduced in 7.21.0
+.IP CURLFORM_ARRAY
+Introduced in 7.9.1
+.IP CURLFORM_ARRAY_END
+Introduced in 7.9.1
+Deprecated since 7.9.5
+Last used in 7.9.5
+.IP CURLFORM_ARRAY_START
+Introduced in 7.9.1
+Deprecated since 7.9.5
+Last used in 7.9.5
+.IP CURLFORM_BUFFER
+Introduced in 7.9.8
+.IP CURLFORM_BUFFERLENGTH
+Introduced in 7.9.8
+.IP CURLFORM_BUFFERPTR
+Introduced in 7.9.8
+.IP CURLFORM_CONTENTHEADER
+Introduced in 7.9.3
+.IP CURLFORM_CONTENTLEN
+Introduced in 7.46.0
+.IP CURLFORM_CONTENTSLENGTH
+Introduced in 7.9
+.IP CURLFORM_CONTENTTYPE
+Introduced in 7.9
+.IP CURLFORM_COPYCONTENTS
+Introduced in 7.9
+.IP CURLFORM_COPYNAME
+Introduced in 7.9
+.IP CURLFORM_END
+Introduced in 7.9
+.IP CURLFORM_FILE
+Introduced in 7.9
+.IP CURLFORM_FILECONTENT
+Introduced in 7.9.1
+.IP CURLFORM_FILENAME
+Introduced in 7.9.6
+.IP CURLFORM_NAMELENGTH
+Introduced in 7.9
+.IP CURLFORM_NOTHING
+Introduced in 7.9
+.IP CURLFORM_PTRCONTENTS
+Introduced in 7.9
+.IP CURLFORM_PTRNAME
+Introduced in 7.9
+.IP CURLFORM_STREAM
+Introduced in 7.18.2
+.IP CURLFTPAUTH_DEFAULT
+Introduced in 7.12.2
+.IP CURLFTPAUTH_SSL
+Introduced in 7.12.2
+.IP CURLFTPAUTH_TLS
+Introduced in 7.12.2
+.IP CURLFTPMETHOD_DEFAULT
+Introduced in 7.15.3
+.IP CURLFTPMETHOD_MULTICWD
+Introduced in 7.15.3
+.IP CURLFTPMETHOD_NOCWD
+Introduced in 7.15.3
+.IP CURLFTPMETHOD_SINGLECWD
+Introduced in 7.15.3
+.IP CURLFTPSSL_ALL
+Introduced in 7.11.0
+Deprecated since 7.17.0
+.IP CURLFTPSSL_CCC_ACTIVE
+Introduced in 7.16.2
+.IP CURLFTPSSL_CCC_NONE
+Introduced in 7.16.2
+.IP CURLFTPSSL_CCC_PASSIVE
+Introduced in 7.16.1
+.IP CURLFTPSSL_CONTROL
+Introduced in 7.11.0
+Deprecated since 7.17.0
+.IP CURLFTPSSL_NONE
+Introduced in 7.11.0
+Deprecated since 7.17.0
+.IP CURLFTPSSL_TRY
+Introduced in 7.11.0
+Deprecated since 7.17.0
+.IP CURLFTP_CREATE_DIR
+Introduced in 7.19.4
+.IP CURLFTP_CREATE_DIR_NONE
+Introduced in 7.19.4
+.IP CURLFTP_CREATE_DIR_RETRY
+Introduced in 7.19.4
+.IP CURLGSSAPI_DELEGATION_FLAG
+Introduced in 7.22.0
+.IP CURLGSSAPI_DELEGATION_NONE
+Introduced in 7.22.0
+.IP CURLGSSAPI_DELEGATION_POLICY_FLAG
+Introduced in 7.22.0
+.IP CURLHEADER_SEPARATE
+Introduced in 7.37.0
+.IP CURLHEADER_UNIFIED
+Introduced in 7.37.0
+.IP CURLINFO_ACTIVESOCKET
+Introduced in 7.45.0
+.IP CURLINFO_APPCONNECT_TIME
+Introduced in 7.19.0
+.IP CURLINFO_CERTINFO
+Introduced in 7.19.1
+.IP CURLINFO_CONDITION_UNMET
+Introduced in 7.19.4
+.IP CURLINFO_CONNECT_TIME
+Introduced in 7.4.1
+.IP CURLINFO_CONTENT_LENGTH_DOWNLOAD
+Introduced in 7.6.1
+.IP CURLINFO_CONTENT_LENGTH_UPLOAD
+Introduced in 7.6.1
+.IP CURLINFO_CONTENT_TYPE
+Introduced in 7.9.4
+.IP CURLINFO_COOKIELIST
+Introduced in 7.14.1
+.IP CURLINFO_DATA_IN
+Introduced in 7.9.6
+.IP CURLINFO_DATA_OUT
+Introduced in 7.9.6
+.IP CURLINFO_DOUBLE
+Introduced in 7.4.1
+.IP CURLINFO_EFFECTIVE_URL
+Introduced in 7.4
+.IP CURLINFO_END
+Introduced in 7.9.6
+.IP CURLINFO_FILETIME
+Introduced in 7.5
+.IP CURLINFO_FTP_ENTRY_PATH
+Introduced in 7.15.4
+.IP CURLINFO_HEADER_IN
+Introduced in 7.9.6
+.IP CURLINFO_HEADER_OUT
+Introduced in 7.9.6
+.IP CURLINFO_HEADER_SIZE
+Introduced in 7.4.1
+.IP CURLINFO_HTTPAUTH_AVAIL
+Introduced in 7.10.8
+.IP CURLINFO_HTTP_CODE
+Introduced in 7.4.1
+Deprecated since 7.10.8
+.IP CURLINFO_HTTP_CONNECTCODE
+Introduced in 7.10.7
+.IP CURLINFO_LASTONE
+Introduced in 7.4.1
+.IP CURLINFO_LASTSOCKET
+Introduced in 7.15.2
+.IP CURLINFO_LOCAL_IP
+Introduced in 7.21.0
+.IP CURLINFO_LOCAL_PORT
+Introduced in 7.21.0
+.IP CURLINFO_LONG
+Introduced in 7.4.1
+.IP CURLINFO_MASK
+Introduced in 7.4.1
+.IP CURLINFO_NAMELOOKUP_TIME
+Introduced in 7.4.1
+.IP CURLINFO_NONE
+Introduced in 7.4.1
+.IP CURLINFO_NUM_CONNECTS
+Introduced in 7.12.3
+.IP CURLINFO_OS_ERRNO
+Introduced in 7.12.2
+.IP CURLINFO_PRETRANSFER_TIME
+Introduced in 7.4.1
+.IP CURLINFO_PRIMARY_IP
+Introduced in 7.19.0
+.IP CURLINFO_PRIMARY_PORT
+Introduced in 7.21.0
+.IP CURLINFO_PRIVATE
+Introduced in 7.10.3
+.IP CURLINFO_PROXYAUTH_AVAIL
+Introduced in 7.10.8
+.IP CURLINFO_REDIRECT_COUNT
+Introduced in 7.9.7
+.IP CURLINFO_REDIRECT_TIME
+Introduced in 7.9.7
+.IP CURLINFO_REDIRECT_URL
+Introduced in 7.18.2
+.IP CURLINFO_REQUEST_SIZE
+Introduced in 7.4.1
+.IP CURLINFO_RESPONSE_CODE
+Introduced in 7.10.8
+.IP CURLINFO_RTSP_CLIENT_CSEQ
+Introduced in 7.20.0
+.IP CURLINFO_RTSP_CSEQ_RECV
+Introduced in 7.20.0
+.IP CURLINFO_RTSP_SERVER_CSEQ
+Introduced in 7.20.0
+.IP CURLINFO_RTSP_SESSION_ID
+Introduced in 7.20.0
+.IP CURLINFO_SIZE_DOWNLOAD
+Introduced in 7.4.1
+.IP CURLINFO_SIZE_UPLOAD
+Introduced in 7.4.1
+.IP CURLINFO_SLIST
+Introduced in 7.12.3
+.IP CURLINFO_SOCKET
+Introduced in 7.45.0
+.IP CURLINFO_SPEED_DOWNLOAD
+Introduced in 7.4.1
+.IP CURLINFO_SPEED_UPLOAD
+Introduced in 7.4.1
+.IP CURLINFO_SSL_DATA_IN
+Introduced in 7.12.1
+.IP CURLINFO_SSL_DATA_OUT
+Introduced in 7.12.1
+.IP CURLINFO_SSL_ENGINES
+Introduced in 7.12.3
+.IP CURLINFO_SSL_VERIFYRESULT
+Introduced in 7.5
+.IP CURLINFO_STARTTRANSFER_TIME
+Introduced in 7.9.2
+.IP CURLINFO_STRING
+Introduced in 7.4.1
+.IP CURLINFO_TEXT
+Introduced in 7.9.6
+.IP CURLINFO_TLS_SESSION
+Introduced in 7.34.0
+Deprecated since 7.48.0
+.IP CURLINFO_TLS_SSL_PTR
+Introduced in 7.48.0
+.IP CURLINFO_TOTAL_TIME
+Introduced in 7.4.1
+.IP CURLINFO_TYPEMASK
+Introduced in 7.4.1
+.IP CURLIOCMD_NOP
+Introduced in 7.12.3
+.IP CURLIOCMD_RESTARTREAD
+Introduced in 7.12.3
+.IP CURLIOE_FAILRESTART
+Introduced in 7.12.3
+.IP CURLIOE_OK
+Introduced in 7.12.3
+.IP CURLIOE_UNKNOWNCMD
+Introduced in 7.12.3
+.IP CURLKHMATCH_MISMATCH
+Introduced in 7.19.6
+.IP CURLKHMATCH_MISSING
+Introduced in 7.19.6
+.IP CURLKHMATCH_OK
+Introduced in 7.19.6
+.IP CURLKHSTAT_DEFER
+Introduced in 7.19.6
+.IP CURLKHSTAT_FINE
+Introduced in 7.19.6
+.IP CURLKHSTAT_FINE_ADD_TO_FILE
+Introduced in 7.19.6
+.IP CURLKHSTAT_REJECT
+Introduced in 7.19.6
+.IP CURLKHTYPE_DSS
+Introduced in 7.19.6
+.IP CURLKHTYPE_RSA
+Introduced in 7.19.6
+.IP CURLKHTYPE_RSA1
+Introduced in 7.19.6
+.IP CURLKHTYPE_UNKNOWN
+Introduced in 7.19.6
+.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
+Introduced in 7.30.0
+.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
+Introduced in 7.30.0
+.IP CURLMOPT_MAXCONNECTS
+Introduced in 7.16.3
+.IP CURLMOPT_MAX_HOST_CONNECTIONS
+Introduced in 7.30.0
+.IP CURLMOPT_MAX_PIPELINE_LENGTH
+Introduced in 7.30.0
+.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
+Introduced in 7.30.0
+.IP CURLMOPT_PIPELINING
+Introduced in 7.16.0
+.IP CURLMOPT_PIPELINING_SERVER_BL
+Introduced in 7.30.0
+.IP CURLMOPT_PIPELINING_SITE_BL
+Introduced in 7.30.0
+.IP CURLMOPT_PUSHDATA
+Introduced in 7.44.0
+.IP CURLMOPT_PUSHFUNCTION
+Introduced in 7.44.0
+.IP CURLMOPT_SOCKETDATA
+Introduced in 7.15.4
+.IP CURLMOPT_SOCKETFUNCTION
+Introduced in 7.15.4
+.IP CURLMOPT_TIMERDATA
+Introduced in 7.16.0
+.IP CURLMOPT_TIMERFUNCTION
+Introduced in 7.16.0
+.IP CURLMSG_DONE
+Introduced in 7.9.6
+.IP CURLMSG_NONE
+Introduced in 7.9.6
+.IP CURLM_ADDED_ALREADY
+Introduced in 7.32.1
+.IP CURLM_BAD_EASY_HANDLE
+Introduced in 7.9.6
+.IP CURLM_BAD_HANDLE
+Introduced in 7.9.6
+.IP CURLM_BAD_SOCKET
+Introduced in 7.15.4
+.IP CURLM_CALL_MULTI_PERFORM
+Introduced in 7.9.6
+.IP CURLM_CALL_MULTI_SOCKET
+Introduced in 7.15.5
+.IP CURLM_INTERNAL_ERROR
+Introduced in 7.9.6
+.IP CURLM_OK
+Introduced in 7.9.6
+.IP CURLM_OUT_OF_MEMORY
+Introduced in 7.9.6
+.IP CURLM_UNKNOWN_OPTION
+Introduced in 7.15.4
+.IP CURLOPTTYPE_FUNCTIONPOINT
+Introduced in 7.1
+.IP CURLOPTTYPE_LONG
+Introduced in 7.1
+.IP CURLOPTTYPE_OBJECTPOINT
+Introduced in 7.1
+.IP CURLOPTTYPE_OFF_T
+Introduced in 7.11.0
+.IP CURLOPTTYPE_STRINGPOINT
+Introduced in 7.46.0
+.IP CURLOPT_ACCEPTTIMEOUT_MS
+Introduced in 7.24.0
+.IP CURLOPT_ACCEPT_ENCODING
+Introduced in 7.21.6
+.IP CURLOPT_ADDRESS_SCOPE
+Introduced in 7.19.0
+.IP CURLOPT_APPEND
+Introduced in 7.17.0
+.IP CURLOPT_AUTOREFERER
+Introduced in 7.1
+.IP CURLOPT_BUFFERSIZE
+Introduced in 7.10
+.IP CURLOPT_CAINFO
+Introduced in 7.4.2
+.IP CURLOPT_CAPATH
+Introduced in 7.9.8
+.IP CURLOPT_CERTINFO
+Introduced in 7.19.1
+.IP CURLOPT_CHUNK_BGN_FUNCTION
+Introduced in 7.21.0
+.IP CURLOPT_CHUNK_DATA
+Introduced in 7.21.0
+.IP CURLOPT_CHUNK_END_FUNCTION
+Introduced in 7.21.0
+.IP CURLOPT_CLOSEFUNCTION
+Introduced in 7.7
+Deprecated since 7.11.1
+Last used in 7.11.1
+.IP CURLOPT_CLOSEPOLICY
+Introduced in 7.7
+Deprecated since 7.16.1
+.IP CURLOPT_CLOSESOCKETDATA
+Introduced in 7.21.7
+.IP CURLOPT_CLOSESOCKETFUNCTION
+Introduced in 7.21.7
+.IP CURLOPT_CONNECTTIMEOUT
+Introduced in 7.7
+.IP CURLOPT_CONNECTTIMEOUT_MS
+Introduced in 7.16.2
+.IP CURLOPT_CONNECT_ONLY
+Introduced in 7.15.2
+.IP CURLOPT_CONV_FROM_NETWORK_FUNCTION
+Introduced in 7.15.4
+.IP CURLOPT_CONV_FROM_UTF8_FUNCTION
+Introduced in 7.15.4
+.IP CURLOPT_CONV_TO_NETWORK_FUNCTION
+Introduced in 7.15.4
+.IP CURLOPT_COOKIE
+Introduced in 7.1
+.IP CURLOPT_COOKIEFILE
+Introduced in 7.1
+.IP CURLOPT_COOKIEJAR
+Introduced in 7.9
+.IP CURLOPT_COOKIELIST
+Introduced in 7.14.1
+.IP CURLOPT_COOKIESESSION
+Introduced in 7.9.7
+.IP CURLOPT_COPYPOSTFIELDS
+Introduced in 7.17.1
+.IP CURLOPT_CRLF
+Introduced in 7.1
+.IP CURLOPT_CRLFILE
+Introduced in 7.19.0
+.IP CURLOPT_CUSTOMREQUEST
+Introduced in 7.1
+.IP CURLOPT_DEBUGDATA
+Introduced in 7.9.6
+.IP CURLOPT_DEBUGFUNCTION
+Introduced in 7.9.6
+.IP CURLOPT_DEFAULT_PROTOCOL
+Introduced in 7.45.0
+.IP CURLOPT_DIRLISTONLY
+Introduced in 7.17.0
+.IP CURLOPT_DNS_CACHE_TIMEOUT
+Introduced in 7.9.3
+.IP CURLOPT_DNS_INTERFACE
+Introduced in 7.33.0
+.IP CURLOPT_DNS_LOCAL_IP4
+Introduced in 7.33.0
+.IP CURLOPT_DNS_LOCAL_IP6
+Introduced in 7.33.0
+.IP CURLOPT_DNS_SERVERS
+Introduced in 7.24.0
+.IP CURLOPT_DNS_USE_GLOBAL_CACHE
+Introduced in 7.9.3
+Deprecated since 7.11.1
+.IP CURLOPT_EGDSOCKET
+Introduced in 7.7
+.IP CURLOPT_ENCODING
+Introduced in 7.10
+.IP CURLOPT_ERRORBUFFER
+Introduced in 7.1
+.IP CURLOPT_EXPECT_100_TIMEOUT_MS
+Introduced in 7.36.0
+.IP CURLOPT_FAILONERROR
+Introduced in 7.1
+.IP CURLOPT_FILE
+Introduced in 7.1
+Deprecated since 7.9.7
+.IP CURLOPT_FILETIME
+Introduced in 7.5
+.IP CURLOPT_FNMATCH_DATA
+Introduced in 7.21.0
+.IP CURLOPT_FNMATCH_FUNCTION
+Introduced in 7.21.0
+.IP CURLOPT_FOLLOWLOCATION
+Introduced in 7.1
+.IP CURLOPT_FORBID_REUSE
+Introduced in 7.7
+.IP CURLOPT_FRESH_CONNECT
+Introduced in 7.7
+.IP CURLOPT_FTPAPPEND
+Introduced in 7.1
+Deprecated since 7.16.4
+.IP CURLOPT_FTPASCII
+Introduced in 7.1
+Deprecated since 7.11.1
+Last used in 7.11.1
+.IP CURLOPT_FTPLISTONLY
+Introduced in 7.1
+Deprecated since 7.16.4
+.IP CURLOPT_FTPPORT
+Introduced in 7.1
+.IP CURLOPT_FTPSSLAUTH
+Introduced in 7.12.2
+.IP CURLOPT_FTP_ACCOUNT
+Introduced in 7.13.0
+.IP CURLOPT_FTP_ALTERNATIVE_TO_USER
+Introduced in 7.15.5
+.IP CURLOPT_FTP_CREATE_MISSING_DIRS
+Introduced in 7.10.7
+.IP CURLOPT_FTP_FILEMETHOD
+Introduced in 7.15.1
+.IP CURLOPT_FTP_RESPONSE_TIMEOUT
+Introduced in 7.10.8
+.IP CURLOPT_FTP_SKIP_PASV_IP
+Introduced in 7.15.0
+.IP CURLOPT_FTP_SSL
+Introduced in 7.11.0
+Deprecated since 7.16.4
+.IP CURLOPT_FTP_SSL_CCC
+Introduced in 7.16.1
+.IP CURLOPT_FTP_USE_EPRT
+Introduced in 7.10.5
+.IP CURLOPT_FTP_USE_EPSV
+Introduced in 7.9.2
+.IP CURLOPT_FTP_USE_PRET
+Introduced in 7.20.0
+.IP CURLOPT_GSSAPI_DELEGATION
+Introduced in 7.22.0
+.IP CURLOPT_HEADER
+Introduced in 7.1
+.IP CURLOPT_HEADERDATA
+Introduced in 7.10
+.IP CURLOPT_HEADERFUNCTION
+Introduced in 7.7.2
+.IP CURLOPT_HEADEROPT
+Introduced in 7.37.0
+.IP CURLOPT_HTTP200ALIASES
+Introduced in 7.10.3
+.IP CURLOPT_HTTPAUTH
+Introduced in 7.10.6
+.IP CURLOPT_HTTPGET
+Introduced in 7.8.1
+.IP CURLOPT_HTTPHEADER
+Introduced in 7.1
+.IP CURLOPT_HTTPPOST
+Introduced in 7.1
+.IP CURLOPT_HTTPPROXYTUNNEL
+Introduced in 7.3
+.IP CURLOPT_HTTPREQUEST
+Introduced in 7.1
+.IP CURLOPT_HTTP_CONTENT_DECODING
+Introduced in 7.16.2
+.IP CURLOPT_HTTP_TRANSFER_DECODING
+Introduced in 7.16.2
+.IP CURLOPT_HTTP_VERSION
+Introduced in 7.9.1
+.IP CURLOPT_IGNORE_CONTENT_LENGTH
+Introduced in 7.14.1
+.IP CURLOPT_INFILE
+Introduced in 7.1
+Deprecated since 7.9.7
+.IP CURLOPT_INFILESIZE
+Introduced in 7.1
+.IP CURLOPT_INFILESIZE_LARGE
+Introduced in 7.11.0
+.IP CURLOPT_INTERFACE
+Introduced in 7.3
+.IP CURLOPT_INTERLEAVEDATA
+Introduced in 7.20.0
+.IP CURLOPT_INTERLEAVEFUNCTION
+Introduced in 7.20.0
+.IP CURLOPT_IOCTLDATA
+Introduced in 7.12.3
+.IP CURLOPT_IOCTLFUNCTION
+Introduced in 7.12.3
+.IP CURLOPT_IPRESOLVE
+Introduced in 7.10.8
+.IP CURLOPT_ISSUERCERT
+Introduced in 7.19.0
+.IP CURLOPT_KEYPASSWD
+Introduced in 7.17.0
+.IP CURLOPT_KRB4LEVEL
+Introduced in 7.3
+Deprecated since 7.17.0
+.IP CURLOPT_KRBLEVEL
+Introduced in 7.16.4
+.IP CURLOPT_LOCALPORT
+Introduced in 7.15.2
+.IP CURLOPT_LOCALPORTRANGE
+Introduced in 7.15.2
+.IP CURLOPT_LOGIN_OPTIONS
+Introduced in 7.34.0
+.IP CURLOPT_LOW_SPEED_LIMIT
+Introduced in 7.1
+.IP CURLOPT_LOW_SPEED_TIME
+Introduced in 7.1
+.IP CURLOPT_MAIL_AUTH
+Introduced in 7.25.0
+.IP CURLOPT_MAIL_FROM
+Introduced in 7.20.0
+.IP CURLOPT_MAIL_RCPT
+Introduced in 7.20.0
+.IP CURLOPT_MAXCONNECTS
+Introduced in 7.7
+.IP CURLOPT_MAXFILESIZE
+Introduced in 7.10.8
+.IP CURLOPT_MAXFILESIZE_LARGE
+Introduced in 7.11.0
+.IP CURLOPT_MAXREDIRS
+Introduced in 7.5
+.IP CURLOPT_MAX_RECV_SPEED_LARGE
+Introduced in 7.15.5
+.IP CURLOPT_MAX_SEND_SPEED_LARGE
+Introduced in 7.15.5
+.IP CURLOPT_MUTE
+Introduced in 7.1
+Deprecated since 7.8
+Last used in 7.8
+.IP CURLOPT_NETRC
+Introduced in 7.1
+.IP CURLOPT_NETRC_FILE
+Introduced in 7.11.0
+.IP CURLOPT_NEW_DIRECTORY_PERMS
+Introduced in 7.16.4
+.IP CURLOPT_NEW_FILE_PERMS
+Introduced in 7.16.4
+.IP CURLOPT_NOBODY
+Introduced in 7.1
+.IP CURLOPT_NOPROGRESS
+Introduced in 7.1
+.IP CURLOPT_NOPROXY
+Introduced in 7.19.4
+.IP CURLOPT_NOSIGNAL
+Introduced in 7.10
+.IP CURLOPT_NOTHING
+Introduced in 7.1.1
+Deprecated since 7.11.1
+Last used in 7.11.1
+.IP CURLOPT_OPENSOCKETDATA
+Introduced in 7.17.1
+.IP CURLOPT_OPENSOCKETFUNCTION
+Introduced in 7.17.1
+.IP CURLOPT_PASSWDDATA
+Introduced in 7.4.2
+Deprecated since 7.11.1
+Last used in 7.11.1
+.IP CURLOPT_PASSWDFUNCTION
+Introduced in 7.4.2
+Deprecated since 7.11.1
+Last used in 7.11.1
+.IP CURLOPT_PASSWORD
+Introduced in 7.19.1
+.IP CURLOPT_PASV_HOST
+Introduced in 7.12.1
+Deprecated since 7.16.0
+Last used in 7.16.0
+.IP CURLOPT_PATH_AS_IS
+Introduced in 7.42.0
+.IP CURLOPT_PINNEDPUBLICKEY
+Introduced in 7.39.0
+.IP CURLOPT_PIPEWAIT
+Introduced in 7.43.0
+.IP CURLOPT_PORT
+Introduced in 7.1
+.IP CURLOPT_POST
+Introduced in 7.1
+.IP CURLOPT_POST301
+Introduced in 7.17.1
+Deprecated since 7.19.1
+.IP CURLOPT_POSTFIELDS
+Introduced in 7.1
+.IP CURLOPT_POSTFIELDSIZE
+Introduced in 7.2
+.IP CURLOPT_POSTFIELDSIZE_LARGE
+Introduced in 7.11.1
+.IP CURLOPT_POSTQUOTE
+Introduced in 7.1
+.IP CURLOPT_POSTREDIR
+Introduced in 7.19.1
+.IP CURLOPT_PREQUOTE
+Introduced in 7.9.5
+.IP CURLOPT_PRIVATE
+Introduced in 7.10.3
+.IP CURLOPT_PROGRESSDATA
+Introduced in 7.1
+.IP CURLOPT_PROGRESSFUNCTION
+Introduced in 7.1
+Deprecated since 7.32.0
+.IP CURLOPT_PROTOCOLS
+Introduced in 7.19.4
+.IP CURLOPT_PROXY
+Introduced in 7.1
+.IP CURLOPT_PROXYAUTH
+Introduced in 7.10.7
+.IP CURLOPT_PROXYHEADER
+Introduced in 7.37.0
+.IP CURLOPT_PROXYPASSWORD
+Introduced in 7.19.1
+.IP CURLOPT_PROXYPORT
+Introduced in 7.1
+.IP CURLOPT_PROXYTYPE
+Introduced in 7.10
+.IP CURLOPT_PROXYUSERNAME
+Introduced in 7.19.1
+.IP CURLOPT_PROXYUSERPWD
+Introduced in 7.1
+.IP CURLOPT_PROXY_SERVICE_NAME
+Introduced in 7.43.0
+.IP CURLOPT_PROXY_TRANSFER_MODE
+Introduced in 7.18.0
+.IP CURLOPT_PUT
+Introduced in 7.1
+.IP CURLOPT_QUOTE
+Introduced in 7.1
+.IP CURLOPT_RANDOM_FILE
+Introduced in 7.7
+.IP CURLOPT_RANGE
+Introduced in 7.1
+.IP CURLOPT_READDATA
+Introduced in 7.9.7
+.IP CURLOPT_READFUNCTION
+Introduced in 7.1
+.IP CURLOPT_REDIR_PROTOCOLS
+Introduced in 7.19.4
+.IP CURLOPT_REFERER
+Introduced in 7.1
+.IP CURLOPT_RESOLVE
+Introduced in 7.21.3
+.IP CURLOPT_RESUME_FROM
+Introduced in 7.1
+.IP CURLOPT_RESUME_FROM_LARGE
+Introduced in 7.11.0
+.IP CURLOPT_RTSPHEADER
+Introduced in 7.20.0
+.IP CURLOPT_RTSP_CLIENT_CSEQ
+Introduced in 7.20.0
+.IP CURLOPT_RTSP_REQUEST
+Introduced in 7.20.0
+.IP CURLOPT_RTSP_SERVER_CSEQ
+Introduced in 7.20.0
+.IP CURLOPT_RTSP_SESSION_ID
+Introduced in 7.20.0
+.IP CURLOPT_RTSP_STREAM_URI
+Introduced in 7.20.0
+.IP CURLOPT_RTSP_TRANSPORT
+Introduced in 7.20.0
+.IP CURLOPT_SASL_IR
+Introduced in 7.31.0
+.IP CURLOPT_SEEKDATA
+Introduced in 7.18.0
+.IP CURLOPT_SEEKFUNCTION
+Introduced in 7.18.0
+.IP CURLOPT_SERVER_RESPONSE_TIMEOUT
+Introduced in 7.20.0
+.IP CURLOPT_SERVICE_NAME
+Introduced in 7.43.0
+.IP CURLOPT_SHARE
+Introduced in 7.10
+.IP CURLOPT_SOCKOPTDATA
+Introduced in 7.16.0
+.IP CURLOPT_SOCKOPTFUNCTION
+Introduced in 7.16.0
+.IP CURLOPT_SOCKS5_GSSAPI_NEC
+Introduced in 7.19.4
+.IP CURLOPT_SOCKS5_GSSAPI_SERVICE
+Introduced in 7.19.4
+.IP CURLOPT_SOURCE_HOST
+Introduced in 7.12.1
+.IP CURLOPT_SOURCE_PATH
+Introduced in 7.12.1
+.IP CURLOPT_SOURCE_PORT
+Introduced in 7.12.1
+.IP CURLOPT_SOURCE_POSTQUOTE
+Introduced in 7.12.1
+.IP CURLOPT_SOURCE_PREQUOTE
+Introduced in 7.12.1
+.IP CURLOPT_SOURCE_QUOTE
+Introduced in 7.13.0
+.IP CURLOPT_SOURCE_URL
+Introduced in 7.13.0
+.IP CURLOPT_SOURCE_USERPWD
+Introduced in 7.12.1
+.IP CURLOPT_SSH_AUTH_TYPES
+Introduced in 7.16.1
+.IP CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+Introduced in 7.17.1
+.IP CURLOPT_SSH_KEYDATA
+Introduced in 7.19.6
+.IP CURLOPT_SSH_KEYFUNCTION
+Introduced in 7.19.6
+.IP CURLOPT_SSH_KNOWNHOSTS
+Introduced in 7.19.6
+.IP CURLOPT_SSH_PRIVATE_KEYFILE
+Introduced in 7.16.1
+.IP CURLOPT_SSH_PUBLIC_KEYFILE
+Introduced in 7.16.1
+.IP CURLOPT_SSLCERT
+Introduced in 7.1
+.IP CURLOPT_SSLCERTPASSWD
+Introduced in 7.1.1
+Deprecated since 7.17.0
+.IP CURLOPT_SSLCERTTYPE
+Introduced in 7.9.3
+.IP CURLOPT_SSLENGINE
+Introduced in 7.9.3
+.IP CURLOPT_SSLENGINE_DEFAULT
+Introduced in 7.9.3
+.IP CURLOPT_SSLKEY
+Introduced in 7.9.3
+.IP CURLOPT_SSLKEYPASSWD
+Introduced in 7.9.3
+Deprecated since 7.17.0
+.IP CURLOPT_SSLKEYTYPE
+Introduced in 7.9.3
+.IP CURLOPT_SSLVERSION
+Introduced in 7.1
+.IP CURLOPT_SSL_CIPHER_LIST
+Introduced in 7.9
+.IP CURLOPT_SSL_CTX_DATA
+Introduced in 7.10.6
+.IP CURLOPT_SSL_CTX_FUNCTION
+Introduced in 7.10.6
+.IP CURLOPT_SSL_ENABLE_ALPN
+Introduced in 7.36.0
+.IP CURLOPT_SSL_ENABLE_NPN
+Introduced in 7.36.0
+.IP CURLOPT_SSL_FALSESTART
+Introduced in 7.42.0
+.IP CURLOPT_SSL_OPTIONS
+Introduced in 7.25.0
+.IP CURLOPT_SSL_SESSIONID_CACHE
+Introduced in 7.16.0
+.IP CURLOPT_SSL_VERIFYHOST
+Introduced in 7.8.1
+.IP CURLOPT_SSL_VERIFYPEER
+Introduced in 7.4.2
+.IP CURLOPT_SSL_VERIFYSTATUS
+Introduced in 7.41.0
+.IP CURLOPT_STDERR
+Introduced in 7.1
+.IP CURLOPT_STREAM_DEPENDS
+Introduced in 7.46.0
+.IP CURLOPT_STREAM_DEPENDS_E
+Introduced in 7.46.0
+.IP CURLOPT_STREAM_WEIGHT
+Introduced in 7.46.0
+.IP CURLOPT_TCP_KEEPALIVE
+Introduced in 7.25.0
+.IP CURLOPT_TCP_KEEPIDLE
+Introduced in 7.25.0
+.IP CURLOPT_TCP_KEEPINTVL
+Introduced in 7.25.0
+.IP CURLOPT_TCP_NODELAY
+Introduced in 7.11.2
+.IP CURLOPT_TELNETOPTIONS
+Introduced in 7.7
+.IP CURLOPT_TFTP_BLKSIZE
+Introduced in 7.19.4
+.IP CURLOPT_TFTP_NO_OPTIONS
+Introduced in 7.48.0
+.IP CURLOPT_TIMECONDITION
+Introduced in 7.1
+.IP CURLOPT_TIMEOUT
+Introduced in 7.1
+.IP CURLOPT_TIMEOUT_MS
+Introduced in 7.16.2
+.IP CURLOPT_TIMEVALUE
+Introduced in 7.1
+.IP CURLOPT_TLSAUTH_PASSWORD
+Introduced in 7.21.4
+.IP CURLOPT_TLSAUTH_TYPE
+Introduced in 7.21.4
+.IP CURLOPT_TLSAUTH_USERNAME
+Introduced in 7.21.4
+.IP CURLOPT_TRANSFERTEXT
+Introduced in 7.1.1
+.IP CURLOPT_TRANSFER_ENCODING
+Introduced in 7.21.6
+.IP CURLOPT_UNIX_SOCKET_PATH
+Introduced in 7.40.0
+.IP CURLOPT_UNRESTRICTED_AUTH
+Introduced in 7.10.4
+.IP CURLOPT_UPLOAD
+Introduced in 7.1
+.IP CURLOPT_URL
+Introduced in 7.1
+.IP CURLOPT_USERAGENT
+Introduced in 7.1
+.IP CURLOPT_USERNAME
+Introduced in 7.19.1
+.IP CURLOPT_USERPWD
+Introduced in 7.1
+.IP CURLOPT_USE_SSL
+Introduced in 7.17.0
+.IP CURLOPT_VERBOSE
+Introduced in 7.1
+.IP CURLOPT_WILDCARDMATCH
+Introduced in 7.21.0
+.IP CURLOPT_WRITEDATA
+Introduced in 7.9.7
+.IP CURLOPT_WRITEFUNCTION
+Introduced in 7.1
+.IP CURLOPT_WRITEHEADER
+Introduced in 7.1
+.IP CURLOPT_WRITEINFO
+Introduced in 7.1
+.IP CURLOPT_XFERINFODATA
+Introduced in 7.32.0
+.IP CURLOPT_XFERINFOFUNCTION
+Introduced in 7.32.0
+.IP CURLOPT_XOAUTH2_BEARER
+Introduced in 7.33.0
+.IP CURLPAUSE_ALL
+Introduced in 7.18.0
+.IP CURLPAUSE_CONT
+Introduced in 7.18.0
+.IP CURLPAUSE_RECV
+Introduced in 7.18.0
+.IP CURLPAUSE_RECV_CONT
+Introduced in 7.18.0
+.IP CURLPAUSE_SEND
+Introduced in 7.18.0
+.IP CURLPAUSE_SEND_CONT
+Introduced in 7.18.0
+.IP CURLPIPE_HTTP1
+Introduced in 7.43.0
+.IP CURLPIPE_MULTIPLEX
+Introduced in 7.43.0
+.IP CURLPIPE_NOTHING
+Introduced in 7.43.0
+.IP CURLPROTO_ALL
+Introduced in 7.19.4
+.IP CURLPROTO_DICT
+Introduced in 7.19.4
+.IP CURLPROTO_FILE
+Introduced in 7.19.4
+.IP CURLPROTO_FTP
+Introduced in 7.19.4
+.IP CURLPROTO_FTPS
+Introduced in 7.19.4
+.IP CURLPROTO_GOPHER
+Introduced in 7.21.2
+.IP CURLPROTO_HTTP
+Introduced in 7.19.4
+.IP CURLPROTO_HTTPS
+Introduced in 7.19.4
+.IP CURLPROTO_IMAP
+Introduced in 7.20.0
+.IP CURLPROTO_IMAPS
+Introduced in 7.20.0
+.IP CURLPROTO_LDAP
+Introduced in 7.19.4
+.IP CURLPROTO_LDAPS
+Introduced in 7.19.4
+.IP CURLPROTO_POP3
+Introduced in 7.20.0
+.IP CURLPROTO_POP3S
+Introduced in 7.20.0
+.IP CURLPROTO_RTMP
+Introduced in 7.21.0
+.IP CURLPROTO_RTMPE
+Introduced in 7.21.0
+.IP CURLPROTO_RTMPS
+Introduced in 7.21.0
+.IP CURLPROTO_RTMPT
+Introduced in 7.21.0
+.IP CURLPROTO_RTMPTE
+Introduced in 7.21.0
+.IP CURLPROTO_RTMPTS
+Introduced in 7.21.0
+.IP CURLPROTO_RTSP
+Introduced in 7.20.0
+.IP CURLPROTO_SCP
+Introduced in 7.19.4
+.IP CURLPROTO_SFTP
+Introduced in 7.19.4
+.IP CURLPROTO_SMB
+Introduced in 7.40.0
+.IP CURLPROTO_SMBS
+Introduced in 7.40.0
+.IP CURLPROTO_SMTP
+Introduced in 7.20.0
+.IP CURLPROTO_SMTPS
+Introduced in 7.20.0
+.IP CURLPROTO_TELNET
+Introduced in 7.19.4
+.IP CURLPROTO_TFTP
+Introduced in 7.19.4
+.IP CURLPROXY_HTTP
+Introduced in 7.10
+.IP CURLPROXY_HTTP_1_0
+Introduced in 7.19.4
+.IP CURLPROXY_SOCKS4
+Introduced in 7.10
+.IP CURLPROXY_SOCKS4A
+Introduced in 7.18.0
+.IP CURLPROXY_SOCKS5
+Introduced in 7.10
+.IP CURLPROXY_SOCKS5_HOSTNAME
+Introduced in 7.18.0
+.IP CURLSHE_BAD_OPTION
+Introduced in 7.10.3
+.IP CURLSHE_INVALID
+Introduced in 7.10.3
+.IP CURLSHE_IN_USE
+Introduced in 7.10.3
+.IP CURLSHE_NOMEM
+Introduced in 7.12.0
+.IP CURLSHE_NOT_BUILT_IN
+Introduced in 7.23.0
+.IP CURLSHE_OK
+Introduced in 7.10.3
+.IP CURLSHOPT_LOCKFUNC
+Introduced in 7.10.3
+.IP CURLSHOPT_NONE
+Introduced in 7.10.3
+.IP CURLSHOPT_SHARE
+Introduced in 7.10.3
+.IP CURLSHOPT_UNLOCKFUNC
+Introduced in 7.10.3
+.IP CURLSHOPT_UNSHARE
+Introduced in 7.10.3
+.IP CURLSHOPT_USERDATA
+Introduced in 7.10.3
+.IP CURLSOCKTYPE_ACCEPT
+Introduced in 7.28.0
+.IP CURLSOCKTYPE_IPCXN
+Introduced in 7.16.0
+.IP CURLSSH_AUTH_AGENT
+Introduced in 7.28.0
+.IP CURLSSH_AUTH_ANY
+Introduced in 7.16.1
+.IP CURLSSH_AUTH_DEFAULT
+Introduced in 7.16.1
+.IP CURLSSH_AUTH_HOST
+Introduced in 7.16.1
+.IP CURLSSH_AUTH_KEYBOARD
+Introduced in 7.16.1
+.IP CURLSSH_AUTH_NONE
+Introduced in 7.16.1
+.IP CURLSSH_AUTH_PASSWORD
+Introduced in 7.16.1
+.IP CURLSSH_AUTH_PUBLICKEY
+Introduced in 7.16.1
+.IP CURLSSLBACKEND_AXTLS
+Introduced in 7.38.0
+.IP CURLSSLBACKEND_CYASSL
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_DARWINSSL
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_GNUTLS
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_GSKIT
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_MBEDTLS
+Introduced in 7.46.0
+.IP CURLSSLBACKEND_NONE
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_NSS
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_OPENSSL
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_POLARSSL
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_QSOSSL
+Introduced in 7.34.0
+.IP CURLSSLBACKEND_SCHANNEL
+Introduced in 7.34.0
+.IP CURLSSLOPT_ALLOW_BEAST
+Introduced in 7.25.0
+.IP CURLSSLOPT_NO_REVOKE
+Introduced in 7.44.0
+.IP CURLUSESSL_ALL
+Introduced in 7.17.0
+.IP CURLUSESSL_CONTROL
+Introduced in 7.17.0
+.IP CURLUSESSL_NONE
+Introduced in 7.17.0
+.IP CURLUSESSL_TRY
+Introduced in 7.17.0
+.IP CURLVERSION_FIRST
+Introduced in 7.10
+.IP CURLVERSION_FOURTH
+Introduced in 7.16.1
+.IP CURLVERSION_NOW
+Introduced in 7.10
+.IP CURLVERSION_SECOND
+Introduced in 7.11.1
+.IP CURLVERSION_THIRD
+Introduced in 7.12.0
+.IP CURL_CHUNK_BGN_FUNC_FAIL
+Introduced in 7.21.0
+.IP CURL_CHUNK_BGN_FUNC_OK
+Introduced in 7.21.0
+.IP CURL_CHUNK_BGN_FUNC_SKIP
+Introduced in 7.21.0
+.IP CURL_CHUNK_END_FUNC_FAIL
+Introduced in 7.21.0
+.IP CURL_CHUNK_END_FUNC_OK
+Introduced in 7.21.0
+.IP CURL_CSELECT_ERR
+Introduced in 7.16.3
+.IP CURL_CSELECT_IN
+Introduced in 7.16.3
+.IP CURL_CSELECT_OUT
+Introduced in 7.16.3
+.IP CURL_EASY_NONE
+Introduced in 7.14.0
+.IP CURL_EASY_TIMEOUT
+Introduced in 7.14.0
+.IP CURL_ERROR_SIZE
+Introduced in 7.1
+.IP CURL_FNMATCHFUNC_FAIL
+Introduced in 7.21.0
+.IP CURL_FNMATCHFUNC_MATCH
+Introduced in 7.21.0
+.IP CURL_FNMATCHFUNC_NOMATCH
+Introduced in 7.21.0
+.IP CURL_FORMADD_DISABLED
+Introduced in 7.12.1
+.IP CURL_FORMADD_ILLEGAL_ARRAY
+Introduced in 7.9.8
+.IP CURL_FORMADD_INCOMPLETE
+Introduced in 7.9.8
+.IP CURL_FORMADD_MEMORY
+Introduced in 7.9.8
+.IP CURL_FORMADD_NULL
+Introduced in 7.9.8
+.IP CURL_FORMADD_OK
+Introduced in 7.9.8
+.IP CURL_FORMADD_OPTION_TWICE
+Introduced in 7.9.8
+.IP CURL_FORMADD_UNKNOWN_OPTION
+Introduced in 7.9.8
+.IP CURL_GLOBAL_ACK_EINTR
+Introduced in 7.30.0
+.IP CURL_GLOBAL_ALL
+Introduced in 7.8
+.IP CURL_GLOBAL_DEFAULT
+Introduced in 7.8
+.IP CURL_GLOBAL_NOTHING
+Introduced in 7.8
+.IP CURL_GLOBAL_SSL
+Introduced in 7.8
+.IP CURL_GLOBAL_WIN32
+Introduced in 7.8.1
+.IP CURL_HTTPPOST_BUFFER
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_CALLBACK
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_FILENAME
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_LARGE
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_PTRBUFFER
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_PTRCONTENTS
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_PTRNAME
+Introduced in 7.46.0
+.IP CURL_HTTPPOST_READFILE
+Introduced in 7.46.0
+.IP CURL_HTTP_VERSION_1_0
+Introduced in 7.9.1
+.IP CURL_HTTP_VERSION_1_1
+Introduced in 7.9.1
+.IP CURL_HTTP_VERSION_2
+Introduced in 7.43.0
+.IP CURL_HTTP_VERSION_2_0
+Introduced in 7.33.0
+.IP CURL_HTTP_VERSION_2TLS
+Introduced in 7.47.0
+.IP CURL_HTTP_VERSION_NONE
+Introduced in 7.9.1
+.IP CURL_IPRESOLVE_V4
+Introduced in 7.10.8
+.IP CURL_IPRESOLVE_V6
+Introduced in 7.10.8
+.IP CURL_IPRESOLVE_WHATEVER
+Introduced in 7.10.8
+.IP CURL_LOCK_ACCESS_NONE
+Introduced in 7.10.3
+.IP CURL_LOCK_ACCESS_SHARED
+Introduced in 7.10.3
+.IP CURL_LOCK_ACCESS_SINGLE
+Introduced in 7.10.3
+.IP CURL_LOCK_DATA_CONNECT
+Introduced in 7.10.3
+.IP CURL_LOCK_DATA_COOKIE
+Introduced in 7.10.3
+.IP CURL_LOCK_DATA_DNS
+Introduced in 7.10.3
+.IP CURL_LOCK_DATA_NONE
+Introduced in 7.10.3
+.IP CURL_LOCK_DATA_SHARE
+Introduced in 7.10.4
+.IP CURL_LOCK_DATA_SSL_SESSION
+Introduced in 7.10.3
+.IP CURL_LOCK_TYPE_CONNECT
+Introduced in 7.10
+.IP CURL_LOCK_TYPE_COOKIE
+Introduced in 7.10
+.IP CURL_LOCK_TYPE_DNS
+Introduced in 7.10
+.IP CURL_LOCK_TYPE_NONE
+Introduced in 7.10
+.IP CURL_LOCK_TYPE_SSL_SESSION
+Introduced in 7.10
+.IP CURL_MAX_HTTP_HEADER
+Introduced in 7.19.7
+.IP CURL_MAX_WRITE_SIZE
+Introduced in 7.9.7
+.IP CURL_NETRC_IGNORED
+Introduced in 7.9.8
+.IP CURL_NETRC_OPTIONAL
+Introduced in 7.9.8
+.IP CURL_NETRC_REQUIRED
+Introduced in 7.9.8
+.IP CURL_POLL_IN
+Introduced in 7.14.0
+.IP CURL_POLL_INOUT
+Introduced in 7.14.0
+.IP CURL_POLL_NONE
+Introduced in 7.14.0
+.IP CURL_POLL_OUT
+Introduced in 7.14.0
+.IP CURL_POLL_REMOVE
+Introduced in 7.14.0
+.IP CURL_PROGRESS_BAR
+Introduced in 7.1.1
+.IP CURL_PROGRESS_STATS
+Introduced in 7.1.1
+.IP CURL_PUSH_DENY
+Introduced in 7.44.0
+.IP CURL_PUSH_OK
+Introduced in 7.44.0
+.IP CURL_READFUNC_ABORT
+Introduced in 7.12.1
+.IP CURL_READFUNC_PAUSE
+Introduced in 7.18.0
+.IP CURL_REDIR_GET_ALL
+Introduced in 7.19.1
+.IP CURL_REDIR_POST_301
+Introduced in 7.19.1
+.IP CURL_REDIR_POST_302
+Introduced in 7.19.1
+.IP CURL_REDIR_POST_303
+Introduced in 7.25.1
+.IP CURL_REDIR_POST_ALL
+Introduced in 7.19.1
+.IP CURL_RTSPREQ_ANNOUNCE
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_DESCRIBE
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_GET_PARAMETER
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_NONE
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_OPTIONS
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_PAUSE
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_PLAY
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_RECEIVE
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_RECORD
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_SETUP
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_SET_PARAMETER
+Introduced in 7.20.0
+.IP CURL_RTSPREQ_TEARDOWN
+Introduced in 7.20.0
+.IP CURL_SEEKFUNC_CANTSEEK
+Introduced in 7.19.5
+.IP CURL_SEEKFUNC_FAIL
+Introduced in 7.19.5
+.IP CURL_SEEKFUNC_OK
+Introduced in 7.19.5
+.IP CURL_SOCKET_BAD
+Introduced in 7.14.0
+.IP CURL_SOCKET_TIMEOUT
+Introduced in 7.14.0
+.IP CURL_SOCKOPT_ALREADY_CONNECTED
+Introduced in 7.21.5
+.IP CURL_SOCKOPT_ERROR
+Introduced in 7.21.5
+.IP CURL_SOCKOPT_OK
+Introduced in 7.21.5
+.IP CURL_SSLVERSION_DEFAULT
+Introduced in 7.9.2
+.IP CURL_SSLVERSION_SSL
+Introduced in 
+.IP CURL_SSLVERSION_SSL
+Introduced in 
+.IP CURL_SSLVERSION_TLS
+Introduced in 
+.IP CURL_SSLVERSION_TLS
+Introduced in 
+.IP CURL_SSLVERSION_TLS
+Introduced in 
+.IP CURL_SSLVERSION_TLS
+Introduced in 
+.IP CURL_TIMECOND_IFMODSINCE
+Introduced in 7.9.7
+.IP CURL_TIMECOND_IFUNMODSINCE
+Introduced in 7.9.7
+.IP CURL_TIMECOND_LASTMOD
+Introduced in 7.9.7
+.IP CURL_TIMECOND_NONE
+Introduced in 7.9.7
+.IP CURL_TLSAUTH_NONE
+Introduced in 7.21.4
+.IP CURL_TLSAUTH_SRP
+Introduced in 7.21.4
+.IP CURL_VERSION_ASYNCHDNS
+Introduced in 7.10.7
+.IP CURL_VERSION_CONV
+Introduced in 7.15.4
+.IP CURL_VERSION_CURLDEBUG
+Introduced in 7.19.6
+.IP CURL_VERSION_DEBUG
+Introduced in 7.10.6
+.IP CURL_VERSION_GSSAPI
+Introduced in 7.38.0
+.IP CURL_VERSION_GSSNEGOTIATE
+Introduced in 7.10.6
+Deprecated since 7.38.0
+.IP CURL_VERSION_HTTP2
+Introduced in 7.33.0
+.IP CURL_VERSION_IDN
+Introduced in 7.12.0
+.IP CURL_VERSION_IPV6
+Introduced in 7.10
+.IP CURL_VERSION_KERBEROS4
+Introduced in 7.10
+Deprecated since 7.33.0
+.IP CURL_VERSION_KERBEROS5
+Introduced in 7.40.0
+.IP CURL_VERSION_LARGEFILE
+Introduced in 7.11.1
+.IP CURL_VERSION_LIBZ
+Introduced in 7.10
+.IP CURL_VERSION_NTLM
+Introduced in 7.10.6
+.IP CURL_VERSION_NTLM_WB
+Introduced in 7.22.0
+.IP CURL_VERSION_PSL
+Introduced in 7.47.0
+.IP CURL_VERSION_SPNEGO
+Introduced in 7.10.8
+.IP CURL_VERSION_SSL
+Introduced in 7.10
+.IP CURL_VERSION_SSPI
+Introduced in 7.13.2
+.IP CURL_VERSION_TLSAUTH_SRP
+Introduced in 7.21.4
+.IP CURL_VERSION_UNIX_SOCKETS
+Introduced in 7.40.0
+.IP CURL_WAIT_POLLIN
+Introduced in 7.28.0
+.IP CURL_WAIT_POLLOUT
+Introduced in 7.28.0
+.IP CURL_WAIT_POLLPRI
+Introduced in 7.28.0
+.IP CURL_WRITEFUNC_PAUSE
+Introduced in 7.18.0
diff --git a/docs/libcurl/libcurl-symbols.html b/docs/libcurl/libcurl-symbols.html
new file mode 100644 (file)
index 0000000..6b01b19
--- /dev/null
@@ -0,0 +1,1620 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl-symbols man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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-symbols - libcurl symbol version information <a name="libcurl"></a><h2 class="nroffsh">libcurl symbols</h2>
+<p class="level0">This man page details version information for public symbols provided in the libcurl header files. This lists the first version in which the symbol was introduced and for some symbols two additional information pieces: 
+<p class="level0">The first version in which the symbol is marked "deprecated" - meaning that since that version no new code should be written to use the symbol as it is marked for getting removed in a future. 
+<p class="level0">The last version that featured the specific symbol. Using the symbol in source code will make it no longer compile error-free after that specified version. 
+<p class="level0">This man page is automatically generated from the symbols-in-versions file. 
+<p class="level0"><a name="CURLAUTHANY"></a><span class="nroffip">CURLAUTH_ANY</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLAUTHANYSAFE"></a><span class="nroffip">CURLAUTH_ANYSAFE</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLAUTHBASIC"></a><span class="nroffip">CURLAUTH_BASIC</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLAUTHDIGEST"></a><span class="nroffip">CURLAUTH_DIGEST</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLAUTHDIGESTIE"></a><span class="nroffip">CURLAUTH_DIGEST_IE</span> 
+<p class="level1">Introduced in 7.19.3 
+<p class="level0"><a name="CURLAUTHGSSNEGOTIATE"></a><span class="nroffip">CURLAUTH_GSSNEGOTIATE</span> 
+<p class="level1">Introduced in 7.10.6 Deprecated since 7.38.0 
+<p class="level0"><a name="CURLAUTHNEGOTIATE"></a><span class="nroffip">CURLAUTH_NEGOTIATE</span> 
+<p class="level1">Introduced in 7.38.0 
+<p class="level0"><a name="CURLAUTHNONE"></a><span class="nroffip">CURLAUTH_NONE</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLAUTHNTLM"></a><span class="nroffip">CURLAUTH_NTLM</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLAUTHNTLMWB"></a><span class="nroffip">CURLAUTH_NTLM_WB</span> 
+<p class="level1">Introduced in 7.22.0 
+<p class="level0"><a name="CURLAUTHONLY"></a><span class="nroffip">CURLAUTH_ONLY</span> 
+<p class="level1">Introduced in 7.21.3 
+<p class="level0"><a name="CURLCLOSEPOLICYCALLBACK"></a><span class="nroffip">CURLCLOSEPOLICY_CALLBACK</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLCLOSEPOLICYLEASTRECENTLYUSED"></a><span class="nroffip">CURLCLOSEPOLICY_LEAST_RECENTLY_USED</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLCLOSEPOLICYLEASTTRAFFIC"></a><span class="nroffip">CURLCLOSEPOLICY_LEAST_TRAFFIC</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLCLOSEPOLICYNONE"></a><span class="nroffip">CURLCLOSEPOLICY_NONE</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLCLOSEPOLICYOLDEST"></a><span class="nroffip">CURLCLOSEPOLICY_OLDEST</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLCLOSEPOLICYSLOWEST"></a><span class="nroffip">CURLCLOSEPOLICY_SLOWEST</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLEABORTEDBYCALLBACK"></a><span class="nroffip">CURLE_ABORTED_BY_CALLBACK</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEAGAIN"></a><span class="nroffip">CURLE_AGAIN</span> 
+<p class="level1">Introduced in 7.18.2 
+<p class="level0"><a name="CURLEALREADYCOMPLETE"></a><span class="nroffip">CURLE_ALREADY_COMPLETE</span> 
+<p class="level1">Introduced in 7.7.2 
+<p class="level0"><a name="CURLEBADCALLINGORDER"></a><span class="nroffip">CURLE_BAD_CALLING_ORDER</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEBADCONTENTENCODING"></a><span class="nroffip">CURLE_BAD_CONTENT_ENCODING</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLEBADDOWNLOADRESUME"></a><span class="nroffip">CURLE_BAD_DOWNLOAD_RESUME</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLEBADFUNCTIONARGUMENT"></a><span class="nroffip">CURLE_BAD_FUNCTION_ARGUMENT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEBADPASSWORDENTERED"></a><span class="nroffip">CURLE_BAD_PASSWORD_ENTERED</span> 
+<p class="level1">Introduced in 7.4.2 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLECHUNKFAILED"></a><span class="nroffip">CURLE_CHUNK_FAILED</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLECONVFAILED"></a><span class="nroffip">CURLE_CONV_FAILED</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLECONVREQD"></a><span class="nroffip">CURLE_CONV_REQD</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLECOULDNTCONNECT"></a><span class="nroffip">CURLE_COULDNT_CONNECT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLECOULDNTRESOLVEHOST"></a><span class="nroffip">CURLE_COULDNT_RESOLVE_HOST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLECOULDNTRESOLVEPROXY"></a><span class="nroffip">CURLE_COULDNT_RESOLVE_PROXY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFAILEDINIT"></a><span class="nroffip">CURLE_FAILED_INIT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFILESIZEEXCEEDED"></a><span class="nroffip">CURLE_FILESIZE_EXCEEDED</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLEFILECOULDNTREADFILE"></a><span class="nroffip">CURLE_FILE_COULDNT_READ_FILE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPACCEPTFAILED"></a><span class="nroffip">CURLE_FTP_ACCEPT_FAILED</span> 
+<p class="level1">Introduced in 7.24.0 
+<p class="level0"><a name="CURLEFTPACCEPTTIMEOUT"></a><span class="nroffip">CURLE_FTP_ACCEPT_TIMEOUT</span> 
+<p class="level1">Introduced in 7.24.0 
+<p class="level0"><a name="CURLEFTPACCESSDENIED"></a><span class="nroffip">CURLE_FTP_ACCESS_DENIED</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPBADDOWNLOADRESUME"></a><span class="nroffip">CURLE_FTP_BAD_DOWNLOAD_RESUME</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.1 
+<p class="level0"><a name="CURLEFTPBADFILELIST"></a><span class="nroffip">CURLE_FTP_BAD_FILE_LIST</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLEFTPCANTGETHOST"></a><span class="nroffip">CURLE_FTP_CANT_GET_HOST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPCANTRECONNECT"></a><span class="nroffip">CURLE_FTP_CANT_RECONNECT</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPCOULDNTGETSIZE"></a><span class="nroffip">CURLE_FTP_COULDNT_GET_SIZE</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPCOULDNTRETRFILE"></a><span class="nroffip">CURLE_FTP_COULDNT_RETR_FILE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPCOULDNTSETASCII"></a><span class="nroffip">CURLE_FTP_COULDNT_SET_ASCII</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPCOULDNTSETBINARY"></a><span class="nroffip">CURLE_FTP_COULDNT_SET_BINARY</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPCOULDNTSETTYPE"></a><span class="nroffip">CURLE_FTP_COULDNT_SET_TYPE</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLEFTPCOULDNTSTORFILE"></a><span class="nroffip">CURLE_FTP_COULDNT_STOR_FILE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPCOULDNTUSEREST"></a><span class="nroffip">CURLE_FTP_COULDNT_USE_REST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPPARTIALFILE"></a><span class="nroffip">CURLE_FTP_PARTIAL_FILE</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.1 
+<p class="level0"><a name="CURLEFTPPORTFAILED"></a><span class="nroffip">CURLE_FTP_PORT_FAILED</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPPRETFAILED"></a><span class="nroffip">CURLE_FTP_PRET_FAILED</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLEFTPQUOTEERROR"></a><span class="nroffip">CURLE_FTP_QUOTE_ERROR</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPSSLFAILED"></a><span class="nroffip">CURLE_FTP_SSL_FAILED</span> 
+<p class="level1">Introduced in 7.11.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPUSERPASSWORDINCORRECT"></a><span class="nroffip">CURLE_FTP_USER_PASSWORD_INCORRECT</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPWEIRD227FORMAT"></a><span class="nroffip">CURLE_FTP_WEIRD_227_FORMAT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPWEIRDPASSREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_PASS_REPLY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPWEIRDPASVREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_PASV_REPLY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPWEIRDSERVERREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_SERVER_REPLY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEFTPWEIRDUSERREPLY"></a><span class="nroffip">CURLE_FTP_WEIRD_USER_REPLY</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFTPWRITEERROR"></a><span class="nroffip">CURLE_FTP_WRITE_ERROR</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEFUNCTIONNOTFOUND"></a><span class="nroffip">CURLE_FUNCTION_NOT_FOUND</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEGOTNOTHING"></a><span class="nroffip">CURLE_GOT_NOTHING</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLEHTTP2"></a><span class="nroffip">CURLE_HTTP2</span> 
+<p class="level1">Introduced in 7.38.0 
+<p class="level0"><a name="CURLEHTTPNOTFOUND"></a><span class="nroffip">CURLE_HTTP_NOT_FOUND</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEHTTPPORTFAILED"></a><span class="nroffip">CURLE_HTTP_PORT_FAILED</span> 
+<p class="level1">Introduced in 7.3 Deprecated since 7.12.0 
+<p class="level0"><a name="CURLEHTTPPOSTERROR"></a><span class="nroffip">CURLE_HTTP_POST_ERROR</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEHTTPRANGEERROR"></a><span class="nroffip">CURLE_HTTP_RANGE_ERROR</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEHTTPRETURNEDERROR"></a><span class="nroffip">CURLE_HTTP_RETURNED_ERROR</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLEINTERFACEFAILED"></a><span class="nroffip">CURLE_INTERFACE_FAILED</span> 
+<p class="level1">Introduced in 7.12.0 
+<p class="level0"><a name="CURLELDAPCANNOTBIND"></a><span class="nroffip">CURLE_LDAP_CANNOT_BIND</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLELDAPINVALIDURL"></a><span class="nroffip">CURLE_LDAP_INVALID_URL</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLELDAPSEARCHFAILED"></a><span class="nroffip">CURLE_LDAP_SEARCH_FAILED</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLELIBRARYNOTFOUND"></a><span class="nroffip">CURLE_LIBRARY_NOT_FOUND</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLELOGINDENIED"></a><span class="nroffip">CURLE_LOGIN_DENIED</span> 
+<p class="level1">Introduced in 7.13.1 
+<p class="level0"><a name="CURLEMALFORMATUSER"></a><span class="nroffip">CURLE_MALFORMAT_USER</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLENOTBUILTIN"></a><span class="nroffip">CURLE_NOT_BUILT_IN</span> 
+<p class="level1">Introduced in 7.21.5 
+<p class="level0"><a name="CURLENOCONNECTIONAVAILABLE"></a><span class="nroffip">CURLE_NO_CONNECTION_AVAILABLE</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLEOK"></a><span class="nroffip">CURLE_OK</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEOPERATIONTIMEDOUT"></a><span class="nroffip">CURLE_OPERATION_TIMEDOUT</span> 
+<p class="level1">Introduced in 7.10.2 
+<p class="level0"><a name="CURLEOPERATIONTIMEOUTED"></a><span class="nroffip">CURLE_OPERATION_TIMEOUTED</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEOUTOFMEMORY"></a><span class="nroffip">CURLE_OUT_OF_MEMORY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEPARTIALFILE"></a><span class="nroffip">CURLE_PARTIAL_FILE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEPEERFAILEDVERIFICATION"></a><span class="nroffip">CURLE_PEER_FAILED_VERIFICATION</span> 
+<p class="level1">Introduced in 7.17.1 
+<p class="level0"><a name="CURLEQUOTEERROR"></a><span class="nroffip">CURLE_QUOTE_ERROR</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLERANGEERROR"></a><span class="nroffip">CURLE_RANGE_ERROR</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLEREADERROR"></a><span class="nroffip">CURLE_READ_ERROR</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLERECVERROR"></a><span class="nroffip">CURLE_RECV_ERROR</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLEREMOTEACCESSDENIED"></a><span class="nroffip">CURLE_REMOTE_ACCESS_DENIED</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLEREMOTEDISKFULL"></a><span class="nroffip">CURLE_REMOTE_DISK_FULL</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLEREMOTEFILEEXISTS"></a><span class="nroffip">CURLE_REMOTE_FILE_EXISTS</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLEREMOTEFILENOTFOUND"></a><span class="nroffip">CURLE_REMOTE_FILE_NOT_FOUND</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLERTSPCSEQERROR"></a><span class="nroffip">CURLE_RTSP_CSEQ_ERROR</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLERTSPSESSIONERROR"></a><span class="nroffip">CURLE_RTSP_SESSION_ERROR</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLESENDERROR"></a><span class="nroffip">CURLE_SEND_ERROR</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLESENDFAILREWIND"></a><span class="nroffip">CURLE_SEND_FAIL_REWIND</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLESHAREINUSE"></a><span class="nroffip">CURLE_SHARE_IN_USE</span> 
+<p class="level1">Introduced in 7.9.6 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLESSH"></a><span class="nroffip">CURLE_SSH</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLESSLCACERT"></a><span class="nroffip">CURLE_SSL_CACERT</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLESSLCACERTBADFILE"></a><span class="nroffip">CURLE_SSL_CACERT_BADFILE</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLESSLCERTPROBLEM"></a><span class="nroffip">CURLE_SSL_CERTPROBLEM</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLESSLCIPHER"></a><span class="nroffip">CURLE_SSL_CIPHER</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLESSLCONNECTERROR"></a><span class="nroffip">CURLE_SSL_CONNECT_ERROR</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLESSLCRLBADFILE"></a><span class="nroffip">CURLE_SSL_CRL_BADFILE</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLESSLENGINEINITFAILED"></a><span class="nroffip">CURLE_SSL_ENGINE_INITFAILED</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLESSLENGINENOTFOUND"></a><span class="nroffip">CURLE_SSL_ENGINE_NOTFOUND</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLESSLENGINESETFAILED"></a><span class="nroffip">CURLE_SSL_ENGINE_SETFAILED</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLESSLINVALIDCERTSTATUS"></a><span class="nroffip">CURLE_SSL_INVALIDCERTSTATUS</span> 
+<p class="level1">Introduced in 7.41.0 
+<p class="level0"><a name="CURLESSLISSUERERROR"></a><span class="nroffip">CURLE_SSL_ISSUER_ERROR</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLESSLPEERCERTIFICATE"></a><span class="nroffip">CURLE_SSL_PEER_CERTIFICATE</span> 
+<p class="level1">Introduced in 7.8 Deprecated since 7.17.1 
+<p class="level0"><a name="CURLESSLPINNEDPUBKEYNOTMATCH"></a><span class="nroffip">CURLE_SSL_PINNEDPUBKEYNOTMATCH</span> 
+<p class="level1">Introduced in 7.39.0 
+<p class="level0"><a name="CURLESSLSHUTDOWNFAILED"></a><span class="nroffip">CURLE_SSL_SHUTDOWN_FAILED</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLETELNETOPTIONSYNTAX"></a><span class="nroffip">CURLE_TELNET_OPTION_SYNTAX</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLETFTPDISKFULL"></a><span class="nroffip">CURLE_TFTP_DISKFULL</span> 
+<p class="level1">Introduced in 7.15.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLETFTPEXISTS"></a><span class="nroffip">CURLE_TFTP_EXISTS</span> 
+<p class="level1">Introduced in 7.15.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLETFTPILLEGAL"></a><span class="nroffip">CURLE_TFTP_ILLEGAL</span> 
+<p class="level1">Introduced in 7.15.0 
+<p class="level0"><a name="CURLETFTPNOSUCHUSER"></a><span class="nroffip">CURLE_TFTP_NOSUCHUSER</span> 
+<p class="level1">Introduced in 7.15.0 
+<p class="level0"><a name="CURLETFTPNOTFOUND"></a><span class="nroffip">CURLE_TFTP_NOTFOUND</span> 
+<p class="level1">Introduced in 7.15.0 
+<p class="level0"><a name="CURLETFTPPERM"></a><span class="nroffip">CURLE_TFTP_PERM</span> 
+<p class="level1">Introduced in 7.15.0 
+<p class="level0"><a name="CURLETFTPUNKNOWNID"></a><span class="nroffip">CURLE_TFTP_UNKNOWNID</span> 
+<p class="level1">Introduced in 7.15.0 
+<p class="level0"><a name="CURLETOOMANYREDIRECTS"></a><span class="nroffip">CURLE_TOO_MANY_REDIRECTS</span> 
+<p class="level1">Introduced in 7.5 
+<p class="level0"><a name="CURLEUNKNOWNOPTION"></a><span class="nroffip">CURLE_UNKNOWN_OPTION</span> 
+<p class="level1">Introduced in 7.21.5 
+<p class="level0"><a name="CURLEUNKNOWNTELNETOPTION"></a><span class="nroffip">CURLE_UNKNOWN_TELNET_OPTION</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLEUNSUPPORTEDPROTOCOL"></a><span class="nroffip">CURLE_UNSUPPORTED_PROTOCOL</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEUPLOADFAILED"></a><span class="nroffip">CURLE_UPLOAD_FAILED</span> 
+<p class="level1">Introduced in 7.16.3 
+<p class="level0"><a name="CURLEURLMALFORMAT"></a><span class="nroffip">CURLE_URL_MALFORMAT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLEURLMALFORMATUSER"></a><span class="nroffip">CURLE_URL_MALFORMAT_USER</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLEUSESSLFAILED"></a><span class="nroffip">CURLE_USE_SSL_FAILED</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLEWRITEERROR"></a><span class="nroffip">CURLE_WRITE_ERROR</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLFILETYPEDEVICEBLOCK"></a><span class="nroffip">CURLFILETYPE_DEVICE_BLOCK</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPEDEVICECHAR"></a><span class="nroffip">CURLFILETYPE_DEVICE_CHAR</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPEDIRECTORY"></a><span class="nroffip">CURLFILETYPE_DIRECTORY</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPEDOOR"></a><span class="nroffip">CURLFILETYPE_DOOR</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPEFILE"></a><span class="nroffip">CURLFILETYPE_FILE</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPENAMEDPIPE"></a><span class="nroffip">CURLFILETYPE_NAMEDPIPE</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPESOCKET"></a><span class="nroffip">CURLFILETYPE_SOCKET</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPESYMLINK"></a><span class="nroffip">CURLFILETYPE_SYMLINK</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFILETYPEUNKNOWN"></a><span class="nroffip">CURLFILETYPE_UNKNOWN</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNFILENAME"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_FILENAME</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNFILETYPE"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_FILETYPE</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNGID"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_GID</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNHLINKCOUNT"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_HLINKCOUNT</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNPERM"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_PERM</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNSIZE"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_SIZE</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNTIME"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_TIME</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFINFOFLAGKNOWNUID"></a><span class="nroffip">CURLFINFOFLAG_KNOWN_UID</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFORMARRAY"></a><span class="nroffip">CURLFORM_ARRAY</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLFORMARRAYEND"></a><span class="nroffip">CURLFORM_ARRAY_END</span> 
+<p class="level1">Introduced in 7.9.1 Deprecated since 7.9.5 Last used in 7.9.5 
+<p class="level0"><a name="CURLFORMARRAYSTART"></a><span class="nroffip">CURLFORM_ARRAY_START</span> 
+<p class="level1">Introduced in 7.9.1 Deprecated since 7.9.5 Last used in 7.9.5 
+<p class="level0"><a name="CURLFORMBUFFER"></a><span class="nroffip">CURLFORM_BUFFER</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMBUFFERLENGTH"></a><span class="nroffip">CURLFORM_BUFFERLENGTH</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMBUFFERPTR"></a><span class="nroffip">CURLFORM_BUFFERPTR</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMCONTENTHEADER"></a><span class="nroffip">CURLFORM_CONTENTHEADER</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLFORMCONTENTLEN"></a><span class="nroffip">CURLFORM_CONTENTLEN</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLFORMCONTENTSLENGTH"></a><span class="nroffip">CURLFORM_CONTENTSLENGTH</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMCONTENTTYPE"></a><span class="nroffip">CURLFORM_CONTENTTYPE</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMCOPYCONTENTS"></a><span class="nroffip">CURLFORM_COPYCONTENTS</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMCOPYNAME"></a><span class="nroffip">CURLFORM_COPYNAME</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMEND"></a><span class="nroffip">CURLFORM_END</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMFILE"></a><span class="nroffip">CURLFORM_FILE</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMFILECONTENT"></a><span class="nroffip">CURLFORM_FILECONTENT</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLFORMFILENAME"></a><span class="nroffip">CURLFORM_FILENAME</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLFORMNAMELENGTH"></a><span class="nroffip">CURLFORM_NAMELENGTH</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMNOTHING"></a><span class="nroffip">CURLFORM_NOTHING</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMPTRCONTENTS"></a><span class="nroffip">CURLFORM_PTRCONTENTS</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMPTRNAME"></a><span class="nroffip">CURLFORM_PTRNAME</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLFORMSTREAM"></a><span class="nroffip">CURLFORM_STREAM</span> 
+<p class="level1">Introduced in 7.18.2 
+<p class="level0"><a name="CURLFTPAUTHDEFAULT"></a><span class="nroffip">CURLFTPAUTH_DEFAULT</span> 
+<p class="level1">Introduced in 7.12.2 
+<p class="level0"><a name="CURLFTPAUTHSSL"></a><span class="nroffip">CURLFTPAUTH_SSL</span> 
+<p class="level1">Introduced in 7.12.2 
+<p class="level0"><a name="CURLFTPAUTHTLS"></a><span class="nroffip">CURLFTPAUTH_TLS</span> 
+<p class="level1">Introduced in 7.12.2 
+<p class="level0"><a name="CURLFTPMETHODDEFAULT"></a><span class="nroffip">CURLFTPMETHOD_DEFAULT</span> 
+<p class="level1">Introduced in 7.15.3 
+<p class="level0"><a name="CURLFTPMETHODMULTICWD"></a><span class="nroffip">CURLFTPMETHOD_MULTICWD</span> 
+<p class="level1">Introduced in 7.15.3 
+<p class="level0"><a name="CURLFTPMETHODNOCWD"></a><span class="nroffip">CURLFTPMETHOD_NOCWD</span> 
+<p class="level1">Introduced in 7.15.3 
+<p class="level0"><a name="CURLFTPMETHODSINGLECWD"></a><span class="nroffip">CURLFTPMETHOD_SINGLECWD</span> 
+<p class="level1">Introduced in 7.15.3 
+<p class="level0"><a name="CURLFTPSSLALL"></a><span class="nroffip">CURLFTPSSL_ALL</span> 
+<p class="level1">Introduced in 7.11.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLFTPSSLCCCACTIVE"></a><span class="nroffip">CURLFTPSSL_CCC_ACTIVE</span> 
+<p class="level1">Introduced in 7.16.2 
+<p class="level0"><a name="CURLFTPSSLCCCNONE"></a><span class="nroffip">CURLFTPSSL_CCC_NONE</span> 
+<p class="level1">Introduced in 7.16.2 
+<p class="level0"><a name="CURLFTPSSLCCCPASSIVE"></a><span class="nroffip">CURLFTPSSL_CCC_PASSIVE</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLFTPSSLCONTROL"></a><span class="nroffip">CURLFTPSSL_CONTROL</span> 
+<p class="level1">Introduced in 7.11.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLFTPSSLNONE"></a><span class="nroffip">CURLFTPSSL_NONE</span> 
+<p class="level1">Introduced in 7.11.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLFTPSSLTRY"></a><span class="nroffip">CURLFTPSSL_TRY</span> 
+<p class="level1">Introduced in 7.11.0 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLFTPCREATEDIR"></a><span class="nroffip">CURLFTP_CREATE_DIR</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLFTPCREATEDIRNONE"></a><span class="nroffip">CURLFTP_CREATE_DIR_NONE</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLFTPCREATEDIRRETRY"></a><span class="nroffip">CURLFTP_CREATE_DIR_RETRY</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLGSSAPIDELEGATIONFLAG"></a><span class="nroffip">CURLGSSAPI_DELEGATION_FLAG</span> 
+<p class="level1">Introduced in 7.22.0 
+<p class="level0"><a name="CURLGSSAPIDELEGATIONNONE"></a><span class="nroffip">CURLGSSAPI_DELEGATION_NONE</span> 
+<p class="level1">Introduced in 7.22.0 
+<p class="level0"><a name="CURLGSSAPIDELEGATIONPOLICYFLAG"></a><span class="nroffip">CURLGSSAPI_DELEGATION_POLICY_FLAG</span> 
+<p class="level1">Introduced in 7.22.0 
+<p class="level0"><a name="CURLHEADERSEPARATE"></a><span class="nroffip">CURLHEADER_SEPARATE</span> 
+<p class="level1">Introduced in 7.37.0 
+<p class="level0"><a name="CURLHEADERUNIFIED"></a><span class="nroffip">CURLHEADER_UNIFIED</span> 
+<p class="level1">Introduced in 7.37.0 
+<p class="level0"><a name="CURLINFOACTIVESOCKET"></a><span class="nroffip">CURLINFO_ACTIVESOCKET</span> 
+<p class="level1">Introduced in 7.45.0 
+<p class="level0"><a name="CURLINFOAPPCONNECTTIME"></a><span class="nroffip">CURLINFO_APPCONNECT_TIME</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLINFOCERTINFO"></a><span class="nroffip">CURLINFO_CERTINFO</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLINFOCONDITIONUNMET"></a><span class="nroffip">CURLINFO_CONDITION_UNMET</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLINFOCONNECTTIME"></a><span class="nroffip">CURLINFO_CONNECT_TIME</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOCONTENTLENGTHDOWNLOAD"></a><span class="nroffip">CURLINFO_CONTENT_LENGTH_DOWNLOAD</span> 
+<p class="level1">Introduced in 7.6.1 
+<p class="level0"><a name="CURLINFOCONTENTLENGTHUPLOAD"></a><span class="nroffip">CURLINFO_CONTENT_LENGTH_UPLOAD</span> 
+<p class="level1">Introduced in 7.6.1 
+<p class="level0"><a name="CURLINFOCONTENTTYPE"></a><span class="nroffip">CURLINFO_CONTENT_TYPE</span> 
+<p class="level1">Introduced in 7.9.4 
+<p class="level0"><a name="CURLINFOCOOKIELIST"></a><span class="nroffip">CURLINFO_COOKIELIST</span> 
+<p class="level1">Introduced in 7.14.1 
+<p class="level0"><a name="CURLINFODATAIN"></a><span class="nroffip">CURLINFO_DATA_IN</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLINFODATAOUT"></a><span class="nroffip">CURLINFO_DATA_OUT</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLINFODOUBLE"></a><span class="nroffip">CURLINFO_DOUBLE</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOEFFECTIVEURL"></a><span class="nroffip">CURLINFO_EFFECTIVE_URL</span> 
+<p class="level1">Introduced in 7.4 
+<p class="level0"><a name="CURLINFOEND"></a><span class="nroffip">CURLINFO_END</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLINFOFILETIME"></a><span class="nroffip">CURLINFO_FILETIME</span> 
+<p class="level1">Introduced in 7.5 
+<p class="level0"><a name="CURLINFOFTPENTRYPATH"></a><span class="nroffip">CURLINFO_FTP_ENTRY_PATH</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLINFOHEADERIN"></a><span class="nroffip">CURLINFO_HEADER_IN</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLINFOHEADEROUT"></a><span class="nroffip">CURLINFO_HEADER_OUT</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLINFOHEADERSIZE"></a><span class="nroffip">CURLINFO_HEADER_SIZE</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOHTTPAUTHAVAIL"></a><span class="nroffip">CURLINFO_HTTPAUTH_AVAIL</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLINFOHTTPCODE"></a><span class="nroffip">CURLINFO_HTTP_CODE</span> 
+<p class="level1">Introduced in 7.4.1 Deprecated since 7.10.8 
+<p class="level0"><a name="CURLINFOHTTPCONNECTCODE"></a><span class="nroffip">CURLINFO_HTTP_CONNECTCODE</span> 
+<p class="level1">Introduced in 7.10.7 
+<p class="level0"><a name="CURLINFOLASTONE"></a><span class="nroffip">CURLINFO_LASTONE</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOLASTSOCKET"></a><span class="nroffip">CURLINFO_LASTSOCKET</span> 
+<p class="level1">Introduced in 7.15.2 
+<p class="level0"><a name="CURLINFOLOCALIP"></a><span class="nroffip">CURLINFO_LOCAL_IP</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLINFOLOCALPORT"></a><span class="nroffip">CURLINFO_LOCAL_PORT</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLINFOLONG"></a><span class="nroffip">CURLINFO_LONG</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOMASK"></a><span class="nroffip">CURLINFO_MASK</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFONAMELOOKUPTIME"></a><span class="nroffip">CURLINFO_NAMELOOKUP_TIME</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFONONE"></a><span class="nroffip">CURLINFO_NONE</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFONUMCONNECTS"></a><span class="nroffip">CURLINFO_NUM_CONNECTS</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLINFOOSERRNO"></a><span class="nroffip">CURLINFO_OS_ERRNO</span> 
+<p class="level1">Introduced in 7.12.2 
+<p class="level0"><a name="CURLINFOPRETRANSFERTIME"></a><span class="nroffip">CURLINFO_PRETRANSFER_TIME</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOPRIMARYIP"></a><span class="nroffip">CURLINFO_PRIMARY_IP</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLINFOPRIMARYPORT"></a><span class="nroffip">CURLINFO_PRIMARY_PORT</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLINFOPRIVATE"></a><span class="nroffip">CURLINFO_PRIVATE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLINFOPROXYAUTHAVAIL"></a><span class="nroffip">CURLINFO_PROXYAUTH_AVAIL</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLINFOREDIRECTCOUNT"></a><span class="nroffip">CURLINFO_REDIRECT_COUNT</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLINFOREDIRECTTIME"></a><span class="nroffip">CURLINFO_REDIRECT_TIME</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLINFOREDIRECTURL"></a><span class="nroffip">CURLINFO_REDIRECT_URL</span> 
+<p class="level1">Introduced in 7.18.2 
+<p class="level0"><a name="CURLINFOREQUESTSIZE"></a><span class="nroffip">CURLINFO_REQUEST_SIZE</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFORESPONSECODE"></a><span class="nroffip">CURLINFO_RESPONSE_CODE</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLINFORTSPCLIENTCSEQ"></a><span class="nroffip">CURLINFO_RTSP_CLIENT_CSEQ</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLINFORTSPCSEQRECV"></a><span class="nroffip">CURLINFO_RTSP_CSEQ_RECV</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLINFORTSPSERVERCSEQ"></a><span class="nroffip">CURLINFO_RTSP_SERVER_CSEQ</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLINFORTSPSESSIONID"></a><span class="nroffip">CURLINFO_RTSP_SESSION_ID</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLINFOSIZEDOWNLOAD"></a><span class="nroffip">CURLINFO_SIZE_DOWNLOAD</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOSIZEUPLOAD"></a><span class="nroffip">CURLINFO_SIZE_UPLOAD</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOSLIST"></a><span class="nroffip">CURLINFO_SLIST</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLINFOSOCKET"></a><span class="nroffip">CURLINFO_SOCKET</span> 
+<p class="level1">Introduced in 7.45.0 
+<p class="level0"><a name="CURLINFOSPEEDDOWNLOAD"></a><span class="nroffip">CURLINFO_SPEED_DOWNLOAD</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOSPEEDUPLOAD"></a><span class="nroffip">CURLINFO_SPEED_UPLOAD</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOSSLDATAIN"></a><span class="nroffip">CURLINFO_SSL_DATA_IN</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLINFOSSLDATAOUT"></a><span class="nroffip">CURLINFO_SSL_DATA_OUT</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLINFOSSLENGINES"></a><span class="nroffip">CURLINFO_SSL_ENGINES</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLINFOSSLVERIFYRESULT"></a><span class="nroffip">CURLINFO_SSL_VERIFYRESULT</span> 
+<p class="level1">Introduced in 7.5 
+<p class="level0"><a name="CURLINFOSTARTTRANSFERTIME"></a><span class="nroffip">CURLINFO_STARTTRANSFER_TIME</span> 
+<p class="level1">Introduced in 7.9.2 
+<p class="level0"><a name="CURLINFOSTRING"></a><span class="nroffip">CURLINFO_STRING</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOTEXT"></a><span class="nroffip">CURLINFO_TEXT</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLINFOTLSSESSION"></a><span class="nroffip">CURLINFO_TLS_SESSION</span> 
+<p class="level1">Introduced in 7.34.0 Deprecated since 7.48.0 
+<p class="level0"><a name="CURLINFOTLSSSLPTR"></a><span class="nroffip">CURLINFO_TLS_SSL_PTR</span> 
+<p class="level1">Introduced in 7.48.0 
+<p class="level0"><a name="CURLINFOTOTALTIME"></a><span class="nroffip">CURLINFO_TOTAL_TIME</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLINFOTYPEMASK"></a><span class="nroffip">CURLINFO_TYPEMASK</span> 
+<p class="level1">Introduced in 7.4.1 
+<p class="level0"><a name="CURLIOCMDNOP"></a><span class="nroffip">CURLIOCMD_NOP</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLIOCMDRESTARTREAD"></a><span class="nroffip">CURLIOCMD_RESTARTREAD</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLIOEFAILRESTART"></a><span class="nroffip">CURLIOE_FAILRESTART</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLIOEOK"></a><span class="nroffip">CURLIOE_OK</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLIOEUNKNOWNCMD"></a><span class="nroffip">CURLIOE_UNKNOWNCMD</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLKHMATCHMISMATCH"></a><span class="nroffip">CURLKHMATCH_MISMATCH</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHMATCHMISSING"></a><span class="nroffip">CURLKHMATCH_MISSING</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHMATCHOK"></a><span class="nroffip">CURLKHMATCH_OK</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHSTATDEFER"></a><span class="nroffip">CURLKHSTAT_DEFER</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHSTATFINE"></a><span class="nroffip">CURLKHSTAT_FINE</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHSTATFINEADDTOFILE"></a><span class="nroffip">CURLKHSTAT_FINE_ADD_TO_FILE</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHSTATREJECT"></a><span class="nroffip">CURLKHSTAT_REJECT</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHTYPEDSS"></a><span class="nroffip">CURLKHTYPE_DSS</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHTYPERSA"></a><span class="nroffip">CURLKHTYPE_RSA</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHTYPERSA1"></a><span class="nroffip">CURLKHTYPE_RSA1</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLKHTYPEUNKNOWN"></a><span class="nroffip">CURLKHTYPE_UNKNOWN</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLMOPTCHUNKLENGTHPENALTYSIZE"></a><span class="nroffip">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTCONTENTLENGTHPENALTYSIZE"></a><span class="nroffip">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTMAXCONNECTS"></a><span class="nroffip">CURLMOPT_MAXCONNECTS</span> 
+<p class="level1">Introduced in 7.16.3 
+<p class="level0"><a name="CURLMOPTMAXHOSTCONNECTIONS"></a><span class="nroffip">CURLMOPT_MAX_HOST_CONNECTIONS</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTMAXPIPELINELENGTH"></a><span class="nroffip">CURLMOPT_MAX_PIPELINE_LENGTH</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTMAXTOTALCONNECTIONS"></a><span class="nroffip">CURLMOPT_MAX_TOTAL_CONNECTIONS</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTPIPELINING"></a><span class="nroffip">CURLMOPT_PIPELINING</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLMOPTPIPELININGSERVERBL"></a><span class="nroffip">CURLMOPT_PIPELINING_SERVER_BL</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTPIPELININGSITEBL"></a><span class="nroffip">CURLMOPT_PIPELINING_SITE_BL</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLMOPTPUSHDATA"></a><span class="nroffip">CURLMOPT_PUSHDATA</span> 
+<p class="level1">Introduced in 7.44.0 
+<p class="level0"><a name="CURLMOPTPUSHFUNCTION"></a><span class="nroffip">CURLMOPT_PUSHFUNCTION</span> 
+<p class="level1">Introduced in 7.44.0 
+<p class="level0"><a name="CURLMOPTSOCKETDATA"></a><span class="nroffip">CURLMOPT_SOCKETDATA</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLMOPTSOCKETFUNCTION"></a><span class="nroffip">CURLMOPT_SOCKETFUNCTION</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLMOPTTIMERDATA"></a><span class="nroffip">CURLMOPT_TIMERDATA</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLMOPTTIMERFUNCTION"></a><span class="nroffip">CURLMOPT_TIMERFUNCTION</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLMSGDONE"></a><span class="nroffip">CURLMSG_DONE</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMSGNONE"></a><span class="nroffip">CURLMSG_NONE</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMADDEDALREADY"></a><span class="nroffip">CURLM_ADDED_ALREADY</span> 
+<p class="level1">Introduced in 7.32.1 
+<p class="level0"><a name="CURLMBADEASYHANDLE"></a><span class="nroffip">CURLM_BAD_EASY_HANDLE</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMBADHANDLE"></a><span class="nroffip">CURLM_BAD_HANDLE</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMBADSOCKET"></a><span class="nroffip">CURLM_BAD_SOCKET</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLMCALLMULTIPERFORM"></a><span class="nroffip">CURLM_CALL_MULTI_PERFORM</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMCALLMULTISOCKET"></a><span class="nroffip">CURLM_CALL_MULTI_SOCKET</span> 
+<p class="level1">Introduced in 7.15.5 
+<p class="level0"><a name="CURLMINTERNALERROR"></a><span class="nroffip">CURLM_INTERNAL_ERROR</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMOK"></a><span class="nroffip">CURLM_OK</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMOUTOFMEMORY"></a><span class="nroffip">CURLM_OUT_OF_MEMORY</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLMUNKNOWNOPTION"></a><span class="nroffip">CURLM_UNKNOWN_OPTION</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLOPTTYPEFUNCTIONPOINT"></a><span class="nroffip">CURLOPTTYPE_FUNCTIONPOINT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTTYPELONG"></a><span class="nroffip">CURLOPTTYPE_LONG</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTTYPEOBJECTPOINT"></a><span class="nroffip">CURLOPTTYPE_OBJECTPOINT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTTYPEOFFT"></a><span class="nroffip">CURLOPTTYPE_OFF_T</span> 
+<p class="level1">Introduced in 7.11.0 
+<p class="level0"><a name="CURLOPTTYPESTRINGPOINT"></a><span class="nroffip">CURLOPTTYPE_STRINGPOINT</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLOPTACCEPTTIMEOUTMS"></a><span class="nroffip">CURLOPT_ACCEPTTIMEOUT_MS</span> 
+<p class="level1">Introduced in 7.24.0 
+<p class="level0"><a name="CURLOPTACCEPTENCODING"></a><span class="nroffip">CURLOPT_ACCEPT_ENCODING</span> 
+<p class="level1">Introduced in 7.21.6 
+<p class="level0"><a name="CURLOPTADDRESSSCOPE"></a><span class="nroffip">CURLOPT_ADDRESS_SCOPE</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLOPTAPPEND"></a><span class="nroffip">CURLOPT_APPEND</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLOPTAUTOREFERER"></a><span class="nroffip">CURLOPT_AUTOREFERER</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTBUFFERSIZE"></a><span class="nroffip">CURLOPT_BUFFERSIZE</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLOPTCAINFO"></a><span class="nroffip">CURLOPT_CAINFO</span> 
+<p class="level1">Introduced in 7.4.2 
+<p class="level0"><a name="CURLOPTCAPATH"></a><span class="nroffip">CURLOPT_CAPATH</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLOPTCERTINFO"></a><span class="nroffip">CURLOPT_CERTINFO</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLOPTCHUNKBGNFUNCTION"></a><span class="nroffip">CURLOPT_CHUNK_BGN_FUNCTION</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLOPTCHUNKDATA"></a><span class="nroffip">CURLOPT_CHUNK_DATA</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLOPTCHUNKENDFUNCTION"></a><span class="nroffip">CURLOPT_CHUNK_END_FUNCTION</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLOPTCLOSEFUNCTION"></a><span class="nroffip">CURLOPT_CLOSEFUNCTION</span> 
+<p class="level1">Introduced in 7.7 Deprecated since 7.11.1 Last used in 7.11.1 
+<p class="level0"><a name="CURLOPTCLOSEPOLICY"></a><span class="nroffip">CURLOPT_CLOSEPOLICY</span> 
+<p class="level1">Introduced in 7.7 Deprecated since 7.16.1 
+<p class="level0"><a name="CURLOPTCLOSESOCKETDATA"></a><span class="nroffip">CURLOPT_CLOSESOCKETDATA</span> 
+<p class="level1">Introduced in 7.21.7 
+<p class="level0"><a name="CURLOPTCLOSESOCKETFUNCTION"></a><span class="nroffip">CURLOPT_CLOSESOCKETFUNCTION</span> 
+<p class="level1">Introduced in 7.21.7 
+<p class="level0"><a name="CURLOPTCONNECTTIMEOUT"></a><span class="nroffip">CURLOPT_CONNECTTIMEOUT</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTCONNECTTIMEOUTMS"></a><span class="nroffip">CURLOPT_CONNECTTIMEOUT_MS</span> 
+<p class="level1">Introduced in 7.16.2 
+<p class="level0"><a name="CURLOPTCONNECTONLY"></a><span class="nroffip">CURLOPT_CONNECT_ONLY</span> 
+<p class="level1">Introduced in 7.15.2 
+<p class="level0"><a name="CURLOPTCONVFROMNETWORKFUNCTION"></a><span class="nroffip">CURLOPT_CONV_FROM_NETWORK_FUNCTION</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLOPTCONVFROMUTF8FUNCTION"></a><span class="nroffip">CURLOPT_CONV_FROM_UTF8_FUNCTION</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLOPTCONVTONETWORKFUNCTION"></a><span class="nroffip">CURLOPT_CONV_TO_NETWORK_FUNCTION</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLOPTCOOKIE"></a><span class="nroffip">CURLOPT_COOKIE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTCOOKIEFILE"></a><span class="nroffip">CURLOPT_COOKIEFILE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTCOOKIEJAR"></a><span class="nroffip">CURLOPT_COOKIEJAR</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLOPTCOOKIELIST"></a><span class="nroffip">CURLOPT_COOKIELIST</span> 
+<p class="level1">Introduced in 7.14.1 
+<p class="level0"><a name="CURLOPTCOOKIESESSION"></a><span class="nroffip">CURLOPT_COOKIESESSION</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLOPTCOPYPOSTFIELDS"></a><span class="nroffip">CURLOPT_COPYPOSTFIELDS</span> 
+<p class="level1">Introduced in 7.17.1 
+<p class="level0"><a name="CURLOPTCRLF"></a><span class="nroffip">CURLOPT_CRLF</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTCRLFILE"></a><span class="nroffip">CURLOPT_CRLFILE</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLOPTCUSTOMREQUEST"></a><span class="nroffip">CURLOPT_CUSTOMREQUEST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTDEBUGDATA"></a><span class="nroffip">CURLOPT_DEBUGDATA</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLOPTDEBUGFUNCTION"></a><span class="nroffip">CURLOPT_DEBUGFUNCTION</span> 
+<p class="level1">Introduced in 7.9.6 
+<p class="level0"><a name="CURLOPTDEFAULTPROTOCOL"></a><span class="nroffip">CURLOPT_DEFAULT_PROTOCOL</span> 
+<p class="level1">Introduced in 7.45.0 
+<p class="level0"><a name="CURLOPTDIRLISTONLY"></a><span class="nroffip">CURLOPT_DIRLISTONLY</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLOPTDNSCACHETIMEOUT"></a><span class="nroffip">CURLOPT_DNS_CACHE_TIMEOUT</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLOPTDNSINTERFACE"></a><span class="nroffip">CURLOPT_DNS_INTERFACE</span> 
+<p class="level1">Introduced in 7.33.0 
+<p class="level0"><a name="CURLOPTDNSLOCALIP4"></a><span class="nroffip">CURLOPT_DNS_LOCAL_IP4</span> 
+<p class="level1">Introduced in 7.33.0 
+<p class="level0"><a name="CURLOPTDNSLOCALIP6"></a><span class="nroffip">CURLOPT_DNS_LOCAL_IP6</span> 
+<p class="level1">Introduced in 7.33.0 
+<p class="level0"><a name="CURLOPTDNSSERVERS"></a><span class="nroffip">CURLOPT_DNS_SERVERS</span> 
+<p class="level1">Introduced in 7.24.0 
+<p class="level0"><a name="CURLOPTDNSUSEGLOBALCACHE"></a><span class="nroffip">CURLOPT_DNS_USE_GLOBAL_CACHE</span> 
+<p class="level1">Introduced in 7.9.3 Deprecated since 7.11.1 
+<p class="level0"><a name="CURLOPTEGDSOCKET"></a><span class="nroffip">CURLOPT_EGDSOCKET</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTENCODING"></a><span class="nroffip">CURLOPT_ENCODING</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLOPTERRORBUFFER"></a><span class="nroffip">CURLOPT_ERRORBUFFER</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTEXPECT100TIMEOUTMS"></a><span class="nroffip">CURLOPT_EXPECT_100_TIMEOUT_MS</span> 
+<p class="level1">Introduced in 7.36.0 
+<p class="level0"><a name="CURLOPTFAILONERROR"></a><span class="nroffip">CURLOPT_FAILONERROR</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTFILE"></a><span class="nroffip">CURLOPT_FILE</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.9.7 
+<p class="level0"><a name="CURLOPTFILETIME"></a><span class="nroffip">CURLOPT_FILETIME</span> 
+<p class="level1">Introduced in 7.5 
+<p class="level0"><a name="CURLOPTFNMATCHDATA"></a><span class="nroffip">CURLOPT_FNMATCH_DATA</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLOPTFNMATCHFUNCTION"></a><span class="nroffip">CURLOPT_FNMATCH_FUNCTION</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLOPTFOLLOWLOCATION"></a><span class="nroffip">CURLOPT_FOLLOWLOCATION</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTFORBIDREUSE"></a><span class="nroffip">CURLOPT_FORBID_REUSE</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTFRESHCONNECT"></a><span class="nroffip">CURLOPT_FRESH_CONNECT</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTFTPAPPEND"></a><span class="nroffip">CURLOPT_FTPAPPEND</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.16.4 
+<p class="level0"><a name="CURLOPTFTPASCII"></a><span class="nroffip">CURLOPT_FTPASCII</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.11.1 Last used in 7.11.1 
+<p class="level0"><a name="CURLOPTFTPLISTONLY"></a><span class="nroffip">CURLOPT_FTPLISTONLY</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.16.4 
+<p class="level0"><a name="CURLOPTFTPPORT"></a><span class="nroffip">CURLOPT_FTPPORT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTFTPSSLAUTH"></a><span class="nroffip">CURLOPT_FTPSSLAUTH</span> 
+<p class="level1">Introduced in 7.12.2 
+<p class="level0"><a name="CURLOPTFTPACCOUNT"></a><span class="nroffip">CURLOPT_FTP_ACCOUNT</span> 
+<p class="level1">Introduced in 7.13.0 
+<p class="level0"><a name="CURLOPTFTPALTERNATIVETOUSER"></a><span class="nroffip">CURLOPT_FTP_ALTERNATIVE_TO_USER</span> 
+<p class="level1">Introduced in 7.15.5 
+<p class="level0"><a name="CURLOPTFTPCREATEMISSINGDIRS"></a><span class="nroffip">CURLOPT_FTP_CREATE_MISSING_DIRS</span> 
+<p class="level1">Introduced in 7.10.7 
+<p class="level0"><a name="CURLOPTFTPFILEMETHOD"></a><span class="nroffip">CURLOPT_FTP_FILEMETHOD</span> 
+<p class="level1">Introduced in 7.15.1 
+<p class="level0"><a name="CURLOPTFTPRESPONSETIMEOUT"></a><span class="nroffip">CURLOPT_FTP_RESPONSE_TIMEOUT</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLOPTFTPSKIPPASVIP"></a><span class="nroffip">CURLOPT_FTP_SKIP_PASV_IP</span> 
+<p class="level1">Introduced in 7.15.0 
+<p class="level0"><a name="CURLOPTFTPSSL"></a><span class="nroffip">CURLOPT_FTP_SSL</span> 
+<p class="level1">Introduced in 7.11.0 Deprecated since 7.16.4 
+<p class="level0"><a name="CURLOPTFTPSSLCCC"></a><span class="nroffip">CURLOPT_FTP_SSL_CCC</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLOPTFTPUSEEPRT"></a><span class="nroffip">CURLOPT_FTP_USE_EPRT</span> 
+<p class="level1">Introduced in 7.10.5 
+<p class="level0"><a name="CURLOPTFTPUSEEPSV"></a><span class="nroffip">CURLOPT_FTP_USE_EPSV</span> 
+<p class="level1">Introduced in 7.9.2 
+<p class="level0"><a name="CURLOPTFTPUSEPRET"></a><span class="nroffip">CURLOPT_FTP_USE_PRET</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTGSSAPIDELEGATION"></a><span class="nroffip">CURLOPT_GSSAPI_DELEGATION</span> 
+<p class="level1">Introduced in 7.22.0 
+<p class="level0"><a name="CURLOPTHEADER"></a><span class="nroffip">CURLOPT_HEADER</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTHEADERDATA"></a><span class="nroffip">CURLOPT_HEADERDATA</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLOPTHEADERFUNCTION"></a><span class="nroffip">CURLOPT_HEADERFUNCTION</span> 
+<p class="level1">Introduced in 7.7.2 
+<p class="level0"><a name="CURLOPTHEADEROPT"></a><span class="nroffip">CURLOPT_HEADEROPT</span> 
+<p class="level1">Introduced in 7.37.0 
+<p class="level0"><a name="CURLOPTHTTP200ALIASES"></a><span class="nroffip">CURLOPT_HTTP200ALIASES</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLOPTHTTPAUTH"></a><span class="nroffip">CURLOPT_HTTPAUTH</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLOPTHTTPGET"></a><span class="nroffip">CURLOPT_HTTPGET</span> 
+<p class="level1">Introduced in 7.8.1 
+<p class="level0"><a name="CURLOPTHTTPHEADER"></a><span class="nroffip">CURLOPT_HTTPHEADER</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTHTTPPOST"></a><span class="nroffip">CURLOPT_HTTPPOST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTHTTPPROXYTUNNEL"></a><span class="nroffip">CURLOPT_HTTPPROXYTUNNEL</span> 
+<p class="level1">Introduced in 7.3 
+<p class="level0"><a name="CURLOPTHTTPREQUEST"></a><span class="nroffip">CURLOPT_HTTPREQUEST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTHTTPCONTENTDECODING"></a><span class="nroffip">CURLOPT_HTTP_CONTENT_DECODING</span> 
+<p class="level1">Introduced in 7.16.2 
+<p class="level0"><a name="CURLOPTHTTPTRANSFERDECODING"></a><span class="nroffip">CURLOPT_HTTP_TRANSFER_DECODING</span> 
+<p class="level1">Introduced in 7.16.2 
+<p class="level0"><a name="CURLOPTHTTPVERSION"></a><span class="nroffip">CURLOPT_HTTP_VERSION</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLOPTIGNORECONTENTLENGTH"></a><span class="nroffip">CURLOPT_IGNORE_CONTENT_LENGTH</span> 
+<p class="level1">Introduced in 7.14.1 
+<p class="level0"><a name="CURLOPTINFILE"></a><span class="nroffip">CURLOPT_INFILE</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.9.7 
+<p class="level0"><a name="CURLOPTINFILESIZE"></a><span class="nroffip">CURLOPT_INFILESIZE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTINFILESIZELARGE"></a><span class="nroffip">CURLOPT_INFILESIZE_LARGE</span> 
+<p class="level1">Introduced in 7.11.0 
+<p class="level0"><a name="CURLOPTINTERFACE"></a><span class="nroffip">CURLOPT_INTERFACE</span> 
+<p class="level1">Introduced in 7.3 
+<p class="level0"><a name="CURLOPTINTERLEAVEDATA"></a><span class="nroffip">CURLOPT_INTERLEAVEDATA</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTINTERLEAVEFUNCTION"></a><span class="nroffip">CURLOPT_INTERLEAVEFUNCTION</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTIOCTLDATA"></a><span class="nroffip">CURLOPT_IOCTLDATA</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLOPTIOCTLFUNCTION"></a><span class="nroffip">CURLOPT_IOCTLFUNCTION</span> 
+<p class="level1">Introduced in 7.12.3 
+<p class="level0"><a name="CURLOPTIPRESOLVE"></a><span class="nroffip">CURLOPT_IPRESOLVE</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLOPTISSUERCERT"></a><span class="nroffip">CURLOPT_ISSUERCERT</span> 
+<p class="level1">Introduced in 7.19.0 
+<p class="level0"><a name="CURLOPTKEYPASSWD"></a><span class="nroffip">CURLOPT_KEYPASSWD</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLOPTKRB4LEVEL"></a><span class="nroffip">CURLOPT_KRB4LEVEL</span> 
+<p class="level1">Introduced in 7.3 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLOPTKRBLEVEL"></a><span class="nroffip">CURLOPT_KRBLEVEL</span> 
+<p class="level1">Introduced in 7.16.4 
+<p class="level0"><a name="CURLOPTLOCALPORT"></a><span class="nroffip">CURLOPT_LOCALPORT</span> 
+<p class="level1">Introduced in 7.15.2 
+<p class="level0"><a name="CURLOPTLOCALPORTRANGE"></a><span class="nroffip">CURLOPT_LOCALPORTRANGE</span> 
+<p class="level1">Introduced in 7.15.2 
+<p class="level0"><a name="CURLOPTLOGINOPTIONS"></a><span class="nroffip">CURLOPT_LOGIN_OPTIONS</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLOPTLOWSPEEDLIMIT"></a><span class="nroffip">CURLOPT_LOW_SPEED_LIMIT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTLOWSPEEDTIME"></a><span class="nroffip">CURLOPT_LOW_SPEED_TIME</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTMAILAUTH"></a><span class="nroffip">CURLOPT_MAIL_AUTH</span> 
+<p class="level1">Introduced in 7.25.0 
+<p class="level0"><a name="CURLOPTMAILFROM"></a><span class="nroffip">CURLOPT_MAIL_FROM</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTMAILRCPT"></a><span class="nroffip">CURLOPT_MAIL_RCPT</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTMAXCONNECTS"></a><span class="nroffip">CURLOPT_MAXCONNECTS</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTMAXFILESIZE"></a><span class="nroffip">CURLOPT_MAXFILESIZE</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLOPTMAXFILESIZELARGE"></a><span class="nroffip">CURLOPT_MAXFILESIZE_LARGE</span> 
+<p class="level1">Introduced in 7.11.0 
+<p class="level0"><a name="CURLOPTMAXREDIRS"></a><span class="nroffip">CURLOPT_MAXREDIRS</span> 
+<p class="level1">Introduced in 7.5 
+<p class="level0"><a name="CURLOPTMAXRECVSPEEDLARGE"></a><span class="nroffip">CURLOPT_MAX_RECV_SPEED_LARGE</span> 
+<p class="level1">Introduced in 7.15.5 
+<p class="level0"><a name="CURLOPTMAXSENDSPEEDLARGE"></a><span class="nroffip">CURLOPT_MAX_SEND_SPEED_LARGE</span> 
+<p class="level1">Introduced in 7.15.5 
+<p class="level0"><a name="CURLOPTMUTE"></a><span class="nroffip">CURLOPT_MUTE</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.8 Last used in 7.8 
+<p class="level0"><a name="CURLOPTNETRC"></a><span class="nroffip">CURLOPT_NETRC</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTNETRCFILE"></a><span class="nroffip">CURLOPT_NETRC_FILE</span> 
+<p class="level1">Introduced in 7.11.0 
+<p class="level0"><a name="CURLOPTNEWDIRECTORYPERMS"></a><span class="nroffip">CURLOPT_NEW_DIRECTORY_PERMS</span> 
+<p class="level1">Introduced in 7.16.4 
+<p class="level0"><a name="CURLOPTNEWFILEPERMS"></a><span class="nroffip">CURLOPT_NEW_FILE_PERMS</span> 
+<p class="level1">Introduced in 7.16.4 
+<p class="level0"><a name="CURLOPTNOBODY"></a><span class="nroffip">CURLOPT_NOBODY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTNOPROGRESS"></a><span class="nroffip">CURLOPT_NOPROGRESS</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTNOPROXY"></a><span class="nroffip">CURLOPT_NOPROXY</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLOPTNOSIGNAL"></a><span class="nroffip">CURLOPT_NOSIGNAL</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLOPTNOTHING"></a><span class="nroffip">CURLOPT_NOTHING</span> 
+<p class="level1">Introduced in 7.1.1 Deprecated since 7.11.1 Last used in 7.11.1 
+<p class="level0"><a name="CURLOPTOPENSOCKETDATA"></a><span class="nroffip">CURLOPT_OPENSOCKETDATA</span> 
+<p class="level1">Introduced in 7.17.1 
+<p class="level0"><a name="CURLOPTOPENSOCKETFUNCTION"></a><span class="nroffip">CURLOPT_OPENSOCKETFUNCTION</span> 
+<p class="level1">Introduced in 7.17.1 
+<p class="level0"><a name="CURLOPTPASSWDDATA"></a><span class="nroffip">CURLOPT_PASSWDDATA</span> 
+<p class="level1">Introduced in 7.4.2 Deprecated since 7.11.1 Last used in 7.11.1 
+<p class="level0"><a name="CURLOPTPASSWDFUNCTION"></a><span class="nroffip">CURLOPT_PASSWDFUNCTION</span> 
+<p class="level1">Introduced in 7.4.2 Deprecated since 7.11.1 Last used in 7.11.1 
+<p class="level0"><a name="CURLOPTPASSWORD"></a><span class="nroffip">CURLOPT_PASSWORD</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLOPTPASVHOST"></a><span class="nroffip">CURLOPT_PASV_HOST</span> 
+<p class="level1">Introduced in 7.12.1 Deprecated since 7.16.0 Last used in 7.16.0 
+<p class="level0"><a name="CURLOPTPATHASIS"></a><span class="nroffip">CURLOPT_PATH_AS_IS</span> 
+<p class="level1">Introduced in 7.42.0 
+<p class="level0"><a name="CURLOPTPINNEDPUBLICKEY"></a><span class="nroffip">CURLOPT_PINNEDPUBLICKEY</span> 
+<p class="level1">Introduced in 7.39.0 
+<p class="level0"><a name="CURLOPTPIPEWAIT"></a><span class="nroffip">CURLOPT_PIPEWAIT</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLOPTPORT"></a><span class="nroffip">CURLOPT_PORT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPOST"></a><span class="nroffip">CURLOPT_POST</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPOST301"></a><span class="nroffip">CURLOPT_POST301</span> 
+<p class="level1">Introduced in 7.17.1 Deprecated since 7.19.1 
+<p class="level0"><a name="CURLOPTPOSTFIELDS"></a><span class="nroffip">CURLOPT_POSTFIELDS</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPOSTFIELDSIZE"></a><span class="nroffip">CURLOPT_POSTFIELDSIZE</span> 
+<p class="level1">Introduced in 7.2 
+<p class="level0"><a name="CURLOPTPOSTFIELDSIZELARGE"></a><span class="nroffip">CURLOPT_POSTFIELDSIZE_LARGE</span> 
+<p class="level1">Introduced in 7.11.1 
+<p class="level0"><a name="CURLOPTPOSTQUOTE"></a><span class="nroffip">CURLOPT_POSTQUOTE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPOSTREDIR"></a><span class="nroffip">CURLOPT_POSTREDIR</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLOPTPREQUOTE"></a><span class="nroffip">CURLOPT_PREQUOTE</span> 
+<p class="level1">Introduced in 7.9.5 
+<p class="level0"><a name="CURLOPTPRIVATE"></a><span class="nroffip">CURLOPT_PRIVATE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLOPTPROGRESSDATA"></a><span class="nroffip">CURLOPT_PROGRESSDATA</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPROGRESSFUNCTION"></a><span class="nroffip">CURLOPT_PROGRESSFUNCTION</span> 
+<p class="level1">Introduced in 7.1 Deprecated since 7.32.0 
+<p class="level0"><a name="CURLOPTPROTOCOLS"></a><span class="nroffip">CURLOPT_PROTOCOLS</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLOPTPROXY"></a><span class="nroffip">CURLOPT_PROXY</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPROXYAUTH"></a><span class="nroffip">CURLOPT_PROXYAUTH</span> 
+<p class="level1">Introduced in 7.10.7 
+<p class="level0"><a name="CURLOPTPROXYHEADER"></a><span class="nroffip">CURLOPT_PROXYHEADER</span> 
+<p class="level1">Introduced in 7.37.0 
+<p class="level0"><a name="CURLOPTPROXYPASSWORD"></a><span class="nroffip">CURLOPT_PROXYPASSWORD</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLOPTPROXYPORT"></a><span class="nroffip">CURLOPT_PROXYPORT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPROXYTYPE"></a><span class="nroffip">CURLOPT_PROXYTYPE</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLOPTPROXYUSERNAME"></a><span class="nroffip">CURLOPT_PROXYUSERNAME</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLOPTPROXYUSERPWD"></a><span class="nroffip">CURLOPT_PROXYUSERPWD</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTPROXYSERVICENAME"></a><span class="nroffip">CURLOPT_PROXY_SERVICE_NAME</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLOPTPROXYTRANSFERMODE"></a><span class="nroffip">CURLOPT_PROXY_TRANSFER_MODE</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLOPTPUT"></a><span class="nroffip">CURLOPT_PUT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTQUOTE"></a><span class="nroffip">CURLOPT_QUOTE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTRANDOMFILE"></a><span class="nroffip">CURLOPT_RANDOM_FILE</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTRANGE"></a><span class="nroffip">CURLOPT_RANGE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTREADDATA"></a><span class="nroffip">CURLOPT_READDATA</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLOPTREADFUNCTION"></a><span class="nroffip">CURLOPT_READFUNCTION</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTREDIRPROTOCOLS"></a><span class="nroffip">CURLOPT_REDIR_PROTOCOLS</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLOPTREFERER"></a><span class="nroffip">CURLOPT_REFERER</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTRESOLVE"></a><span class="nroffip">CURLOPT_RESOLVE</span> 
+<p class="level1">Introduced in 7.21.3 
+<p class="level0"><a name="CURLOPTRESUMEFROM"></a><span class="nroffip">CURLOPT_RESUME_FROM</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTRESUMEFROMLARGE"></a><span class="nroffip">CURLOPT_RESUME_FROM_LARGE</span> 
+<p class="level1">Introduced in 7.11.0 
+<p class="level0"><a name="CURLOPTRTSPHEADER"></a><span class="nroffip">CURLOPT_RTSPHEADER</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTRTSPCLIENTCSEQ"></a><span class="nroffip">CURLOPT_RTSP_CLIENT_CSEQ</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTRTSPREQUEST"></a><span class="nroffip">CURLOPT_RTSP_REQUEST</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTRTSPSERVERCSEQ"></a><span class="nroffip">CURLOPT_RTSP_SERVER_CSEQ</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTRTSPSESSIONID"></a><span class="nroffip">CURLOPT_RTSP_SESSION_ID</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTRTSPSTREAMURI"></a><span class="nroffip">CURLOPT_RTSP_STREAM_URI</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTRTSPTRANSPORT"></a><span class="nroffip">CURLOPT_RTSP_TRANSPORT</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTSASLIR"></a><span class="nroffip">CURLOPT_SASL_IR</span> 
+<p class="level1">Introduced in 7.31.0 
+<p class="level0"><a name="CURLOPTSEEKDATA"></a><span class="nroffip">CURLOPT_SEEKDATA</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLOPTSEEKFUNCTION"></a><span class="nroffip">CURLOPT_SEEKFUNCTION</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLOPTSERVERRESPONSETIMEOUT"></a><span class="nroffip">CURLOPT_SERVER_RESPONSE_TIMEOUT</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLOPTSERVICENAME"></a><span class="nroffip">CURLOPT_SERVICE_NAME</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLOPTSHARE"></a><span class="nroffip">CURLOPT_SHARE</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLOPTSOCKOPTDATA"></a><span class="nroffip">CURLOPT_SOCKOPTDATA</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLOPTSOCKOPTFUNCTION"></a><span class="nroffip">CURLOPT_SOCKOPTFUNCTION</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLOPTSOCKS5GSSAPINEC"></a><span class="nroffip">CURLOPT_SOCKS5_GSSAPI_NEC</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLOPTSOCKS5GSSAPISERVICE"></a><span class="nroffip">CURLOPT_SOCKS5_GSSAPI_SERVICE</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLOPTSOURCEHOST"></a><span class="nroffip">CURLOPT_SOURCE_HOST</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLOPTSOURCEPATH"></a><span class="nroffip">CURLOPT_SOURCE_PATH</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLOPTSOURCEPORT"></a><span class="nroffip">CURLOPT_SOURCE_PORT</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLOPTSOURCEPOSTQUOTE"></a><span class="nroffip">CURLOPT_SOURCE_POSTQUOTE</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLOPTSOURCEPREQUOTE"></a><span class="nroffip">CURLOPT_SOURCE_PREQUOTE</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLOPTSOURCEQUOTE"></a><span class="nroffip">CURLOPT_SOURCE_QUOTE</span> 
+<p class="level1">Introduced in 7.13.0 
+<p class="level0"><a name="CURLOPTSOURCEURL"></a><span class="nroffip">CURLOPT_SOURCE_URL</span> 
+<p class="level1">Introduced in 7.13.0 
+<p class="level0"><a name="CURLOPTSOURCEUSERPWD"></a><span class="nroffip">CURLOPT_SOURCE_USERPWD</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLOPTSSHAUTHTYPES"></a><span class="nroffip">CURLOPT_SSH_AUTH_TYPES</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLOPTSSHHOSTPUBLICKEYMD5"></a><span class="nroffip">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</span> 
+<p class="level1">Introduced in 7.17.1 
+<p class="level0"><a name="CURLOPTSSHKEYDATA"></a><span class="nroffip">CURLOPT_SSH_KEYDATA</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLOPTSSHKEYFUNCTION"></a><span class="nroffip">CURLOPT_SSH_KEYFUNCTION</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLOPTSSHKNOWNHOSTS"></a><span class="nroffip">CURLOPT_SSH_KNOWNHOSTS</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLOPTSSHPRIVATEKEYFILE"></a><span class="nroffip">CURLOPT_SSH_PRIVATE_KEYFILE</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLOPTSSHPUBLICKEYFILE"></a><span class="nroffip">CURLOPT_SSH_PUBLIC_KEYFILE</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLOPTSSLCERT"></a><span class="nroffip">CURLOPT_SSLCERT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTSSLCERTPASSWD"></a><span class="nroffip">CURLOPT_SSLCERTPASSWD</span> 
+<p class="level1">Introduced in 7.1.1 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLOPTSSLCERTTYPE"></a><span class="nroffip">CURLOPT_SSLCERTTYPE</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLOPTSSLENGINE"></a><span class="nroffip">CURLOPT_SSLENGINE</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLOPTSSLENGINEDEFAULT"></a><span class="nroffip">CURLOPT_SSLENGINE_DEFAULT</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLOPTSSLKEY"></a><span class="nroffip">CURLOPT_SSLKEY</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLOPTSSLKEYPASSWD"></a><span class="nroffip">CURLOPT_SSLKEYPASSWD</span> 
+<p class="level1">Introduced in 7.9.3 Deprecated since 7.17.0 
+<p class="level0"><a name="CURLOPTSSLKEYTYPE"></a><span class="nroffip">CURLOPT_SSLKEYTYPE</span> 
+<p class="level1">Introduced in 7.9.3 
+<p class="level0"><a name="CURLOPTSSLVERSION"></a><span class="nroffip">CURLOPT_SSLVERSION</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTSSLCIPHERLIST"></a><span class="nroffip">CURLOPT_SSL_CIPHER_LIST</span> 
+<p class="level1">Introduced in 7.9 
+<p class="level0"><a name="CURLOPTSSLCTXDATA"></a><span class="nroffip">CURLOPT_SSL_CTX_DATA</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLOPTSSLCTXFUNCTION"></a><span class="nroffip">CURLOPT_SSL_CTX_FUNCTION</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLOPTSSLENABLEALPN"></a><span class="nroffip">CURLOPT_SSL_ENABLE_ALPN</span> 
+<p class="level1">Introduced in 7.36.0 
+<p class="level0"><a name="CURLOPTSSLENABLENPN"></a><span class="nroffip">CURLOPT_SSL_ENABLE_NPN</span> 
+<p class="level1">Introduced in 7.36.0 
+<p class="level0"><a name="CURLOPTSSLFALSESTART"></a><span class="nroffip">CURLOPT_SSL_FALSESTART</span> 
+<p class="level1">Introduced in 7.42.0 
+<p class="level0"><a name="CURLOPTSSLOPTIONS"></a><span class="nroffip">CURLOPT_SSL_OPTIONS</span> 
+<p class="level1">Introduced in 7.25.0 
+<p class="level0"><a name="CURLOPTSSLSESSIONIDCACHE"></a><span class="nroffip">CURLOPT_SSL_SESSIONID_CACHE</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLOPTSSLVERIFYHOST"></a><span class="nroffip">CURLOPT_SSL_VERIFYHOST</span> 
+<p class="level1">Introduced in 7.8.1 
+<p class="level0"><a name="CURLOPTSSLVERIFYPEER"></a><span class="nroffip">CURLOPT_SSL_VERIFYPEER</span> 
+<p class="level1">Introduced in 7.4.2 
+<p class="level0"><a name="CURLOPTSSLVERIFYSTATUS"></a><span class="nroffip">CURLOPT_SSL_VERIFYSTATUS</span> 
+<p class="level1">Introduced in 7.41.0 
+<p class="level0"><a name="CURLOPTSTDERR"></a><span class="nroffip">CURLOPT_STDERR</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTSTREAMDEPENDS"></a><span class="nroffip">CURLOPT_STREAM_DEPENDS</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLOPTSTREAMDEPENDSE"></a><span class="nroffip">CURLOPT_STREAM_DEPENDS_E</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLOPTSTREAMWEIGHT"></a><span class="nroffip">CURLOPT_STREAM_WEIGHT</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLOPTTCPKEEPALIVE"></a><span class="nroffip">CURLOPT_TCP_KEEPALIVE</span> 
+<p class="level1">Introduced in 7.25.0 
+<p class="level0"><a name="CURLOPTTCPKEEPIDLE"></a><span class="nroffip">CURLOPT_TCP_KEEPIDLE</span> 
+<p class="level1">Introduced in 7.25.0 
+<p class="level0"><a name="CURLOPTTCPKEEPINTVL"></a><span class="nroffip">CURLOPT_TCP_KEEPINTVL</span> 
+<p class="level1">Introduced in 7.25.0 
+<p class="level0"><a name="CURLOPTTCPNODELAY"></a><span class="nroffip">CURLOPT_TCP_NODELAY</span> 
+<p class="level1">Introduced in 7.11.2 
+<p class="level0"><a name="CURLOPTTELNETOPTIONS"></a><span class="nroffip">CURLOPT_TELNETOPTIONS</span> 
+<p class="level1">Introduced in 7.7 
+<p class="level0"><a name="CURLOPTTFTPBLKSIZE"></a><span class="nroffip">CURLOPT_TFTP_BLKSIZE</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLOPTTFTPNOOPTIONS"></a><span class="nroffip">CURLOPT_TFTP_NO_OPTIONS</span> 
+<p class="level1">Introduced in 7.48.0 
+<p class="level0"><a name="CURLOPTTIMECONDITION"></a><span class="nroffip">CURLOPT_TIMECONDITION</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTTIMEOUT"></a><span class="nroffip">CURLOPT_TIMEOUT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTTIMEOUTMS"></a><span class="nroffip">CURLOPT_TIMEOUT_MS</span> 
+<p class="level1">Introduced in 7.16.2 
+<p class="level0"><a name="CURLOPTTIMEVALUE"></a><span class="nroffip">CURLOPT_TIMEVALUE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTTLSAUTHPASSWORD"></a><span class="nroffip">CURLOPT_TLSAUTH_PASSWORD</span> 
+<p class="level1">Introduced in 7.21.4 
+<p class="level0"><a name="CURLOPTTLSAUTHTYPE"></a><span class="nroffip">CURLOPT_TLSAUTH_TYPE</span> 
+<p class="level1">Introduced in 7.21.4 
+<p class="level0"><a name="CURLOPTTLSAUTHUSERNAME"></a><span class="nroffip">CURLOPT_TLSAUTH_USERNAME</span> 
+<p class="level1">Introduced in 7.21.4 
+<p class="level0"><a name="CURLOPTTRANSFERTEXT"></a><span class="nroffip">CURLOPT_TRANSFERTEXT</span> 
+<p class="level1">Introduced in 7.1.1 
+<p class="level0"><a name="CURLOPTTRANSFERENCODING"></a><span class="nroffip">CURLOPT_TRANSFER_ENCODING</span> 
+<p class="level1">Introduced in 7.21.6 
+<p class="level0"><a name="CURLOPTUNIXSOCKETPATH"></a><span class="nroffip">CURLOPT_UNIX_SOCKET_PATH</span> 
+<p class="level1">Introduced in 7.40.0 
+<p class="level0"><a name="CURLOPTUNRESTRICTEDAUTH"></a><span class="nroffip">CURLOPT_UNRESTRICTED_AUTH</span> 
+<p class="level1">Introduced in 7.10.4 
+<p class="level0"><a name="CURLOPTUPLOAD"></a><span class="nroffip">CURLOPT_UPLOAD</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTURL"></a><span class="nroffip">CURLOPT_URL</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTUSERAGENT"></a><span class="nroffip">CURLOPT_USERAGENT</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTUSERNAME"></a><span class="nroffip">CURLOPT_USERNAME</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLOPTUSERPWD"></a><span class="nroffip">CURLOPT_USERPWD</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTUSESSL"></a><span class="nroffip">CURLOPT_USE_SSL</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLOPTVERBOSE"></a><span class="nroffip">CURLOPT_VERBOSE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTWILDCARDMATCH"></a><span class="nroffip">CURLOPT_WILDCARDMATCH</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLOPTWRITEDATA"></a><span class="nroffip">CURLOPT_WRITEDATA</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLOPTWRITEFUNCTION"></a><span class="nroffip">CURLOPT_WRITEFUNCTION</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTWRITEHEADER"></a><span class="nroffip">CURLOPT_WRITEHEADER</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTWRITEINFO"></a><span class="nroffip">CURLOPT_WRITEINFO</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLOPTXFERINFODATA"></a><span class="nroffip">CURLOPT_XFERINFODATA</span> 
+<p class="level1">Introduced in 7.32.0 
+<p class="level0"><a name="CURLOPTXFERINFOFUNCTION"></a><span class="nroffip">CURLOPT_XFERINFOFUNCTION</span> 
+<p class="level1">Introduced in 7.32.0 
+<p class="level0"><a name="CURLOPTXOAUTH2BEARER"></a><span class="nroffip">CURLOPT_XOAUTH2_BEARER</span> 
+<p class="level1">Introduced in 7.33.0 
+<p class="level0"><a name="CURLPAUSEALL"></a><span class="nroffip">CURLPAUSE_ALL</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPAUSECONT"></a><span class="nroffip">CURLPAUSE_CONT</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPAUSERECV"></a><span class="nroffip">CURLPAUSE_RECV</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPAUSERECVCONT"></a><span class="nroffip">CURLPAUSE_RECV_CONT</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPAUSESEND"></a><span class="nroffip">CURLPAUSE_SEND</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPAUSESENDCONT"></a><span class="nroffip">CURLPAUSE_SEND_CONT</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPIPEHTTP1"></a><span class="nroffip">CURLPIPE_HTTP1</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLPIPEMULTIPLEX"></a><span class="nroffip">CURLPIPE_MULTIPLEX</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLPIPENOTHING"></a><span class="nroffip">CURLPIPE_NOTHING</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLPROTOALL"></a><span class="nroffip">CURLPROTO_ALL</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTODICT"></a><span class="nroffip">CURLPROTO_DICT</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOFILE"></a><span class="nroffip">CURLPROTO_FILE</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOFTP"></a><span class="nroffip">CURLPROTO_FTP</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOFTPS"></a><span class="nroffip">CURLPROTO_FTPS</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOGOPHER"></a><span class="nroffip">CURLPROTO_GOPHER</span> 
+<p class="level1">Introduced in 7.21.2 
+<p class="level0"><a name="CURLPROTOHTTP"></a><span class="nroffip">CURLPROTO_HTTP</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOHTTPS"></a><span class="nroffip">CURLPROTO_HTTPS</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOIMAP"></a><span class="nroffip">CURLPROTO_IMAP</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTOIMAPS"></a><span class="nroffip">CURLPROTO_IMAPS</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTOLDAP"></a><span class="nroffip">CURLPROTO_LDAP</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOLDAPS"></a><span class="nroffip">CURLPROTO_LDAPS</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOPOP3"></a><span class="nroffip">CURLPROTO_POP3</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTOPOP3S"></a><span class="nroffip">CURLPROTO_POP3S</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTORTMP"></a><span class="nroffip">CURLPROTO_RTMP</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLPROTORTMPE"></a><span class="nroffip">CURLPROTO_RTMPE</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLPROTORTMPS"></a><span class="nroffip">CURLPROTO_RTMPS</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLPROTORTMPT"></a><span class="nroffip">CURLPROTO_RTMPT</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLPROTORTMPTE"></a><span class="nroffip">CURLPROTO_RTMPTE</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLPROTORTMPTS"></a><span class="nroffip">CURLPROTO_RTMPTS</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLPROTORTSP"></a><span class="nroffip">CURLPROTO_RTSP</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTOSCP"></a><span class="nroffip">CURLPROTO_SCP</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOSFTP"></a><span class="nroffip">CURLPROTO_SFTP</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOSMB"></a><span class="nroffip">CURLPROTO_SMB</span> 
+<p class="level1">Introduced in 7.40.0 
+<p class="level0"><a name="CURLPROTOSMBS"></a><span class="nroffip">CURLPROTO_SMBS</span> 
+<p class="level1">Introduced in 7.40.0 
+<p class="level0"><a name="CURLPROTOSMTP"></a><span class="nroffip">CURLPROTO_SMTP</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTOSMTPS"></a><span class="nroffip">CURLPROTO_SMTPS</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLPROTOTELNET"></a><span class="nroffip">CURLPROTO_TELNET</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROTOTFTP"></a><span class="nroffip">CURLPROTO_TFTP</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROXYHTTP"></a><span class="nroffip">CURLPROXY_HTTP</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLPROXYHTTP10"></a><span class="nroffip">CURLPROXY_HTTP_1_0</span> 
+<p class="level1">Introduced in 7.19.4 
+<p class="level0"><a name="CURLPROXYSOCKS4"></a><span class="nroffip">CURLPROXY_SOCKS4</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLPROXYSOCKS4A"></a><span class="nroffip">CURLPROXY_SOCKS4A</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLPROXYSOCKS5"></a><span class="nroffip">CURLPROXY_SOCKS5</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLPROXYSOCKS5HOSTNAME"></a><span class="nroffip">CURLPROXY_SOCKS5_HOSTNAME</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLSHEBADOPTION"></a><span class="nroffip">CURLSHE_BAD_OPTION</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHEINVALID"></a><span class="nroffip">CURLSHE_INVALID</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHEINUSE"></a><span class="nroffip">CURLSHE_IN_USE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHENOMEM"></a><span class="nroffip">CURLSHE_NOMEM</span> 
+<p class="level1">Introduced in 7.12.0 
+<p class="level0"><a name="CURLSHENOTBUILTIN"></a><span class="nroffip">CURLSHE_NOT_BUILT_IN</span> 
+<p class="level1">Introduced in 7.23.0 
+<p class="level0"><a name="CURLSHEOK"></a><span class="nroffip">CURLSHE_OK</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHOPTLOCKFUNC"></a><span class="nroffip">CURLSHOPT_LOCKFUNC</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHOPTNONE"></a><span class="nroffip">CURLSHOPT_NONE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHOPTSHARE"></a><span class="nroffip">CURLSHOPT_SHARE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHOPTUNLOCKFUNC"></a><span class="nroffip">CURLSHOPT_UNLOCKFUNC</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHOPTUNSHARE"></a><span class="nroffip">CURLSHOPT_UNSHARE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSHOPTUSERDATA"></a><span class="nroffip">CURLSHOPT_USERDATA</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLSOCKTYPEACCEPT"></a><span class="nroffip">CURLSOCKTYPE_ACCEPT</span> 
+<p class="level1">Introduced in 7.28.0 
+<p class="level0"><a name="CURLSOCKTYPEIPCXN"></a><span class="nroffip">CURLSOCKTYPE_IPCXN</span> 
+<p class="level1">Introduced in 7.16.0 
+<p class="level0"><a name="CURLSSHAUTHAGENT"></a><span class="nroffip">CURLSSH_AUTH_AGENT</span> 
+<p class="level1">Introduced in 7.28.0 
+<p class="level0"><a name="CURLSSHAUTHANY"></a><span class="nroffip">CURLSSH_AUTH_ANY</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSHAUTHDEFAULT"></a><span class="nroffip">CURLSSH_AUTH_DEFAULT</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSHAUTHHOST"></a><span class="nroffip">CURLSSH_AUTH_HOST</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSHAUTHKEYBOARD"></a><span class="nroffip">CURLSSH_AUTH_KEYBOARD</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSHAUTHNONE"></a><span class="nroffip">CURLSSH_AUTH_NONE</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSHAUTHPASSWORD"></a><span class="nroffip">CURLSSH_AUTH_PASSWORD</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSHAUTHPUBLICKEY"></a><span class="nroffip">CURLSSH_AUTH_PUBLICKEY</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLSSLBACKENDAXTLS"></a><span class="nroffip">CURLSSLBACKEND_AXTLS</span> 
+<p class="level1">Introduced in 7.38.0 
+<p class="level0"><a name="CURLSSLBACKENDCYASSL"></a><span class="nroffip">CURLSSLBACKEND_CYASSL</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDDARWINSSL"></a><span class="nroffip">CURLSSLBACKEND_DARWINSSL</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDGNUTLS"></a><span class="nroffip">CURLSSLBACKEND_GNUTLS</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDGSKIT"></a><span class="nroffip">CURLSSLBACKEND_GSKIT</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDMBEDTLS"></a><span class="nroffip">CURLSSLBACKEND_MBEDTLS</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLSSLBACKENDNONE"></a><span class="nroffip">CURLSSLBACKEND_NONE</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDNSS"></a><span class="nroffip">CURLSSLBACKEND_NSS</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDOPENSSL"></a><span class="nroffip">CURLSSLBACKEND_OPENSSL</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDPOLARSSL"></a><span class="nroffip">CURLSSLBACKEND_POLARSSL</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDQSOSSL"></a><span class="nroffip">CURLSSLBACKEND_QSOSSL</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLBACKENDSCHANNEL"></a><span class="nroffip">CURLSSLBACKEND_SCHANNEL</span> 
+<p class="level1">Introduced in 7.34.0 
+<p class="level0"><a name="CURLSSLOPTALLOWBEAST"></a><span class="nroffip">CURLSSLOPT_ALLOW_BEAST</span> 
+<p class="level1">Introduced in 7.25.0 
+<p class="level0"><a name="CURLSSLOPTNOREVOKE"></a><span class="nroffip">CURLSSLOPT_NO_REVOKE</span> 
+<p class="level1">Introduced in 7.44.0 
+<p class="level0"><a name="CURLUSESSLALL"></a><span class="nroffip">CURLUSESSL_ALL</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLUSESSLCONTROL"></a><span class="nroffip">CURLUSESSL_CONTROL</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLUSESSLNONE"></a><span class="nroffip">CURLUSESSL_NONE</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLUSESSLTRY"></a><span class="nroffip">CURLUSESSL_TRY</span> 
+<p class="level1">Introduced in 7.17.0 
+<p class="level0"><a name="CURLVERSIONFIRST"></a><span class="nroffip">CURLVERSION_FIRST</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLVERSIONFOURTH"></a><span class="nroffip">CURLVERSION_FOURTH</span> 
+<p class="level1">Introduced in 7.16.1 
+<p class="level0"><a name="CURLVERSIONNOW"></a><span class="nroffip">CURLVERSION_NOW</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLVERSIONSECOND"></a><span class="nroffip">CURLVERSION_SECOND</span> 
+<p class="level1">Introduced in 7.11.1 
+<p class="level0"><a name="CURLVERSIONTHIRD"></a><span class="nroffip">CURLVERSION_THIRD</span> 
+<p class="level1">Introduced in 7.12.0 
+<p class="level0"><a name="CURLCHUNKBGNFUNCFAIL"></a><span class="nroffip">CURL_CHUNK_BGN_FUNC_FAIL</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLCHUNKBGNFUNCOK"></a><span class="nroffip">CURL_CHUNK_BGN_FUNC_OK</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLCHUNKBGNFUNCSKIP"></a><span class="nroffip">CURL_CHUNK_BGN_FUNC_SKIP</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLCHUNKENDFUNCFAIL"></a><span class="nroffip">CURL_CHUNK_END_FUNC_FAIL</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLCHUNKENDFUNCOK"></a><span class="nroffip">CURL_CHUNK_END_FUNC_OK</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLCSELECTERR"></a><span class="nroffip">CURL_CSELECT_ERR</span> 
+<p class="level1">Introduced in 7.16.3 
+<p class="level0"><a name="CURLCSELECTIN"></a><span class="nroffip">CURL_CSELECT_IN</span> 
+<p class="level1">Introduced in 7.16.3 
+<p class="level0"><a name="CURLCSELECTOUT"></a><span class="nroffip">CURL_CSELECT_OUT</span> 
+<p class="level1">Introduced in 7.16.3 
+<p class="level0"><a name="CURLEASYNONE"></a><span class="nroffip">CURL_EASY_NONE</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLEASYTIMEOUT"></a><span class="nroffip">CURL_EASY_TIMEOUT</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLERRORSIZE"></a><span class="nroffip">CURL_ERROR_SIZE</span> 
+<p class="level1">Introduced in 7.1 
+<p class="level0"><a name="CURLFNMATCHFUNCFAIL"></a><span class="nroffip">CURL_FNMATCHFUNC_FAIL</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFNMATCHFUNCMATCH"></a><span class="nroffip">CURL_FNMATCHFUNC_MATCH</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFNMATCHFUNCNOMATCH"></a><span class="nroffip">CURL_FNMATCHFUNC_NOMATCH</span> 
+<p class="level1">Introduced in 7.21.0 
+<p class="level0"><a name="CURLFORMADDDISABLED"></a><span class="nroffip">CURL_FORMADD_DISABLED</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLFORMADDILLEGALARRAY"></a><span class="nroffip">CURL_FORMADD_ILLEGAL_ARRAY</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMADDINCOMPLETE"></a><span class="nroffip">CURL_FORMADD_INCOMPLETE</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMADDMEMORY"></a><span class="nroffip">CURL_FORMADD_MEMORY</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMADDNULL"></a><span class="nroffip">CURL_FORMADD_NULL</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMADDOK"></a><span class="nroffip">CURL_FORMADD_OK</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMADDOPTIONTWICE"></a><span class="nroffip">CURL_FORMADD_OPTION_TWICE</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLFORMADDUNKNOWNOPTION"></a><span class="nroffip">CURL_FORMADD_UNKNOWN_OPTION</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLGLOBALACKEINTR"></a><span class="nroffip">CURL_GLOBAL_ACK_EINTR</span> 
+<p class="level1">Introduced in 7.30.0 
+<p class="level0"><a name="CURLGLOBALALL"></a><span class="nroffip">CURL_GLOBAL_ALL</span> 
+<p class="level1">Introduced in 7.8 
+<p class="level0"><a name="CURLGLOBALDEFAULT"></a><span class="nroffip">CURL_GLOBAL_DEFAULT</span> 
+<p class="level1">Introduced in 7.8 
+<p class="level0"><a name="CURLGLOBALNOTHING"></a><span class="nroffip">CURL_GLOBAL_NOTHING</span> 
+<p class="level1">Introduced in 7.8 
+<p class="level0"><a name="CURLGLOBALSSL"></a><span class="nroffip">CURL_GLOBAL_SSL</span> 
+<p class="level1">Introduced in 7.8 
+<p class="level0"><a name="CURLGLOBALWIN32"></a><span class="nroffip">CURL_GLOBAL_WIN32</span> 
+<p class="level1">Introduced in 7.8.1 
+<p class="level0"><a name="CURLHTTPPOSTBUFFER"></a><span class="nroffip">CURL_HTTPPOST_BUFFER</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTCALLBACK"></a><span class="nroffip">CURL_HTTPPOST_CALLBACK</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTFILENAME"></a><span class="nroffip">CURL_HTTPPOST_FILENAME</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTLARGE"></a><span class="nroffip">CURL_HTTPPOST_LARGE</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTPTRBUFFER"></a><span class="nroffip">CURL_HTTPPOST_PTRBUFFER</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTPTRCONTENTS"></a><span class="nroffip">CURL_HTTPPOST_PTRCONTENTS</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTPTRNAME"></a><span class="nroffip">CURL_HTTPPOST_PTRNAME</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPPOSTREADFILE"></a><span class="nroffip">CURL_HTTPPOST_READFILE</span> 
+<p class="level1">Introduced in 7.46.0 
+<p class="level0"><a name="CURLHTTPVERSION10"></a><span class="nroffip">CURL_HTTP_VERSION_1_0</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLHTTPVERSION11"></a><span class="nroffip">CURL_HTTP_VERSION_1_1</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLHTTPVERSION2"></a><span class="nroffip">CURL_HTTP_VERSION_2</span> 
+<p class="level1">Introduced in 7.43.0 
+<p class="level0"><a name="CURLHTTPVERSION20"></a><span class="nroffip">CURL_HTTP_VERSION_2_0</span> 
+<p class="level1">Introduced in 7.33.0 
+<p class="level0"><a name="CURLHTTPVERSION2TLS"></a><span class="nroffip">CURL_HTTP_VERSION_2TLS</span> 
+<p class="level1">Introduced in 7.47.0 
+<p class="level0"><a name="CURLHTTPVERSIONNONE"></a><span class="nroffip">CURL_HTTP_VERSION_NONE</span> 
+<p class="level1">Introduced in 7.9.1 
+<p class="level0"><a name="CURLIPRESOLVEV4"></a><span class="nroffip">CURL_IPRESOLVE_V4</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLIPRESOLVEV6"></a><span class="nroffip">CURL_IPRESOLVE_V6</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLIPRESOLVEWHATEVER"></a><span class="nroffip">CURL_IPRESOLVE_WHATEVER</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLLOCKACCESSNONE"></a><span class="nroffip">CURL_LOCK_ACCESS_NONE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKACCESSSHARED"></a><span class="nroffip">CURL_LOCK_ACCESS_SHARED</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKACCESSSINGLE"></a><span class="nroffip">CURL_LOCK_ACCESS_SINGLE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKDATACONNECT"></a><span class="nroffip">CURL_LOCK_DATA_CONNECT</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKDATACOOKIE"></a><span class="nroffip">CURL_LOCK_DATA_COOKIE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKDATADNS"></a><span class="nroffip">CURL_LOCK_DATA_DNS</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKDATANONE"></a><span class="nroffip">CURL_LOCK_DATA_NONE</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKDATASHARE"></a><span class="nroffip">CURL_LOCK_DATA_SHARE</span> 
+<p class="level1">Introduced in 7.10.4 
+<p class="level0"><a name="CURLLOCKDATASSLSESSION"></a><span class="nroffip">CURL_LOCK_DATA_SSL_SESSION</span> 
+<p class="level1">Introduced in 7.10.3 
+<p class="level0"><a name="CURLLOCKTYPECONNECT"></a><span class="nroffip">CURL_LOCK_TYPE_CONNECT</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLLOCKTYPECOOKIE"></a><span class="nroffip">CURL_LOCK_TYPE_COOKIE</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLLOCKTYPEDNS"></a><span class="nroffip">CURL_LOCK_TYPE_DNS</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLLOCKTYPENONE"></a><span class="nroffip">CURL_LOCK_TYPE_NONE</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLLOCKTYPESSLSESSION"></a><span class="nroffip">CURL_LOCK_TYPE_SSL_SESSION</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLMAXHTTPHEADER"></a><span class="nroffip">CURL_MAX_HTTP_HEADER</span> 
+<p class="level1">Introduced in 7.19.7 
+<p class="level0"><a name="CURLMAXWRITESIZE"></a><span class="nroffip">CURL_MAX_WRITE_SIZE</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLNETRCIGNORED"></a><span class="nroffip">CURL_NETRC_IGNORED</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLNETRCOPTIONAL"></a><span class="nroffip">CURL_NETRC_OPTIONAL</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLNETRCREQUIRED"></a><span class="nroffip">CURL_NETRC_REQUIRED</span> 
+<p class="level1">Introduced in 7.9.8 
+<p class="level0"><a name="CURLPOLLIN"></a><span class="nroffip">CURL_POLL_IN</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLPOLLINOUT"></a><span class="nroffip">CURL_POLL_INOUT</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLPOLLNONE"></a><span class="nroffip">CURL_POLL_NONE</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLPOLLOUT"></a><span class="nroffip">CURL_POLL_OUT</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLPOLLREMOVE"></a><span class="nroffip">CURL_POLL_REMOVE</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLPROGRESSBAR"></a><span class="nroffip">CURL_PROGRESS_BAR</span> 
+<p class="level1">Introduced in 7.1.1 
+<p class="level0"><a name="CURLPROGRESSSTATS"></a><span class="nroffip">CURL_PROGRESS_STATS</span> 
+<p class="level1">Introduced in 7.1.1 
+<p class="level0"><a name="CURLPUSHDENY"></a><span class="nroffip">CURL_PUSH_DENY</span> 
+<p class="level1">Introduced in 7.44.0 
+<p class="level0"><a name="CURLPUSHOK"></a><span class="nroffip">CURL_PUSH_OK</span> 
+<p class="level1">Introduced in 7.44.0 
+<p class="level0"><a name="CURLREADFUNCABORT"></a><span class="nroffip">CURL_READFUNC_ABORT</span> 
+<p class="level1">Introduced in 7.12.1 
+<p class="level0"><a name="CURLREADFUNCPAUSE"></a><span class="nroffip">CURL_READFUNC_PAUSE</span> 
+<p class="level1">Introduced in 7.18.0 
+<p class="level0"><a name="CURLREDIRGETALL"></a><span class="nroffip">CURL_REDIR_GET_ALL</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLREDIRPOST301"></a><span class="nroffip">CURL_REDIR_POST_301</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLREDIRPOST302"></a><span class="nroffip">CURL_REDIR_POST_302</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLREDIRPOST303"></a><span class="nroffip">CURL_REDIR_POST_303</span> 
+<p class="level1">Introduced in 7.25.1 
+<p class="level0"><a name="CURLREDIRPOSTALL"></a><span class="nroffip">CURL_REDIR_POST_ALL</span> 
+<p class="level1">Introduced in 7.19.1 
+<p class="level0"><a name="CURLRTSPREQANNOUNCE"></a><span class="nroffip">CURL_RTSPREQ_ANNOUNCE</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQDESCRIBE"></a><span class="nroffip">CURL_RTSPREQ_DESCRIBE</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQGETPARAMETER"></a><span class="nroffip">CURL_RTSPREQ_GET_PARAMETER</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQNONE"></a><span class="nroffip">CURL_RTSPREQ_NONE</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQOPTIONS"></a><span class="nroffip">CURL_RTSPREQ_OPTIONS</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQPAUSE"></a><span class="nroffip">CURL_RTSPREQ_PAUSE</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQPLAY"></a><span class="nroffip">CURL_RTSPREQ_PLAY</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQRECEIVE"></a><span class="nroffip">CURL_RTSPREQ_RECEIVE</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQRECORD"></a><span class="nroffip">CURL_RTSPREQ_RECORD</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQSETUP"></a><span class="nroffip">CURL_RTSPREQ_SETUP</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQSETPARAMETER"></a><span class="nroffip">CURL_RTSPREQ_SET_PARAMETER</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLRTSPREQTEARDOWN"></a><span class="nroffip">CURL_RTSPREQ_TEARDOWN</span> 
+<p class="level1">Introduced in 7.20.0 
+<p class="level0"><a name="CURLSEEKFUNCCANTSEEK"></a><span class="nroffip">CURL_SEEKFUNC_CANTSEEK</span> 
+<p class="level1">Introduced in 7.19.5 
+<p class="level0"><a name="CURLSEEKFUNCFAIL"></a><span class="nroffip">CURL_SEEKFUNC_FAIL</span> 
+<p class="level1">Introduced in 7.19.5 
+<p class="level0"><a name="CURLSEEKFUNCOK"></a><span class="nroffip">CURL_SEEKFUNC_OK</span> 
+<p class="level1">Introduced in 7.19.5 
+<p class="level0"><a name="CURLSOCKETBAD"></a><span class="nroffip">CURL_SOCKET_BAD</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLSOCKETTIMEOUT"></a><span class="nroffip">CURL_SOCKET_TIMEOUT</span> 
+<p class="level1">Introduced in 7.14.0 
+<p class="level0"><a name="CURLSOCKOPTALREADYCONNECTED"></a><span class="nroffip">CURL_SOCKOPT_ALREADY_CONNECTED</span> 
+<p class="level1">Introduced in 7.21.5 
+<p class="level0"><a name="CURLSOCKOPTERROR"></a><span class="nroffip">CURL_SOCKOPT_ERROR</span> 
+<p class="level1">Introduced in 7.21.5 
+<p class="level0"><a name="CURLSOCKOPTOK"></a><span class="nroffip">CURL_SOCKOPT_OK</span> 
+<p class="level1">Introduced in 7.21.5 
+<p class="level0"><a name="CURLSSLVERSIONDEFAULT"></a><span class="nroffip">CURL_SSLVERSION_DEFAULT</span> 
+<p class="level1">Introduced in 7.9.2 
+<p class="level0"><a name="CURLSSLVERSIONSSL"></a><span class="nroffip">CURL_SSLVERSION_SSL</span> 
+<p class="level1">Introduced in  
+<p class="level0"><a name="CURLSSLVERSIONSSL"></a><span class="nroffip">CURL_SSLVERSION_SSL</span> 
+<p class="level1">Introduced in  
+<p class="level0"><a name="CURLSSLVERSIONTLS"></a><span class="nroffip">CURL_SSLVERSION_TLS</span> 
+<p class="level1">Introduced in  
+<p class="level0"><a name="CURLSSLVERSIONTLS"></a><span class="nroffip">CURL_SSLVERSION_TLS</span> 
+<p class="level1">Introduced in  
+<p class="level0"><a name="CURLSSLVERSIONTLS"></a><span class="nroffip">CURL_SSLVERSION_TLS</span> 
+<p class="level1">Introduced in  
+<p class="level0"><a name="CURLSSLVERSIONTLS"></a><span class="nroffip">CURL_SSLVERSION_TLS</span> 
+<p class="level1">Introduced in  
+<p class="level0"><a name="CURLTIMECONDIFMODSINCE"></a><span class="nroffip">CURL_TIMECOND_IFMODSINCE</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLTIMECONDIFUNMODSINCE"></a><span class="nroffip">CURL_TIMECOND_IFUNMODSINCE</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLTIMECONDLASTMOD"></a><span class="nroffip">CURL_TIMECOND_LASTMOD</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLTIMECONDNONE"></a><span class="nroffip">CURL_TIMECOND_NONE</span> 
+<p class="level1">Introduced in 7.9.7 
+<p class="level0"><a name="CURLTLSAUTHNONE"></a><span class="nroffip">CURL_TLSAUTH_NONE</span> 
+<p class="level1">Introduced in 7.21.4 
+<p class="level0"><a name="CURLTLSAUTHSRP"></a><span class="nroffip">CURL_TLSAUTH_SRP</span> 
+<p class="level1">Introduced in 7.21.4 
+<p class="level0"><a name="CURLVERSIONASYNCHDNS"></a><span class="nroffip">CURL_VERSION_ASYNCHDNS</span> 
+<p class="level1">Introduced in 7.10.7 
+<p class="level0"><a name="CURLVERSIONCONV"></a><span class="nroffip">CURL_VERSION_CONV</span> 
+<p class="level1">Introduced in 7.15.4 
+<p class="level0"><a name="CURLVERSIONCURLDEBUG"></a><span class="nroffip">CURL_VERSION_CURLDEBUG</span> 
+<p class="level1">Introduced in 7.19.6 
+<p class="level0"><a name="CURLVERSIONDEBUG"></a><span class="nroffip">CURL_VERSION_DEBUG</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLVERSIONGSSAPI"></a><span class="nroffip">CURL_VERSION_GSSAPI</span> 
+<p class="level1">Introduced in 7.38.0 
+<p class="level0"><a name="CURLVERSIONGSSNEGOTIATE"></a><span class="nroffip">CURL_VERSION_GSSNEGOTIATE</span> 
+<p class="level1">Introduced in 7.10.6 Deprecated since 7.38.0 
+<p class="level0"><a name="CURLVERSIONHTTP2"></a><span class="nroffip">CURL_VERSION_HTTP2</span> 
+<p class="level1">Introduced in 7.33.0 
+<p class="level0"><a name="CURLVERSIONIDN"></a><span class="nroffip">CURL_VERSION_IDN</span> 
+<p class="level1">Introduced in 7.12.0 
+<p class="level0"><a name="CURLVERSIONIPV6"></a><span class="nroffip">CURL_VERSION_IPV6</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLVERSIONKERBEROS4"></a><span class="nroffip">CURL_VERSION_KERBEROS4</span> 
+<p class="level1">Introduced in 7.10 Deprecated since 7.33.0 
+<p class="level0"><a name="CURLVERSIONKERBEROS5"></a><span class="nroffip">CURL_VERSION_KERBEROS5</span> 
+<p class="level1">Introduced in 7.40.0 
+<p class="level0"><a name="CURLVERSIONLARGEFILE"></a><span class="nroffip">CURL_VERSION_LARGEFILE</span> 
+<p class="level1">Introduced in 7.11.1 
+<p class="level0"><a name="CURLVERSIONLIBZ"></a><span class="nroffip">CURL_VERSION_LIBZ</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLVERSIONNTLM"></a><span class="nroffip">CURL_VERSION_NTLM</span> 
+<p class="level1">Introduced in 7.10.6 
+<p class="level0"><a name="CURLVERSIONNTLMWB"></a><span class="nroffip">CURL_VERSION_NTLM_WB</span> 
+<p class="level1">Introduced in 7.22.0 
+<p class="level0"><a name="CURLVERSIONPSL"></a><span class="nroffip">CURL_VERSION_PSL</span> 
+<p class="level1">Introduced in 7.47.0 
+<p class="level0"><a name="CURLVERSIONSPNEGO"></a><span class="nroffip">CURL_VERSION_SPNEGO</span> 
+<p class="level1">Introduced in 7.10.8 
+<p class="level0"><a name="CURLVERSIONSSL"></a><span class="nroffip">CURL_VERSION_SSL</span> 
+<p class="level1">Introduced in 7.10 
+<p class="level0"><a name="CURLVERSIONSSPI"></a><span class="nroffip">CURL_VERSION_SSPI</span> 
+<p class="level1">Introduced in 7.13.2 
+<p class="level0"><a name="CURLVERSIONTLSAUTHSRP"></a><span class="nroffip">CURL_VERSION_TLSAUTH_SRP</span> 
+<p class="level1">Introduced in 7.21.4 
+<p class="level0"><a name="CURLVERSIONUNIXSOCKETS"></a><span class="nroffip">CURL_VERSION_UNIX_SOCKETS</span> 
+<p class="level1">Introduced in 7.40.0 
+<p class="level0"><a name="CURLWAITPOLLIN"></a><span class="nroffip">CURL_WAIT_POLLIN</span> 
+<p class="level1">Introduced in 7.28.0 
+<p class="level0"><a name="CURLWAITPOLLOUT"></a><span class="nroffip">CURL_WAIT_POLLOUT</span> 
+<p class="level1">Introduced in 7.28.0 
+<p class="level0"><a name="CURLWAITPOLLPRI"></a><span class="nroffip">CURL_WAIT_POLLPRI</span> 
+<p class="level1">Introduced in 7.28.0 
+<p class="level0"><a name="CURLWRITEFUNCPAUSE"></a><span class="nroffip">CURL_WRITEFUNC_PAUSE</span> 
+<p class="level1">Introduced in 7.18.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-symbols.pdf b/docs/libcurl/libcurl-symbols.pdf
new file mode 100644 (file)
index 0000000..06eef63
Binary files /dev/null and b/docs/libcurl/libcurl-symbols.pdf differ
diff --git a/docs/libcurl/libcurl-thread.3 b/docs/libcurl/libcurl-thread.3
new file mode 100644 (file)
index 0000000..aacc75f
--- /dev/null
@@ -0,0 +1,95 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 2015 - 2016, 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 https://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-thread 3 "13 Jul 2015" "libcurl" "libcurl thread safety"
+.SH NAME
+libcurl-thread \- libcurl thread safety
+.SH "Multi-threading with libcurl"
+libcurl is thread safe but has no internal thread synchronization. You may have
+to provide your own locking should you meet any of the thread safety exceptions
+below.
+
+\fBHandles.\fP You must \fBnever\fP share the same handle in multiple threads.
+You can pass the handles around among threads, but you must never use a single
+handle from more than one thread at any given time.
+
+\fBShared objects.\fP You can share certain data between multiple handles by
+using the share interface but you must provide your own locking and set
+\fIcurl_share_setopt(3)\fP CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC.
+.SH TLS
+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.  You may need to provide one
+or two functions to allow it to function properly:
+.IP OpenSSL
+https://www.openssl.org/docs/crypto/threads.html#DESCRIPTION
+
+https://curl.haxx.se/libcurl/c/opensslthreadlock.html
+.IP GnuTLS
+http://gnutls.org/manual/html_node/Thread-safety.html
+.IP NSS
+thread-safe already without anything required.
+.IP PolarSSL
+Required actions unknown.
+.IP yassl
+Required actions unknown.
+.IP axTLS
+Required actions unknown.
+.IP Secure-Transport
+The engine is used by libcurl in a way that is fully thread-safe.
+.IP WinSSL
+The engine is used by libcurl in a way that is fully thread-safe.
+.IP wolfSSL
+The engine is used by libcurl in a way that is fully thread-safe.
+.SH "Other areas of caution"
+.IP Signals
+Signals are used for timing out name resolves (during DNS lookup) - when built
+without using either the c-ares or threaded resolver backends. When using
+multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP option to 1L 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.
+.IP "Name resolving"
+\fBgethostby* functions and other system calls.\fP These functions, provided
+by your operating system, must be thread safe. It is very important that
+libcurl can find and use thread safe versions of these and other system calls,
+as otherwise it can't function fully thread safe. Some operating systems are
+known to have faulty thread implementations. We have previously received
+problem reports on *BSD (at least in the past, they may be working fine these
+days).  Some operating systems that are known to have solid and working thread
+support are Linux, Solaris and Windows.
+.IP "curl_global_* functions"
+These functions are not thread safe. If you are using libcurl with multiple
+threads it is especially important that before use you call
+\fIcurl_global_init(3)\fP or \fIcurl_global_init_mem(3)\fP to explicitly
+initialize the library and its dependents, rather than rely on the "lazy"
+fail-safe initialization that takes place the first time
+\fIcurl_easy_init(3)\fP is called. For an in-depth explanation refer to
+\fIlibcurl(3)\fP section \fBGLOBAL CONSTANTS\fP.
+.IP "Memory functions"
+These functions, provided either by your operating system or your own
+replacements, must be thread safe. You can use \fIcurl_global_init_mem(3)\fP
+to set your own replacement memory functions.
+.IP "Non-safe functions"
+\fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe.
diff --git a/docs/libcurl/libcurl-thread.html b/docs/libcurl/libcurl-thread.html
new file mode 100644 (file)
index 0000000..9a0c3cd
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>libcurl-thread man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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-thread - libcurl thread safety <a name="Multi-threading"></a><h2 class="nroffsh">Multi-threading with libcurl</h2>
+<p class="level0">libcurl is thread safe but has no internal thread synchronization. You may have to provide your own locking should you meet any of the thread safety exceptions below. 
+<p class="level0"><span Class="bold">Handles.</span> You must <span Class="bold">never</span> share the same handle in multiple threads. You can pass the handles around among threads, but you must never use a single handle from more than one thread at any given time. 
+<p class="level0"><span Class="bold">Shared objects.</span> You can share certain data between multiple handles by using the share interface but you must provide your own locking and set <a Class="emphasis" href="./curl_share_setopt.html">curl_share_setopt</a> CURLSHOPT_LOCKFUNC and CURLSHOPT_UNLOCKFUNC. <a name="TLS"></a><h2 class="nroffsh">TLS</h2>
+<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.  You may need to provide one or two functions to allow it to function properly: 
+<p class="level0"><a name="OpenSSL"></a><span class="nroffip">OpenSSL</span> 
+<p class="level1"><a href="https://www.openssl.org/docs/crypto/threads.html&#35;DESCRIPTION">https://www.openssl.org/docs/crypto/threads.html&#35;DESCRIPTION</a> 
+<p class="level1"><a href="https://curl.haxx.se/libcurl/c/opensslthreadlock.html">https://curl.haxx.se/libcurl/c/opensslthreadlock.html</a> 
+<p class="level0"><a name="GnuTLS"></a><span class="nroffip">GnuTLS</span> 
+<p class="level1"><a href="http://gnutls.org/manual/html_node/Thread-safety.html">http://gnutls.org/manual/html_node/Thread-safety.html</a> 
+<p class="level0"><a name="NSS"></a><span class="nroffip">NSS</span> 
+<p class="level1">thread-safe already without anything required. 
+<p class="level0"><a name="PolarSSL"></a><span class="nroffip">PolarSSL</span> 
+<p class="level1">Required actions unknown. 
+<p class="level0"><a name="yassl"></a><span class="nroffip">yassl</span> 
+<p class="level1">Required actions unknown. 
+<p class="level0"><a name="axTLS"></a><span class="nroffip">axTLS</span> 
+<p class="level1">Required actions unknown. 
+<p class="level0"><a name="Secure-Transport"></a><span class="nroffip">Secure-Transport</span> 
+<p class="level1">The engine is used by libcurl in a way that is fully thread-safe. 
+<p class="level0"><a name="WinSSL"></a><span class="nroffip">WinSSL</span> 
+<p class="level1">The engine is used by libcurl in a way that is fully thread-safe. 
+<p class="level0"><a name="wolfSSL"></a><span class="nroffip">wolfSSL</span> 
+<p class="level1">The engine is used by libcurl in a way that is fully thread-safe. <a name="Other"></a><h2 class="nroffsh">Other areas of caution</h2>
+<p class="level0">
+<p class="level0"><a name="Signals"></a><span class="nroffip">Signals</span> 
+<p class="level1">Signals are used for timing out name resolves (during DNS lookup) - when built without using either the c-ares or threaded resolver backends. When using multiple threads you should set the <span Class="emphasis">CURLOPT_NOSIGNAL(3)</span> option to 1L 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"><a name="Name"></a><span class="nroffip">Name resolving</span> 
+<p class="level1"><span Class="bold">gethostby* functions and other system calls.</span> These functions, provided by your operating system, must be thread safe. It is very important that libcurl can find and use thread safe versions of these and other system calls, as otherwise it can't function fully thread safe. Some operating systems are known to have faulty thread implementations. We have previously received problem reports on *BSD (at least in the past, they may be working fine these days).  Some operating systems that are known to have solid and working thread support are Linux, Solaris and Windows. 
+<p class="level0"><a name="curlglobal"></a><span class="nroffip">curl_global_* functions</span> 
+<p class="level1">These functions are not thread safe. If you are using libcurl with multiple threads it is especially important that before use you call <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> or <a Class="emphasis" href="./curl_global_init_mem.html">curl_global_init_mem</a> to explicitly initialize the library and its dependents, rather than rely on the "lazy" fail-safe initialization that takes place the first time <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> is called. For an in-depth explanation refer to <a Class="emphasis" href="./libcurl.html">libcurl</a> section <span Class="bold">GLOBAL CONSTANTS</span>. 
+<p class="level0"><a name="Memory"></a><span class="nroffip">Memory functions</span> 
+<p class="level1">These functions, provided either by your operating system or your own replacements, must be thread safe. You can use <a Class="emphasis" href="./curl_global_init_mem.html">curl_global_init_mem</a> to set your own replacement memory functions. 
+<p class="level0"><a name="Non-safe"></a><span class="nroffip">Non-safe functions</span> 
+<p class="level1"><span Class="emphasis">CURLOPT_DNS_USE_GLOBAL_CACHE(3)</span> is not thread-safe. <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-thread.pdf b/docs/libcurl/libcurl-thread.pdf
new file mode 100644 (file)
index 0000000..94c24c9
Binary files /dev/null and b/docs/libcurl/libcurl-thread.pdf differ
index 11b0190..3144da3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -256,58 +256,8 @@ 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 simultaneously share a
-libcurl handle (be it easy or multi or whatever) between multiple
-threads. Only use one handle in one thread at any time. You can pass the
-handles around among threads, but you must never use a single handle from more
-than one thread at any given 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 using either the c-ares or threaded resolver backends.
-
-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://gnutls.org/manual/html_node/Thread-safety.html
-
-NSS
-
- is claimed to be thread-safe already without anything required.
-
-PolarSSL
-
- Required actions unknown.
-
-yassl
-
- Required actions unknown.
-
-axTLS
-
- Required actions unknown.
-
-Secure Transport
-
- The engine is fully thread-safe, and no additional steps are required.
-
-When using multiple threads you should set the \fICURLOPT_NOSIGNAL(3)\fP
-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 \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP is not thread-safe.
+libcurl is thread safe but there are a few exceptions. Refer to
+\fIlibcurl-thread(3)\fP for more information.
 
 .SH "When It Doesn't Work"
 There will always be times when the transfer fails for some reason. You might
@@ -1005,7 +955,7 @@ 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 \ICURLOPT_COOKIEFILE(3)\fP
+to disk at all. Note that the file you specify to \fICURLOPT_COOKIEFILE(3)\fP
 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.
@@ -1096,7 +1046,7 @@ 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
+Common Weakness Enumeration project at https://cwe.mitre.org/ is a good
 reference for many of these and similar types of weaknesses of which
 application writers should be aware.
 
@@ -1136,11 +1086,15 @@ NTLM authentication, HTTPS, FTPS, SCP and SFTP are a few examples.
 .IP "Redirects"
 The \fICURLOPT_FOLLOWLOCATION(3)\fP 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).
+URL, not just HTTP. By default libcurl will allow all protocols on redirect
+except several disabled for security reasons: Since 7.19.4 FILE and SCP are
+disabled, and since 7.40.0 SMB and SMBS are also disabled.
+
+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
index 43bfc24..b569c45 100644 (file)
@@ -4,15 +4,20 @@
 <title>libcurl-tutorial man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -96,9 +101,9 @@ p.roffit {
 <p class="level0">If you at any point would like to blank all previously set options for a single easy handle, you can call <a Class="emphasis" href="./curl_easy_reset.html">curl_easy_reset</a> and you can also make a clone of an easy handle (with all its set options) using <a Class="emphasis" href="./curl_easy_duphandle.html">curl_easy_duphandle</a>. 
 <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</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 <span Class="emphasis">CURLOPT_URL(3)</span> 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"><pre class="level0">
+&nbsp;curl_easy_setopt(handle, CURLOPT_URL, "http://domain.com/");
+</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: 
@@ -119,25 +124,7 @@ p.roffit {
 <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> simultaneously share a libcurl handle (be it easy or multi or whatever) between multiple threads. Only use one handle in one thread at any time. You can pass the handles around among threads, but you must never use a single handle from more than one thread at any given 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 using either the c-ares or threaded resolver backends. 
-<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#DESCRIPTION">http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION</a> 
-<p class="level0">GnuTLS 
-<p class="level0">&nbsp;<a href="http://gnutls.org/manual/html_node/Thread-safety.html">http://gnutls.org/manual/html_node/Thread-safety.html</a> 
-<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">axTLS 
-<p class="level0">&nbsp;Required actions unknown. 
-<p class="level0">Secure Transport 
-<p class="level0">&nbsp;The engine is fully thread-safe, and no additional steps are required. 
-<p class="level0">When using multiple threads you should set the <span Class="emphasis">CURLOPT_NOSIGNAL(3)</span> 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 <span Class="emphasis">CURLOPT_DNS_USE_GLOBAL_CACHE(3)</span> is not thread-safe. 
+<p class="level0">libcurl is thread safe but there are a few exceptions. Refer to <a Class="emphasis" href="./libcurl-thread.html">libcurl-thread</a> for more information. 
 <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 <span Class="emphasis">CURLOPT_VERBOSE(3)</span> 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 <span Class="emphasis">CURLOPT_HEADER(3)</span> set 1. 
@@ -155,10 +142,10 @@ p.roffit {
 <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 <span Class="emphasis">CURLOPT_INFILESIZE_LARGE(3)</span> 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"><pre 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</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. 
@@ -174,11 +161,11 @@ p.roffit {
 <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 <span Class="emphasis">CURLOPT_NETRC(3)</span> 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"><pre 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. 
@@ -197,65 +184,77 @@ p.roffit {
 <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"><pre class="level0">
+&nbsp;   char *data="name=daniel&project=curl";
+&nbsp;   curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data);
+&nbsp;   curl_easy_setopt(easyhandle, CURLOPT_URL, "http://posthere.com/");
+&nbsp;
+&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 <span Class="emphasis">CURLOPT_POSTFIELDS(3)</span>, 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"><pre class="level0">
+&nbsp;struct curl_slist *headers=NULL;
+&nbsp;headers = curl_slist_append(headers, "Content-Type: text/xml");
+&nbsp;
+&nbsp;/* post binary data */
+&nbsp;curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, binaryptr);
+&nbsp;
+&nbsp;/* set the size of the postfields data */
+&nbsp;curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23L);
+&nbsp;
+&nbsp;/* pass our list of custom made headers */
+&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
+&nbsp;
+&nbsp;curl_easy_perform(easyhandle); /* post away! */
+&nbsp;
+&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 <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> (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</a>. Using this function, you add parts to the form. When you're done adding parts, you post the whole form. 
+<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 <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a> (updated in <a href="http://www.ietf.org/rfc/rfc2388.txt">RFC 2388</a>). 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</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"><pre 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);
+&nbsp;
+&nbsp;/* Set the form info */
+&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPPOST, post);
+&nbsp;
+&nbsp;curl_easy_perform(easyhandle); /* post away! */
+&nbsp;
+&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"><pre class="level0">
+&nbsp;struct curl_slist *headers=NULL;
+&nbsp;headers = curl_slist_append(headers, "Content-Type: text/xml");
+&nbsp;
+&nbsp;curl_formadd(&post, &last,
+&nbsp;             CURLFORM_COPYNAME, "logotype-image",
+&nbsp;             CURLFORM_FILECONTENT, "curl.xml",
+&nbsp;             CURLFORM_CONTENTHEADER, headers,
+&nbsp;             CURLFORM_END);
+&nbsp;
+&nbsp;curl_easy_perform(easyhandle); /* post away! */
+&nbsp;
+&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</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 <span Class="emphasis">CURLOPT_HTTPGET(3)</span> option: 
@@ -267,13 +266,13 @@ p.roffit {
 <p class="level0">Switch on the progress meter by, oddly enough, setting <span Class="emphasis">CURLOPT_NOPROGRESS(3)</span> 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 <span Class="emphasis">CURLOPT_PROGRESSFUNCTION(3)</span>. 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"><pre 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 <span Class="emphasis">CURLOPT_PROGRESSDATA(3)</span>. libcurl won't touch it. 
@@ -282,15 +281,15 @@ p.roffit {
 <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"><pre 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>
@@ -373,22 +372,26 @@ p.roffit {
 <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"><pre class="level1">
+&nbsp;struct curl_slist *headers=NULL; /* init to NULL is important */
+&nbsp;
+&nbsp;headers = curl_slist_append(headers, "Hey-server-hey: how are you?");
+&nbsp;headers = curl_slist_append(headers, "X-silly-content: yes");
+&nbsp;
+&nbsp;/* pass our list of custom made headers */
+&nbsp;curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);
+&nbsp;
+&nbsp;curl_easy_perform(easyhandle); /* transfer http */
+&nbsp;
+&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"><pre 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">
@@ -409,15 +412,18 @@ p.roffit {
 <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 (<a href="http://www.ietf.org/rfc/rfc959.txt">RFC 959</a> 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">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"><pre class="level1">
+&nbsp;headers = curl_slist_append(headers, "DELE file-to-remove");
+&nbsp;
+&nbsp;/* pass the list of custom commands to the handle */
+&nbsp;curl_easy_setopt(easyhandle, CURLOPT_QUOTE, headers);
+&nbsp;
+&nbsp;curl_easy_perform(easyhandle); /* transfer ftp data! */
+&nbsp;
+&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</a> would instead be called <span Class="emphasis">CURLOPT_POSTQUOTE(3)</span> and used the exact same way. 
@@ -435,7 +441,7 @@ p.roffit {
 <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 <span Class="emphasis">CURLOPT_COOKIEFILE(3)</span>. 
-<p class="level0">The <span Class="emphasis">CURLOPT_COOKIEFILE(3)</span> 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 ICURLOPT_COOKIEFILE(3)</span> 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">The <span Class="emphasis">CURLOPT_COOKIEFILE(3)</span> 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 <span Class="emphasis">CURLOPT_COOKIEFILE(3)</span> 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 <span Class="emphasis">CURLOPT_COOKIEFILE(3)</span> 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 <span Class="emphasis">CURLOPT_COOKIEJAR(3)</span>, 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</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>
@@ -458,7 +464,7 @@ p.roffit {
 <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">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="https://cwe.mitre.org/">https://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. 
@@ -473,11 +479,12 @@ p.roffit {
 <p class="level1">To avoid this problem, use an authentication mechanism or other protocol that doesn't let snoopers see your password: Digest, CRAM-MD5, Kerberos, SPNEGO or NTLM authentication, HTTPS, FTPS, SCP and SFTP are a few examples. 
 <p class="level1">
 <p class="level0"><a name="Redirects"></a><span class="nroffip">Redirects</span> 
-<p class="level1">The <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> 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">The <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> option automatically follows HTTP redirects sent by a remote server.  These redirects can refer to any kind of URL, not just HTTP. By default libcurl will allow all protocols on redirect except several disabled for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS are also disabled. 
+<p class="level1">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">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 
 <p class="level1">The <span Class="emphasis">CURLOPT_REDIR_PROTOCOLS(3)</span> and <span Class="emphasis">CURLOPT_NETRC(3)</span> 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">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?delete=all">http://intranet/delete-stuff.cgi?delete=all</a> or tftp://bootp-server/pc-config-data 
 <p class="level1">Apps can mitigate against this by disabling <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> and handling redirects itself, sanitizing URLs as necessary. Alternately, an app could leave <span Class="emphasis">CURLOPT_FOLLOWLOCATION(3)</span> enabled but set <span Class="emphasis">CURLOPT_REDIR_PROTOCOLS(3)</span> and install a <span Class="emphasis">CURLOPT_OPENSOCKETFUNCTION(3)</span> 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> 
@@ -497,7 +504,7 @@ p.roffit {
 <p class="level1">Use of the CURLUSESSL_TRY option to <span Class="emphasis">CURLOPT_USE_SSL(3)</span> 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">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?delete=all">http://mail.example.com/delete-stuff.cgi?delete=all</a> 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. 
@@ -553,6 +560,6 @@ p.roffit {
 <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</a> call. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-multi.html">libcurl-multi</a>, <a Class="manpage" href="./libcurl-easy.html">libcurl-easy</a><p class="roffit">
+<p class="level0"><a Class="manpage" href="./libcurl-errors.html">libcurl-errors</a>, <a Class="manpage" href="./libcurl-multi.html">libcurl-multi</a>, <a Class="manpage" href="./libcurl-easy.html">libcurl-easy</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 564b139..c1316a8 100644 (file)
Binary files a/docs/libcurl/libcurl-tutorial.pdf and b/docs/libcurl/libcurl-tutorial.pdf differ
index 39bcccd..6618734 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -97,8 +97,8 @@ 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.
 
-Many Linux and similar sytems use pkg-config to provide build and link options
-about libraries and libcurl supports that as well.
+Many Linux and similar systems use pkg-config to provide build and link
+options about libraries and libcurl supports that as well.
 .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
@@ -111,13 +111,8 @@ 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 \fBGLOBAL
-CONSTANTS\fP below for details.
+libcurl is thread safe but there are a few exceptions. Refer to
+\fIlibcurl-thread(3)\fP for more information.
 
 .SH "PERSISTENT CONNECTIONS"
 Persistent connections means that libcurl can re-use the same connection for
@@ -199,6 +194,9 @@ 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(3)\fP and the destructor call \fIcurl_global_cleanup(3)\fP
 and satisfy libcurl's requirements without your user having to think about it.
+(Caveat: If you are initializing libcurl from a Windows DLL you should not
+initialize it from DllMain or a static initializer because Windows holds the
+loader lock during that time and it could cause a deadlock.)
 
 \fIcurl_global_init(3)\fP has an argument that tells what particular parts of
 the global constant environment to set up.  In order to successfully use any
index c836e8a..d459a01 100644 (file)
@@ -4,15 +4,20 @@
 <title>libcurl man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -77,12 +82,11 @@ p.roffit {
 <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">Many Linux and similar sytems use pkg-config to provide build and link options about libraries and libcurl supports that as well. <a name="LIBCURL"></a><h2 class="nroffsh">LIBCURL SYMBOL NAMES</h2>
+<p class="level0">Many Linux and similar systems use pkg-config to provide build and link options about libraries and libcurl supports that as well. <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 <span class="bold">GLOBAL CONSTANTS</span> below for details. 
+<p class="level0">libcurl is thread safe but there are a few exceptions. Refer to <a Class="emphasis" href="./libcurl-thread.html">libcurl-thread</a> for more information. 
 <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</a> or <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a> etc, 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</a> or <a Class="emphasis" href="./curl_multi_perform.html">curl_multi_perform</a>. 
@@ -97,7 +101,7 @@ p.roffit {
 <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 <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> and <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a>.  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 <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> and the last <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> 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 <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> and the destructor call <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> and satisfy libcurl's requirements without your user having to think about it. 
+<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 <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> and the destructor call <a Class="emphasis" href="./curl_global_cleanup.html">curl_global_cleanup</a> and satisfy libcurl's requirements without your user having to think about it. (Caveat: If you are initializing libcurl from a Windows DLL you should not initialize it from DllMain or a static initializer because Windows holds the loader lock during that time and it could cause a deadlock.) 
 <p class="level0"><a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> 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.  <a Class="emphasis" href="./curl_global_init.html">curl_global_init</a> selects the system default memory allocator, but you can use <a Class="emphasis" href="./curl_global_init_mem.html">curl_global_init_mem</a> to supply one of your own.  However, there is no way to use <a Class="emphasis" href="./curl_global_init_mem.html">curl_global_init_mem</a> 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: <a Class="emphasis" href="./curl_easy_init.html">curl_easy_init</a> 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. 
index 2cf3edd..a2373e8 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -178,7 +178,7 @@ x=CURLOPT_WRITEDATA;
 x=CURLOPT_ERRORBUFFER;
 x=CURLOPT_STDERR;
 x=CURLOPT_VERBOSE;
-if (x) ;
+if (x) {;}
 ]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
 
            CPPFLAGS=$_libcurl_save_cppflags
index 3875098..4a72ec5 100644 (file)
Binary files a/docs/libcurl/libcurl.pdf and b/docs/libcurl/libcurl.pdf differ
diff --git a/docs/libcurl/mksymbolsmanpage.pl b/docs/libcurl/mksymbolsmanpage.pl
new file mode 100644 (file)
index 0000000..21053c4
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/perl
+# ***************************************************************************
+# *                                  _   _ ____  _
+# *  Project                     ___| | | |  _ \| |
+# *                             / __| | | | |_) | |
+# *                            | (__| |_| |  _ <| |___
+# *                             \___|\___/|_| \_\_____|
+# *
+# * Copyright (C) 2015, 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 https://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.
+# *
+# ***************************************************************************
+
+my $version="7.41.0";
+
+use POSIX qw(strftime);
+my $date = strftime "%b %e, %Y", localtime;
+my $year = strftime "%Y", localtime;
+
+print <<HEADER
+.\\" **************************************************************************
+.\\" *                                  _   _ ____  _
+.\\" *  Project                     ___| | | |  _ \\| |
+.\\" *                             / __| | | | |_) | |
+.\\" *                            | (__| |_| |  _ <| |___
+.\\" *                             \\___|\\___/|_| \\_\\_____|
+.\\" *
+.\\" * Copyright (C) 1998 - $year, 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 https://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-symbols 3 "$date" "libcurl $version" "libcurl symbols"
+.SH NAME
+libcurl-symbols \\- libcurl symbol version information
+.SH "libcurl symbols"
+This man page details version information for public symbols provided in the
+libcurl header files. This lists the first version in which the symbol was
+introduced and for some symbols two additional information pieces:
+
+The first version in which the symbol is marked "deprecated" - meaning that
+since that version no new code should be written to use the symbol as it is
+marked for getting removed in a future.
+
+The last version that featured the specific symbol. Using the symbol in source
+code will make it no longer compile error-free after that specified version.
+
+This man page is automatically generated from the symbols-in-versions file.
+HEADER
+    ;
+
+while(<STDIN>) {
+    if($_ =~ /^(CURL[A-Z0-9_.]*) *(.*)/) {
+        my ($symbol, $rest)=($1,$2);
+        my ($intro, $dep, $rem);
+        if($rest =~ s/^([0-9.]*) *//) {
+           $intro = $1;
+        }
+        if($rest =~ s/^([0-9.]*) *//) {
+           $dep = $1;
+        }
+        if($rest =~ s/^([0-9.]*) *//) {
+           $rem = $1;
+        }
+        print ".IP $symbol\nIntroduced in $intro\n";
+        if($dep) {
+          print "Deprecated since $dep\n";
+        }
+        if($rem) {
+          print "Last used in $dep\n";
+        }
+    }
+
+}
diff --git a/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3 b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3
new file mode 100644 (file)
index 0000000..0896d15
--- /dev/null
@@ -0,0 +1,51 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_ACTIVESOCKET 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_ACTIVESOCKET \- get the active socket
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,
+                           curl_socket_t *socket);
+.SH DESCRIPTION
+Pass a pointer to a curl_socket_t to receive the active socket used by this
+curl session. If the socket is no longer valid, \fICURL_SOCKET_BAD\fP is
+returned. When you finish working with the socket, you must call
+\fIcurl_easy_cleanup(3)\fP as usual on the easy handle and let libcurl close
+the socket and cleanup other resources associated with the handle. This is
+typically used in combination with \fICURLOPT_CONNECT_ONLY(3)\fP.
+
+This option was added as a replacement for \fICURLINFO_LASTSOCKET(3)\fP since
+that one isn't working on all platforms.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.45.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_LASTSOCKET "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.html b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.html
new file mode 100644 (file)
index 0000000..83294c9
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_ACTIVESOCKET man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_ACTIVESOCKET - get the active socket <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET, &nbsp;                          curl_socket_t *socket); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a curl_socket_t to receive the active socket used by this curl session. If the socket is no longer valid, <span Class="emphasis">CURL_SOCKET_BAD</span> is returned. When you finish working with the socket, you must call <span Class="emphasis">curl_easy_cleanup(3)</span> as usual on the easy handle and let libcurl close the socket and cleanup other resources associated with the handle. This is typically used in combination with <a Class="emphasis" href="./CURLOPT_CONNECT_ONLY.html">CURLOPT_CONNECT_ONLY</a>. 
+<p class="level0">This option was added as a replacement for <a Class="emphasis" href="./CURLINFO_LASTSOCKET.html">CURLINFO_LASTSOCKET</a> since that one isn't working on all platforms. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.45.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_LASTSOCKET.html">CURLINFO_LASTSOCKET</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/opts/CURLINFO_ACTIVESOCKET.pdf b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.pdf
new file mode 100644 (file)
index 0000000..789bf8b
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3 b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3
new file mode 100644 (file)
index 0000000..dceb98b
--- /dev/null
@@ -0,0 +1,47 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_APPCONNECT_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double *timep);
+.SH DESCRIPTION
+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 \fICURLINFO_PRETRANSFER_TIME(3)\fP
+time, except for cases such as HTTP pipelining where the pretransfer time can
+be delayed due to waits in line for the pipeline and more.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.19.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.html b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.html
new file mode 100644 (file)
index 0000000..6c6b46b
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_APPCONNECT_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_APPCONNECT_TIME - get the time until the SSL/SSH handshake is completed <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 <a Class="emphasis" href="./CURLINFO_PRETRANSFER_TIME.html">CURLINFO_PRETRANSFER_TIME</a> time, except for cases such as HTTP pipelining where the pretransfer time can be delayed due to waits in line for the pipeline and more. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.19.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_APPCONNECT_TIME.pdf b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf
new file mode 100644 (file)
index 0000000..b5c235c
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CERTINFO.3 b/docs/libcurl/opts/CURLINFO_CERTINFO.3
new file mode 100644 (file)
index 0000000..c76daa7
--- /dev/null
@@ -0,0 +1,51 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_CERTINFO 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_CERTINFO \- get the TLS certificate chain
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,
+                           struct curl_certinfo *chainp);
+.SH DESCRIPTION
+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 \fICURLOPT_CERTINFO(3)\fP enabled when the request was
+made. 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.
+.SH PROTOCOLS
+All TLS-based
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+This option is only working in libcurl built with OpenSSL, NSS or GSKit
+support.
+
+Added in 7.19.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_CERTINFO.html b/docs/libcurl/opts/CURLINFO_CERTINFO.html
new file mode 100644 (file)
index 0000000..7f8e5eb
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_CERTINFO man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_CERTINFO - get the TLS certificate chain <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO, &nbsp;                          struct curl_certinfo *chainp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 <a Class="emphasis" href="./CURLOPT_CERTINFO.html">CURLOPT_CERTINFO</a> enabled when the request was made. 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. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS-based <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">This option is only working in libcurl built with OpenSSL, NSS or GSKit support. 
+<p class="level0">Added in 7.19.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_CERTINFO.pdf b/docs/libcurl/opts/CURLINFO_CERTINFO.pdf
new file mode 100644 (file)
index 0000000..483f512
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CERTINFO.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3 b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3
new file mode 100644 (file)
index 0000000..452c261
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_CONDITION_UNMET 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_CONDITION_UNMET \- get info on unmet time conditional
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long *unmet);
+.SH DESCRIPTION
+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(3)\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.
+.SH PROTOCOLS
+HTTP and some
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.19.4
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.html b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.html
new file mode 100644 (file)
index 0000000..ea7f8c0
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_CONDITION_UNMET man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_CONDITION_UNMET - get info on unmet time conditional <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long *unmet); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the number 1 if the condition provided in the previous request didn't match (see <a Class="emphasis" href="./CURLOPT_TIMECONDITION.html">CURLOPT_TIMECONDITION</a>). 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. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP and some <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.19.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_CONDITION_UNMET.pdf b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf
new file mode 100644 (file)
index 0000000..0103e7b
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3 b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3
new file mode 100644 (file)
index 0000000..1b63e23
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_CONNECT_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_CONNECT_TIME \- get the time until connect
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the total time in seconds from the start
+until the connection to the remote host (or proxy) was completed.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_CONNECT_TIME.html b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.html
new file mode 100644 (file)
index 0000000..af33c42
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_CONNECT_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_CONNECT_TIME - get the time until connect <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the total time in seconds from the start until the connection to the remote host (or proxy) was completed. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_CONNECT_TIME.pdf b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.pdf
new file mode 100644 (file)
index 0000000..4733604
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONNECT_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3
new file mode 100644 (file)
index 0000000..311f313
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
+                           double *content_length);
+.SH DESCRIPTION
+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.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.6.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_CONTENT_LENGTH_UPLOAD "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.html b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.html
new file mode 100644 (file)
index 0000000..f4438e0
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_CONTENT_LENGTH_DOWNLOAD man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_CONTENT_LENGTH_DOWNLOAD - get content-length of download <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &nbsp;                          double *content_length); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.6.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_CONTENT_LENGTH_UPLOAD.html">CURLINFO_CONTENT_LENGTH_UPLOAD</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/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf
new file mode 100644 (file)
index 0000000..c2c4a45
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3 b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3
new file mode 100644 (file)
index 0000000..e40d5ea
--- /dev/null
@@ -0,0 +1,43 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_CONTENT_LENGTH_UPLOAD 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD,
+                           double *content_length);
+.SH DESCRIPTION
+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.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.6.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.html b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.html
new file mode 100644 (file)
index 0000000..5cccc53
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_CONTENT_LENGTH_UPLOAD man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_CONTENT_LENGTH_UPLOAD - get the specified size of the upload <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD, &nbsp;                          double *content_length); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.6.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf
new file mode 100644 (file)
index 0000000..dbac46c
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3 b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3
new file mode 100644 (file)
index 0000000..7536000
--- /dev/null
@@ -0,0 +1,48 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_CONTENT_TYPE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_CONTENT_TYPE \- get Content-Type
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);
+.SH DESCRIPTION
+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.
+
+The \fBct\fP pointer will be NULL or pointing to private memory you MUST NOT
+free it - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+corresponding CURL handle.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.9.4
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.html b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.html
new file mode 100644 (file)
index 0000000..94ca6cf
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_CONTENT_TYPE man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_CONTENT_TYPE - get Content-Type <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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">The <span Class="bold">ct</span> pointer will be NULL or pointing to private memory you MUST NOT free it - it gets freed when you call <span Class="emphasis">curl_easy_cleanup(3)</span> on the corresponding CURL handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.9.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_CONTENT_TYPE.pdf b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf
new file mode 100644 (file)
index 0000000..aa9a86e
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_COOKIELIST.3 b/docs/libcurl/opts/CURLINFO_COOKIELIST.3
new file mode 100644 (file)
index 0000000..961fd98
--- /dev/null
@@ -0,0 +1,50 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2016, 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 https://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 CURLINFO_COOKIELIST 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_COOKIELIST \- get all known cookies
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,
+                           struct curl_slist **cookies);
+.SH DESCRIPTION
+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 call
+\fIcurl_slist_free_all(3)\fP on 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.
+
+Since 7.43.0 cookies that were imported in the Set-Cookie format without a
+domain name are not exported by this option.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.14.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLOPT_COOKIELIST "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_COOKIELIST.html b/docs/libcurl/opts/CURLINFO_COOKIELIST.html
new file mode 100644 (file)
index 0000000..5037347
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_COOKIELIST man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_COOKIELIST - get all known cookies <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST, &nbsp;                          struct curl_slist **cookies); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 call <span Class="emphasis">curl_slist_free_all(3)</span> on 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. 
+<p class="level0">Since 7.43.0 cookies that were imported in the Set-Cookie format without a domain name are not exported by this option. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.14.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLOPT_COOKIELIST.html">CURLOPT_COOKIELIST</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/opts/CURLINFO_COOKIELIST.pdf b/docs/libcurl/opts/CURLINFO_COOKIELIST.pdf
new file mode 100644 (file)
index 0000000..9d21536
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_COOKIELIST.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3 b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3
new file mode 100644 (file)
index 0000000..342fd5d
--- /dev/null
@@ -0,0 +1,48 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_EFFECTIVE_URL 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_EFFECTIVE_URL \- get the last used URL
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);
+.SH DESCRIPTION
+Pass in a pointer to a char pointer and get the last used effective URL.
+
+In cases when you've asked libcurl to follow redirects, it may very well not
+be the same value you set with \fICURLOPT_URL(3)\fP.
+
+The \fBurlp\fP pointer will be NULL or pointing to private memory you MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+corresponding CURL handle.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.html b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.html
new file mode 100644 (file)
index 0000000..2071857
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_EFFECTIVE_URL man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_EFFECTIVE_URL - get the last used URL <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass in a pointer to a char pointer and get the last used effective URL. 
+<p class="level0">In cases when you've asked libcurl to follow redirects, it may very well not be the same value you set with <a Class="emphasis" href="./CURLOPT_URL.html">CURLOPT_URL</a>. 
+<p class="level0">The <span Class="bold">urlp</span> pointer will be NULL or pointing to private memory you MUST NOT free - it gets freed when you call <span Class="emphasis">curl_easy_cleanup(3)</span> on the corresponding CURL handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_EFFECTIVE_URL.pdf b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf
new file mode 100644 (file)
index 0000000..8ac7172
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_FILETIME.3 b/docs/libcurl/opts/CURLINFO_FILETIME.3
new file mode 100644 (file)
index 0000000..71f9d2b
--- /dev/null
@@ -0,0 +1,49 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_FILETIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_FILETIME \- get the remote time of the retrieved document
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);
+.SH DESCRIPTION
+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 (it might be unknown, the server might
+hide 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 \fICURLOPT_FILETIME(3)\fP option to
+\fIcurl_easy_setopt(3)\fP or you will unconditionally get a -1 back.
+.SH PROTOCOLS
+HTTP(S), FTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.5
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_FILETIME.html b/docs/libcurl/opts/CURLINFO_FILETIME.html
new file mode 100644 (file)
index 0000000..26328c1
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_FILETIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_FILETIME - get the remote time of the retrieved document <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 (it might be unknown, the server might hide it or the server doesn't support the command that tells document time etc) and the time of the document is unknown. 
+<p class="level0">Note that you must tell the server to collect this information before the transfer is made, by using the <a Class="emphasis" href="./CURLOPT_FILETIME.html">CURLOPT_FILETIME</a> option to <span Class="emphasis">curl_easy_setopt(3)</span> or you will unconditionally get a -1 back. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S), FTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_FILETIME.pdf b/docs/libcurl/opts/CURLINFO_FILETIME.pdf
new file mode 100644 (file)
index 0000000..f1112a7
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_FILETIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3 b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3
new file mode 100644 (file)
index 0000000..e7d7fcf
--- /dev/null
@@ -0,0 +1,48 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_FTP_ENTRY_PATH 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path);
+.SH DESCRIPTION
+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.
+
+The \fBpath\fP pointer will be NULL or pointing to private memory you MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+corresponding CURL handle.
+.SH PROTOCOLS
+FTP(S) and SFTP
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.15.4. Works for SFTP since 7.21.4
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.html b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.html
new file mode 100644 (file)
index 0000000..7d3010e
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_FTP_ENTRY_PATH man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_FTP_ENTRY_PATH - get entry path in FTP server <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. 
+<p class="level0">The <span Class="bold">path</span> pointer will be NULL or pointing to private memory you MUST NOT free - it gets freed when you call <span Class="emphasis">curl_easy_cleanup(3)</span> on the corresponding CURL handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">FTP(S) and SFTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.15.4. Works for SFTP since 7.21.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_FTP_ENTRY_PATH.pdf b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.pdf
new file mode 100644 (file)
index 0000000..a4c2a9e
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3 b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3
new file mode 100644 (file)
index 0000000..b4b9b57
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_HEADER_SIZE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_HEADER_SIZE \- get size of retrieved headers
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the total size of all the headers
+received. Measured in number of bytes.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_REQUEST_SIZE "(3), "
+.BR CURLINFO_SIZE_DOWNLOAD "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_HEADER_SIZE.html b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.html
new file mode 100644 (file)
index 0000000..3ef7b18
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_HEADER_SIZE man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_HEADER_SIZE - get size of retrieved headers <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the total size of all the headers received. Measured in number of bytes. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_REQUEST_SIZE.html">CURLINFO_REQUEST_SIZE</a>, <a Class="manpage" href="./CURLINFO_SIZE_DOWNLOAD.html">CURLINFO_SIZE_DOWNLOAD</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/opts/CURLINFO_HEADER_SIZE.pdf b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf
new file mode 100644 (file)
index 0000000..fcb8802
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3 b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3
new file mode 100644 (file)
index 0000000..a5d0e72
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_HTTPAUTH_AVAIL 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp);
+.SH DESCRIPTION
+Pass a pointer to a long to receive a bitmask indicating the authentication
+method(s) available according to the previous response. The meaning of the
+bits is explained in the \fICURLOPT_HTTPAUTH(3)\fP option for
+\fIcurl_easy_setopt(3)\fP.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.10.8
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.html b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.html
new file mode 100644 (file)
index 0000000..688b9d7
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_HTTPAUTH_AVAIL man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_HTTPAUTH_AVAIL - get available HTTP authentication methods <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available according to the previous response. The meaning of the bits is explained in the <a Class="emphasis" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a> option for <span Class="emphasis">curl_easy_setopt(3)</span>. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.10.8 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_HTTPAUTH_AVAIL.pdf b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.pdf
new file mode 100644 (file)
index 0000000..e5fbb56
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3 b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3
new file mode 100644 (file)
index 0000000..acfef77
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_HTTP_CONNECTCODE 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the last received HTTP proxy response code
+to a CONNECT request. The returned value will be zero if no such response code
+was available.
+.SH PROTOCOLS
+HTTP
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.10.7
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLINFO_RESPONSE_CODE "(3), "
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.html b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.html
new file mode 100644 (file)
index 0000000..7acbe20
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_HTTP_CONNECTCODE man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_HTTP_CONNECTCODE - get the CONNECT response code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the last received HTTP proxy response code to a CONNECT request. The returned value will be zero if no such response code was available. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.10.7 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLINFO_RESPONSE_CODE.html">CURLINFO_RESPONSE_CODE</a>, <span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_HTTP_CONNECTCODE.pdf b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf
new file mode 100644 (file)
index 0000000..7d663e4
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_LASTSOCKET.3 b/docs/libcurl/opts/CURLINFO_LASTSOCKET.3
new file mode 100644 (file)
index 0000000..8e73453
--- /dev/null
@@ -0,0 +1,53 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_LASTSOCKET 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_LASTSOCKET \- get the last socket used
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket);
+.SH DESCRIPTION
+Deprecated since 7.45.0. Use \fICURLINFO_ACTIVESOCKET(3)\fP instead.
+
+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(3)\fP.
+
+NOTE: this API is deprecated since it is not working on win64 where the SOCKET
+type is 64 bits large while its 'long' is 32 bits. Use the
+\fICURLINFO_ACTIVESOCKET(3)\fP instead, if possible.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.15.2
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_ACTIVESOCKET "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_LASTSOCKET.html b/docs/libcurl/opts/CURLINFO_LASTSOCKET.html
new file mode 100644 (file)
index 0000000..abe8121
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_LASTSOCKET man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_LASTSOCKET - get the last socket used <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Deprecated since 7.45.0. Use <a Class="emphasis" href="./CURLINFO_ACTIVESOCKET.html">CURLINFO_ACTIVESOCKET</a> instead. 
+<p class="level0">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 <a Class="emphasis" href="./CURLOPT_CONNECT_ONLY.html">CURLOPT_CONNECT_ONLY</a>. 
+<p class="level0">NOTE: this API is deprecated since it is not working on win64 where the SOCKET type is 64 bits large while its 'long' is 32 bits. Use the <a Class="emphasis" href="./CURLINFO_ACTIVESOCKET.html">CURLINFO_ACTIVESOCKET</a> instead, if possible. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.15.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_ACTIVESOCKET.html">CURLINFO_ACTIVESOCKET</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/opts/CURLINFO_LASTSOCKET.pdf b/docs/libcurl/opts/CURLINFO_LASTSOCKET.pdf
new file mode 100644 (file)
index 0000000..0f36836
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_LASTSOCKET.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_IP.3 b/docs/libcurl/opts/CURLINFO_LOCAL_IP.3
new file mode 100644 (file)
index 0000000..b2228e2
--- /dev/null
@@ -0,0 +1,51 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_LOCAL_IP 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_LOCAL_IP \- get local IP address of last connection
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);
+.SH DESCRIPTION
+Pass a pointer to a char pointer to receive the pointer to a zero-terminated
+string holding the IP address of the local end of most recent connection done
+with this \fBcurl\fP handle. This string may be IPv6 when that is
+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.
+
+The \fBip\fP pointer will be NULL or pointing to private memory you MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+corresponding CURL handle.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.21.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_PRIMARY_IP "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_IP.html b/docs/libcurl/opts/CURLINFO_LOCAL_IP.html
new file mode 100644 (file)
index 0000000..a650f84
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_LOCAL_IP man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_LOCAL_IP - get local IP address of last connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a char pointer to receive the pointer to a zero-terminated string holding the IP address of the local end of most recent connection done with this <span Class="bold">curl</span> handle. This string may be IPv6 when that is 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. 
+<p class="level0">The <span Class="bold">ip</span> pointer will be NULL or pointing to private memory you MUST NOT free - it gets freed when you call <span Class="emphasis">curl_easy_cleanup(3)</span> on the corresponding CURL handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_PRIMARY_IP.html">CURLINFO_PRIMARY_IP</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/opts/CURLINFO_LOCAL_IP.pdf b/docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf
new file mode 100644 (file)
index 0000000..86f1006
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3 b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3
new file mode 100644 (file)
index 0000000..aa7f418
--- /dev/null
@@ -0,0 +1,43 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_LOCAL_PORT 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_LOCAL_PORT \- get the latest local port number
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the local port number of the most recent
+connection done with this \fBcurl\fP handle.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.21.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_PRIMARY_PORT "(3), " CURLINFO_LOCAL_IP "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_LOCAL_PORT.html b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.html
new file mode 100644 (file)
index 0000000..4438a01
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_LOCAL_PORT man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_LOCAL_PORT - get the latest local port number <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the local port number of the most recent connection done with this <span Class="bold">curl</span> handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_PRIMARY_PORT.html">CURLINFO_PRIMARY_PORT</a>, <a Class="manpage" href="./CURLINFO_LOCAL_IP.html">CURLINFO_LOCAL_IP</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/opts/CURLINFO_LOCAL_PORT.pdf b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.pdf
new file mode 100644 (file)
index 0000000..db55328
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_LOCAL_PORT.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3 b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3
new file mode 100644 (file)
index 0000000..68059ec
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_NAMELOOKUP_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double *timep);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the total time in seconds from the start
+until the name resolving was completed.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.html b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.html
new file mode 100644 (file)
index 0000000..536e80a
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_NAMELOOKUP_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_NAMELOOKUP_TIME - get the name lookup time <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the total time in seconds from the start until the name resolving was completed. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_NAMELOOKUP_TIME.pdf b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf
new file mode 100644 (file)
index 0000000..121c17e
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3 b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3
new file mode 100644 (file)
index 0000000..eccff50
--- /dev/null
@@ -0,0 +1,46 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_NUM_CONNECTS 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_NUM_CONNECTS \- get number of created connections
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump);
+.SH DESCRIPTION
+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(3)\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.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.12.3
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.html b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.html
new file mode 100644 (file)
index 0000000..9afd215
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_NUM_CONNECTS man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_NUM_CONNECTS - get number of created connections <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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="./CURLINFO_REDIRECT_COUNT.html">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 <span Class="emphasis">curl_easy_setopt(3)</span> to see how libcurl tries to make persistent connections to save time. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.12.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_NUM_CONNECTS.pdf b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.pdf
new file mode 100644 (file)
index 0000000..2768028
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_OS_ERRNO.3 b/docs/libcurl/opts/CURLINFO_OS_ERRNO.3
new file mode 100644 (file)
index 0000000..b56d40e
--- /dev/null
@@ -0,0 +1,43 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_OS_ERRNO 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_OS_ERRNO \- get errno number from last connect failure
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop);
+.SH DESCRIPTION
+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 successful
+operation. The number is OS and system specific.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.12.2
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_OS_ERRNO.html b/docs/libcurl/opts/CURLINFO_OS_ERRNO.html
new file mode 100644 (file)
index 0000000..e58fe91
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_OS_ERRNO man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_OS_ERRNO - get errno number from last connect failure <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 successful operation. The number is OS and system specific. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.12.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_OS_ERRNO.pdf b/docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf
new file mode 100644 (file)
index 0000000..9043994
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3 b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3
new file mode 100644 (file)
index 0000000..c445ea0
--- /dev/null
@@ -0,0 +1,47 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_PRETRANSFER_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double *timep);
+.SH DESCRIPTION
+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. It does \fInot\fP involve the sending of the protocol-
+specific request that triggers a transfer.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.html b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.html
new file mode 100644 (file)
index 0000000..fc47944
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_PRETRANSFER_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_PRETRANSFER_TIME - get the time until the file transfer start <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. It does <span Class="emphasis">not</span> involve the sending of the protocol- specific request that triggers a transfer. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_PRETRANSFER_TIME.pdf b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.pdf
new file mode 100644 (file)
index 0000000..4254746
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3 b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3
new file mode 100644 (file)
index 0000000..9d276ea
--- /dev/null
@@ -0,0 +1,49 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_PRIMARY_IP 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_PRIMARY_IP \- get IP address of last connection
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);
+.SH DESCRIPTION
+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 when that is 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.
+
+The \fBip\fP pointer will be NULL or pointing to private memory you MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+corresponding CURL handle.
+.SH PROTOCOLS
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.19.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_PRIMARY_PORT "(3), " CURLINFO_LOCAL_IP "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_IP.html b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.html
new file mode 100644 (file)
index 0000000..9024b26
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_PRIMARY_IP man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_PRIMARY_IP - get IP address of last connection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 when that is 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. 
+<p class="level0">The <span Class="bold">ip</span> pointer will be NULL or pointing to private memory you MUST NOT free - it gets freed when you call <span Class="emphasis">curl_easy_cleanup(3)</span> on the corresponding CURL handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0"><a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.19.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_PRIMARY_PORT.html">CURLINFO_PRIMARY_PORT</a>, <a Class="manpage" href="./CURLINFO_LOCAL_IP.html">CURLINFO_LOCAL_IP</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/opts/CURLINFO_PRIMARY_IP.pdf b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf
new file mode 100644 (file)
index 0000000..8bcb577
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3 b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3
new file mode 100644 (file)
index 0000000..45ed6a6
--- /dev/null
@@ -0,0 +1,42 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_PRIMARY_PORT 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_PRIMARY_PORT \- get the latest destination port number
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the destination port of the most recent
+connection done with this \fBcurl\fP handle.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.21.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.html b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.html
new file mode 100644 (file)
index 0000000..9198af2
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_PRIMARY_PORT man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_PRIMARY_PORT - get the latest destination port number <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_PRIMARY_PORT.pdf b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.pdf
new file mode 100644 (file)
index 0000000..3b480ab
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PRIVATE.3 b/docs/libcurl/opts/CURLINFO_PRIVATE.3
new file mode 100644 (file)
index 0000000..a7fe9d5
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_PRIVATE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_PRIVATE \- get the private pointer
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);
+.SH DESCRIPTION
+Pass a pointer to a char pointer to receive the pointer to the private data
+associated with the curl handle (set with the \fICURLOPT_PRIVATE(3)\fP).
+Please note that for internal reasons, the value is returned as a char
+pointer, although effectively being a 'void *'.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.10.3
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLOPT_PRIVATE "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_PRIVATE.html b/docs/libcurl/opts/CURLINFO_PRIVATE.html
new file mode 100644 (file)
index 0000000..6ee3942
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_PRIVATE man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_PRIVATE - get the private pointer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a char pointer to receive the pointer to the private data associated with the curl handle (set with the <a Class="emphasis" href="./CURLOPT_PRIVATE.html">CURLOPT_PRIVATE</a>). Please note that for internal reasons, the value is returned as a char pointer, although effectively being a 'void *'. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.10.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLOPT_PRIVATE.html">CURLOPT_PRIVATE</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/opts/CURLINFO_PRIVATE.pdf b/docs/libcurl/opts/CURLINFO_PRIVATE.pdf
new file mode 100644 (file)
index 0000000..adcde53
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PRIVATE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3 b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3
new file mode 100644 (file)
index 0000000..d07c5b9
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_PROXYAUTH_AVAIL 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long *authp);
+.SH DESCRIPTION
+Pass a pointer to a long to receive a bitmask indicating the authentication
+method(s) available according to the previous response. The meaning of the
+bits is explained in the \fICURLOPT_PROXYAUTH(3)\fP option for
+\fIcurl_easy_setopt(3)\fP.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.10.8
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.html b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.html
new file mode 100644 (file)
index 0000000..18f98b5
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_PROXYAUTH_AVAIL man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_PROXYAUTH_AVAIL - get available HTTP proxy authentication methods <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long *authp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available according to the previous response. The meaning of the bits is explained in the <a Class="emphasis" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a> option for <span Class="emphasis">curl_easy_setopt(3)</span>. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.10.8 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_PROXYAUTH_AVAIL.pdf b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.pdf
new file mode 100644 (file)
index 0000000..bbe65ca
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3
new file mode 100644 (file)
index 0000000..ee1ebbb
--- /dev/null
@@ -0,0 +1,42 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_REDIRECT_COUNT 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_REDIRECT_COUNT \- get the number of redirects
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long *countp);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the total number of redirections that were
+actually followed.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.9.7
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.html b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.html
new file mode 100644 (file)
index 0000000..8cc20c1
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_REDIRECT_COUNT man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_REDIRECT_COUNT - get the number of redirects <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long *countp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the total number of redirections that were actually followed. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.9.7 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_REDIRECT_COUNT.pdf b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.pdf
new file mode 100644 (file)
index 0000000..3b435ce
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3
new file mode 100644 (file)
index 0000000..1a9e6df
--- /dev/null
@@ -0,0 +1,46 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_REDIRECT_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double *timep);
+.SH DESCRIPTION
+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.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.9.7
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.html b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.html
new file mode 100644 (file)
index 0000000..2b5c2ca
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_REDIRECT_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_REDIRECT_TIME - get the time for all redirection steps <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.9.7 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_REDIRECT_TIME.pdf b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf
new file mode 100644 (file)
index 0000000..a2c939a
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3 b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3
new file mode 100644 (file)
index 0000000..a7bf726
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_REDIRECT_URL 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp);
+.SH DESCRIPTION
+Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP
+take you to if you would enable \fICURLOPT_FOLLOWLOCATION(3)\fP. 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.
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.18.2
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_REDIRECT_URL.html b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.html
new file mode 100644 (file)
index 0000000..a84af87
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_REDIRECT_URL man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_REDIRECT_URL - get the URL a redirect would go to <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>. 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. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <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">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_REDIRECT_URL.pdf b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.pdf
new file mode 100644 (file)
index 0000000..d1fe0b0
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REDIRECT_URL.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3 b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3
new file mode 100644 (file)
index 0000000..6f85735
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_REQUEST_SIZE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_REQUEST_SIZE \- get size of sent request
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep);
+.SH DESCRIPTION
+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 \fICURLOPT_FOLLOWLOCATION(3)\fP is enabled.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_HEADER_SIZE "(3), "
+.BR CURLINFO_SIZE_DOWNLOAD "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.html b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.html
new file mode 100644 (file)
index 0000000..2a799c9
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_REQUEST_SIZE man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_REQUEST_SIZE - get size of sent request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a> is enabled. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_HEADER_SIZE.html">CURLINFO_HEADER_SIZE</a>, <a Class="manpage" href="./CURLINFO_SIZE_DOWNLOAD.html">CURLINFO_SIZE_DOWNLOAD</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/opts/CURLINFO_REQUEST_SIZE.pdf b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf
new file mode 100644 (file)
index 0000000..ad31fd9
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3 b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3
new file mode 100644 (file)
index 0000000..b1f4847
--- /dev/null
@@ -0,0 +1,60 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_RESPONSE_CODE 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_RESPONSE_CODE \- get the last response code
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the last received HTTP, FTP or SMTP
+response code. This option was previously known as CURLINFO_HTTP_CODE in
+libcurl 7.10.7 and earlier. The stored value 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(3)\fP and not this.
+
+Support for SMTP responses added in 7.25.0.
+.SH PROTOCOLS
+HTTP, FTP and SMTP
+.SH EXAMPLE
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  CURLcode res;
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+  res = curl_easy_perform(curl);
+  if(res == CURLE_OK) {
+    long response_code;
+    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+  }
+  curl_easy_cleanup(curl);
+}
+.fi
+.SH AVAILABILITY
+Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1.
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_HTTP_CONNECTCODE "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.html b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.html
new file mode 100644 (file)
index 0000000..152235f
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_RESPONSE_CODE man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_RESPONSE_CODE - get the last response code <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the last received HTTP, FTP or SMTP response code. This option was previously known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. The stored value 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="./CURLINFO_HTTP_CONNECTCODE.html">CURLINFO_HTTP_CONNECTCODE</a> and not this. 
+<p class="level0">Support for SMTP responses added in 7.25.0. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP, FTP and SMTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; CURLcode res;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; res = curl_easy_perform(curl);
+&nbsp; if(res == CURLE_OK) {
+&nbsp;   long response_code;
+&nbsp;   curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
+&nbsp; }
+&nbsp; curl_easy_cleanup(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_HTTP_CONNECTCODE.html">CURLINFO_HTTP_CONNECTCODE</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/opts/CURLINFO_RESPONSE_CODE.pdf b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.pdf
new file mode 100644 (file)
index 0000000..ed03821
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3 b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3
new file mode 100644 (file)
index 0000000..822fde8
--- /dev/null
@@ -0,0 +1,42 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_RTSP_CLIENT_CSEQ 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long *cseq);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the next CSeq that will be used by the
+application.
+.SH PROTOCOLS
+RTSP
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.20.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.html b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.html
new file mode 100644 (file)
index 0000000..65d159c
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_RTSP_CLIENT_CSEQ man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_RTSP_CLIENT_CSEQ - get the next RTSP client CSeq <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long *cseq); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the next CSeq that will be used by the application. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">RTSP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_RTSP_CLIENT_CSEQ.pdf b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.pdf
new file mode 100644 (file)
index 0000000..977e931
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3 b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3
new file mode 100644 (file)
index 0000000..13d1319
--- /dev/null
@@ -0,0 +1,44 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_RTSP_CSEQ_RECV 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq);
+.SH DESCRIPTION
+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 PROTOCOLS
+RTSP
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.20.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.html b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.html
new file mode 100644 (file)
index 0000000..69091e5
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_RTSP_CSEQ_RECV man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_RTSP_CSEQ_RECV - get the recently received CSeq <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">RTSP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_RTSP_CSEQ_RECV.pdf b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.pdf
new file mode 100644 (file)
index 0000000..2d6419b
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3 b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3
new file mode 100644 (file)
index 0000000..571a915
--- /dev/null
@@ -0,0 +1,47 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_RTSP_SERVER_CSEQ 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long *cseq);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the next CSeq that will be expected by the
+application.
+
+Llistening for server initiated requests is currently unimplemented!
+
+Applications wishing to resume an RTSP session on another connection should
+retrieve this info before closing the active connection.
+.SH PROTOCOLS
+RTSP
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.20.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.html b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.html
new file mode 100644 (file)
index 0000000..befea82
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_RTSP_SERVER_CSEQ man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_RTSP_SERVER_CSEQ - get the next RTSP server CSeq <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long *cseq); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the next CSeq that will be expected by the application. 
+<p class="level0">Llistening for server initiated requests is currently unimplemented! 
+<p class="level0">Applications wishing to resume an RTSP session on another connection should retrieve this info before closing the active connection. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">RTSP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_RTSP_SERVER_CSEQ.pdf b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.pdf
new file mode 100644 (file)
index 0000000..143e688
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3 b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3
new file mode 100644 (file)
index 0000000..4d4d3f1
--- /dev/null
@@ -0,0 +1,49 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_RTSP_SESSION_ID 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id);
+.SH DESCRIPTION
+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
+retrieve this info before closing the active connection.
+
+The \fBid\fP pointer will be NULL or pointing to private memory you MUST NOT
+free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
+corresponding CURL handle.
+.SH PROTOCOLS
+RTSP
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.20.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.html b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.html
new file mode 100644 (file)
index 0000000..e162280
--- /dev/null
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_RTSP_SESSION_ID man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_RTSP_SESSION_ID - get RTSP session ID <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a char pointer to receive a pointer to a string holding the most recent RTSP Session ID. 
+<p class="level0">Applications wishing to resume an RTSP session on another connection should retrieve this info before closing the active connection. 
+<p class="level0">The <span Class="bold">id</span> pointer will be NULL or pointing to private memory you MUST NOT free - it gets freed when you call <span Class="emphasis">curl_easy_cleanup(3)</span> on the corresponding CURL handle. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">RTSP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_RTSP_SESSION_ID.pdf b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf
new file mode 100644 (file)
index 0000000..2bb2410
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3 b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3
new file mode 100644 (file)
index 0000000..85039ff
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_SIZE_DOWNLOAD 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);
+.SH DESCRIPTION
+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. This counts actual payload data, what's also
+commonly called body. All meta and header data are excluded and will not be
+counted in this number.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.html b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.html
new file mode 100644 (file)
index 0000000..db37411
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_SIZE_DOWNLOAD man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_SIZE_DOWNLOAD - get the number of downloaded bytes <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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. This counts actual payload data, what's also commonly called body. All meta and header data are excluded and will not be counted in this number. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_SIZE_DOWNLOAD.pdf b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.pdf
new file mode 100644 (file)
index 0000000..9d2f226
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3 b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3
new file mode 100644 (file)
index 0000000..034c6df
--- /dev/null
@@ -0,0 +1,42 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_SIZE_UPLOAD 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double *uploadp);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the total amount of bytes that were
+uploaded.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.html b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.html
new file mode 100644 (file)
index 0000000..55fdb44
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_SIZE_UPLOAD man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_SIZE_UPLOAD - get the number of uploaded bytes <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double *uploadp); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the total amount of bytes that were uploaded. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_SIZE_UPLOAD.pdf b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf
new file mode 100644 (file)
index 0000000..37f5d7a
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3 b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3
new file mode 100644 (file)
index 0000000..ef1c739
--- /dev/null
@@ -0,0 +1,42 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_SPEED_DOWNLOAD 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_SPEED_DOWNLOAD \- get download speed
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double *speed);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the average download speed that curl
+measured for the complete download. Measured in bytes/second.
+.SH PROTOCOLS
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_SPEED_UPLOAD "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.html b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.html
new file mode 100644 (file)
index 0000000..2ed74db
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_SPEED_DOWNLOAD man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_SPEED_DOWNLOAD - get download speed <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double *speed); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the average download speed that curl measured for the complete download. Measured in bytes/second. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0"><a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_SPEED_UPLOAD.html">CURLINFO_SPEED_UPLOAD</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/opts/CURLINFO_SPEED_DOWNLOAD.pdf b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.pdf
new file mode 100644 (file)
index 0000000..d044bf0
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3 b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3
new file mode 100644 (file)
index 0000000..f79ea1f
--- /dev/null
@@ -0,0 +1,42 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_SPEED_UPLOAD 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_SPEED_UPLOAD \- get upload speed
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the average upload speed that curl
+measured for the complete upload. Measured in bytes/second.
+.SH PROTOCOLS
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_SPEED_DOWNLOAD "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.html b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.html
new file mode 100644 (file)
index 0000000..6309cac
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_SPEED_UPLOAD man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_SPEED_UPLOAD - get upload speed <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the average upload speed that curl measured for the complete upload. Measured in bytes/second. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0"><a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_SPEED_DOWNLOAD.html">CURLINFO_SPEED_DOWNLOAD</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/opts/CURLINFO_SPEED_UPLOAD.pdf b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf
new file mode 100644 (file)
index 0000000..3585cf8
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3 b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3
new file mode 100644 (file)
index 0000000..c1ebfc9
--- /dev/null
@@ -0,0 +1,47 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_SSL_ENGINES 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES,
+                           struct curl_slist **engine_list);
+.SH DESCRIPTION
+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.
+.SH PROTOCOLS
+All TLS based ones.
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.12.3. Available in OpenSSL builds with "engine" support.
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_SSL_ENGINES.html b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.html
new file mode 100644 (file)
index 0000000..9ca9143
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_SSL_ENGINES man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_SSL_ENGINES - get an slist of OpenSSL crypto-engines <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES, &nbsp;                          struct curl_slist **engine_list); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">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 <span Class="emphasis">curl_slist_free_all(3)</span> on the list pointer once you're done with it, as libcurl will not free the data for you. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS based ones. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.12.3. Available in OpenSSL builds with "engine" support. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_SSL_ENGINES.pdf b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.pdf
new file mode 100644 (file)
index 0000000..d68a68c
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SSL_ENGINES.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3 b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3
new file mode 100644 (file)
index 0000000..a87ccfe
--- /dev/null
@@ -0,0 +1,43 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_SSL_VERIFYRESULT 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_SSL_VERIFYRESULT \- get the result of the certification verification
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long *result);
+.SH DESCRIPTION
+Pass a pointer to a long to receive the result of the certification
+verification that was requested (using the \fICURLOPT_SSL_VERIFYPEER(3)\fP
+option.
+.SH PROTOCOLS
+All using TLS
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.5
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.html b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.html
new file mode 100644 (file)
index 0000000..8365982
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_SSL_VERIFYRESULT man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_SSL_VERIFYRESULT - get the result of the certification verification <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long *result); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a long to receive the result of the certification verification that was requested (using the <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> option. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All using TLS <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_SSL_VERIFYRESULT.pdf b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.pdf
new file mode 100644 (file)
index 0000000..12c006e
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3 b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3
new file mode 100644 (file)
index 0000000..5464364
--- /dev/null
@@ -0,0 +1,46 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_STARTTRANSFER_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double *timep);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the time, in seconds, it took from the
+start until the first byte is received by libcurl. This includes
+\fICURLINFO_PRETRANSFER_TIME(3)\fP and also the time the server needs to
+calculate the result.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.9.2
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.html b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.html
new file mode 100644 (file)
index 0000000..e46c369
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_STARTTRANSFER_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_STARTTRANSFER_TIME - get the time until the first byte is received <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the time, in seconds, it took from the start until the first byte is received by libcurl. This includes <a Class="emphasis" href="./CURLINFO_PRETRANSFER_TIME.html">CURLINFO_PRETRANSFER_TIME</a> and also the time the server needs to calculate the result. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.9.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_STARTTRANSFER_TIME.pdf b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf
new file mode 100644 (file)
index 0000000..1063cf7
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_TLS_SESSION.3 b/docs/libcurl/opts/CURLINFO_TLS_SESSION.3
new file mode 100644 (file)
index 0000000..7c86bed
--- /dev/null
@@ -0,0 +1,59 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2016, 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 https://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 CURLINFO_TLS_SESSION 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_TLS_SESSION \- get TLS session info
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
+                           struct curl_tlssessioninfo **session);
+.SH DESCRIPTION
+\fBThis option has been superseded\fP by \fICURLINFO_TLS_SSL_PTR(3)\fP which
+was added in 7.48.0. The only reason you would use this option instead is if
+you could be using a version of libcurl earlier than 7.48.0.
+
+This option is exactly the same as \fICURLINFO_TLS_SSL_PTR(3)\fP except in the
+case of OpenSSL. If the session \fIbackend\fP is CURLSSLBACKEND_OPENSSL the
+session \fIinternals\fP pointer varies depending on the option:
+
+CURLINFO_TLS_SESSION OpenSSL session \fIinternals\fP is SSL_CTX *.
+
+CURLINFO_TLS_SSL_PTR OpenSSL session \fIinternals\fP is SSL *.
+
+You can obtain an SSL_CTX pointer from an SSL pointer using OpenSSL function
+SSL_get_SSL_CTX. Therefore unless you need compatibility with older versions of
+libcurl use \fICURLINFO_TLS_SSL_PTR(3)\fP. Refer to that document for more
+information.
+.SH PROTOCOLS
+All TLS-based
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.34.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_TLS_SSL_PTR "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_TLS_SESSION.html b/docs/libcurl/opts/CURLINFO_TLS_SESSION.html
new file mode 100644 (file)
index 0000000..63d4b01
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_TLS_SESSION man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_TLS_SESSION - get TLS session info <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
+&nbsp;                          struct curl_tlssessioninfo **session);
+</pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0"><span Class="bold">This option has been superseded</span> by <a Class="emphasis" href="./CURLINFO_TLS_SSL_PTR.html">CURLINFO_TLS_SSL_PTR</a> which was added in 7.48.0. The only reason you would use this option instead is if you could be using a version of libcurl earlier than 7.48.0. 
+<p class="level0">This option is exactly the same as <a Class="emphasis" href="./CURLINFO_TLS_SSL_PTR.html">CURLINFO_TLS_SSL_PTR</a> except in the case of OpenSSL. If the session <span Class="emphasis">backend</span> is CURLSSLBACKEND_OPENSSL the session <span Class="emphasis">internals</span> pointer varies depending on the option: 
+<p class="level0">CURLINFO_TLS_SESSION OpenSSL session <span Class="emphasis">internals</span> is SSL_CTX *. 
+<p class="level0">CURLINFO_TLS_SSL_PTR OpenSSL session <span Class="emphasis">internals</span> is SSL *. 
+<p class="level0">You can obtain an SSL_CTX pointer from an SSL pointer using OpenSSL function SSL_get_SSL_CTX. Therefore unless you need compatibility with older versions of libcurl use <a Class="emphasis" href="./CURLINFO_TLS_SSL_PTR.html">CURLINFO_TLS_SSL_PTR</a>. Refer to that document for more information. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS-based <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.34.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_TLS_SSL_PTR.html">CURLINFO_TLS_SSL_PTR</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/opts/CURLINFO_TLS_SESSION.pdf b/docs/libcurl/opts/CURLINFO_TLS_SESSION.pdf
new file mode 100644 (file)
index 0000000..cf8b63b
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_TLS_SESSION.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3 b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3
new file mode 100644 (file)
index 0000000..b82faec
--- /dev/null
@@ -0,0 +1,140 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2016, 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 https://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 CURLINFO_TLS_SSL_PTR 3 "23 Feb 2016" "libcurl 7.48.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR,
+                           struct curl_tlssessioninfo **session);
+
+/* if you need compatibility with libcurl < 7.48.0 use
+   CURLINFO_TLS_SESSION instead: */
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
+                           struct curl_tlssessioninfo **session);
+.SH DESCRIPTION
+Pass a pointer to a 'struct curl_tlssessioninfo *'.  The pointer will be
+initialized to refer to a 'struct curl_tlssessioninfo *' that will contain an
+enum indicating the SSL library used for the handshake and a pointer to the
+respective internal TLS session structure of this underlying SSL library.
+
+This option may be useful for example to extract certificate information in a
+format convenient for further processing, such as manual validation. Refer to
+the \fBLIMITATIONS\fP section.
+
+.nf
+struct curl_tlssessioninfo {
+  curl_sslbackend backend;
+  void *internals;
+};
+.fi
+
+The \fIbackend\fP struct member is one of the defines in the CURLSSLBACKEND_*
+series: CURLSSLBACKEND_NONE (when built without TLS support),
+CURLSSLBACKEND_AXTLS, CURLSSLBACKEND_CYASSL, CURLSSLBACKEND_DARWINSSL,
+CURLSSLBACKEND_GNUTLS, CURLSSLBACKEND_GSKIT, CURLSSLBACKEND_MBEDTLS,
+CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL, CURLSSLBACKEND_POLARSSL or
+CURLSSLBACKEND_SCHANNEL. (Note that the OpenSSL forks are all reported as just
+OpenSSL here.)
+
+The \fIinternals\fP struct member will point to a TLS library specific pointer
+for the active ("in use") SSL connection, with the following underlying types:
+.RS
+.IP GnuTLS
+gnutls_session_t
+.IP gskit
+gsk_handle
+.IP NSS
+PRFileDesc *
+.IP OpenSSL
+CURLINFO_TLS_SESSION: SSL_CTX *
+
+CURLINFO_TLS_SSL_PTR: SSL *
+.RE
+Since 7.48.0 the \fIinternals\fP member can point to these other SSL backends
+as well:
+.RS
+.IP axTLS
+SSL *
+.IP mbedTLS
+mbedtls_ssl_session *
+.IP PolarSSL
+ssl_session *
+.IP "Secure Channel (WinSSL)"
+CtxtHandle *
+.IP "Secure Transport (DarwinSSL)"
+SSLContext *
+.IP "WolfSSL (formerly CyaSSL)"
+SSL *
+.RE
+
+If the \fIinternals\fP pointer is NULL then either the SSL backend is not
+supported or an SSL session has not yet been established.
+.SH LIMITATIONS
+\fBThis option has some limitations that could make it unsafe when it comes to
+the manual verification of certificates.\fP
+
+This option only retrieves the first in-use SSL session pointer for your easy
+handle, however your easy handle may have more than one in-use SSL session if
+using FTP over SSL. That is because the FTP protocol has a control channel and
+a data channel and one or both may be over SSL. \fBCurrently there is no way to
+retrieve a second in-use SSL session associated with an easy handle.\fP
+
+This option has not been thoroughly tested with plaintext protocols that can be
+upgraded/downgraded to/from SSL: FTP, SMTP, POP3, IMAP when used with
+\fICURLOPT_USE_SSL(3)\fP. Though you will be able to retrieve the SSL pointer,
+it's possible that before you can do that \fBdata (including auth) may have
+already been sent over a connection after it was upgraded.\fP
+
+Renegotiation. If unsafe renegotiation or renegotiation in a way that the
+certificate is allowed to change is allowed by your SSL library this may occur
+and the certificate may change, and \fBdata may continue to be sent or received
+after renegotiation but before you are able to get the (possibly) changed SSL
+pointer,\fP with the (possibly) changed certificate information.
+
+If you are using OpenSSL or wolfSSL then \fICURLOPT_SSL_CTX_FUNCTION(3)\fP can
+be used to set a certificate verification callback in the CTX. That is safer
+than using this option to poll for certificate changes and doesn't suffer from
+any of the problems above. There is currently no way in libcurl to set a
+verification callback for the other SSL backends.
+
+How are you using this option? Are you affected by any of these limitations?
+Please let us know by making a comment at
+https://github.com/curl/curl/issues/685
+.SH PROTOCOLS
+All TLS-based
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.48.0.
+
+This option supersedes \fICURLINFO_TLS_SESSION(3)\fP which was added in 7.34.0.
+This option is exactly the same as that option except in the case of OpenSSL.
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
+.BR CURLINFO_TLS_SESSION "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.html b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.html
new file mode 100644 (file)
index 0000000..31c327e
--- /dev/null
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_TLS_SSL_PTR man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR - get TLS session info <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR,
+&nbsp;                          struct curl_tlssessioninfo **session);
+&nbsp;
+/* if you need compatibility with libcurl &lt; 7.48.0 use
+&nbsp;  CURLINFO_TLS_SESSION instead: */
+&nbsp;
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
+&nbsp;                          struct curl_tlssessioninfo **session);
+</pre>
+<a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a 'struct curl_tlssessioninfo *'.  The pointer will be initialized to refer to a 'struct curl_tlssessioninfo *' that will contain an enum indicating the SSL library used for the handshake and a pointer to the respective internal TLS session structure of this underlying SSL library. 
+<p class="level0">This option may be useful for example to extract certificate information in a format convenient for further processing, such as manual validation. Refer to the <a class="bold" href="#LIMITATIONS">LIMITATIONS</a> section. 
+<p class="level0"><pre class="level0">
+struct curl_tlssessioninfo {
+&nbsp; curl_sslbackend backend;
+&nbsp; void *internals;
+};
+</pre>
+
+<p class="level0">
+<p class="level0">The <span Class="emphasis">backend</span> struct member is one of the defines in the CURLSSLBACKEND_* series: CURLSSLBACKEND_NONE (when built without TLS support), CURLSSLBACKEND_AXTLS, CURLSSLBACKEND_CYASSL, CURLSSLBACKEND_DARWINSSL, CURLSSLBACKEND_GNUTLS, CURLSSLBACKEND_GSKIT, CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS, CURLSSLBACKEND_OPENSSL, CURLSSLBACKEND_POLARSSL or CURLSSLBACKEND_SCHANNEL. (Note that the OpenSSL forks are all reported as just OpenSSL here.) 
+<p class="level0">The <span Class="emphasis">internals</span> struct member will point to a TLS library specific pointer for the active ("in use") SSL connection, with the following underlying types: 
+<p class="level1">
+<p class="level0"><a name="GnuTLS"></a><span class="nroffip">GnuTLS</span> 
+<p class="level1">gnutls_session_t 
+<p class="level0"><a name="gskit"></a><span class="nroffip">gskit</span> 
+<p class="level1">gsk_handle 
+<p class="level0"><a name="NSS"></a><span class="nroffip">NSS</span> 
+<p class="level1">PRFileDesc * 
+<p class="level0"><a name="OpenSSL"></a><span class="nroffip">OpenSSL</span> 
+<p class="level1">CURLINFO_TLS_SESSION: SSL_CTX * 
+<p class="level1">CURLINFO_TLS_SSL_PTR: SSL * 
+<p class="level0">Since 7.48.0 the <span Class="emphasis">internals</span> member can point to these other SSL backends as well: 
+<p class="level1">
+<p class="level0"><a name="axTLS"></a><span class="nroffip">axTLS</span> 
+<p class="level1">SSL * 
+<p class="level0"><a name="mbedTLS"></a><span class="nroffip">mbedTLS</span> 
+<p class="level1">mbedtls_ssl_session * 
+<p class="level0"><a name="PolarSSL"></a><span class="nroffip">PolarSSL</span> 
+<p class="level1">ssl_session * 
+<p class="level0"><a name="Secure"></a><span class="nroffip">Secure Channel (WinSSL)</span> 
+<p class="level1">CtxtHandle * 
+<p class="level0"><a name="Secure"></a><span class="nroffip">Secure Transport (DarwinSSL)</span> 
+<p class="level1">SSLContext * 
+<p class="level0"><a name="WolfSSL"></a><span class="nroffip">WolfSSL (formerly CyaSSL)</span> 
+<p class="level1">SSL * 
+<p class="level0">
+<p class="level0">If the <span Class="emphasis">internals</span> pointer is NULL then either the SSL backend is not supported or an SSL session has not yet been established. <a name="LIMITATIONS"></a><h2 class="nroffsh">LIMITATIONS</h2>
+<p class="level0"><span class="bold">This option has some limitations that could make it unsafe when it comes to the manual verification of certificates.</span> 
+<p class="level0">This option only retrieves the first in-use SSL session pointer for your easy handle, however your easy handle may have more than one in-use SSL session if using FTP over SSL. That is because the FTP protocol has a control channel and a data channel and one or both may be over SSL. <span class="bold">Currently there is no way to retrieve a second in-use SSL session associated with an easy handle.</span> 
+<p class="level0">This option has not been thoroughly tested with plaintext protocols that can be upgraded/downgraded to/from SSL: FTP, SMTP, POP3, IMAP when used with <a Class="emphasis" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>. Though you will be able to retrieve the SSL pointer, it's possible that before you can do that <span class="bold">data (including auth) may have already been sent over a connection after it was upgraded.</span> 
+<p class="level0">Renegotiation. If unsafe renegotiation or renegotiation in a way that the certificate is allowed to change is allowed by your SSL library this may occur and the certificate may change, and <span class="bold">data may continue to be sent or received after renegotiation but before you are able to get the (possibly) changed SSL pointer,</span> with the (possibly) changed certificate information. 
+<p class="level0">If you are using OpenSSL or wolfSSL then <a Class="emphasis" href="./CURLOPT_SSL_CTX_FUNCTION.html">CURLOPT_SSL_CTX_FUNCTION</a> can be used to set a certificate verification callback in the CTX. That is safer than using this option to poll for certificate changes and doesn't suffer from any of the problems above. There is currently no way in libcurl to set a verification callback for the other SSL backends. 
+<p class="level0">How are you using this option? Are you affected by any of these limitations? Please let us know by making a comment at <a href="https://github.com/curl/curl/issues/685">https://github.com/curl/curl/issues/685</a> <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS-based <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.48.0. 
+<p class="level0">This option supersedes <a Class="emphasis" href="./CURLINFO_TLS_SESSION.html">CURLINFO_TLS_SESSION</a> which was added in 7.34.0. This option is exactly the same as that option except in the case of OpenSSL. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (3)</span>, <a Class="manpage" href="./CURLINFO_TLS_SESSION.html">CURLINFO_TLS_SESSION</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/opts/CURLINFO_TLS_SSL_PTR.pdf b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.pdf
new file mode 100644 (file)
index 0000000..23f9290
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.pdf differ
diff --git a/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3 b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3
new file mode 100644 (file)
index 0000000..b068a8b
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLINFO_TOTAL_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo options"
+.SH NAME
+CURLINFO_TOTAL_TIME \- get total time of previous transfer
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep);
+.SH DESCRIPTION
+Pass a pointer to a double to receive the total time in seconds for the
+previous transfer, including name resolving, TCP connect etc. The double
+represents the time in seconds, including fractions.
+
+See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.4.1
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --git a/docs/libcurl/opts/CURLINFO_TOTAL_TIME.html b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.html
new file mode 100644 (file)
index 0000000..368e4df
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLINFO_TOTAL_TIME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLINFO_TOTAL_TIME - get total time of previous transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a double to receive the total time in seconds for the previous transfer, including name resolving, TCP connect etc. The double represents the time in seconds, including fractions. 
+<p class="level0">See also the TIMES overview in the <span Class="emphasis">curl_easy_getinfo(3)</span> man page. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.4.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span>, <span Class="manpage">curl_easy_setopt (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/opts/CURLINFO_TOTAL_TIME.pdf b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.pdf
new file mode 100644 (file)
index 0000000..fb3d940
Binary files /dev/null and b/docs/libcurl/opts/CURLINFO_TOTAL_TIME.pdf differ
index 66ceab8..ab2d2f6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 7650c00..5c2aaf7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE - chunk length threshold for pipelining <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, long size); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long with a <span Class="bold">size</span> in bytes. If a pipelined connection is currently processing a chunked (Transfer-encoding: chunked) request with a current chunk length larger than <a Class="emphasis" href="./CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</a>, that pipeline will not be considered for additional requests, even if it is shorter than <a Class="emphasis" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value is 0, which means that the penalization is inactive. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</a>, <a Class="manpage" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8584f68..46e1f67 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf and b/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf differ
index 203b6ac..3b4e81d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b488190..642a6db 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE - size threshold for pipelining penalty <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, long size); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long with a <span Class="bold">size</span> in bytes. If a pipelined connection is currently processing a request with a Content-Length larger than this <a Class="emphasis" href="./CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</a>, that pipeline will then not be considered for additional requests, even if it is shorter than <a Class="emphasis" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value is 0, which means that the size penalization is inactive. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3740c06..fbf4d3d 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf and b/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf differ
index 759ce08..ee9bdca 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index aa7bfba..fdca60d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_MAXCONNECTS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_MAXCONNECTS - set size of connection cache <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long indicating the <span Class="bold">max</span>. The set number will be used as the maximum amount of simultaneously open connections that libcurl may keep in its connection cache after completed use. By default libcurl will enlarge the size for each added easy handle to make it fit 4 times the number of added easy handles. 
 <p class="level0">By setting this option, you can prevent the cache size from growing beyond the limit set by you. 
@@ -60,7 +65,7 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_MAXCONNECTS.html">CURLOPT_MAXCONNECTS</a>, <span Class="manpage"> </span> 
+<p class="level0"><a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <a Class="manpage" href="./CURLOPT_MAXCONNECTS.html">CURLOPT_MAXCONNECTS</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>
index 75fab1e..e212ddd 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf and b/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf differ
index 7789347..2e0352f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -29,8 +29,9 @@ CURLMOPT_MAX_HOST_CONNECTIONS \- set max number of connections to a single host
 CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, long max);
 .SH DESCRIPTION
 Pass a long to indicate \fBmax\fP. The set number will be used as the maximum
-amount of simultaneously open connections to a single host. For each new
-session to a host, libcurl will open a new connection up to the limit set by
+amount of simultaneously open connections to a single host (a host being the
+same as a host name + port number pair). For each new session to a host,
+libcurl will open a new connection up to the limit set by
 \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP. When the limit is reached, the
 sessions will be pending until a connection becomes available. If
 \fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl will try to pipeline if the
@@ -40,6 +41,9 @@ The default \fBmax\fP value is 0, unlimited.  However, for backwards
 compatibility, setting it to 0 when \fICURLMOPT_PIPELINING(3)\fP is 1 will not
 be treated as unlimited. Instead it will open only 1 connection and try to
 pipeline on it.
+
+This set limit is also used for proxy connections, and then the proxy is
+considered to be the host for which this limit counts.
 .SH DEFAULT
 0
 .SH PROTOCOLS
index ddcb77e..1c3e7f2 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_MAX_HOST_CONNECTIONS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_MAX_HOST_CONNECTIONS - set max number of connections to a single host <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, long max); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a long to indicate <span Class="bold">max</span>. The set number will be used as the maximum amount of simultaneously open connections to a single host. For each new session to a host, libcurl will open a new connection up to the limit set by <a Class="emphasis" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>. When the limit is reached, the sessions will be pending until a connection becomes available. If <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a> is enabled, libcurl will try to pipeline if the host is capable of it. 
-<p class="level0">The default <span Class="bold">max</span> value is 0, unlimited.  However, for backwards compatibility, setting it to 0 when <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a> is 1 will not be treated as unlimited. Instead it will open only 1 connection and try to pipeline on it. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Pass a long to indicate <span Class="bold">max</span>. The set number will be used as the maximum amount of simultaneously open connections to a single host (a host being the same as a host name + port number pair). For each new session to a host, libcurl will open a new connection up to the limit set by <a Class="emphasis" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>. When the limit is reached, the sessions will be pending until a connection becomes available. If <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a> is enabled, libcurl will try to pipeline if the host is capable of it. 
+<p class="level0">The default <span Class="bold">max</span> value is 0, unlimited.  However, for backwards compatibility, setting it to 0 when <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a> is 1 will not be treated as unlimited. Instead it will open only 1 connection and try to pipeline on it. 
+<p class="level0">This set limit is also used for proxy connections, and then the proxy is considered to be the host for which this limit counts. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLMOPT_MAX_TOTAL_CONNECTIONS.html">CURLMOPT_MAX_TOTAL_CONNECTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLMOPT_MAX_TOTAL_CONNECTIONS.html">CURLMOPT_MAX_TOTAL_CONNECTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1b1dbd3..e11bf66 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf and b/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf differ
index c2adb45..cac3c71 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f543112..b7fa9fb 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_MAX_PIPELINE_LENGTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_MAX_PIPELINE_LENGTH - maximum number of requests in a pipeline <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long max); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. The set <span Class="bold">max</span> number will be used as the maximum amount of outstanding requests in a pipelined connection. Only used if pipelining is enabled. 
 <p class="level0">When this limit is reached, libcurl will use another connection to the same host (see <a Class="emphasis" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>), or queue the request until one of the pipelines to the host is ready to accept a request.  Thus, the total number of requests in-flight is <a Class="emphasis" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a> * <a Class="emphasis" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 08373e2..4f46ab5 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf and b/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf differ
index 2783a7d..835c2bd 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 317a962..935beba 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_MAX_TOTAL_CONNECTIONS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_MAX_TOTAL_CONNECTIONS - max simultaneously open connections <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, long amount); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long for the <span Class="bold">amount</span>. The set number will be used as the maximum number of simultaneously open connections in total using this multi handle. For each new session, libcurl will open a new connection up to the limit set by <a Class="emphasis" href="./CURLMOPT_MAX_TOTAL_CONNECTIONS.html">CURLMOPT_MAX_TOTAL_CONNECTIONS</a>. When the limit is reached, the sessions will be pending until there are available connections. If <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a> is enabled, libcurl will try to pipeline if the host is capable of it. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value is 0, which means that there is no limit. It is then simply controlled by the number of easy handles added. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 56dfdf4..a8d9e6a 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf and b/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf differ
index c1df1d5..4c79b1b 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -26,17 +26,28 @@ CURLMOPT_PIPELINING \- enable/disable HTTP pipelining
 .SH SYNOPSIS
 #include <curl/curl.h>
 
-CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, bool onoff);
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bits);
 .SH DESCRIPTION
-Set the \fBonoff\fP parameter to 1 to make libcurl use HTTP pipelining for
-HTTP transfers done using this multi handle, as far as possible. 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.
+Set the \fBbits\fP parameter to 1 to make libcurl use HTTP pipelining for
+HTTP/1.1 transfers done using this multi handle, as far as possible. 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.
 
 When using pipelining, there are also several other related options that are
 interesting to tweak and adjust to alter how libcurl spreads out requests on
 different connections or not etc.
+
+Starting in 7.43.0, the \fBbits\fP parameter's bit 1 also has a meaning and
+libcurl is now offering symbol names for the bits:
+.IP CURLPIPE_NOTHING (0)
+Default, which means doing no attempts at pipelining or multiplexing.
+.IP CURLPIPE_HTTP1 (1)
+If this bit is set, libcurl will try to pipeline HTTP/1.1 requests on
+connections that are already established and in use to hosts.
+.IP CURLPIPE_MULTIPLEX (2)
+If this bit is set, libcurl will try to multiplex the new transfer over an
+existing connection if possible. This requires HTTP/2.
 .SH DEFAULT
 0 (off)
 .SH PROTOCOLS
@@ -44,7 +55,7 @@ HTTP(S)
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-Added in 7.16.0
+Added in 7.16.0. Multiplex support bit added in 7.43.0.
 .SH RETURN VALUE
 Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index c56205c..a32885c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_PIPELINING man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,22 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_PIPELINING - enable/disable HTTP pipelining <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 *handle, CURLMOPT_PIPELINING, bool onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Set the <span Class="bold">onoff</span> parameter to 1 to make libcurl use HTTP pipelining for HTTP transfers done using this multi handle, as far as possible. 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. 
-<p class="level0">When using pipelining, there are also several other related options that are interesting to tweak and adjust to alter how libcurl spreads out requests on different connections or not etc. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bits); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set the <span Class="bold">bits</span> parameter to 1 to make libcurl use HTTP pipelining for HTTP/1.1 transfers done using this multi handle, as far as possible. 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. 
+<p class="level0">When using pipelining, there are also several other related options that are interesting to tweak and adjust to alter how libcurl spreads out requests on different connections or not etc. 
+<p class="level0">Starting in 7.43.0, the <span Class="bold">bits</span> parameter's bit 1 also has a meaning and libcurl is now offering symbol names for the bits: 
+<p class="level0"><a name="CURLPIPENOTHING"></a><span class="nroffip">CURLPIPE_NOTHING (0)</span> 
+<p class="level1">Default, which means doing no attempts at pipelining or multiplexing. 
+<p class="level0"><a name="CURLPIPEHTTP1"></a><span class="nroffip">CURLPIPE_HTTP1 (1)</span> 
+<p class="level1">If this bit is set, libcurl will try to pipeline HTTP/1.1 requests on connections that are already established and in use to hosts. 
+<p class="level0"><a name="CURLPIPEMULTIPLEX"></a><span class="nroffip">CURLPIPE_MULTIPLEX (2)</span> 
+<p class="level1">If this bit is set, libcurl will try to multiplex the new transfer over an existing connection if possible. This requires HTTP/2. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 (off) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Added in 7.16.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Added in 7.16.0. Multiplex support bit added in 7.43.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_PIPELINING_SITE_BL.html">CURLMOPT_PIPELINING_SITE_BL</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_MAX_PIPELINE_LENGTH.html">CURLMOPT_MAX_PIPELINE_LENGTH</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING_SITE_BL.html">CURLMOPT_PIPELINING_SITE_BL</a>, <a Class="manpage" href="./CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html">CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE</a>, <a Class="manpage" href="./CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html">CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a>, <a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2166f2d..2657b4c 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_PIPELINING.pdf and b/docs/libcurl/opts/CURLMOPT_PIPELINING.pdf differ
index ae39312..660afec 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -50,7 +50,7 @@ The default value is NULL, which means that there is no blacklist.
     NULL
   };
 
-  curl_multi_setopt(m, CURLMOPT_PIPELINE_SERVER_BL, server_blacklist);
+  curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_blacklist);
 .fi
 .SH AVAILABILITY
 Added in 7.30.0
index 2193b7d..3c39cc3 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_PIPELINING_SERVER_BL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,26 +52,27 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_PIPELINING_SERVER_BL - pipelining server blacklist <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, char **servers); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="bold">servers</span> array of char *, ending with a NULL entry. This is a list of server types prefixes (in the Server: HTTP header) that are blacklisted from pipelining, i.e server types that are known to not support HTTP pipelining. The array is copied by libcurl. 
 <p class="level0">Note that the comparison matches if the Server: header begins with the string in the blacklist, i.e "Server: Ninja 1.2.3" and "Server: Ninja 1.4.0" can  both be blacklisted by having "Ninja" in the backlist. 
 <p class="level0">Pass a NULL pointer to clear the blacklist. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value is NULL, which means that there is no blacklist. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0"><a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">&nbsp; server_blacklist[] =
- &nbsp; {
- &nbsp;   "Microsoft-IIS/6.0",
- &nbsp;   "nginx/0.8.54",
- &nbsp;   NULL
- &nbsp; };
- <p class="level0">&nbsp; curl_multi_setopt(m, CURLMOPT_PIPELINE_SERVER_BL, server_blacklist);
- </pre>
+<p class="level0"><pre class="level0">
+&nbsp; server_blacklist[] =
+&nbsp; {
+&nbsp;   "Microsoft-IIS/6.0",
+&nbsp;   "nginx/0.8.54",
+&nbsp;   NULL
+&nbsp; };
+&nbsp;
+&nbsp; curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_blacklist);
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING_SITE_BL.html">CURLMOPT_PIPELINING_SITE_BL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING_SITE_BL.html">CURLMOPT_PIPELINING_SITE_BL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d12a2e0..7624c4c 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf and b/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf differ
index 6356d02..8c5f5d4 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -46,7 +46,7 @@ HTTP(S)
     NULL
   };
 
-  curl_multi_setopt(m, CURLMOPT_PIPELINE_SITE_BL, site_blacklist);
+  curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_blacklist);
 .fi
 .SH AVAILABILITY
 Added in 7.30.0
index ab579d1..f74d541 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_PIPELINING_SITE_BL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,25 +52,26 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_PIPELINING_SITE_BL - pipelining host blacklist <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, char **hosts); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="bold">hosts</span> array of char *, ending with a NULL entry. This is a list of sites that are blacklisted from pipelining, i.e sites that are known to not support HTTP pipelining. The array is copied by libcurl. 
 <p class="level0">Pass a NULL pointer to clear the blacklist. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value is NULL, which means that there is no blacklist. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">&nbsp; site_blacklist[] =
- &nbsp; {
- &nbsp;   "www.haxx.se",
- &nbsp;   "www.example.com:1234",
- &nbsp;   NULL
- &nbsp; };
- <p class="level0">&nbsp; curl_multi_setopt(m, CURLMOPT_PIPELINE_SITE_BL, site_blacklist);
- </pre>
+<p class="level0"><pre class="level0">
+&nbsp; site_blacklist[] =
+&nbsp; {
+&nbsp;   "www.haxx.se",
+&nbsp;   "www.example.com:1234",
+&nbsp;   NULL
+&nbsp; };
+&nbsp;
+&nbsp; curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_blacklist);
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.30.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING_SERVER_BL.html">CURLMOPT_PIPELINING_SERVER_BL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING_SERVER_BL.html">CURLMOPT_PIPELINING_SERVER_BL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index fc712c0..395a488 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf and b/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_PUSHDATA.3 b/docs/libcurl/opts/CURLMOPT_PUSHDATA.3
new file mode 100644 (file)
index 0000000..ca9fe8a
--- /dev/null
@@ -0,0 +1,49 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLMOPT_PUSHDATA 3 "1 Jun 2015" "libcurl 7.44.0" "curl_multi_setopt options"
+.SH NAME
+CURLMOPT_PUSHDATA \- pointer to pass to push callback
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer);
+.fi
+.SH DESCRIPTION
+Set \fIpointer\fP to pass as the last argument to the
+\fICURLMOPT_PUSHFUNCTION(3)\fP callback. The pointer will not be touched or
+used by libcurl itself, only passed on to the callback function.
+.SH DEFAULT
+NULL
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.44.0
+.SH RETURN VALUE
+Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLMOPT_PUSHFUNCTION "(3), " CURLMOPT_PIPELINING "(3), "
+.BR CURLOPT_PIPEWAIT "(3), "
+.BR RFC 7540
diff --git a/docs/libcurl/opts/CURLMOPT_PUSHDATA.html b/docs/libcurl/opts/CURLMOPT_PUSHDATA.html
new file mode 100644 (file)
index 0000000..9bf29b0
--- /dev/null
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_PUSHDATA man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLMOPT_PUSHDATA - pointer to pass to push callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer);
+</pre>
+
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set <span Class="emphasis">pointer</span> to pass as the last argument to the <a Class="emphasis" href="./CURLMOPT_PUSHFUNCTION.html">CURLMOPT_PUSHFUNCTION</a> callback. The pointer will not be touched or used by libcurl itself, only passed on to the callback function. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.44.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PUSHFUNCTION.html">CURLMOPT_PUSHFUNCTION</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLOPT_PIPEWAIT.html">CURLOPT_PIPEWAIT</a>, <span Class="manpage">RFC 7540</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/opts/CURLMOPT_PUSHDATA.pdf b/docs/libcurl/opts/CURLMOPT_PUSHDATA.pdf
new file mode 100644 (file)
index 0000000..f8534e5
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PUSHDATA.pdf differ
diff --git a/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3 b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3
new file mode 100644 (file)
index 0000000..9fe02f8
--- /dev/null
@@ -0,0 +1,133 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLMOPT_PUSHFUNCTION 3 "1 Jun 2015" "libcurl 7.44.0" "curl_multi_setopt options"
+.SH NAME
+CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
+.SH SYNOPSIS
+.nf
+#include <curl/curl.h>
+
+char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num);
+char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name);
+
+int curl_push_callback(CURL *parent,
+                       CURL *easy,
+                       size_t num_headers,
+                       struct curl_pushheaders *headers,
+                       void *userp);
+
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION,
+                            curl_push_callback func);
+.fi
+.SH DESCRIPTION
+This callback gets called when a new HTTP/2 stream is being pushed by the
+server (using the PUSH_PROMISE frame). If no push callback is set, all offered
+pushes will be denied automatically.
+.SH CALLBACK DESCRIPTION
+The callback gets its arguments like this:
+
+\fIparent\fP is the handle of the stream on which this push arrives. The new
+handle has been duphandle()d from the parent, meaning that it has gotten all
+its options inherited. It is then up to the application to alter any options
+if desired.
+
+\fIeasy\fP is a newly created handle that represents this upcoming transfer.
+
+\fInum_headers\fP is the number of name+value pairs that was received and can
+be accessed
+
+\fIheaders\fP is a handle used to access push headers using the accessor
+functions described below. This only accesses and provides the PUSH_PROMISE
+headers, the normal response headers will be provided in the header callback
+as usual.
+
+\fIuserp\fP is the pointer set with \fICURLMOPT_PUSHDATA(3)\fP
+
+If the callback returns CURL_PUSH_OK, the 'easy' handle will be added to the
+multi handle, the callback must not do that by itself.
+
+The callback can access PUSH_PROMISE headers with two accessor
+functions. These functions can only be used from within this callback and they
+can only access the PUSH_PROMISE headers. The normal response headers will be
+passed to the header callback for pushed streams just as for normal streams.
+.IP curl_pushheader_bynum
+Returns the header at index 'num' (or NULL). The returned pointer points to a
+"name:value" string that will be freed when this callback returns.
+.IP curl_pushheader_byname
+Returns the value for the given header name (or NULL). This is a shortcut so
+that the application doesn't have to loop through all headers to find the one
+it is interested in. The data pointed will be freed when this callback
+returns. If more than one header field use the same name, this returns only
+the first one.
+.SH CALLBACK RETURN VALUE
+.IP "CURL_PUSH_OK (0)"
+The application has accepted the stream and it can now start receiving data,
+the ownership of the CURL handle has been taken over by the application.
+.IP "CURL_PUSH_DENY (1)"
+The callback denies the stream and no data for this will reach the
+application, the easy handle will be destroyed by libcurl.
+.IP *
+All other return codes are reserved for future use.
+.SH DEFAULT
+NULL, no callback
+.SH PROTOCOLS
+HTTP(S) (HTTP/2 only)
+.SH EXAMPLE
+.nf
+/* only allow pushes for file names starting with "push-" */
+int push_callback(CURL *parent,
+                  CURL *easy,
+                  size_t num_headers,
+                  struct curl_pushheaders *headers,
+                  void *userp)
+{
+  char *headp;
+  int *transfers = (int *)userp;
+  FILE *out;
+  headp = curl_pushheader_byname(headers, ":path");
+  if(headp && !strncmp(headp, "/push-", 6)) {
+    fprintf(stderr, "The PATH is %s\\n", headp);
+
+    /* save the push here */
+    out = fopen("pushed-stream", "wb");
+
+    /* write to this file */
+    curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
+
+    (*transfers)++; /* one more */
+
+    return CURL_PUSH_OK;
+  }
+  return CURL_PUSH_DENY;
+}
+
+curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
+curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+.fi
+.SH AVAILABILITY
+Added in 7.44.0
+.SH RETURN VALUE
+Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLMOPT_PUSHDATA "(3), " CURLMOPT_PIPELINING "(3), " CURLOPT_PIPEWAIT "(3), "
+.BR RFC 7540
diff --git a/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.html b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.html
new file mode 100644 (file)
index 0000000..2bdd3be
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLMOPT_PUSHFUNCTION man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLMOPT_PUSHFUNCTION - callback that approves or denies server pushes <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num);
+char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name);
+&nbsp;
+int curl_push_callback(CURL *parent,
+&nbsp;                      CURL *easy,
+&nbsp;                      size_t num_headers,
+&nbsp;                      struct curl_pushheaders *headers,
+&nbsp;                      void *userp);
+&nbsp;
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION,
+&nbsp;                           curl_push_callback func);
+</pre>
+
+<p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This callback gets called when a new HTTP/2 stream is being pushed by the server (using the PUSH_PROMISE frame). If no push callback is set, all offered pushes will be denied automatically. <a name="CALLBACK"></a><h2 class="nroffsh">CALLBACK DESCRIPTION</h2>
+<p class="level0">The callback gets its arguments like this: 
+<p class="level0"><span Class="emphasis">parent</span> is the handle of the stream on which this push arrives. The new handle has been duphandle()d from the parent, meaning that it has gotten all its options inherited. It is then up to the application to alter any options if desired. 
+<p class="level0"><span Class="emphasis">easy</span> is a newly created handle that represents this upcoming transfer. 
+<p class="level0"><span Class="emphasis">num_headers</span> is the number of name+value pairs that was received and can be accessed 
+<p class="level0"><span Class="emphasis">headers</span> is a handle used to access push headers using the accessor functions described below. This only accesses and provides the PUSH_PROMISE headers, the normal response headers will be provided in the header callback as usual. 
+<p class="level0"><span Class="emphasis">userp</span> is the pointer set with <a Class="emphasis" href="./CURLMOPT_PUSHDATA.html">CURLMOPT_PUSHDATA</a> 
+<p class="level0">If the callback returns CURL_PUSH_OK, the 'easy' handle will be added to the multi handle, the callback must not do that by itself. 
+<p class="level0">The callback can access PUSH_PROMISE headers with two accessor functions. These functions can only be used from within this callback and they can only access the PUSH_PROMISE headers. The normal response headers will be passed to the header callback for pushed streams just as for normal streams. 
+<p class="level0"><a name="curlpushheaderbynum"></a><span class="nroffip">curl_pushheader_bynum</span> 
+<p class="level1">Returns the header at index 'num' (or NULL). The returned pointer points to a "name:value" string that will be freed when this callback returns. 
+<p class="level0"><a name="curlpushheaderbyname"></a><span class="nroffip">curl_pushheader_byname</span> 
+<p class="level1">Returns the value for the given header name (or NULL). This is a shortcut so that the application doesn't have to loop through all headers to find the one it is interested in. The data pointed will be freed when this callback returns. If more than one header field use the same name, this returns only the first one. <a name="CALLBACK"></a><h2 class="nroffsh">CALLBACK RETURN VALUE</h2>
+<p class="level0">
+<p class="level0"><a name="CURLPUSHOK"></a><span class="nroffip">CURL_PUSH_OK (0)</span> 
+<p class="level1">The application has accepted the stream and it can now start receiving data, the ownership of the CURL handle has been taken over by the application. 
+<p class="level0"><a name="CURLPUSHDENY"></a><span class="nroffip">CURL_PUSH_DENY (1)</span> 
+<p class="level1">The callback denies the stream and no data for this will reach the application, the easy handle will be destroyed by libcurl. 
+<p class="level0"><a name=""></a><span class="nroffip">*</span> 
+<p class="level1">All other return codes are reserved for future use. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL, no callback <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) (HTTP/2 only) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+/* only allow pushes for file names starting with "push-" */
+int push_callback(CURL *parent,
+&nbsp;                 CURL *easy,
+&nbsp;                 size_t num_headers,
+&nbsp;                 struct curl_pushheaders *headers,
+&nbsp;                 void *userp)
+{
+&nbsp; char *headp;
+&nbsp; int *transfers = (int *)userp;
+&nbsp; FILE *out;
+&nbsp; headp = curl_pushheader_byname(headers, ":path");
+&nbsp; if(headp && !strncmp(headp, "/push-", 6)) {
+&nbsp;   fprintf(stderr, "The PATH is %s\n", headp);
+&nbsp;
+&nbsp;   /* save the push here */
+&nbsp;   out = fopen("pushed-stream", "wb");
+&nbsp;
+&nbsp;   /* write to this file */
+&nbsp;   curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
+&nbsp;
+&nbsp;   (*transfers)++; /* one more */
+&nbsp;
+&nbsp;   return CURL_PUSH_OK;
+&nbsp; }
+&nbsp; return CURL_PUSH_DENY;
+}
+&nbsp;
+curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
+curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.44.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLMOPT_PUSHDATA.html">CURLMOPT_PUSHDATA</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLOPT_PIPEWAIT.html">CURLOPT_PIPEWAIT</a>, <span Class="manpage">RFC 7540</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/opts/CURLMOPT_PUSHFUNCTION.pdf b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf
new file mode 100644 (file)
index 0000000..f64765a
Binary files /dev/null and b/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf differ
index bf7e6a7..b9cdc83 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index dd2da96..40e2336 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_SOCKETDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,10 +52,11 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_SOCKETDATA - custom pointer passed to the socket callback <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_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void *pointer);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void *pointer);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A data <span Class="emphasis">pointer</span> to pass to the socket callback set with the <a Class="emphasis" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a> option. 
 <p class="level0">This pointer will not be touched by libcurl but will only be passed in to the socket callbacks's <span Class="bold">userp</span> argument. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a>, <span Class="manpage">  curl_multi_socket_action (3)</span> <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a>, <span Class="manpage">curl_multi_socket_action (3)</span>, <a Class="manpage" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4beb93f..8c4cbba 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf and b/docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf differ
index d64fe11..d5f2f75 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 1106738..b4860fe 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_SOCKETFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,17 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_SOCKETFUNCTION - callback informed about what to wait for <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">int socket_callback(CURL *easy,      /* easy handle */
- &nbsp;                   curl_socket_t s, /* socket */
- &nbsp;                   int what,        /* see above */
- &nbsp;                   void *userp,     /* private callback pointer */
- &nbsp;                   void *socketp);  /* private socket pointer */
- <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+int socket_callback(CURL *easy,      /* easy handle */
+&nbsp;                   curl_socket_t s, /* socket */
+&nbsp;                   int what,        /* see above */
+&nbsp;                   void *userp,     /* private callback pointer */
+&nbsp;                   void *socketp);  /* private socket pointer */
+&nbsp;
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, socket_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">When the <span Class="emphasis">curl_multi_socket_action(3)</span> function runs, it informs the application about updates in the socket (file descriptor) status by doing none, one, or multiple calls to the <span Class="bold">socket_callback</span>. The callback gets status updates with changes since the previous time the callback 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="./CURLMOPT_SOCKETDATA.html">CURLMOPT_SOCKETDATA</a>.  See <span Class="emphasis">curl_multi_socket_action(3)</span> for more details on how the callback is used and should work. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -64,7 +71,7 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_SOCKETDATA.html">CURLMOPT_SOCKETDATA</a>, <span Class="manpage">  curl_multi_socket_action (3)</span> <span Class="manpage"> </span> <a Class="manpage" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</a>, 
+<p class="level0"><a Class="manpage" href="./CURLMOPT_SOCKETDATA.html">CURLMOPT_SOCKETDATA</a>, <span Class="manpage">curl_multi_socket_action (3)</span>, <a Class="manpage" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</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>
index ba60f53..3915f3e 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf and b/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf differ
index 41627da..9d2b66f 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 020e5b0..4cb6e27 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_TIMERDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,10 +52,11 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_TIMERDATA - custom pointer to pass to timer callback <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_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A data <span Class="bold">pointer</span> to pass to the timer callback set with the <a Class="emphasis" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</a> option. 
 <p class="level0">This pointer will not be touched by libcurl but will only be passed in to the timer callbacks's <span Class="bold">userp</span> argument. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</a>, <a Class="manpage" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_TIMERFUNCTION.html">CURLMOPT_TIMERFUNCTION</a>, <a Class="manpage" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a93b74d..7c3e21a 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf and b/docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf differ
index 809c3ef..7fcb7a5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -36,14 +36,21 @@ CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callbac
 Pass a pointer to your callback function, which should match the prototype
 shown above.
 
-This callback function will be called when the timeout value changes. The
-\fBtimeout_ms\fP 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 \fBtimeout_ms\fP value of
--1 means that there is no timeout at all, and 0 means that the timeout is
-already expired. libcurl attempts to limit calling this only when the fixed
-future timeout time actually changes.
+Certain features, such as timeouts and retries, require you to call libcurl
+even when there is no activity on the file descriptors.
+
+Your callback function \fBtimer_callback\fP should install a non-repeating
+timer with an interval of \fBtimeout_ms\fP. Each time that timer fires, call
+either \fIcurl_multi_socket_action(3)\fP or \fIcurl_multi_perform(3)\fP,
+depending on which interface you use.
+
+A \fBtimeout_ms\fP value of -1 means you should delete your timer.
+
+A \fBtimeout_ms\fP value of 0 means you should call
+\fIcurl_multi_socket_action(3)\fP or \fIcurl_multi_perform(3)\fP (once) as soon
+as possible.
+
+\fBtimer_callback\fP will only be called when the \fBtimeout_ms\fP changes.
 
 The \fBuserp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.
 
@@ -54,7 +61,38 @@ NULL
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+static gboolean timeout_cb(gpointer user_data) {
+    if (user_data) {
+        g_free(user_data);
+        curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
+    }
+    int running;
+    curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
+    return G_SOURCE_REMOVE;
+}
+
+static int timerfunc(CURLM *multi, long timeout_ms, void *userp) {
+    guint *id = userp;
+
+    if (id)
+        g_source_remove(*id);
+
+    // -1 means we should just delete our timer.
+    if (timeout_ms == -1) {
+        g_free(id);
+        id = NULL;
+    } else {
+        if (!id)
+            id = g_new(guint, 1);
+        *id = g_timeout_add(timeout_ms, timeout_cb, id);
+    }
+    curl_multi_setopt(multi, CURLMOPT_TIMERDATA, id);
+    return 0;
+}
+
+curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
+.fi
 .SH AVAILABILITY
 Added in 7.16.0
 .SH RETURN VALUE
index 800bb8f..abcc407 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLMOPT_TIMERFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,23 +52,62 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLMOPT_TIMERFUNCTION - set callback to receive timeout values <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">int timer_callback(CURLM *multi,    /* multi handle */
- &nbsp;                  long timeout_ms, /* see above */
- &nbsp;                  void *userp);    /* private callback pointer */
- <p class="level0">CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+int timer_callback(CURLM *multi,    /* multi handle */
+&nbsp;                  long timeout_ms, /* see above */
+&nbsp;                  void *userp);    /* private callback pointer */
+&nbsp;
+CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, timer_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
-<p class="level0">This callback function will be called when the timeout value changes. The <span Class="bold">timeout_ms</span> value is at what latest time the application should call one of the "performing" functions of the multi interface (<span Class="emphasis">curl_multi_socket_action(3)</span> and <span Class="emphasis">curl_multi_perform(3)</span>) - to allow libcurl to keep timeouts and retries etc to work. A <span Class="bold">timeout_ms</span> value of -1 means that there is no timeout at all, and 0 means that the timeout is already expired. libcurl attempts to limit calling this only when the fixed future timeout time actually changes. 
+<p class="level0">Certain features, such as timeouts and retries, require you to call libcurl even when there is no activity on the file descriptors. 
+<p class="level0">Your callback function <span Class="bold">timer_callback</span> should install a non-repeating timer with an interval of <span Class="bold">timeout_ms</span>. Each time that timer fires, call either <span Class="emphasis">curl_multi_socket_action(3)</span> or <span Class="emphasis">curl_multi_perform(3)</span>, depending on which interface you use. 
+<p class="level0">A <span Class="bold">timeout_ms</span> value of -1 means you should delete your timer. 
+<p class="level0">A <span Class="bold">timeout_ms</span> value of 0 means you should call <span Class="emphasis">curl_multi_socket_action(3)</span> or <span Class="emphasis">curl_multi_perform(3)</span> (once) as soon as possible. 
+<p class="level0"><span Class="bold">timer_callback</span> will only be called when the <span Class="bold">timeout_ms</span> changes. 
 <p class="level0">The <span Class="bold">userp</span> pointer is set with <a Class="emphasis" href="./CURLMOPT_TIMERDATA.html">CURLMOPT_TIMERDATA</a>. 
 <p class="level0">The timer callback should return 0 on success, and -1 on error. This callback can be used instead of, or in addition to, <span Class="emphasis">curl_multi_timeout(3)</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+static gboolean timeout_cb(gpointer user_data) {
+&nbsp;   if (user_data) {
+&nbsp;       g_free(user_data);
+&nbsp;       curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
+&nbsp;   }
+&nbsp;   int running;
+&nbsp;   curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
+&nbsp;   return G_SOURCE_REMOVE;
+}
+&nbsp;
+static int timerfunc(CURLM *multi, long timeout_ms, void *userp) {
+&nbsp;   guint *id = userp;
+&nbsp;
+&nbsp;   if (id)
+&nbsp;       g_source_remove(*id);
+&nbsp;
+&nbsp;   // -1 means we should just delete our timer.
+&nbsp;   if (timeout_ms == -1) {
+&nbsp;       g_free(id);
+&nbsp;       id = NULL;
+&nbsp;   } else {
+&nbsp;       if (!id)
+&nbsp;           id = g_new(guint, 1);
+&nbsp;       *id = g_timeout_add(timeout_ms, timeout_cb, id);
+&nbsp;   }
+&nbsp;   curl_multi_setopt(multi, CURLMOPT_TIMERDATA, id);
+&nbsp;   return 0;
+}
+&nbsp;
+curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_TIMERDATA.html">CURLMOPT_TIMERDATA</a>, <a Class="manpage" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_TIMERDATA.html">CURLMOPT_TIMERDATA</a>, <a Class="manpage" href="./CURLMOPT_SOCKETFUNCTION.html">CURLMOPT_SOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3db1c3e..314b859 100644 (file)
Binary files a/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf and b/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf differ
index a51c86a..70325fd 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -31,11 +31,21 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms);
 Pass a long telling libcurl the maximum number of milliseconds to wait for a
 server to connect back to libcurl when an active FTP connection is used.
 .SH DEFAULT
-If no timeout is set, the internal default of 60000 (one minute) will be used.
+60000 milliseconds
 .SH PROTOCOLS
 FTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file");
+
+  /* wait no more than 5 seconds for FTP server responses */
+  curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Added in 7.24.0
 .SH RETURN VALUE
index 3b84a4d..e303e9c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_ACCEPTTIMEOUT_MS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,26 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_ACCEPTTIMEOUT_MS - timeout waiting for FTP server to connect back <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long telling libcurl the maximum number of milliseconds to wait for a server to connect back to libcurl when an active FTP connection is used. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">If no timeout is set, the internal default of 60000 (one minute) will be used. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">60000 milliseconds <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file");
+&nbsp;
+&nbsp; /* wait no more than 5 seconds for FTP server responses */
+&nbsp; curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.24.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4a5af84..f34299f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf and b/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf differ
index 376799a..de3bc74 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -52,7 +52,18 @@ NULL
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* enable all supported built-in compressions */
+  curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
+
+  /* Perform the request */
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 This option was called CURLOPT_ENCODING before 7.21.6
 .SH RETURN VALUE
index 0f4aab4..dd9650a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_ACCEPT_ENCODING man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_ACCEPT_ENCODING - enables automatic decompression of HTTP downloads <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * argument specifying what encoding you'd like. 
 <p class="level0">Sets the contents of the Accept-Encoding: header sent in a 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. 
@@ -56,9 +61,22 @@ p.roffit {
 <p class="level0">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 further details. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* enable all supported built-in compressions */
+&nbsp; curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This option was called CURLOPT_ENCODING before 7.21.6 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TRANSFER_ENCODING.html">CURLOPT_TRANSFER_ENCODING</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_HTTP_CONTENT_DECODING.html">CURLOPT_HTTP_CONTENT_DECODING</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TRANSFER_ENCODING.html">CURLOPT_TRANSFER_ENCODING</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_HTTP_CONTENT_DECODING.html">CURLOPT_HTTP_CONTENT_DECODING</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 33acf13..cf2e924 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf and b/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf differ
index 510e3b3..f323279 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index d79833c..b84aede 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_ADDRESS_SCOPE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_ADDRESS_SCOPE - set scope for local IPv6 addresses <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long specifying the scope_id value to use when connecting to IPv6 link-local or site-local addresses. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 883842c..36ace4e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf and b/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf differ
index 0352296..c22acf7 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -28,17 +28,28 @@ CURLOPT_APPEND \- enable appending to the remote file
 
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append);
 .SH DESCRIPTION
-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.
+A long 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.
 .SH DEFAULT
-0
+0 (disabled)
 .SH PROTOCOLS
 FTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+
+  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
+  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+  curl_easy_setopt(curl, CURLOPT_APPEND, 1L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 This option was known as CURLOPT_FTPAPPEND up to 7.16.4
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
 .BR CURLOPT_DIRLISTONLY "(3), " CURLOPT_RESUME_FROM "(3), "
+.BR CURLOPT_UPLOAD "(3), "
index 32cef5a..274e6d0 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_APPEND man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,26 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_APPEND - enable appending to the remote file <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">A long 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 (disabled) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
+&nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+&nbsp; curl_easy_setopt(curl, CURLOPT_APPEND, 1L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This option was known as CURLOPT_FTPAPPEND up to 7.16.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DIRLISTONLY.html">CURLOPT_DIRLISTONLY</a>, <a Class="manpage" href="./CURLOPT_RESUME_FROM.html">CURLOPT_RESUME_FROM</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DIRLISTONLY.html">CURLOPT_DIRLISTONLY</a>, <a Class="manpage" href="./CURLOPT_RESUME_FROM.html">CURLOPT_RESUME_FROM</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 698e1f4..1b84c35 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_APPEND.pdf and b/docs/libcurl/opts/CURLOPT_APPEND.pdf differ
index f8d5668..e6a3a08 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f7cf20c..6ce41a3 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_AUTOREFERER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_AUTOREFERER - automatically update the referer header <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a parameter set to 1 to enable this. When enabled, libcurl will automatically set the Referer: header field in HTTP requests where it follows a Location: redirect. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_REFERER.html">CURLOPT_REFERER</a>, <a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_REFERER.html">CURLOPT_REFERER</a>, <a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5cf16c0..95e0257 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf and b/docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf differ
index 9e31ae9..07806b7 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 265f841..a98710b 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_BUFFERSIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_BUFFERSIZE - set preferred receive buffer size <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long specifying your preferred <span Class="emphasis">size</span> (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. 
 <p class="level0">This size is by default set as big as possible (<span Class="emphasis">CURL_MAX_WRITE_SIZE</span>), so it only makes sense to use this option if you want it smaller. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><span Class="manpage">CURLOPT_MAX_RECV_SPEED (3)</span> <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><span Class="manpage">CURLOPT_MAX_RECV_SPEED (3)</span>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b63d18f..6064254 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf and b/docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf differ
index cb7f47b..a05f5c0 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -43,11 +43,12 @@ If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
 .SH DEFAULT
 Built-in system specific
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-If built TLS enabled
+For SSL engines that don't support certificate files the CURLOPT_CAINFO option
+is ignored. Refer to https://curl.haxx.se/docs/ssl-compared.html
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 CURLE_OUT_OF_MEMORY if there was insufficient heap space.
index 528da91..fac7960 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CAINFO man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,17 +52,17 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CAINFO - path to Certificate Authority (CA) bundle <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a zero terminated string naming a file holding one or more certificates to verify the peer with. 
 <p class="level0">If <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> is zero and you avoid verifying the server's certificate, <a Class="emphasis" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a> need not even indicate an accessible file. 
 <p class="level0">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="level0">If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module (libnsspem.so) needs to be available for this option to work properly. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">If curl is built against the NSS SSL library, the NSS PEM PKCS&#35;11 module (libnsspem.so) needs to be available for this option to work properly. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Built-in system specific <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">If built TLS enabled <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">For SSL engines that don't support certificate files the CURLOPT_CAINFO option is ignored. Refer to <a href="https://curl.haxx.se/docs/ssl-compared.html">https://curl.haxx.se/docs/ssl-compared.html</a> <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CAPATH.html">CURLOPT_CAPATH</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CAPATH.html">CURLOPT_CAPATH</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 572a5d4..f096e99 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CAINFO.pdf and b/docs/libcurl/opts/CURLOPT_CAINFO.pdf differ
index 642953d..0369f89 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -39,13 +39,12 @@ to some limitation in openssl.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-This option is OpenSSL-specific and does nothing if libcurl is built to use
-GnuTLS. NSS-powered libcurl provides the option only for backward
-compatibility.
+This option is supported by the OpenSSL, GnuTLS and PolarSSL backends. The NSS
+backend provides the option only for backward compatibility.
 .SH RETURN VALUE
 Returns CURLE_OK if TLS enabled, and CURLE_UNKNOWN_OPTION if not, or
 CURLE_OUT_OF_MEMORY if there was insufficient heap space.
index a9cdb27..8083872 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CAPATH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,15 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CAPATH - specify directory holding CA certificates <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a zero terminated string naming a directory holding multiple CA certificates to verify the peer with. If libcurl is built against OpenSSL, 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="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> option. 
 <p class="level0">The <a Class="emphasis" href="./CURLOPT_CAPATH.html">CURLOPT_CAPATH</a> function apparently does not work in Windows due to some limitation in openssl. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">This option is OpenSSL-specific and does nothing if libcurl is built to use GnuTLS. NSS-powered libcurl provides the option only for backward compatibility. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">This option is supported by the OpenSSL, GnuTLS and PolarSSL backends. The NSS backend provides the option only for backward compatibility. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS enabled, and CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a>, <a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5dbdc97..47ce121 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CAPATH.pdf and b/docs/libcurl/opts/CURLOPT_CAPATH.pdf differ
index 8c01711..e836e40 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -29,11 +29,10 @@ CURLOPT_CERTINFO \- request SSL certificate information
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);
 .SH DESCRIPTION
 Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With
-this enabled, libcurl (if built with OpenSSL, NSS or GSKit) will
-extract lots of information and data about the certificates in the certificate
-chain used in the SSL connection. This data may then be retrieved after a
-transfer using \fIcurl_easy_getinfo(3)\fP and its option
-\fICURLINFO_CERTINFO\fP.
+this enabled, libcurl will extract lots of information and data about the
+certificates in the certificate chain used in the SSL connection. This data
+may then be retrieved after a transfer using \fIcurl_easy_getinfo(3)\fP and
+its option \fICURLINFO_CERTINFO(3)\fP.
 .SH DEFAULT
 0
 .SH PROTOCOLS
@@ -41,7 +40,7 @@ All TLS-based
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-Added in 7.19.1
+This option is supported by the OpenSSL, GnuTLS, NSS and GSKit backends.
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index ae19dd6..ecf4d51 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CERTINFO man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CERTINFO - request SSL certificate information <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With this enabled, libcurl (if built with OpenSSL, NSS or GSKit) will extract lots of information and data about the certificates in the certificate chain used in the SSL connection. This data may then be retrieved after a transfer using <span Class="emphasis">curl_easy_getinfo(3)</span> and its option <span Class="emphasis">CURLINFO_CERTINFO</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With this enabled, libcurl will extract lots of information and data about the certificates in the certificate chain used in the SSL connection. This data may then be retrieved after a transfer using <span Class="emphasis">curl_easy_getinfo(3)</span> and its option <a Class="emphasis" href="./CURLINFO_CERTINFO.html">CURLINFO_CERTINFO</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All TLS-based <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Added in 7.19.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">This option is supported by the OpenSSL, GnuTLS, NSS and GSKit backends. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9e7273e..9be76ce 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CERTINFO.pdf and b/docs/libcurl/opts/CURLOPT_CERTINFO.pdf differ
index 4dd7907..d31412d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 2721d5b..2fd9526 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CHUNK_BGN_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,13 +52,15 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CHUNK_BGN_FUNCTION - callback before a transfer with FTP wildcardmatch <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">long chunk_bgn_callback(const void *transfer_info, void *ptr,
- &nbsp;                       int remains);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_BGN_FUNCTION,
- &nbsp;                         chunk_bgn_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+long chunk_bgn_callback(const void *transfer_info, void *ptr,
+&nbsp;                       int remains);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_BGN_FUNCTION,
+&nbsp;                         chunk_bgn_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">This callback function gets called by libcurl before a part of the stream is going to be transferred (if the transfer supports chunks). 
@@ -66,6 +73,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This was added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CHUNK_END_FUNCTION.html">CURLOPT_CHUNK_END_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CHUNK_END_FUNCTION.html">CURLOPT_CHUNK_END_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9a97a66..4ae2f9f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf differ
index abdbc3a..cd913f5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -29,8 +29,8 @@ CURLOPT_CHUNK_DATA \- custom pointer to the FTP chunk callbacks
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer);
 .SH DESCRIPTION
 Pass a \fIpointer\fP that will be untouched by libcurl and passed as the ptr
-argument to the \fICURL_CHUNK_BGN_FUNTION(3)\fP and
-\fICURL_CHUNK_END_FUNTION(3)\fP.
+argument to the \fICURL_CHUNK_BGN_FUNCTION(3)\fP and
+\fICURL_CHUNK_END_FUNCTION(3)\fP.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
index 701d1a4..a464def 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CHUNK_DATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CHUNK_DATA - custom pointer to the FTP chunk callbacks <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the ptr argument to the <span Class="emphasis">CURL_CHUNK_BGN_FUNTION(3)</span> and <span Class="emphasis">CURL_CHUNK_END_FUNTION(3)</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the ptr argument to the <span Class="emphasis">CURL_CHUNK_BGN_FUNCTION(3)</span> and <span Class="emphasis">CURL_CHUNK_END_FUNCTION(3)</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CHUNK_BGN_FUNCTION.html">CURLOPT_CHUNK_BGN_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CHUNK_BGN_FUNCTION.html">CURLOPT_CHUNK_BGN_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 11e8735..7ef683f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf and b/docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf differ
index 64f829c..d2b6c55 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6322c73..e2e0093 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CHUNK_END_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CHUNK_END_FUNCTION - callback after a transfer with FTP wildcardmatch <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">long chunk_end_callback(void *ptr);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_END_FUNCTION,
- &nbsp;                         chunk_end_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+long chunk_end_callback(void *ptr);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_END_FUNCTION,
+&nbsp;                         chunk_end_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">This function gets called by libcurl as soon as a part of the stream has been transferred (or skipped). 
@@ -62,6 +69,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a>, <a Class="manpage" href="./CURLOPT_CHUNK_BGN_FUNCTION.html">CURLOPT_CHUNK_BGN_FUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a>, <a Class="manpage" href="./CURLOPT_CHUNK_BGN_FUNCTION.html">CURLOPT_CHUNK_BGN_FUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f9dfde6..9b422f6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf differ
index b8af353..1d6ca06 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 44fa4ff..e8c934f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CLOSESOCKETDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CLOSESOCKETDATA - pointer passed to the socket close callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the first argument in the closesocket callback set with <a Class="emphasis" href="./CURLOPT_CLOSESOCKETFUNCTION.html">CURLOPT_CLOSESOCKETFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value of this parameter is NULL. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.7 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CLOSESOCKETFUNCTION.html">CURLOPT_CLOSESOCKETFUNCTION</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CLOSESOCKETFUNCTION.html">CURLOPT_CLOSESOCKETFUNCTION</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7d78bda..0591a17 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf and b/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf differ
index 2594b16..f4e8bd9 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 1b004a1..c77fd18 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CLOSESOCKETFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CLOSESOCKETFUNCTION - callback to socket close replacement function <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">int closesocket_callback(void *clientp, curl_socket_t item); 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETFUNCTION, closesocket_callback); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
@@ -58,6 +63,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.7 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CLOSESOCKETDATA.html">CURLOPT_CLOSESOCKETDATA</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CLOSESOCKETDATA.html">CURLOPT_CLOSESOCKETDATA</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 19edee5..73f73c6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf differ
index 5005b59..f186948 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -41,7 +41,17 @@ In unix-like systems, this might cause signals to be used unless
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* complete connection within 10 seconds */
+  curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 97ca35b..f8e1308 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CONNECTTIMEOUT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,27 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CONNECTTIMEOUT - timeout for the connect phase <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. It should contain the maximum time in seconds that you allow the connection phase to the server to take.  This only limits the connection phase, it has no impact once it has connected. Set to zero to switch to the default built-in connection timeout - 300 seconds. See also the <a Class="emphasis" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a> option. 
 <p class="level0">In unix-like systems, this might cause signals to be used unless <a Class="emphasis" href="./CURLOPT_NOSIGNAL.html">CURLOPT_NOSIGNAL</a> is set. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">300 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* complete connection within 10 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index cdf8c4f..92ceb5b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf and b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf differ
index dd5ef58..7a24a8b 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -41,7 +41,17 @@ In unix-like systems, this might cause signals to be used unless
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* complete connection within 10000 milliseconds */
+  curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 91b2c9a..8f265f5 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CONNECTTIMEOUT_MS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,27 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CONNECTTIMEOUT_MS - timeout for the connect phase <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, long timeout); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. It should contain the maximum time in milliseconds that you allow the connection phase to the server to take.  This only limits the connection phase, it has no impact once it has connected. Set to zero to switch to the default built-in connection timeout - 300 seconds. See also the <a Class="emphasis" href="./CURLOPT_TIMEOUT_MS.html">CURLOPT_TIMEOUT_MS</a> option. 
 <p class="level0">In unix-like systems, this might cause signals to be used unless <a Class="emphasis" href="./CURLOPT_NOSIGNAL.html">CURLOPT_NOSIGNAL</a> is set. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">300000 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* complete connection within 10000 milliseconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 0a001f5..fa49544 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf and b/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf differ
index afb3cfd..61289e8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -33,7 +33,7 @@ the required proxy authentication and connection setup, but no data transfer,
 and then return.
 
 The option can be used to simply test a connection to a server, but is more
-useful when used with the \fICURLINFO_LASTSOCKET\fP option to
+useful when used with the \fICURLINFO_ACTIVESOCKET(3)\fP option to
 \fIcurl_easy_getinfo(3)\fP as the library can set up the connection and then
 the application can obtain the most recently used socket for special data
 transfers.
index a0fda31..e7e74fc 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CONNECT_ONLY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,15 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CONNECT_ONLY - stop when connected to target server <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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, and then return. 
-<p class="level0">The option can be used to simply test a connection to a server, but is more useful when used with the <span Class="emphasis">CURLINFO_LASTSOCKET</span> option to <span Class="emphasis">curl_easy_getinfo(3)</span> as the library can set up the connection and then the application can obtain the most recently used socket for special data transfers. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">The option can be used to simply test a connection to a server, but is more useful when used with the <a Class="emphasis" href="./CURLINFO_ACTIVESOCKET.html">CURLINFO_ACTIVESOCKET</a> option to <span Class="emphasis">curl_easy_getinfo(3)</span> as the library can set up the connection and then the application can obtain the most recently used socket for special data transfers. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, SMTP, POP3 and IMAP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 969689b..0246e99 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf and b/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf differ
index ebc4d77..1ff300e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index dea2c03..823ee76 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CONV_FROM_NETWORK_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CONV_FROM_NETWORK_FUNCTION - convert data from network to host encoding <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">CURLcode conv_callback(char *ptr, size_t length);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
- &nbsp;                         conv_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode conv_callback(char *ptr, size_t length);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
+&nbsp;                         conv_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">Applies to non-ASCII platforms. <span Class="emphasis">curl_version_info(3)</span> will return the CURL_VERSION_CONV feature bit set if this option is provided. 
@@ -60,16 +67,16 @@ p.roffit {
 <p class="level0"><span Class="bold">CURLOPT_CONV_FROM_NETWORK_FUNCTION</span> converts to host encoding from the network encoding.  It is used when commands or ASCII data are received over the network. 
 <p class="level0">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="level0">If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. For example: 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_OF_HOST "IBM-1047" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_OF_HOST "IBM-1047" 
 <p class="level0">The iconv code in libcurl will default the network and UTF8 codeset names as follows: 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8" 
 <p class="level0">You will need to override these definitions if they are different on your system. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP, SMTP, IMAP, POP3 <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Available only if <span Class="bold">CURL_DOES_CONVERSIONS</span> was defined when libcurl was built. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_TO_NETWORK_FUNCTION.html">CURLOPT_CONV_TO_NETWORK_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_CONV_FROM_UTF8_FUNCTION.html">CURLOPT_CONV_FROM_UTF8_FUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_TO_NETWORK_FUNCTION.html">CURLOPT_CONV_TO_NETWORK_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_CONV_FROM_UTF8_FUNCTION.html">CURLOPT_CONV_FROM_UTF8_FUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2b9d62c..651a951 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf differ
index 682e1c5..487492c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 2ed2c13..d3b1a46 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CONV_FROM_UTF8_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CONV_FROM_UTF8_FUNCTION - convert data from UTF8 to host encoding <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">CURLcode conv_callback(char *ptr, size_t length);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_UTF8_FUNCTION,
- &nbsp;                         conv_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode conv_callback(char *ptr, size_t length);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_UTF8_FUNCTION,
+&nbsp;                         conv_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">Applies to non-ASCII platforms. <span Class="emphasis">curl_version_info(3)</span> will return the CURL_VERSION_CONV feature bit set if this option is provided. 
@@ -60,16 +67,16 @@ p.roffit {
 <p class="level0"><span Class="bold">CURLOPT_CONV_FROM_UTF8_FUNCTION</span> converts to host encoding from UTF8 encoding. It is required only for SSL processing. 
 <p class="level0">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="level0">If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. For example: 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_OF_HOST "IBM-1047" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_OF_HOST "IBM-1047" 
 <p class="level0">The iconv code in libcurl will default the network and UTF8 codeset names as follows: 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8" 
 <p class="level0">You will need to override these definitions if they are different on your system. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">TLS-based protocols. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Available only if <span Class="bold">CURL_DOES_CONVERSIONS</span> was defined when libcurl was built. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_TO_NETWORK_FUNCTION.html">CURLOPT_CONV_TO_NETWORK_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_CONV_FROM_NETWORK_FUNCTION.html">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_TO_NETWORK_FUNCTION.html">CURLOPT_CONV_TO_NETWORK_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_CONV_FROM_NETWORK_FUNCTION.html">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index dfa30c3..e6691bb 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf differ
index e8817f8..7d23b53 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 40f8c2d..2966ab7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CONV_TO_NETWORK_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CONV_TO_NETWORK_FUNCTION - convert data to network from host encoding <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">CURLcode conv_callback(char *ptr, size_t length);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION,
- &nbsp;                         conv_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode conv_callback(char *ptr, size_t length);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION,
+&nbsp;                         conv_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">Applies to non-ASCII platforms. <span Class="emphasis">curl_version_info(3)</span> will return the CURL_VERSION_CONV feature bit set if this option is provided. 
@@ -60,16 +67,16 @@ p.roffit {
 <p class="level0"><span Class="bold">CURLOPT_CONV_TO_NETWORK_FUNCTION</span> converts from host encoding to the network encoding.  It is used when commands or ASCII data are sent over the network. 
 <p class="level0">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="level0">If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined. For example: 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_OF_HOST "IBM-1047" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_OF_HOST "IBM-1047" 
 <p class="level0">The iconv code in libcurl will default the network and UTF8 codeset names as follows: 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" 
-<p class="level0">&nbsp;#define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1" 
+<p class="level0">&nbsp;&#35;define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8" 
 <p class="level0">You will need to override these definitions if they are different on your system. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP, SMTP, IMAP, POP3 <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Available only if <span Class="bold">CURL_DOES_CONVERSIONS</span> was defined when libcurl was built. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_FROM_NETWORK_FUNCTION.html">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a>, <span Class="manpage">  CURLOPT_CONV_TO_UTF8_FUNCTION (3)</span> <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_FROM_NETWORK_FUNCTION.html">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a>, <span Class="manpage">CURLOPT_CONV_TO_UTF8_FUNCTION (3)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 18cf2d5..3f62186 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf differ
index 379296a..32c2fc2 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -40,6 +40,15 @@ This option sets the cookie header explicitly 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.
 
+The cookies set by this option are separate from the internal cookie storage
+held by the cookie engine and will not be modified by it. If you enable the
+cookie engine and either you've imported a cookie of the same name (e.g. 'foo')
+or the server has set one, it will have no effect on the cookies you set here.
+A request to the server will send both the 'foo' held by the cookie engine and
+the 'foo' held by this option. To set a cookie that is instead held by the
+cookie engine and can be modified by the server use
+\fICURLOPT_COOKIELIST(3)\fP.
+
 Using this option multiple times will only make the latest string override the
 previous ones.
 
@@ -51,7 +60,16 @@ NULL, no cookies
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  curl_easy_setopt(curl, CURLOPT_COOKIE, "tool=curl; fun=yes;");
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 If HTTP is enabled
 .SH RETURN VALUE
index df42e64..b1f55d1 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_COOKIE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,18 +52,30 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_COOKIE - set contents of HTTP Cookie header <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="level0">If you need to set multiple cookies, set them all using a single option concatenated like this: "name1=content1; name2=content2;" etc. 
 <p class="level0">This option sets the cookie header explicitly 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="level0">The cookies set by this option are separate from the internal cookie storage held by the cookie engine and will not be modified by it. If you enable the cookie engine and either you've imported a cookie of the same name (e.g. 'foo') or the server has set one, it will have no effect on the cookies you set here. A request to the server will send both the 'foo' held by the cookie engine and the 'foo' held by this option. To set a cookie that is instead held by the cookie engine and can be modified by the server use <a Class="emphasis" href="./CURLOPT_COOKIELIST.html">CURLOPT_COOKIELIST</a>. 
 <p class="level0">Using this option multiple times will only make the latest string override the previous ones. 
 <p class="level0">This option will not enable the cookie engine. Use <a Class="emphasis" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a> or <a Class="emphasis" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a> to enable parsing and sending cookies automatically. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL, no cookies <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_COOKIE, "tool=curl; fun=yes;");
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If HTTP is enabled <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is enabled, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a>, <a Class="manpage" href="./CURLOPT_COOKIELIST.html">CURLOPT_COOKIELIST</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a>, <a Class="manpage" href="./CURLOPT_COOKIELIST.html">CURLOPT_COOKIELIST</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3a7edbc..addd127 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_COOKIE.pdf and b/docs/libcurl/opts/CURLOPT_COOKIE.pdf differ
index a4c3b02..00816b1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -30,8 +30,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename);
 .SH DESCRIPTION
 Pass a pointer to a zero terminated string as parameter. It should point to
 the file name of your file holding cookie data to read. The cookie data can be
-in either the old Netscape / Mozilla cookie data format or just regular
-HTTP-style headers dumped to a file.
+in either the old Netscape / Mozilla cookie data format or just regular HTTP
+headers (Set-Cookie style) dumped to a file.
 
 It also enables the cookie engine, making libcurl parse and send cookies on
 subsequent requests with this handle.
@@ -43,6 +43,14 @@ cookies.
 This option only \fBreads\fP cookies. To make libcurl write cookies to file,
 see \fICURLOPT_COOKIEJAR(3)\fP.
 
+Exercise caution if you are using this option and multiple transfers may occur.
+If you use the Set-Cookie format and don't specify a domain then the cookie is
+sent for any domain (even after redirects are followed) and cannot be modified
+by a server-set cookie. If a server sets a cookie of the same name then both
+will be sent on a future transfer to that server, likely not what you intended.
+To address these issues set a domain in Set-Cookie (doing that will include
+sub-domains) or use the Netscape format.
+
 If you use this option multiple times, you just add more files to read.
 Subsequent files will add more cookies.
 .SH DEFAULT
index 10539bc..65a4c49 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_COOKIEFILE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,18 +52,19 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_COOKIEFILE - file name to read cookies from <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a pointer to a zero terminated string as parameter. It should point to the file name of your file holding cookie data to read. The cookie data can be in either the old Netscape / Mozilla cookie data format or just regular HTTP-style headers dumped to a file. 
+<p class="level0">Pass a pointer to a zero terminated string as parameter. It should point to the file name of your file holding cookie data to read. The cookie data can be in either the old Netscape / Mozilla cookie data format or just regular HTTP headers (Set-Cookie style) dumped to a file. 
 <p class="level0">It also enables the cookie engine, making libcurl parse and send cookies on subsequent requests with this handle. 
 <p class="level0">Given an empty or non-existing file or by passing the empty string ("") to this option, you can enable the cookie engine without reading any initial cookies. 
 <p class="level0">This option only <span Class="bold">reads</span> cookies. To make libcurl write cookies to file, see <a Class="emphasis" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a>. 
+<p class="level0">Exercise caution if you are using this option and multiple transfers may occur. If you use the Set-Cookie format and don't specify a domain then the cookie is sent for any domain (even after redirects are followed) and cannot be modified by a server-set cookie. If a server sets a cookie of the same name then both will be sent on a future transfer to that server, likely not what you intended. To address these issues set a domain in Set-Cookie (doing that will include sub-domains) or use the Netscape format. 
 <p class="level0">If you use this option multiple times, you just add more files to read. Subsequent files will add more cookies. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">As long as HTTP is supported <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="manpage" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="manpage" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9e0064c..7686036 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf and b/docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf differ
index 936d4d8..79a3723 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -43,6 +43,9 @@ If the cookie jar file can't be created or written to (when the
 error for this. Using \fICURLOPT_VERBOSE(3)\fP or
 \fICURLOPT_DEBUGFUNCTION(3)\fP will get a warning to display, but that is the
 only visible feedback you get about this possibly lethal situation.
+
+Since 7.43.0 cookies that were imported in the Set-Cookie format without a
+domain name are not exported by this option.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
@@ -55,4 +58,5 @@ Along with HTTP
 Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or
 CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 .SH "SEE ALSO"
-.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIE "(3), " CURLOPT_COOKIELIST "(3), "
+.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIE "(3), "
+.BR CURLOPT_COOKIELIST "(3), "
index a4f45bf..568d92e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_COOKIEJAR man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,17 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_COOKIEJAR - file name to store cookies to <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">filename</span> as char *, zero terminated. This will make libcurl write all internally known cookies to the specified file when <span Class="emphasis">curl_easy_cleanup(3)</span> is called. If no cookies are known, no file will be created. Specify "-" as filename 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="level0">Note that libcurl doesn't read any cookies from the cookie jar. If you want to read cookies from a file, use <a Class="emphasis" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>. 
-<p class="level0">If the cookie jar file can't be created or written to (when the <span Class="emphasis">curl_easy_cleanup(3)</span> is called), libcurl will not and cannot report an error for this. Using <a Class="emphasis" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a> or <a Class="emphasis" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a> will get a warning to display, but that is the only visible feedback you get about this possibly lethal situation. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">If the cookie jar file can't be created or written to (when the <span Class="emphasis">curl_easy_cleanup(3)</span> is called), libcurl will not and cannot report an error for this. Using <a Class="emphasis" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a> or <a Class="emphasis" href="./CURLOPT_DEBUGFUNCTION.html">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">Since 7.43.0 cookies that were imported in the Set-Cookie format without a domain name are not exported by this option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="manpage" href="./CURLOPT_COOKIELIST.html">CURLOPT_COOKIELIST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="manpage" href="./CURLOPT_COOKIELIST.html">CURLOPT_COOKIELIST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c0626bd..739b228 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf and b/docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf differ
index 815def1..088d2f7 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -36,6 +36,15 @@ Such a cookie can be either a single line in Netscape / Mozilla format or just
 regular HTTP-style header (Set-Cookie: ...) format. This will also enable the
 cookie engine. This adds that single cookie to the internal cookie store.
 
+Exercise caution if you are using this option and multiple transfers may occur.
+If you use the Set-Cookie format and don't specify a domain then the cookie is
+sent for any domain (even after redirects are followed) and cannot be modified
+by a server-set cookie. If a server sets a cookie of the same name (or maybe
+you've imported one) then both will be sent on a future transfer to that
+server, likely not what you intended. To address these issues set a domain in
+Set-Cookie (doing that will include sub-domains) or use the Netscape format as
+shown in EXAMPLE.
+
 Additionally, there are commands available that perform actions if you pass in
 these exact strings:
 .IP ALL
@@ -55,7 +64,46 @@ NULL
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
-TODO
+.nf
+/* This example shows an inline import of a cookie in Netscape format.
+You can set the cookie as HttpOnly to prevent XSS attacks by prepending
+#HttpOnly_ to the hostname. That may be useful if the cookie will later
+be imported by a browser.
+*/
+
+#define SEP  "\\t"  /* Tab separates the fields */
+
+char *my_cookie =
+  "example.com"    /* Hostname */
+  SEP "FALSE"      /* Include subdomains */
+  SEP "/"          /* Path */
+  SEP "FALSE"      /* Secure */
+  SEP "0"          /* Expiry in epoch time format. 0 == Session */
+  SEP "foo"        /* Name */
+  SEP "bar";       /* Value */
+
+/* my_cookie is imported immediately via CURLOPT_COOKIELIST.
+*/
+curl_easy_setopt(curl, CURLOPT_COOKIELIST, my_cookie);
+
+/* The list of cookies in cookies.txt will not be imported until right
+before a transfer is performed. Cookies in the list that have the same
+hostname, path and name as in my_cookie are skipped. That is because
+libcurl has already imported my_cookie and it's considered a "live"
+cookie. A live cookie won't be replaced by one read from a file.
+*/
+curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt");  /* import */
+
+/* Cookies are exported after curl_easy_cleanup is called. The server
+may have added, deleted or modified cookies by then. The cookies that
+were skipped on import are not exported.
+*/
+curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");  /* export */
+
+res = curl_easy_perform(curl);  /* cookies imported from cookies.txt */
+
+curl_easy_cleanup(curl);  /* cookies exported to cookies.txt */
+.fi
 .SH AVAILABILITY
 ALL was added in 7.14.1
 
@@ -68,4 +116,5 @@ RELOAD was added in 7.39.0
 Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 .SH "SEE ALSO"
-.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIEJAR "(3), "  CURLOPT_COOKIE "(3), "
+.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIEJAR "(3), " CURLOPT_COOKIE "(3), "
+.BR CURLINFO_COOKIELIST "(3), "
index 382eb60..798d6ad 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_COOKIELIST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_COOKIELIST - add to or manipulate cookies held in memory <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIELIST,
- &nbsp;                         char *cookie);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIELIST,
+&nbsp;                         char *cookie);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a <span Class="emphasis">cookie</span> string. 
 <p class="level0">Such a cookie can be either a single line in Netscape / Mozilla format or just regular HTTP-style header (Set-Cookie: ...) format. This will also enable the cookie engine. This adds that single cookie to the internal cookie store. 
+<p class="level0">Exercise caution if you are using this option and multiple transfers may occur. If you use the Set-Cookie format and don't specify a domain then the cookie is sent for any domain (even after redirects are followed) and cannot be modified by a server-set cookie. If a server sets a cookie of the same name (or maybe you've imported one) then both will be sent on a future transfer to that server, likely not what you intended. To address these issues set a domain in Set-Cookie (doing that will include sub-domains) or use the Netscape format as shown in EXAMPLE. 
 <p class="level0">Additionally, there are commands available that perform actions if you pass in these exact strings: 
 <p class="level0"><a name="ALL"></a><span class="nroffip">ALL</span> 
 <p class="level1">erases all cookies held in memory 
@@ -70,12 +77,53 @@ p.roffit {
 <p class="level1"><a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+/* This example shows an inline import of a cookie in Netscape format.
+You can set the cookie as HttpOnly to prevent XSS attacks by prepending
+&#35;HttpOnly_ to the hostname. That may be useful if the cookie will later
+be imported by a browser.
+*/
+&nbsp;
+&#35;define SEP  "\t"  /* Tab separates the fields */
+&nbsp;
+char *my_cookie =
+&nbsp; "example.com"    /* Hostname */
+&nbsp; SEP "FALSE"      /* Include subdomains */
+&nbsp; SEP "/"          /* Path */
+&nbsp; SEP "FALSE"      /* Secure */
+&nbsp; SEP "0"          /* Expiry in epoch time format. 0 == Session */
+&nbsp; SEP "foo"        /* Name */
+&nbsp; SEP "bar";       /* Value */
+&nbsp;
+/* my_cookie is imported immediately via CURLOPT_COOKIELIST.
+*/
+curl_easy_setopt(curl, CURLOPT_COOKIELIST, my_cookie);
+&nbsp;
+/* The list of cookies in cookies.txt will not be imported until right
+before a transfer is performed. Cookies in the list that have the same
+hostname, path and name as in my_cookie are skipped. That is because
+libcurl has already imported my_cookie and it's considered a "live"
+cookie. A live cookie won't be replaced by one read from a file.
+*/
+curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt");  /* import */
+&nbsp;
+/* Cookies are exported after curl_easy_cleanup is called. The server
+may have added, deleted or modified cookies by then. The cookies that
+were skipped on import are not exported.
+*/
+curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");  /* export */
+&nbsp;
+res = curl_easy_perform(curl);  /* cookies imported from cookies.txt */
+&nbsp;
+curl_easy_cleanup(curl);  /* cookies exported to cookies.txt */
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">ALL was added in 7.14.1 
 <p class="level0">SESS was added in 7.15.4 
 <p class="level0">FLUSH was added in 7.17.1 
 <p class="level0">RELOAD was added in 7.39.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a>, <a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIEJAR.html">CURLOPT_COOKIEJAR</a>, <a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="manpage" href="./CURLINFO_COOKIELIST.html">CURLINFO_COOKIELIST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 896acd6..9d45dd0 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_COOKIELIST.pdf and b/docs/libcurl/opts/CURLOPT_COOKIELIST.pdf differ
index 0d56076..ecc3757 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 4231e9d..5949d6d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_COOKIESESSION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_COOKIESESSION - start a new cookie session <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 "session" is usually defined in browser land for as long as you have your browser up, more or less. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIEFILE.html">CURLOPT_COOKIEFILE</a>, <a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 92a3c9f..7cfd0a6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf and b/docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf differ
index d35aebd..001d6fe 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f2b7a0a..bf62903 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_COPYPOSTFIELDS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,28 +52,31 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_COPYPOSTFIELDS - have libcurl copy data to POST <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be the full <span Class="emphasis">data</span> to post in a HTTP POST operation. It behaves as the <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> option, but the original data is instead copied by the library, allowing the application to overwrite the original data after setting this option. 
 <p class="level0">Because data are copied, care must be taken when using this option in conjunction with <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a> or <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE_LARGE.html">CURLOPT_POSTFIELDSIZE_LARGE</a>: If the size has not been set prior to <a Class="emphasis" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a>, the data is assumed to be a zero terminated string; else the stored size informs the library about the byte count to copy. In any case, the size must not be changed after <a Class="emphasis" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a>, unless another <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> or <a Class="emphasis" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a> option is issued. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; char local_buffer[1024]="data to send";
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* size of the data to copy from the buffer and send in the request */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
- <p class="level0">&nbsp; /* send data from the local stack */
- &nbsp; curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer);
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; char local_buffer[1024]="data to send";
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* size of the data to copy from the buffer and send in the request */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
+&nbsp;
+&nbsp; /* send data from the local stack */
+&nbsp; curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.17.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f376e17..5ebe3a2 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf and b/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf differ
index 32d8b79..b13a06e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c3f7e9b..aea1aa0 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CRLF man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CRLF - enable/disable CRLF conversion <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If the value is set to 1 (one), libcurl converts Unix newlines to CRLF newlines on transfers. Disable this option again by setting the value to 0 (zero). 
 <p class="level0">This is a legacy option of questionable use. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">SMTP since 7.40.0, other protocols since they were introduced <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_FROM_NETWORK_FUNCTION.html">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_CONV_TO_NETWORK_FUNCTION.html">CURLOPT_CONV_TO_NETWORK_FUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CONV_FROM_NETWORK_FUNCTION.html">CURLOPT_CONV_FROM_NETWORK_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_CONV_TO_NETWORK_FUNCTION.html">CURLOPT_CONV_TO_NETWORK_FUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 767bc09..51c3910 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CRLF.pdf and b/docs/libcurl/opts/CURLOPT_CRLF.pdf differ
index adc0e99..6bb035e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index a92de84..770a00a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CRLFILE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CRLFILE - specify a Certificate Revocation List file <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a zero terminated string naming a <span Class="emphasis">file</span> with the concatenation of CRL (in PEM format) to use in the certificate validation that occurs during the SSL exchange. 
 <p class="level0">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. 
@@ -58,6 +63,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 6ecefbc..9e94c20 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CRLFILE.pdf and b/docs/libcurl/opts/CURLOPT_CRLFILE.pdf differ
index fd33118..8d82402 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c6e5124..a0391a7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_CUSTOMREQUEST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_CUSTOMREQUEST - custom string for request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a zero terminated string as parameter. 
 <p class="level0">When you change the request method by setting <a Class="bold" href="./CURLOPT_CUSTOMREQUEST.html">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. 
@@ -76,6 +81,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">IMAP is supported since 7.30.0, POP3 since 7.26.0 and SMTP since 7.34.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f93faa3..c0671cd 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf and b/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf differ
index ebdb0c5..27b9cbb 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -36,7 +36,7 @@ NULL
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-http://curl.haxx.se/libcurl/c/debug.html
+https://curl.haxx.se/libcurl/c/debug.html
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index d5a09e7..f0c6a29 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DEBUGDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DEBUGDATA - custom pointer for debug callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> to whatever you want passed in to your <a Class="emphasis" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a> in the last void * argument. This pointer is not used by libcurl, it is only passed to the callback. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><a href="http://curl.haxx.se/libcurl/c/debug.html">http://curl.haxx.se/libcurl/c/debug.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><a href="https://curl.haxx.se/libcurl/c/debug.html">https://curl.haxx.se/libcurl/c/debug.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 80247b7..179d4ca 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf and b/docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf differ
index 6c4721b..bf07499 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -88,7 +88,7 @@ void dump(const char *text,
   size_t c;
   unsigned int width=0x10;
 
-  fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n",
+  fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\\n",
           text, (long)size, (long)size);
 
   for(i=0; i<size; i+= width) {
@@ -103,10 +103,12 @@ void dump(const char *text,
     }
 
     /* show data on the right */
-    for(c = 0; (c < width) && (i+c < size); c++)
-      fputc(ptr[i+c]>=0x20) && (ptr[i+c]<0x80)?ptr[i+c]:'.', stream);
+    for(c = 0; (c < width) && (i+c < size); c++) {
+      char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
+      fputc(x, stream);
+    }
 
-    fputc('\n', stream); /* newline */
+    fputc('\\n', stream); /* newline */
   }
 }
 
@@ -167,7 +169,7 @@ int main(void)
     res = curl_easy_perform(curl);
     /* Check for errors */
     if(res != CURLE_OK)
-      fprintf(stderr, "curl_easy_perform() failed: %s\n",
+      fprintf(stderr, "curl_easy_perform() failed: %s\\n",
               curl_easy_strerror(res));
 
     /* always cleanup */
index ab3950b..5d7617f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DEBUGFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,26 +52,29 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DEBUGFUNCTION - debug callback <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">typedef enum {
- &nbsp; CURLINFO_TEXT = 0,
- &nbsp; CURLINFO_HEADER_IN,    /* 1 */
- &nbsp; CURLINFO_HEADER_OUT,   /* 2 */
- &nbsp; CURLINFO_DATA_IN,      /* 3 */
- &nbsp; CURLINFO_DATA_OUT,     /* 4 */
- &nbsp; CURLINFO_SSL_DATA_IN,  /* 5 */
- &nbsp; CURLINFO_SSL_DATA_OUT, /* 6 */
- &nbsp; CURLINFO_END
- } curl_infotype;
- <p class="level0">int debug_callback(CURL *handle,
- &nbsp;                  curl_infotype type,
- &nbsp;                  char *data,
- &nbsp;                  size_t size,
- &nbsp;                  void *userptr);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
- &nbsp;                         debug_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+typedef enum {
+&nbsp; CURLINFO_TEXT = 0,
+&nbsp; CURLINFO_HEADER_IN,    /* 1 */
+&nbsp; CURLINFO_HEADER_OUT,   /* 2 */
+&nbsp; CURLINFO_DATA_IN,      /* 3 */
+&nbsp; CURLINFO_DATA_OUT,     /* 4 */
+&nbsp; CURLINFO_SSL_DATA_IN,  /* 5 */
+&nbsp; CURLINFO_SSL_DATA_OUT, /* 6 */
+&nbsp; CURLINFO_END
+} curl_infotype;
+&nbsp;
+int debug_callback(CURL *handle,
+&nbsp;                  curl_infotype type,
+&nbsp;                  char *data,
+&nbsp;                  size_t size,
+&nbsp;                  void *userptr);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
+&nbsp;                         debug_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0"><a Class="emphasis" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a> replaces the standard debug function used when <a Class="emphasis" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a> is in effect. This callback receives debug information, as specified in the <span Class="emphasis">type</span> argument. This function must return 0. The <span Class="emphasis">data</span> pointed to by the char * passed to this function WILL NOT be zero terminated, but will be exactly of the <span Class="emphasis">size</span> as told by the <span Class="emphasis">size</span> argument. 
@@ -88,92 +96,109 @@ p.roffit {
 <p class="level1">The data is SSL/TLS (binary) data received from the peer. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">static
- void dump(const char *text,
- &nbsp;         FILE *stream, unsigned char *ptr, size_t size)
- {
- &nbsp; size_t i;
- &nbsp; size_t c;
- &nbsp; unsigned int width=0x10;
- <p class="level0">&nbsp; fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)n",
- &nbsp;         text, (long)size, (long)size);
- <p class="level0">&nbsp; for(i=0; i&lt;size; i+= width) {
- &nbsp;   fprintf(stream, "%4.4lx: ", (long)i);
- <p class="level0">&nbsp;   /* show hex to the left */
- &nbsp;   for(c = 0; c &lt; width; c++) {
- &nbsp;     if(i+c &lt; size)
- &nbsp;       fprintf(stream, "%02x ", ptr[i+c]);
- &nbsp;     else
- &nbsp;       fputs("   ", stream);
- &nbsp;   }
- <p class="level0">&nbsp;   /* show data on the right */
- &nbsp;   for(c = 0; (c &lt; width) && (i+c &lt; size); c++)
- &nbsp;     fputc(ptr[i+c]&gt;=0x20) && (ptr[i+c]&lt;0x80)?ptr[i+c]:'.', stream);
- <p class="level0">&nbsp;   fputc('n', stream); /* newline */
- &nbsp; }
- }
- <p class="level0">static
- int my_trace(CURL *handle, curl_infotype type,
- &nbsp;            char *data, size_t size,
- &nbsp;            void *userp)
- {
- &nbsp; const char *text;
- &nbsp; (void)handle; /* prevent compiler warning */
- <p class="level0">&nbsp; switch (type) {
- &nbsp; case CURLINFO_TEXT:
- &nbsp;   fprintf(stderr, "== Info: %s", data);
- &nbsp; default: /* in case a new one is introduced to shock us */
- &nbsp;   return 0;
- <p class="level0">&nbsp; case CURLINFO_HEADER_OUT:
- &nbsp;   text = "=&gt; Send header";
- &nbsp;   break;
- &nbsp; case CURLINFO_DATA_OUT:
- &nbsp;   text = "=&gt; Send data";
- &nbsp;   break;
- &nbsp; case CURLINFO_SSL_DATA_OUT:
- &nbsp;   text = "=&gt; Send SSL data";
- &nbsp;   break;
- &nbsp; case CURLINFO_HEADER_IN:
- &nbsp;   text = "&lt;= Recv header";
- &nbsp;   break;
- &nbsp; case CURLINFO_DATA_IN:
- &nbsp;   text = "&lt;= Recv data";
- &nbsp;   break;
- &nbsp; case CURLINFO_SSL_DATA_IN:
- &nbsp;   text = "&lt;= Recv SSL data";
- &nbsp;   break;
- &nbsp; }
- <p class="level0">&nbsp; dump(text, stderr, (unsigned char *)data, size);
- &nbsp; return 0;
- }
- <p class="level0">int main(void)
- {
- &nbsp; CURL *curl;
- &nbsp; CURLcode res;
- <p class="level0">&nbsp; curl = curl_easy_init();
- &nbsp; if(curl) {
- &nbsp;   curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
- <p class="level0">&nbsp;   /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
- &nbsp;   curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
- <p class="level0">&nbsp;   /* example.com is redirected, so we tell libcurl to follow redirection */
- &nbsp;   curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- <p class="level0">&nbsp;   curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com/">http://example.com/</a>");
- &nbsp;   res = curl_easy_perform(curl);
- &nbsp;   /* Check for errors */
- &nbsp;   if(res != CURLE_OK)
- &nbsp;     fprintf(stderr, "curl_easy_perform() failed: %sn",
- &nbsp;             curl_easy_strerror(res));
- <p class="level0">&nbsp;   /* always cleanup */
- &nbsp;   curl_easy_cleanup(curl);
- &nbsp; }
- &nbsp; return 0;
- }
- </pre>
+<p class="level0"><pre class="level0">
+static
+void dump(const char *text,
+&nbsp;         FILE *stream, unsigned char *ptr, size_t size)
+{
+&nbsp; size_t i;
+&nbsp; size_t c;
+&nbsp; unsigned int width=0x10;
+&nbsp;
+&nbsp; fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n",
+&nbsp;         text, (long)size, (long)size);
+&nbsp;
+&nbsp; for(i=0; i&lt;size; i+= width) {
+&nbsp;   fprintf(stream, "%4.4lx: ", (long)i);
+&nbsp;
+&nbsp;   /* show hex to the left */
+&nbsp;   for(c = 0; c &lt; width; c++) {
+&nbsp;     if(i+c &lt; size)
+&nbsp;       fprintf(stream, "%02x ", ptr[i+c]);
+&nbsp;     else
+&nbsp;       fputs("   ", stream);
+&nbsp;   }
+&nbsp;
+&nbsp;   /* show data on the right */
+&nbsp;   for(c = 0; (c &lt; width) && (i+c &lt; size); c++) {
+&nbsp;     char x = (ptr[i+c] &gt;= 0x20 && ptr[i+c] &lt; 0x80) ? ptr[i+c] : '.';
+&nbsp;     fputc(x, stream);
+&nbsp;   }
+&nbsp;
+&nbsp;   fputc('\n', stream); /* newline */
+&nbsp; }
+}
+&nbsp;
+static
+int my_trace(CURL *handle, curl_infotype type,
+&nbsp;            char *data, size_t size,
+&nbsp;            void *userp)
+{
+&nbsp; const char *text;
+&nbsp; (void)handle; /* prevent compiler warning */
+&nbsp;
+&nbsp; switch (type) {
+&nbsp; case CURLINFO_TEXT:
+&nbsp;   fprintf(stderr, "== Info: %s", data);
+&nbsp; default: /* in case a new one is introduced to shock us */
+&nbsp;   return 0;
+&nbsp;
+&nbsp; case CURLINFO_HEADER_OUT:
+&nbsp;   text = "=&gt; Send header";
+&nbsp;   break;
+&nbsp; case CURLINFO_DATA_OUT:
+&nbsp;   text = "=&gt; Send data";
+&nbsp;   break;
+&nbsp; case CURLINFO_SSL_DATA_OUT:
+&nbsp;   text = "=&gt; Send SSL data";
+&nbsp;   break;
+&nbsp; case CURLINFO_HEADER_IN:
+&nbsp;   text = "&lt;= Recv header";
+&nbsp;   break;
+&nbsp; case CURLINFO_DATA_IN:
+&nbsp;   text = "&lt;= Recv data";
+&nbsp;   break;
+&nbsp; case CURLINFO_SSL_DATA_IN:
+&nbsp;   text = "&lt;= Recv SSL data";
+&nbsp;   break;
+&nbsp; }
+&nbsp;
+&nbsp; dump(text, stderr, (unsigned char *)data, size);
+&nbsp; return 0;
+}
+&nbsp;
+int main(void)
+{
+&nbsp; CURL *curl;
+&nbsp; CURLcode res;
+&nbsp;
+&nbsp; curl = curl_easy_init();
+&nbsp; if(curl) {
+&nbsp;   curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
+&nbsp;
+&nbsp;   /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
+&nbsp;   curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+&nbsp;
+&nbsp;   /* example.com is redirected, so we tell libcurl to follow redirection */
+&nbsp;   curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+&nbsp;
+&nbsp;   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
+&nbsp;   res = curl_easy_perform(curl);
+&nbsp;   /* Check for errors */
+&nbsp;   if(res != CURLE_OK)
+&nbsp;     fprintf(stderr, "curl_easy_perform() failed: %s\n",
+&nbsp;             curl_easy_strerror(res));
+&nbsp;
+&nbsp;   /* always cleanup */
+&nbsp;   curl_easy_cleanup(curl);
+&nbsp; }
+&nbsp; return 0;
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_DEBUGDATA.html">CURLOPT_DEBUGDATA</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_DEBUGDATA.html">CURLOPT_DEBUGDATA</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a9dae92..560a07b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3 b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3
new file mode 100644 (file)
index 0000000..f7f890c
--- /dev/null
@@ -0,0 +1,79 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_DEFAULT_PROTOCOL 3 "18 Aug 2015" "libcurl 7.45.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
+scheme name
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEFAULT_PROTOCOL, char
+*protocol);
+.SH DESCRIPTION
+This option tells libcurl to use \fIprotocol\fP if the URL is missing a scheme
+name.
+
+Use one of these protocol (scheme) names:
+
+dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3,
+pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
+
+An unknown or unsupported protocol causes error
+\fICURLE_UNSUPPORTED_PROTOCOL\fP when libcurl parses a schemeless URL. Parsing
+happens when \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP is
+called. The protocols supported by libcurl will vary depending on how it was
+built. Use \fIcurl_version_info(3)\fP if you need a list of protocol names
+supported by the build of libcurl that you are using.
+
+This option does not change the default proxy protocol (http).
+
+Without this option libcurl would make a guess based on the host, see
+\fICURLOPT_URL(3)\fP for details.
+.SH DEFAULT
+NULL (make a guess based on the host)
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+curl = curl_easy_init();
+if(curl) {
+  /* set a URL without a scheme */
+  curl_easy_setopt(curl, CURLOPT_URL, "example.com");
+
+  /* set the default protocol (scheme) for schemeless URLs */
+  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
+
+  /* Perform the request */
+  curl_easy_perform(curl);
+}
+.fi
+.SH AVAILABILITY
+Added in 7.45.0
+.SH RETURN VALUE
+CURLE_OK if the option is supported.
+
+CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+
+CURLE_UNKNOWN_OPTION if the option is not supported.
+.SH "SEE ALSO"
+.BR CURLOPT_URL "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.html b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.html
new file mode 100644 (file)
index 0000000..c9c9784
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_DEFAULT_PROTOCOL man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_DEFAULT_PROTOCOL - default protocol to use if the URL is missing a scheme name <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEFAULT_PROTOCOL, char *protocol); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">This option tells libcurl to use <span Class="emphasis">protocol</span> if the URL is missing a scheme name. 
+<p class="level0">Use one of these protocol (scheme) names: 
+<p class="level0">dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp 
+<p class="level0">An unknown or unsupported protocol causes error <span Class="emphasis">CURLE_UNSUPPORTED_PROTOCOL</span> when libcurl parses a schemeless URL. Parsing happens when <span Class="emphasis">curl_easy_perform(3)</span> or <span Class="emphasis">curl_multi_perform(3)</span> is called. The protocols supported by libcurl will vary depending on how it was built. Use <span Class="emphasis">curl_version_info(3)</span> if you need a list of protocol names supported by the build of libcurl that you are using. 
+<p class="level0">This option does not change the default proxy protocol (http). 
+<p class="level0">Without this option libcurl would make a guess based on the host, see <a Class="emphasis" href="./CURLOPT_URL.html">CURLOPT_URL</a> for details. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL (make a guess based on the host) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; /* set a URL without a scheme */
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "example.com");
+&nbsp;
+&nbsp; /* set the default protocol (scheme) for schemeless URLs */
+&nbsp; curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.45.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLE_OK if the option is supported. 
+<p class="level0">CURLE_OUT_OF_MEMORY if there was insufficient heap space. 
+<p class="level0">CURLE_UNKNOWN_OPTION if the option is not supported. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_URL.html">CURLOPT_URL</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/opts/CURLOPT_DEFAULT_PROTOCOL.pdf b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.pdf
new file mode 100644 (file)
index 0000000..df57f5b
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.pdf differ
index a81f907..07b8ac3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 63d094c..dfb8c9c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DIRLISTONLY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DIRLISTONLY - ask for names only in a directory listing <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">For FTP and SFTP based URLs a parameter set to 1 tells the library to list the names of files in a directory, rather than performing a full directory listing that would normally include file sizes, dates etc. 
 <p class="level0">For POP3 a parameter of 1 tells the library to list the email message or messages on the POP3 server. This can be used to change the default behaviour of libcurl, when combined with a URL that contains a message ID, to perform a "scan listing" which can then be used to determine the size of an email. 
@@ -59,6 +64,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This option was known as CURLOPT_FTPLISTONLY up to 7.16.4. POP3 is supported since 7.21.5. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CUSTOMREQUEST.html">CURLOPT_CUSTOMREQUEST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CUSTOMREQUEST.html">CURLOPT_CUSTOMREQUEST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3da3d2f..1ff2ef5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf and b/docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf differ
index 9332780..0607410 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 1076303..adbe8f7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DNS_CACHE_TIMEOUT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DNS_CACHE_TIMEOUT - set life-time for DNS cache entries <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long, this sets the timeout in seconds. Name resolves will be kept in memory and used 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="level0">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. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_USE_GLOBAL_CACHE.html">CURLOPT_DNS_USE_GLOBAL_CACHE</a>, <a Class="manpage" href="./CURLOPT_DNS_SERVERS.html">CURLOPT_DNS_SERVERS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_USE_GLOBAL_CACHE.html">CURLOPT_DNS_USE_GLOBAL_CACHE</a>, <a Class="manpage" href="./CURLOPT_DNS_SERVERS.html">CURLOPT_DNS_SERVERS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index bceefc3..6646091 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf and b/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf differ
index c33d791..f764398 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 11dac38..65f1b19 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DNS_INTERFACE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DNS_INTERFACE - set interface to speak DNS over <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter. Set the name of the network interface that the DNS resolver should bind to. This must be an interface name (not an address). Set this option to NULL to use the default setting (don't bind to a specific interface). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.33.0. This option also requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_NOT_BUILT_IN if support was disabled at compile-time. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_SERVERS.html">CURLOPT_DNS_SERVERS</a>, <a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_SERVERS.html">CURLOPT_DNS_SERVERS</a>, <a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3b07969..0754204 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf and b/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf differ
index f5db645..ef9f1e2 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index efd1a57..64868b5 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DNS_LOCAL_IP4 man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DNS_LOCAL_IP4 - IPv4 address to bind DNS resolves to <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set the local IPv4 <span Class="emphasis">address</span> that the resolver should bind to. The argument should be of type char * and contain a single numerical IPv4 address as a string.  Set this option to NULL to use the default setting (don't bind to a specific IP address). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. 
 <p class="level0">Added in 7.33.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, CURLE_NOT_BUILT_IN if support was disabled at compile-time, or CURLE_BAD_FUNCTION_ARGUMENT when given a bad address. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_INTERFACE.html">CURLOPT_DNS_INTERFACE</a>, <a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_INTERFACE.html">CURLOPT_DNS_INTERFACE</a>, <a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 49fc03d..def89e5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf and b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf differ
index 56865bb..7d82bdf 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 67d3af9..796226e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DNS_LOCAL_IP6 man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DNS_LOCAL_IP6 - IPv6 address to bind DNS resolves to <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set the local IPv6 <span Class="emphasis">address</span> that the resolver should bind to. The argument should be of type char * and contain a single IPv6 address as a string.  Set this option to NULL to use the default setting (don't bind to a specific IP address). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. 
 <p class="level0">Added in 7.33.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, CURLE_NOT_BUILT_IN if support was disabled at compile-time, or CURLE_BAD_FUNCTION_ARGUMENT when given a bad address. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_INTERFACE.html">CURLOPT_DNS_INTERFACE</a>, <a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_INTERFACE.html">CURLOPT_DNS_INTERFACE</a>, <a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 0aba0cf..1b7f55c 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf and b/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf differ
index 9f51788..14c9f9b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ba803d0..8d9fa9f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DNS_SERVERS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DNS_SERVERS - set preferred DNS servers <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * that is the list of DNS servers to be used instead of the system default.  The format of the dns servers option is: 
 <p class="level0">host[:port][,host[:port]]... 
@@ -59,6 +64,6 @@ p.roffit {
 <p class="level0">This option requires that libcurl was built with a resolver backend that supports this operation. The c-ares backend is the only such one. 
 <p class="level0">Added in 7.24.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, CURLE_NOT_BUILT_IN if support was disabled at compile-time, CURLE_BAD_FUNCTION_ARGUMENT when given an invalid server list, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a>, <a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_LOCAL_IP4.html">CURLOPT_DNS_LOCAL_IP4</a>, <a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a15db8d..178bda1 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf and b/docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf differ
index db53c0b..87f686a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 8fb0da9..d2190b4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_DNS_USE_GLOBAL_CACHE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_DNS_USE_GLOBAL_CACHE - enable/disable global DNS cache <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE, &nbsp;                         long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If the <span Class="emphasis">enable</span> 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="level0"><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="./CURLOPT_SHARE.html">CURLOPT_SHARE</a> and <span Class="emphasis">curl_share_init(3)</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Subject for removal in the future. Do not use! <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SHARE.html">CURLOPT_SHARE</a>, <a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SHARE.html">CURLOPT_SHARE</a>, <a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index e9f19ac..e23c05d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf and b/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf differ
index 2e72ecc..ad91c3f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -33,7 +33,7 @@ socket. It will be used to seed the random engine for SSL.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index 18a11ee..8e7012f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_EGDSOCKET man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_EGDSOCKET - set EGD socket path <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. Only the OpenSSL and GnuTLS backends will use this. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RANDOM_FILE.html">CURLOPT_RANDOM_FILE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RANDOM_FILE.html">CURLOPT_RANDOM_FILE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 31c65b9..665f937 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf and b/docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf differ
index 577202c..b64a2a3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -51,15 +51,33 @@ All
 .nf
 curl = curl_easy_init();
 if(curl) {
-  char error[CURL_ERROR_SIZE]
+  CURLcode res;
+  char errbuf[CURL_ERROR_SIZE];
 
   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
 
   /* provide a buffer to store errors in */
-  curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
+  curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
 
-  /* Perform the request */
-  curl_easy_perform(curl);
+  /* set the error buffer as empty before performing a request */
+  errbuf[0] = 0;
+
+  /* perform the request */
+  res = curl_easy_perform(curl);
+
+  /* if the request did not complete correctly, show the error
+  information. if no detailed error information was written to errbuf
+  show the more generic information from curl_easy_strerror instead.
+  */
+  if(res != CURLE_OK) {
+    size_t len = strlen(errbuf);
+    fprintf(stderr, "\\nlibcurl: (%d) ", res);
+    if(len)
+      fprintf(stderr, "%s%s", errbuf,
+              ((errbuf[len - 1] != '\\n') ? "\\n" : ""));
+    else
+      fprintf(stderr, "%s\\n", curl_easy_strerror(res));
+  }
 }
 .fi
 .SH AVAILABILITY
index 40d29b1..9133d29 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_ERRORBUFFER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_ERRORBUFFER - set error buffer for error messages <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a buffer that the libcurl may store human readable error messages in on failures or problems. This may be more helpful than just the return code from <span Class="emphasis">curl_easy_perform(3)</span> and related functions. The buffer <span Class="bold">must be at least CURL_ERROR_SIZE bytes big</span>. 
 <p class="level0">You must keep the associated buffer 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 <span Class="emphasis">curl_easy_cleanup(3)</span> or you set the same option again to use a different pointer. 
@@ -55,21 +60,42 @@ p.roffit {
 <p class="level0">If the library does not return an error, the buffer may not have been touched. Do not rely on the contents in those cases. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; char error[CURL_ERROR_SIZE]
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* provide a buffer to store errors in */
- &nbsp; curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; CURLcode res;
+&nbsp; char errbuf[CURL_ERROR_SIZE];
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* provide a buffer to store errors in */
+&nbsp; curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
+&nbsp;
+&nbsp; /* set the error buffer as empty before performing a request */
+&nbsp; errbuf[0] = 0;
+&nbsp;
+&nbsp; /* perform the request */
+&nbsp; res = curl_easy_perform(curl);
+&nbsp;
+&nbsp; /* if the request did not complete correctly, show the error
+&nbsp; information. if no detailed error information was written to errbuf
+&nbsp; show the more generic information from curl_easy_strerror instead.
+&nbsp; */
+&nbsp; if(res != CURLE_OK) {
+&nbsp;   size_t len = strlen(errbuf);
+&nbsp;   fprintf(stderr, "\nlibcurl: (%d) ", res);
+&nbsp;   if(len)
+&nbsp;     fprintf(stderr, "%s%s", errbuf,
+&nbsp;             ((errbuf[len - 1] != '\n') ? "\n" : ""));
+&nbsp;   else
+&nbsp;     fprintf(stderr, "%s\n", curl_easy_strerror(res));
+&nbsp; }
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <span Class="manpage"> </span> <span Class="manpage">curl_easy_strerror (3)</span> <span Class="manpage">  curl_multi_strerror (3)</span> <span Class="manpage"> </span> <span Class="manpage">curl_share_strerror (3) </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <span Class="manpage">curl_easy_strerror (3)</span>, <span Class="manpage">curl_multi_strerror (3)</span>, <span Class="manpage">curl_share_strerror (3)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5a0ddd4..632b544 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf and b/docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf differ
index 81f4571..10f3c06 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b5cf9c6..9010148 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_EXPECT_100_TIMEOUT_MS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_EXPECT_100_TIMEOUT_MS - timeout for Expect: 100-continue response <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EXPECT_100_TIMEOUT_MS,
- &nbsp;                         long milliseconds);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EXPECT_100_TIMEOUT_MS,
+&nbsp;                         long milliseconds);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long to tell libcurl the number of <span Class="emphasis">milliseconds</span> to wait for a server response with the HTTP status 100 (Continue), 417 (Expectation Failed) or similar after sending a HTTP request containing an Expect: 100-continue header. If this times out before a response is received, the request body is sent anyway. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1000 milliseconds <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.36.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a>, <a Class="manpage" href="./CURLOPT_HTTPPOST.html">CURLOPT_HTTPPOST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a>, <a Class="manpage" href="./CURLOPT_HTTPPOST.html">CURLOPT_HTTPPOST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4184fe5..68a04a1 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf and b/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf differ
index a8267fd..79474ce 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -39,6 +39,9 @@ response codes will slip through, especially when authentication is involved
 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.
+
+When this option is used and an error is detected, it will cause the
+connection to get closed.
 .SH DEFAULT
 0, do not fail on error
 .SH PROTOCOLS
index 931f763..d435af9 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FAILONERROR man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,17 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FAILONERROR - request failure on HTTP response &gt;= 400 <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FAILONERROR, long fail); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A long parameter set to 1 tells the library to fail the request 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="level0">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">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="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">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. 
+<p class="level0">When this option is used and an error is detected, it will cause the connection to get closed. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, do not fail on error <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP  <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP200ALIASES.html">CURLOPT_HTTP200ALIASES</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP200ALIASES.html">CURLOPT_HTTP200ALIASES</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d4044af..29064f9 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FAILONERROR.pdf and b/docs/libcurl/opts/CURLOPT_FAILONERROR.pdf differ
index 7c57aff..43a15f8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -31,8 +31,8 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime);
 Pass a long. If it is 1, libcurl will attempt to get the modification time 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).
+\fIcurl_easy_getinfo(3)\fP function with the \fICURLINFO_FILETIME(3)\fP
+argument can be used after a transfer to extract the received time (if any).
 .SH DEFAULT
 0
 .SH PROTOCOLS
index 904d68d..ae093ea 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FILETIME man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FILETIME - get the modification time of the remote resource <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a long. If it is 1, libcurl will attempt to get the modification time of the remote document in this operation. This requires that the remote server sends the time or replies to a time querying command. The <span Class="emphasis">curl_easy_getinfo(3)</span> function with the <span Class="emphasis">CURLINFO_FILETIME</span> argument can be used after a transfer to extract the received time (if any). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Pass a long. If it is 1, libcurl will attempt to get the modification time of the remote document in this operation. This requires that the remote server sends the time or replies to a time querying command. The <span Class="emphasis">curl_easy_getinfo(3)</span> function with the <a Class="emphasis" href="./CURLINFO_FILETIME.html">CURLINFO_FILETIME</a> argument can be used after a transfer to extract the received time (if any). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, FTP, SFTP, FILE <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span> <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><span Class="manpage">curl_easy_getinfo (3)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 33728be..0880743 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FILETIME.pdf and b/docs/libcurl/opts/CURLOPT_FILETIME.pdf differ
index a0466fe..daf4e8c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6745382..4fce557 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FNMATCH_DATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FNMATCH_DATA - custom pointer to fnmatch callback <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_DATA,
- &nbsp;                         void *pointer);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_DATA,
+&nbsp;                         void *pointer);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer that will be untouched by libcurl and passed as the ptr argument to the <span Class="emphasis">CURL_FNMATCH_FUNCTION(3)</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FNMATCH_FUNCTION.html">CURLOPT_FNMATCH_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FNMATCH_FUNCTION.html">CURLOPT_FNMATCH_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_WILDCARDMATCH.html">CURLOPT_WILDCARDMATCH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 297371c..967724d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf and b/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf differ
index fc119a9..04967b8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -37,7 +37,7 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_FUNCTION,
 Pass a pointer to your callback function, which should match the prototype
 shown above.
 
-This callback s used for wildcard matching.
+This callback is used for wildcard matching.
 
 Return \fICURL_FNMATCHFUNC_MATCH\fP if pattern matches the string,
 \fICURL_FNMATCHFUNC_NOMATCH\fP if not or \fICURL_FNMATCHFUNC_FAIL\fP if an
index 34e595d..4807d4f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FNMATCH_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,23 +52,25 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FNMATCH_FUNCTION - wildcard matching function callback <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">int fnmatch_callback(void *ptr,
- &nbsp;                    const char *pattern,
- &nbsp;                    const char *string);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_FUNCTION,
- &nbsp;                         fnmatch_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+int fnmatch_callback(void *ptr,
+&nbsp;                    const char *pattern,
+&nbsp;                    const char *string);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_FUNCTION,
+&nbsp;                         fnmatch_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
-<p class="level0">This callback s used for wildcard matching. 
+<p class="level0">This callback is used for wildcard matching. 
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL == an internal function for wildcard matching. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FNMATCH_DATA.html">CURLOPT_FNMATCH_DATA</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FNMATCH_DATA.html">CURLOPT_FNMATCH_DATA</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5386b57..678bf73 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf differ
index 3a32cae..094ee05 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -28,22 +28,31 @@ CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
 
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);
 .SH DESCRIPTION
-A parameter set to 1 tells the library to follow any Location: header that the
-server sends as part of a HTTP header in a 3xx response.
+A long parameter set to 1 tells the library to follow any Location: header
+that the server sends as part of a HTTP header in a 3xx response. The
+Location: header can specify a relative or an absolute URL to follow.
 
-This means that libcurl 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(3)\fP can be used to limit the number of
-redirects libcurl will follow.
+libcurl will issue another request for the new URL and follow new Location:
+headers all the way until no more such headers are returned.
+\fICURLOPT_MAXREDIRS(3)\fP can be used to limit the number of redirects
+libcurl will follow.
 
-libcurl can limit to what protocols it will automatically follow. The accepted
-protocols are set with \fICURLOPT_REDIR_PROTOCOLS(3)\fP and it excludes the
-FILE protocol by default.
+libcurl limits what protocols it automatically follows to. The accepted
+protocols are set with \fICURLOPT_REDIR_PROTOCOLS(3)\fP. By default libcurl
+will allow all protocols on redirect except those disabled for security
+reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS
+are also disabled.
+
+When following a Location:, the 3xx response code that redirected it also
+dictates which request method it will use in the subsequent request: For 301,
+302 and 303 responses libcurl will switch method to GET unless
+\fICURLOPT_POSTREDIR(3)\fP instructs libcurl otherwise. All other 3xx codes
+will make libcurl send the same method again.
 
 For users who think the existing location following is too naive, too simple
 or just lacks features, it is very easy to instead implement your own redirect
 follow logic with the use of \fIcurl_easy_getinfo(3)\fP's
-\fICURLINFO_REDIRECT_URL\fP option instead of using
+\fICURLINFO_REDIRECT_URL(3)\fP option instead of using
 \fICURLOPT_FOLLOWLOCATION(3)\fP.
 .SH DEFAULT
 0, disabled
@@ -68,3 +77,4 @@ Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
 .BR CURLOPT_REDIR_PROTOCOLS "(3), " CURLOPT_PROTOCOLS "(3), "
 .BR CURLOPT_POSTREDIR "(3), "
+.BR CURLINFO_REDIRECT_URL "(3), ", CURLINFO_REDIRECT_COUNT "(3), "
index 36c40c9..fa6b4cf 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FOLLOWLOCATION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,27 +52,30 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FOLLOWLOCATION - follow HTTP 3xx redirects <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">A parameter set to 1 tells the library to follow any Location: header that the server sends as part of a HTTP header in a 3xx response. 
-<p class="level0">This means that libcurl 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="./CURLOPT_MAXREDIRS.html">CURLOPT_MAXREDIRS</a> can be used to limit the number of redirects libcurl will follow. 
-<p class="level0">libcurl can limit to what protocols it will automatically follow. The accepted protocols are set with <a Class="emphasis" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a> and it excludes the FILE protocol by default. 
-<p class="level0">For users who think the existing location following is too naive, too simple or just lacks features, it is very easy to instead implement your own redirect follow logic with the use of <span Class="emphasis">curl_easy_getinfo(3)</span>'s <span Class="emphasis">CURLINFO_REDIRECT_URL</span> option instead of using <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">A long parameter set to 1 tells the library to follow any Location: header that the server sends as part of a HTTP header in a 3xx response. The Location: header can specify a relative or an absolute URL to follow. 
+<p class="level0">libcurl will issue another request for the new URL and follow new Location: headers all the way until no more such headers are returned. <a Class="emphasis" href="./CURLOPT_MAXREDIRS.html">CURLOPT_MAXREDIRS</a> can be used to limit the number of redirects libcurl will follow. 
+<p class="level0">libcurl limits what protocols it automatically follows to. The accepted protocols are set with <a Class="emphasis" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a>. By default libcurl will allow all protocols on redirect except those disabled for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS are also disabled. 
+<p class="level0">When following a Location:, the 3xx response code that redirected it also dictates which request method it will use in the subsequent request: For 301, 302 and 303 responses libcurl will switch method to GET unless <a Class="emphasis" href="./CURLOPT_POSTREDIR.html">CURLOPT_POSTREDIR</a> instructs libcurl otherwise. All other 3xx codes will make libcurl send the same method again. 
+<p class="level0">For users who think the existing location following is too naive, too simple or just lacks features, it is very easy to instead implement your own redirect follow logic with the use of <span Class="emphasis">curl_easy_getinfo(3)</span>'s <a Class="emphasis" href="./CURLINFO_REDIRECT_URL.html">CURLINFO_REDIRECT_URL</a> option instead of using <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* example.com is redirected, so we tell libcurl to follow redirection */
- &nbsp; curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* example.com is redirected, so we tell libcurl to follow redirection */
+&nbsp; curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a>, <a Class="manpage" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_POSTREDIR.html">CURLOPT_POSTREDIR</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a>, <a Class="manpage" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a>, <a Class="manpage" href="./CURLOPT_POSTREDIR.html">CURLOPT_POSTREDIR</a>, <a Class="manpage" href="./CURLINFO_REDIRECT_URL.html">CURLINFO_REDIRECT_URL</a>, <span Class="manpage"></span>, <a Class="manpage" href="./CURLINFO_REDIRECT_COUNT.html">CURLINFO_REDIRECT_COUNT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8c986ea..ac02018 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf and b/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf differ
index c588ca5..b8464df 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6a968ea..f8283a4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FORBID_REUSE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FORBID_REUSE - make connection get closed at once after use <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. Set <span Class="emphasis">close</span> to 1 to make libcurl explicitly close the connection when done with the transfer. 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 as it can seriously impact performance. 
 <p class="level0">Set to 0 to have libcurl keep the connection open for possible later re-use (default behavior). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FRESH_CONNECT.html">CURLOPT_FRESH_CONNECT</a>, <a Class="manpage" href="./CURLOPT_MAXCONNECTS.html">CURLOPT_MAXCONNECTS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FRESH_CONNECT.html">CURLOPT_FRESH_CONNECT</a>, <a Class="manpage" href="./CURLOPT_MAXCONNECTS.html">CURLOPT_MAXCONNECTS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7c534b6..1fb1872 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf and b/docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf differ
index 1caaf61..ce6e6fe 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 062da52..e30d22c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FRESH_CONNECT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FRESH_CONNECT - force a new connection to be used <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. Set to 1 to make the next transfer use a new (fresh) connection by force instead of trying to re-use an existing one.  This option should be used with caution and only if you understand what it does as it may seriously impact performance. 
 <p class="level0">Related functionality is <a Class="emphasis" href="./CURLOPT_FORBID_REUSE.html">CURLOPT_FORBID_REUSE</a> which makes sure the connection is closed after use so that it won't be re-used. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FORBID_REUSE.html">CURLOPT_FORBID_REUSE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FORBID_REUSE.html">CURLOPT_FORBID_REUSE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 326ec75..f25cbea 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf and b/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf differ
index fd87bb2..8e300bc 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 2ef4187..5fcae31 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTPPORT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,18 +52,18 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTPPORT - make FTP transfer active <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a zero terminated string as parameter. It specifies that the FTP transfer will be made actively and the given string will be used to get the IP address to use for the FTP PORT instruction. 
 <p class="level0">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="level0">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. 
 <p class="level0">Examples with specified ports: 
-<p class="level0"><pre>
-<p class="level0">&nbsp; eth0:0
- &nbsp; 192.168.1.2:32000-33000
- &nbsp; curl.se:32123
- &nbsp; [::1]:1234-4567
- </pre>
+<p class="level0"><pre class="level0">
+&nbsp; eth0:0
+&nbsp; 192.168.1.2:32000-33000
+&nbsp; curl.se:32123
+&nbsp; [::1]:1234-4567
+</pre>
 
 <p class="level0">
 <p class="level0">You disable PORT again and go back to using the passive version by setting this option to NULL. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -67,6 +72,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Port range support was added in 7.19.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4bd409a..186b3f4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTPPORT.pdf and b/docs/libcurl/opts/CURLOPT_FTPPORT.pdf differ
index bfbea9c..5437b0c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 5e688a5..acf3620 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTPSSLAUTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTPSSLAUTH - set order in which to attempt TLS vs SSL when using FTP <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPSSLAUTH, long order); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. This is only interesting if <a Class="emphasis" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a> is also set. 
 <p class="level0">Possible <span Class="emphasis">order</span> values: 
@@ -62,6 +67,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.12.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <a Class="manpage" href="./CURLOPT_FTP_SSL_CCC.html">CURLOPT_FTP_SSL_CCC</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <a Class="manpage" href="./CURLOPT_FTP_SSL_CCC.html">CURLOPT_FTP_SSL_CCC</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 710d984..6211b8f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf and b/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf differ
index 3c34247..0d768d7 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 20db542..93c1644 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_ACCOUNT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_ACCOUNT - set account info for FTP <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.13.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index def965a..b15d8d5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf and b/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf differ
index b51e4dd..5758109 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f681034..642b3a4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_ALTERNATIVE_TO_USER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_ALTERNATIVE_TO_USER - command to use instead of USER with FTP <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ALTERNATIVE_TO_USER,
- &nbsp;                         char *cmd);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ALTERNATIVE_TO_USER,
+&nbsp;                         char *cmd);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_SKIP_PASV_IP.html">CURLOPT_FTP_SKIP_PASV_IP</a>, <a Class="manpage" href="./CURLOPT_FTP_RESPONSE_TIMEOUT.html">CURLOPT_FTP_RESPONSE_TIMEOUT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_SKIP_PASV_IP.html">CURLOPT_FTP_SKIP_PASV_IP</a>, <a Class="manpage" href="./CURLOPT_FTP_RESPONSE_TIMEOUT.html">CURLOPT_FTP_RESPONSE_TIMEOUT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 56fcd49..c50c0fe 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf and b/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf differ
index a52863e..d28a646 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 04f8c61..0316c65 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_CREATE_MISSING_DIRS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,18 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_CREATE_MISSING_DIRS - create missing dirs for FTP and SFTP <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">typedef enum {
- &nbsp; CURLFTP_CREATE_DIR_NONE,
- &nbsp; CURLFTP_CREATE_DIR,
- &nbsp; CURLFTP_CREATE_DIR_RETRY
- } curl_ftpcreatedir;
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_CREATE_MISSING_DIRS,
- &nbsp;                         long create);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+typedef enum {
+&nbsp; CURLFTP_CREATE_DIR_NONE,
+&nbsp; CURLFTP_CREATE_DIR,
+&nbsp; CURLFTP_CREATE_DIR_RETRY
+} curl_ftpcreatedir;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_CREATE_MISSING_DIRS,
+&nbsp;                         long create);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long telling libcurl to <span Class="emphasis">create</span> the dir. If the value is <span Class="emphasis">CURLFTP_CREATE_DIR</span> (1), libcurl will attempt to create any remote directory that it fails to "move" into. 
 <p class="level0">For FTP requests, that means a CWD command fails. CWD being the command that changes working directory. 
@@ -67,6 +74,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.7. SFTP support added in 7.16.3. The retry option was added in 7.19.4. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if the create value is not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_FILEMETHOD.html">CURLOPT_FTP_FILEMETHOD</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_FILEMETHOD.html">CURLOPT_FTP_FILEMETHOD</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index adb73af..c2bc473 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf and b/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf differ
index 62396b9..280e8f1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -59,4 +59,4 @@ Added in 7.15.1
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
-.BR CURLOPT_FTPLISTONLY "(3), " CURLOPT_FTP_SKIP_PASV_IP "(3), "
+.BR CURLOPT_DIRLISTONLY "(3), " CURLOPT_FTP_SKIP_PASV_IP "(3), "
index 1ffba47..8d81e7a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_FILEMETHOD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_FILEMETHOD - select directory traversing method for FTP <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_FILEMETHOD,
- &nbsp;                         long method);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_FILEMETHOD,
+&nbsp;                         long method);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long telling libcurl which <span Class="emphasis">method</span> to use to reach a file on a FTP(S) server. 
 <p class="level0">This option exists because some server implementations aren't compliant to what the standards say should work. 
@@ -67,6 +73,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><span Class="manpage">CURLOPT_FTPLISTONLY (3)</span> <a Class="manpage" href="./CURLOPT_FTP_SKIP_PASV_IP.html">CURLOPT_FTP_SKIP_PASV_IP</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DIRLISTONLY.html">CURLOPT_DIRLISTONLY</a>, <a Class="manpage" href="./CURLOPT_FTP_SKIP_PASV_IP.html">CURLOPT_FTP_SKIP_PASV_IP</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1b0e2e4..5f40476 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf and b/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf differ
index 18dbc2f..45ec304 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 98a833c..4d5e798 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_RESPONSE_TIMEOUT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_RESPONSE_TIMEOUT - time allowed to wait for FTP response <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_RESPONSE_TIMEOUT, long timeout); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long.  Causes libcurl to set a <span Class="emphasis">timeout</span> period (in seconds) on the amount of time that the server is allowed to take in order to send a response message for a command before the session is considered dead.  While libcurl is waiting for a response, this value overrides <a Class="emphasis" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>. It is recommended that if used in conjunction with <a Class="emphasis" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, you set <a Class="emphasis" href="./CURLOPT_FTP_RESPONSE_TIMEOUT.html">CURLOPT_FTP_RESPONSE_TIMEOUT</a> to a value smaller than <a Class="emphasis" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">None <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.8 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_CONNECTTIMEOUT.html">CURLOPT_CONNECTTIMEOUT</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_CONNECTTIMEOUT.html">CURLOPT_CONNECTTIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f52ae68..c45c4c9 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf and b/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf differ
index b1803fd..b60c3b1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 35b781e..b253c93 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_SKIP_PASV_IP man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_SKIP_PASV_IP - ignore the IP address in the PASV response <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If <span Class="emphasis">skip</span> is 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. 
 <p class="level0">This option thus allows libcurl to work around broken server installations that due to NATs, firewalls or incompetence report the wrong IP address back. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.14.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b9ae302..804df9d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf and b/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf differ
index 5391285..4737114 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 051cdcc..4201326 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_SSL_CCC man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_SSL_CCC - switch off SSL again with FTP after auth <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC, &nbsp;                         long how); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 
 <p class="level0"><a name="CURLFTPSSLCCCNONE"></a><span class="nroffip">CURLFTPSSL_CCC_NONE</span> 
@@ -61,6 +66,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <a Class="manpage" href="./CURLOPT_FTPSSLAUTH.html">CURLOPT_FTPSSLAUTH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <a Class="manpage" href="./CURLOPT_FTPSSLAUTH.html">CURLOPT_FTPSSLAUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index fc5a13b..59fdf45 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf and b/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf differ
index d26af0c..181f5a1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index bc48556..9b34e57 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_USE_EPRT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_USE_EPRT - enable/disable use of EPRT with FTP <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If the value is 1, it tells curl to use the EPRT command when doing active FTP downloads (which is enabled by <a Class="emphasis" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a>). Using EPRT means that it will first attempt to use EPRT before using PORT, but if you pass zero to this option, it will not try using EPRT, only plain PORT. 
 <p class="level0">If the server is an IPv6 host, this option will have no effect as EPRT is necessary then. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a>, <a Class="manpage" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a>, <a Class="manpage" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7b8530a..8c88eb0 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf and b/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf differ
index 172985a..af7a45e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 3ebd105..841e9ef 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_USE_EPSV man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_USE_EPSV - enable/disable use of EPSV <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass <span Class="emphasis">epsv</span> as a long. If the value is 1, it tells curl to use the EPSV command when doing passive FTP downloads (which it 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="level0">If the server is an IPv6 host, this option will have no effect as of 7.12.3. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with FTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <a Class="manpage" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <a Class="manpage" href="./CURLOPT_FTPPORT.html">CURLOPT_FTPPORT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2da1671..85aba79 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf and b/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf differ
index b20f3fb..10f713b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f2cfc71..115212c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_FTP_USE_PRET man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_FTP_USE_PRET - enable the PRET command <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_PRET, long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FTP_USE_EPRT.html">CURLOPT_FTP_USE_EPRT</a>, <a Class="manpage" href="./CURLOPT_FTP_USE_EPSV.html">CURLOPT_FTP_USE_EPSV</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c48929a..3be3e4e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf and b/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf differ
index 13f3cec..65ea6ec 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f9beaf9..b158fdf 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_GSSAPI_DELEGATION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_GSSAPI_DELEGATION - set allowed GSS-API delegation <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_GSSAPI_DELEGATION, long level); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set the long parameter <span Class="emphasis">level</span> to CURLGSSAPI_DELEGATION_FLAG to allow unconditional GSSAPI credential delegation.  The delegation is disabled by default since 7.21.7.  Set the parameter to CURLGSSAPI_DELEGATION_POLICY_FLAG to delegate only if the OK-AS-DELEGATE flag is set in the service ticket in case this feature is supported by the GSS-API implementation and the definition of GSS_C_DELEG_POLICY_FLAG was available at compile-time. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">CURLGSSAPI_DELEGATION_NONE <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.22.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d7c67be..004ba0f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf and b/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf differ
index 130575a..b650163 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -38,9 +38,26 @@ about the protocol in use.
 
 It is often better to use \fICURLOPT_HEADERFUNCTION(3)\fP to get the header
 data separately.
+
+While named confusingly similar, \fICURLOPT_HTTPHEADER(3)\fP is used to set
+custom HTTP headers!
 .SH DEFAULT
 0
+.SH PROTOCOLS
+Most
+.SH EXAMPLE
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH RETURN VALUE
 Returns CURLE_OK.
 .SH "SEE ALSO"
 .BR CURLOPT_HEADERFUNCTION "(3), "
+.BR CURLOPT_HTTPHEADER "(3), "
index 7cbb9d3..a44d85a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HEADER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,13 +52,27 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HEADER - pass headers to the data stream <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass in <span Class="emphasis">onoff</span> set to 1 to tell the library to include the header in the body output for requests with this <span Class="emphasis">handle</span>. This option is relevant for protocols that actually have headers or other meta-data (like HTTP and FTP). 
 <p class="level0">When asking to get the header info passed to the same callback as the body, it is not possible to accurately separate them again without detailed knowledge about the protocol in use. 
-<p class="level0">It is often better to use <a Class="emphasis" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a> to get the header data separately. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">It is often better to use <a Class="emphasis" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a> to get the header data separately. 
+<p class="level0">While named confusingly similar, <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> is used to set custom HTTP headers! <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">Most <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b4168cf..06b883c 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HEADER.pdf and b/docs/libcurl/opts/CURLOPT_HEADER.pdf differ
index c0a45f2..c865c86 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 122cad9..c6e8bce 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HEADERDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HEADERDATA - pointer to pass to header callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> to be used to write the header part of the received data to. 
 <p class="level0">If <a Class="emphasis" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a> or <a Class="emphasis" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a> is used, <span Class="emphasis">pointer</span> will be passed in to the respective callback. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HEADERFUNCTION.html">CURLOPT_HEADERFUNCTION</a>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1c28b8c..458b295 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HEADERDATA.pdf and b/docs/libcurl/opts/CURLOPT_HEADERDATA.pdf differ
index b6100f2..b8596d8 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -39,14 +39,14 @@ shown above.
 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 is very
-easy using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP
+easy using this. The size of the data pointed to by \fIbuffer\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_HEADERDATA(3)\fP option. This callback function must return the
 number of bytes actually taken care of. If that amount differs from the amount
 passed in to your function, it'll signal an error to the library. This will
 cause the transfer to get aborted and the libcurl function in progress will
-return \fICURL_WRITE_ERROR\fP.
+return \fICURLE_WRITE_ERROR\fP.
 
 A complete HTTP header that is passed to this function can be up to
 \fICURL_MAX_HTTP_HEADER\fP (100K) bytes.
@@ -80,7 +80,24 @@ Nothing.
 Used for all protocols with headers or meta-data concept: HTTP, FTP, POP3,
 IMAP, SMTP and more.
 .SH EXAMPLE
-TODO
+.nf
+static size_t header_callback(char *buffer, size_t size,
+                              size_t nitems, void *userdata)
+{
+  /* received header is nitems * size long in 'buffer' NOT ZERO TERMINATED */
+  /* 'userdata' is set with CURLOPT_HEADERDATA */
+  return nitems * size;
+}
+
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 8d112ce..bf4681f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HEADERFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,11 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HEADERFUNCTION - callback that receives header data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">size_t header_callback(char *buffer, &nbsp;                      size_t size, &nbsp;                      size_t nitems, &nbsp;                      void *userdata); 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERFUNCTION, header_callback); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
-<p class="level0">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 is very easy 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="./CURLOPT_HEADERDATA.html">CURLOPT_HEADERDATA</a> option. This callback function must return the number of bytes actually taken care of. If that amount differs from the amount passed in to your function, it'll signal an error to the library. This will cause the transfer to get aborted and the libcurl function in progress will return <span Class="emphasis">CURL_WRITE_ERROR</span>. 
+<p class="level0">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 is very easy using this. The size of the data pointed to by <span Class="emphasis">buffer</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="./CURLOPT_HEADERDATA.html">CURLOPT_HEADERDATA</a> option. This callback function must return the number of bytes actually taken care of. If that amount differs from the amount passed in to your function, it'll signal an error to the library. This will cause the transfer to get aborted and the libcurl function in progress will return <span Class="emphasis">CURLE_WRITE_ERROR</span>. 
 <p class="level0">A complete HTTP header that is passed to this function can be up to <span Class="emphasis">CURL_MAX_HTTP_HEADER</span> (100K) bytes. 
 <p class="level0">If this option is not set, or if it is set to NULL, but <a Class="emphasis" href="./CURLOPT_HEADERDATA.html">CURLOPT_HEADERDATA</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="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, or if it is not specified or NULL - the default, stream-writing function. 
 <p class="level0">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. 
@@ -59,9 +64,28 @@ p.roffit {
 <p class="level0">For non-HTTP protocols like FTP, POP3, IMAP and SMTP this function will get called with the server responses to the commands that libcurl sends. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Nothing. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Used for all protocols with headers or meta-data concept: HTTP, FTP, POP3, IMAP, SMTP and more. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+static size_t header_callback(char *buffer, size_t size,
+&nbsp;                             size_t nitems, void *userdata)
+{
+&nbsp; /* received header is nitems * size long in 'buffer' NOT ZERO TERMINATED */
+&nbsp; /* 'userdata' is set with CURLOPT_HEADERDATA */
+&nbsp; return nitems * size;
+}
+&nbsp;
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HEADERDATA.html">CURLOPT_HEADERDATA</a>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HEADERDATA.html">CURLOPT_HEADERDATA</a>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index acf174a..a51b5da 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf differ
index be96d7d..7053a3a 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -31,10 +31,10 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask);
 Pass a long that is a bitmask of options of how to deal with headers. The two
 mutually exclusive options are:
 
-\fBCURLHEADER_UNIFIED\fP - keep working as before. This means
-\fICURLOPT_HTTPHEADER(3)\fP headers will be used in requests both to servers
-and proxies. With this option enabled, \fICURLOPT_PROXYHEADER(3)\fP will not
-have any effect.
+\fBCURLHEADER_UNIFIED\fP - the headers specified in
+\fICURLOPT_HTTPHEADER(3)\fP will be used in requests both to servers and
+proxies. With this option enabled, \fICURLOPT_PROXYHEADER(3)\fP will not have
+any effect.
 
 \fBCURLHEADER_SEPARATE\fP - makes \fICURLOPT_HTTPHEADER(3)\fP headers only get
 sent to a server and not to a proxy. Proxy headers must be set with
@@ -44,7 +44,7 @@ headers. When doing CONNECT, libcurl will send \fICURLOPT_PROXYHEADER(3)\fP
 headers only to the proxy and then \fICURLOPT_HTTPHEADER(3)\fP headers only to
 the server.
 .SH DEFAULT
-CURLHEADER_UNIFIED
+CURLHEADER_SEPARATE (changed in 7.42.1, ased CURLHEADER_UNIFIED before then)
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
index dbcd319..c67842b 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HEADEROPT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HEADEROPT - set how to send HTTP headers <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long that is a bitmask of options of how to deal with headers. The two mutually exclusive options are: 
-<p class="level0"><span Class="bold">CURLHEADER_UNIFIED</span> - keep working as before. This means <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> headers will be used in requests both to servers and proxies. With this option enabled, <a Class="emphasis" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a> will not have any effect. 
+<p class="level0"><span Class="bold">CURLHEADER_UNIFIED</span> - the headers specified in <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> will be used in requests both to servers and proxies. With this option enabled, <a Class="emphasis" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a> will not have any effect. 
 <p class="level0"><span Class="bold">CURLHEADER_SEPARATE</span> - makes <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> headers only get sent to a server and not to a proxy. Proxy headers must be set with <a Class="emphasis" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a> to get used. Note that if a non-CONNECT request is sent to a proxy, libcurl will send both server headers and proxy headers. When doing CONNECT, libcurl will send <a Class="emphasis" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a> headers only to the proxy and then <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> headers only to the server. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">CURLHEADER_UNIFIED <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">CURLHEADER_SEPARATE (changed in 7.42.1, ased CURLHEADER_UNIFIED before then) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.37.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 686bd20..bec0487 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HEADEROPT.pdf and b/docs/libcurl/opts/CURLOPT_HEADEROPT.pdf differ
index 1454ed1..17f1dd3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -32,9 +32,11 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP200ALIASES,
 .SH DESCRIPTION
 Pass a pointer to a linked list of \fIaliases\fP 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".
+example, SHOUTcast servers respond with "ICY 200 OK". Also some very old
+Icecast 1.3.x servers will respond like that for certain user agent headers or
+in absence of such. 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".
 
 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
index 72c6a9d..7720f01 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTP200ALIASES man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,13 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTP200ALIASES - specify alternative matches for HTTP 200 OK <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP200ALIASES,
- &nbsp;                         struct curl_slist *aliases);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP200ALIASES,
+&nbsp;                         struct curl_slist *aliases);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a pointer to a linked list of <span Class="emphasis">aliases</span> 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". 
+<p class="level0">Pass a pointer to a linked list of <span Class="emphasis">aliases</span> to be treated as valid HTTP 200 responses.  Some servers respond with a custom header response line.  For example, SHOUTcast servers respond with "ICY 200 OK". Also some very old Icecast 1.3.x servers will respond like that for certain user agent headers or in absence of such. 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". 
 <p class="level0">The linked list should be a fully valid list of struct curl_slist structs, and be properly filled in.  Use <span Class="emphasis">curl_slist_append(3)</span> to create the list and <span Class="emphasis">curl_slist_free_all(3)</span> to clean up an entire list. 
 <p class="level0">The alias itself is not parsed for any version strings. The protocol is assumed to match HTTP 1.0 when an alias match. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -61,6 +67,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 714de64..2a3a067 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf and b/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf differ
index 35d75aa..fc7a3a4 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c184acb..bc5c024 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTPAUTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,10 +52,11 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTPAUTH - set HTTP server authentication methods to try <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPAUTH, long bitmask);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPAUTH, long bitmask);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter, which is set to a bitmask, to tell libcurl which authentication method(s) you want it to use speaking to the remote server. 
 <p class="level0">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="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a> option or with the <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> and the <a Class="emphasis" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a> options. 
@@ -85,6 +91,6 @@ p.roffit {
 <p class="level0">CURLAUTH_ONLY was added in 7.21.3 
 <p class="level0">CURLAUTH_NTLM_WB was added in 7.22.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_NOT_BUILT_IN if the bitmask specified no supported authentication methods. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 34aa232..6e62fd8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf and b/docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf differ
index c14c387..01de1f3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index cd70851..c7e9210 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTPGET man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,26 +52,28 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTPGET - ask for a HTTP GET request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPGET, long useget); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If <span Class="emphasis">useget</span> is 1, this forces the HTTP request to get back to using GET. Usable if a POST, HEAD, PUT, etc has been used previously using the same curl <span Class="emphasis">handle</span>. 
 <p class="level0">When setting <a Class="emphasis" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a> to 1, it will automatically set <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a> to 0 and <a Class="emphasis" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a> to 0. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* use a GET to fetch this */ 
- &nbsp; curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
- <p class="level0">&nbsp; /* Perform the request */ 
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* use a GET to fetch this */ 
+&nbsp; curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
+&nbsp;
+&nbsp; /* Perform the request */ 
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2bb9c9e..9a1b41a 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTPGET.pdf and b/docs/libcurl/opts/CURLOPT_HTTPGET.pdf differ
index 10fcf08..c5ccb1a 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -63,21 +63,48 @@ Pass a NULL to this option to reset back to no custom headers.
 
 The most commonly replaced headers have "shortcuts" in the options
 \fICURLOPT_COOKIE(3)\fP, \fICURLOPT_USERAGENT(3)\fP and
-\fICURLOPT_REFERER(3)\fP.
+\fICURLOPT_REFERER(3)\fP. We recommend using those.
 
 There's an alternative option that sets or replaces headers only for requests
 that are sent with CONNECT to a proxy: \fICURLOPT_PROXYHEADER(3)\fP. Use
 \fICURLOPT_HEADEROPT(3)\fP to control the behavior.
+.SH SECURITY CONCERNS
+By default, this option makes libcurl send the given headers in all HTTP
+requests done by this handle. You should therefore use this option with
+caution if you for example connect to the remote site using a proxy and a
+CONNECT request, you should to consider if that proxy is supposed to also get
+the headers. They may be private or otherwise sensitive to leak.
+
+Use \fICURLOPT_HEADEROPT(3)\fP to make the headers only get sent to where you
+intend them to get sent.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+
+struct curl_slist *list = NULL;
+
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  list = curl_slist_append(list, "Shoesize: 10");
+  list = curl_slist_append(list, "Accept:");
+
+  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+
+  curl_easy_perform(curl);
+
+  curl_slist_free_all(list); /* free the list again */
+}
+.fi
+
 .SH AVAILABILITY
 As long as HTTP is enabled
 .SH RETURN VALUE
 Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
 .BR CURLOPT_CUSTOMREQUEST "(3), " CURLOPT_HEADEROPT "(3), "
-.BR CURLOPT_PROXYHEADER "(3)"
+.BR CURLOPT_PROXYHEADER "(3), " CURLOPT_HEADER "(3)"
index 308887a..567db37 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTPHEADER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTPHEADER - set custom HTTP headers <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPHEADER, struct curl_slist *headers); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a linked list of HTTP headers to pass to the server and/or proxy in your HTTP request. The same list can be used for both host and proxy requests! 
 <p class="level0">The linked list should be a fully valid list of <span Class="bold">struct curl_slist</span> structs properly filled in. Use <span Class="emphasis">curl_slist_append(3)</span> to create the list and <span Class="emphasis">curl_slist_free_all(3)</span> 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. With this option you can add new headers, replace internal headers and remove internal headers. To add a header with no content (nothing to the right side of the colon), use the form 'MyHeader;' (note the ending semicolon). 
@@ -55,13 +60,35 @@ p.roffit {
 <p class="level0">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. Use <a Class="emphasis" href="./CURLOPT_CUSTOMREQUEST.html">CURLOPT_CUSTOMREQUEST</a> to change the method. 
 <p class="level0">When this option is passed to <span Class="emphasis">curl_easy_setopt(3)</span>, libcurl will not copy the entire list so you <span Class="bold">must</span> keep it around until you no longer use this <span Class="emphasis">handle</span> for a transfer before you call <span Class="emphasis">curl_slist_free_all(3)</span> on the list. 
 <p class="level0">Pass a NULL to this option to reset back to no custom headers. 
-<p class="level0">The most commonly replaced headers have "shortcuts" in the options <a Class="emphasis" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="emphasis" href="./CURLOPT_USERAGENT.html">CURLOPT_USERAGENT</a> and <a Class="emphasis" href="./CURLOPT_REFERER.html">CURLOPT_REFERER</a>. 
-<p class="level0">There's an alternative option that sets or replaces headers only for requests that are sent with CONNECT to a proxy: <a Class="emphasis" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a>. Use <a Class="emphasis" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a> to control the behavior. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">The most commonly replaced headers have "shortcuts" in the options <a Class="emphasis" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <a Class="emphasis" href="./CURLOPT_USERAGENT.html">CURLOPT_USERAGENT</a> and <a Class="emphasis" href="./CURLOPT_REFERER.html">CURLOPT_REFERER</a>. We recommend using those. 
+<p class="level0">There's an alternative option that sets or replaces headers only for requests that are sent with CONNECT to a proxy: <a Class="emphasis" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a>. Use <a Class="emphasis" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a> to control the behavior. <a name="SECURITY"></a><h2 class="nroffsh">SECURITY CONCERNS</h2>
+<p class="level0">By default, this option makes libcurl send the given headers in all HTTP requests done by this handle. You should therefore use this option with caution if you for example connect to the remote site using a proxy and a CONNECT request, you should to consider if that proxy is supposed to also get the headers. They may be private or otherwise sensitive to leak. 
+<p class="level0">Use <a Class="emphasis" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a> to make the headers only get sent to where you intend them to get sent. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+&nbsp;
+struct curl_slist *list = NULL;
+&nbsp;
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; list = curl_slist_append(list, "Shoesize: 10");
+&nbsp; list = curl_slist_append(list, "Accept:");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+&nbsp;
+&nbsp; curl_slist_free_all(list); /* free the list again */
+}
+</pre>
+
+<p class="level0">
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">As long as HTTP is enabled <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CUSTOMREQUEST.html">CURLOPT_CUSTOMREQUEST</a>, <a Class="manpage" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CUSTOMREQUEST.html">CURLOPT_CUSTOMREQUEST</a>, <a Class="manpage" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a>, <a Class="manpage" href="./CURLOPT_PROXYHEADER.html">CURLOPT_PROXYHEADER</a>, <a Class="manpage" href="./CURLOPT_HEADER.html">CURLOPT_HEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4e471f2..7451060 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf and b/docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf differ
index 0f35b63..9db6415 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 226621d..aeecc71 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTPPOST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,42 +52,45 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTPPOST - specify the multipart formpost content <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPOST,
- &nbsp;                         struct curl_httppost *formpost);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPOST,
+&nbsp;                         struct curl_httppost *formpost);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Tells libcurl you want a multipart/formdata HTTP POST to be made and you instruct what data to pass on to the server in the <span Class="emphasis">formpost</span> argument. Pass a pointer to a linked list of curl_httppost structs as parameter.  The easiest way to create such a list, is to use <span Class="emphasis">curl_formadd(3)</span> as documented. The data in this list must remain intact until you close this curl handle again with <span Class="emphasis">curl_easy_cleanup(3)</span>. 
 <p class="level0">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="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. 
 <p class="level0">When setting <a Class="emphasis" href="./CURLOPT_HTTPPOST.html">CURLOPT_HTTPPOST</a>, it will automatically set <a Class="emphasis" href="./CURLOPT_NOBODY.html">CURLOPT_NOBODY</a> to 0. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">/* Fill in the file upload field. This makes libcurl load data from
- &nbsp;  the given file name when curl_easy_perform() is called. */
- curl_formadd(&formpost,
- &nbsp;            &lastptr,
- &nbsp;            CURLFORM_COPYNAME, "sendfile",
- &nbsp;            CURLFORM_FILE, "postit2.c",
- &nbsp;            CURLFORM_END);
- <p class="level0">/* Fill in the filename field */
- curl_formadd(&formpost,
- &nbsp;            &lastptr,
- &nbsp;            CURLFORM_COPYNAME, "filename",
- &nbsp;            CURLFORM_COPYCONTENTS, "postit2.c",
- &nbsp;            CURLFORM_END);
- <p class="level0">/* Fill in the submit field too, even if this is rarely needed */
- curl_formadd(&formpost,
- &nbsp;            &lastptr,
- &nbsp;            CURLFORM_COPYNAME, "submit",
- &nbsp;            CURLFORM_COPYCONTENTS, "send",
- &nbsp;            CURLFORM_END);
- </pre>
+<p class="level0"><pre class="level0">
+/* Fill in the file upload field. This makes libcurl load data from
+&nbsp;  the given file name when curl_easy_perform() is called. */
+curl_formadd(&formpost,
+&nbsp;            &lastptr,
+&nbsp;            CURLFORM_COPYNAME, "sendfile",
+&nbsp;            CURLFORM_FILE, "postit2.c",
+&nbsp;            CURLFORM_END);
+&nbsp;
+/* Fill in the filename field */
+curl_formadd(&formpost,
+&nbsp;            &lastptr,
+&nbsp;            CURLFORM_COPYNAME, "filename",
+&nbsp;            CURLFORM_COPYCONTENTS, "postit2.c",
+&nbsp;            CURLFORM_END);
+&nbsp;
+/* Fill in the submit field too, even if this is rarely needed */
+curl_formadd(&formpost,
+&nbsp;            &lastptr,
+&nbsp;            CURLFORM_COPYNAME, "submit",
+&nbsp;            CURLFORM_COPYCONTENTS, "send",
+&nbsp;            CURLFORM_END);
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">As long as HTTP is enabled <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3889f02..70498e8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTPPOST.pdf and b/docs/libcurl/opts/CURLOPT_HTTPPOST.pdf differ
index 3cbf50e..6b48a05 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -37,6 +37,9 @@ Tunneling essentially means that a CONNECT is sent to the proxy, asking it to
 connect to a remote host on a specific port number and then the traffic is
 just passed through the proxy. Proxies tend to whitelist specific port numbers
 it allows CONNECT requests to and often only port 80 and 443 are allowed.
+
+When using this, it only makes sense to use \fICURLOPT_PROXYTYPE(3)\fP set to
+a HTTP proxy.
 .SH DEFAULT
 0
 .SH PROTOCOLS
@@ -48,4 +51,4 @@ Always
 .SH RETURN VALUE
 Returns CURLE_OK
 .SH "SEE ALSO"
-.BR CURLOPT_PROXY "(3), "
+.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), " CURLOPT_PROXYPORT "(3), "
index 6f1688e..265453b 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTPPROXYTUNNEL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTPPROXYTUNNEL - tunnel through HTTP proxy <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set the parameter to 1 to make libcurl tunnel all operations through the 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">Tunneling essentially means that a CONNECT is sent to the proxy, asking it to connect to a remote host on a specific port number and then the traffic is just passed through the proxy. Proxies tend to whitelist specific port numbers it allows CONNECT requests to and often only port 80 and 443 are allowed. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Tunneling essentially means that a CONNECT is sent to the proxy, asking it to connect to a remote host on a specific port number and then the traffic is just passed through the proxy. Proxies tend to whitelist specific port numbers it allows CONNECT requests to and often only port 80 and 443 are allowed. 
+<p class="level0">When using this, it only makes sense to use <a Class="emphasis" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a> set to a HTTP proxy. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All network protocols <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index babdf52..ccbbe59 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf and b/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf differ
index 65472ec..9338b24 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index cacd17e..9a16368 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTP_CONTENT_DECODING man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTP_CONTENT_DECODING - enable/disable HTTP content decoding <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_CONTENT_DECODING,
- &nbsp;                         long enabled);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_CONTENT_DECODING,
+&nbsp;                         long enabled);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a> for that. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <a Class="manpage" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 36983d8..4af677d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf and b/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf differ
index 26662db..ddd59d2 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ddf9eea..fc6d00c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTP_TRANSFER_DECODING man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTP_TRANSFER_DECODING - enable/disable HTTP transfer decoding <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_TRANSFER_DECODING,
- &nbsp;                        long enabled);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_TRANSFER_DECODING,
+&nbsp;                        long enabled);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_CONTENT_DECODING.html">CURLOPT_HTTP_CONTENT_DECODING</a>, <a Class="manpage" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_CONTENT_DECODING.html">CURLOPT_HTTP_CONTENT_DECODING</a>, <a Class="manpage" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 151796c..c833a52 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf and b/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf differ
index ed5ea82..dd57a29 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -28,11 +28,15 @@ CURLOPT_HTTP_VERSION \- specify HTTP protocol version to use
 
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
 .SH DESCRIPTION
-Pass \fIversion\fP 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. You have to set this option if you want to use
+Pass \fIversion\fP a long, set to one of the values described below. They ask
+libcurl to use the specific HTTP versions. This is not sensible to do unless
+you have a good reason. You have to set this option if you want to use
 libcurl's HTTP/2 support.
 
+Note that the HTTP version is just a request. libcurl will still prioritize to
+re-use an existing connection so it might then re-use a connection using a
+HTTP version you haven't asked for.
+
 .IP CURL_HTTP_VERSION_NONE
 We don't care about what version the library uses. libcurl will use whatever
 it thinks fit.
@@ -41,8 +45,15 @@ Enforce HTTP 1.0 requests.
 .IP CURL_HTTP_VERSION_1_1
 Enforce HTTP 1.1 requests.
 .IP CURL_HTTP_VERSION_2_0
-Attempt HTTP 2.0 requests. libcurl will fall back to HTTP 1.x if HTTP 2.0
-can't be negotiated with the server.
+Attempt HTTP 2 requests. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be
+negotiated with the server. (Added in 7.33.0)
+
+The alias \fICURL_HTTP_VERSION_2\fI was added in 7.43.0 to better reflect the
+actual protocol name.
+.IP CURL_HTTP_VERSION_2TLS
+Attempt HTTP 2 over TLS (HTTPS) only. libcurl will fall back to HTTP 1.1 if
+HTTP 2 can't be negotiated with the HTTPS server. For clear text HTTP servers,
+libcurl will use 1.1. (Added in 7.47.0)
 .SH DEFAULT
 CURL_HTTP_VERSION_NONE
 .SH PROTOCOLS
index 7169870..6a1323c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_HTTP_VERSION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,9 +52,10 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_HTTP_VERSION - specify HTTP protocol version to use <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass <span Class="emphasis">version</span> 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. You have to set this option if you want to use libcurl's HTTP/2 support. 
+<p class="level0">Pass <span Class="emphasis">version</span> a long, set to one of the values described below. They ask libcurl to use the specific HTTP versions. This is not sensible to do unless you have a good reason. You have to set this option if you want to use libcurl's HTTP/2 support. 
+<p class="level0">Note that the HTTP version is just a request. libcurl will still prioritize to re-use an existing connection so it might then re-use a connection using a HTTP version you haven't asked for. 
 <p class="level0">
 <p class="level0"><a name="CURLHTTPVERSIONNONE"></a><span class="nroffip">CURL_HTTP_VERSION_NONE</span> 
 <p class="level1">We don't care about what version the library uses. libcurl will use whatever it thinks fit. 
@@ -58,12 +64,15 @@ p.roffit {
 <p class="level0"><a name="CURLHTTPVERSION11"></a><span class="nroffip">CURL_HTTP_VERSION_1_1</span> 
 <p class="level1">Enforce HTTP 1.1 requests. 
 <p class="level0"><a name="CURLHTTPVERSION20"></a><span class="nroffip">CURL_HTTP_VERSION_2_0</span> 
-<p class="level1">Attempt HTTP 2.0 requests. libcurl will fall back to HTTP 1.x if HTTP 2.0 can't be negotiated with the server. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level1">Attempt HTTP 2 requests. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be negotiated with the server. (Added in 7.33.0) 
+<p class="level1">The alias <span class="emphasis">CURL_HTTP_VERSION_2<span class="emphasis"> was added in 7.43.0 to better reflect the actual protocol name. 
+<p class="level0"><a name="CURLHTTPVERSION2TLS"></a><span class="nroffip">CURL_HTTP_VERSION_2TLS</span> 
+<p class="level1">Attempt HTTP 2 over TLS (HTTPS) only. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be negotiated with the HTTPS server. For clear text HTTP servers, libcurl will use 1.1. (Added in 7.47.0) <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">CURL_HTTP_VERSION_NONE <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_HTTP200ALIASES.html">CURLOPT_HTTP200ALIASES</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_HTTP200ALIASES.html">CURLOPT_HTTP200ALIASES</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7351f4d..a559dca 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf and b/docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf differ
index 11bff65..413ee57 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -22,7 +22,7 @@
 .\"
 .TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 .SH NAME
-CURLOPT_IGNORE_CONTENT_LENGTH \- ignore Content-Length in HTTP response
+CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
 .SH SYNOPSIS
 .nf
 #include <curl/curl.h>
@@ -30,21 +30,37 @@ CURLOPT_IGNORE_CONTENT_LENGTH \- ignore Content-Length in HTTP response
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
                           long ignore);
 .SH DESCRIPTION
-If \fIignore\fP is set to 1, ignore the Content-Length header in the HTTP
-response. This is useful for Apache 1.x (and similar servers) which will
+If \fIignore\fP is set to 1L, ignore the Content-Length header in the HTTP
+response and ignore asking for or relying on it for FTP transfers.
+
+This is useful for HTTP with 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.
 
+It is also useful with FTP when for example the file is growing while the
+transfer is in progress which otherwise will unconditionally cause libcurl to
+report error.
+
 Only use this option if strictly necessary.
 .SH DEFAULT
 0
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* we know the server is silly, ignore content-length */
+  curl_easy_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
-Added in 7.14.1
+Added in 7.14.1. Support for FTP added in 7.46.0.
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index 7616ae5..8486ef3 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_IGNORE_CONTENT_LENGTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -46,20 +51,35 @@ p.roffit {
 </head><body>
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
-<p class="level0">CURLOPT_IGNORE_CONTENT_LENGTH - ignore Content-Length in HTTP response <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
- &nbsp;                         long ignore);
- </pre>
+<p class="level0">CURLOPT_IGNORE_CONTENT_LENGTH - ignore content length <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
+&nbsp;                         long ignore);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">If <span Class="emphasis">ignore</span> is set to 1, ignore the Content-Length header in the HTTP response. 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. 
+<p class="level0">If <span Class="emphasis">ignore</span> is set to 1L, ignore the Content-Length header in the HTTP response and ignore asking for or relying on it for FTP transfers. 
+<p class="level0">This is useful for HTTP with 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. 
+<p class="level0">It is also useful with FTP when for example the file is growing while the transfer is in progress which otherwise will unconditionally cause libcurl to report error. 
 <p class="level0">Only use this option if strictly necessary. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Added in 7.14.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* we know the server is silly, ignore content-length */
+&nbsp; curl_easy_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.14.1. Support for FTP added in 7.46.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <a Class="manpage" href="./CURLOPT_MAXFILESIZE_LARGE.html">CURLOPT_MAXFILESIZE_LARGE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <a Class="manpage" href="./CURLOPT_MAXFILESIZE_LARGE.html">CURLOPT_MAXFILESIZE_LARGE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 90a31bc..013b14b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf and b/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf differ
index 129414c..088f45d 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -49,7 +49,20 @@ Unset
 .SH PROTOCOLS
 Many
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  long uploadsize = FILE_SIZE;
+
+  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz");
+
+  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+  curl_easy_setopt(curl, CURLOPT_INFILESIZE, uploadsize);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 SMTP support added in 7.23.0
 .SH RETURN VALUE
index ae0e217..d8ae44e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_INFILESIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_INFILESIZE - set size of the input file to send off <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE, long filesize); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">When uploading a file to a remote site, <span Class="emphasis">filesize</span> should be used to tell libcurl what the expected size of the input file is. This value must be passed as a long. See also <a Class="emphasis" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a> for sending files larger than 2GB. 
 <p class="level0">For uploading using SCP, this option or <a Class="emphasis" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a> is mandatory. 
@@ -56,9 +61,24 @@ p.roffit {
 <p class="level0">This option does not limit how much data libcurl will actually send, as that is controlled entirely by what the read callback returns, but telling one value and sending a different amount may lead to errors. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Unset <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Many <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; long uploadsize = FILE_SIZE;
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE, uploadsize);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">SMTP support added in 7.23.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 39e4d28..84d8e90 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_INFILESIZE.pdf and b/docs/libcurl/opts/CURLOPT_INFILESIZE.pdf differ
index 0aa5224..f866cd4 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -50,7 +50,20 @@ Unset
 .SH PROTOCOLS
 Many
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_off_t uploadsize = FILE_SIZE;
+
+  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz");
+
+  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+
+  curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadsize);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 SMTP support added in 7.23.0
 .SH RETURN VALUE
index c16aed1..ee20b6f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_INFILESIZE_LARGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_INFILESIZE_LARGE - set size of the input file to send off <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE_LARGE,
- &nbsp;                         curl_off_t filesize);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE_LARGE,
+&nbsp;                         curl_off_t filesize);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">When uploading a file to a remote site, <span Class="emphasis">filesize</span> should be used to tell libcurl what the expected size of the input file is. This value must be passed as a <span Class="bold">curl_off_t</span>.  
 <p class="level0">For uploading using SCP, this option or <a Class="emphasis" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a> is mandatory. 
@@ -60,9 +66,24 @@ p.roffit {
 <p class="level0">This option does not limit how much data libcurl will actually send, as that is controlled entirely by what the read callback returns, but telling one value and sending a different amount may lead to errors. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Unset <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Many <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_off_t uploadsize = FILE_SIZE;
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadsize);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">SMTP support added in 7.23.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 769696a..cd04983 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf and b/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf differ
index 0890eb6..77db372 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 4806797..3b226f2 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_INTERFACE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_INTERFACE - source interface for outgoing traffic <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter. This sets the <span Class="emphasis">interface</span> name to use as outgoing network interface. The name can be an interface name, an IP address, or a host name. 
 <p class="level0">If the parameter starts with "if!" then it is treated as only as interface name and no attempt will ever be named to do treat it as an IP address or to do name resolution on it.  If the parameter starts with "host!" it is treated as either an IP address or a hostname.  Hostnames are resolved synchronously.  Using the if! format is highly recommended when using the multi interfaces to avoid allowing the code to block.  If "if!" is specified but the parameter does not match an existing interface, CURLE_INTERFACE_FAILED is returned from the libcurl function used to perform the transfer. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">The "if!" and "host!" syntax was added in 7.24.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_TCP_NODELAY.html">CURLOPT_TCP_NODELAY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_TCP_NODELAY.html">CURLOPT_TCP_NODELAY</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 564e7b2..a5faed8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_INTERFACE.pdf and b/docs/libcurl/opts/CURLOPT_INTERFACE.pdf differ
index 836dfac..b47d21d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index bc98928..758548d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_INTERLEAVEDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_INTERLEAVEDATA - custom pointer to RTSP interleave callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">This is the userdata <span Class="emphasis">pointer</span> that will be passed to <a Class="emphasis" href="./CURLOPT_INTERLEAVEFUNCTION.html">CURLOPT_INTERLEAVEFUNCTION</a> when interleaved RTP data is received. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_INTERLEAVEFUNCTION.html">CURLOPT_INTERLEAVEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_INTERLEAVEFUNCTION.html">CURLOPT_INTERLEAVEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b51132c..15305c8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf and b/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf differ
index b965529..95e6fe5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index d6d82a1..ffe5b33 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_INTERLEAVEFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,22 +52,24 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_INTERLEAVEFUNCTION - callback function for RTSP interleaved data <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">size_t interleave_callback(void *ptr, size_t size, size_t nmemb,
- &nbsp;                          void *userdata);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEFUNCTION,
- &nbsp;                         interleave_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+size_t interleave_callback(void *ptr, size_t size, size_t nmemb,
+&nbsp;                          void *userdata);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEFUNCTION,
+&nbsp;                         interleave_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
-<p class="level0">This callback 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"><a href="http://www.ietf.org/rfc/rfc2326.txt">RFC 2326</a> 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="level0">This callback 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">RFC2326 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="level0">Interleaved RTP poses some challenges 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 <span Class="emphasis">CURL_RTSPREQ_RECEIVE</span> to service RTP data when no requests are desired. If the application makes a request, (e.g.  <span Class="emphasis">CURL_RTSPREQ_PAUSE</span>) then the response handler will process any pending RTP data before marking the request as finished. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">RTSP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_INTERLEAVEFUNCTION.html">CURLOPT_INTERLEAVEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_INTERLEAVEFUNCTION.html">CURLOPT_INTERLEAVEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 08f7c69..c86450d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf differ
index 456080c..0ef96e2 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 7b4b296..2bc57f7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_IOCTLDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_IOCTLDATA - custom pointer passed to I/O callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass the <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the 3rd argument in the ioctl callback set with <a Class="emphasis" href="./CURLOPT_IOCTLFUNCTION.html">CURLOPT_IOCTLFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">By default, the value of this parameter is NULL. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.12.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_IOCTLFUNCTION.html">CURLOPT_IOCTLFUNCTION</a>, <a Class="manpage" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_IOCTLFUNCTION.html">CURLOPT_IOCTLFUNCTION</a>, <a Class="manpage" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a6bb33b..a655c22 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf and b/docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf differ
index ebfe8df..f2dd42e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 4280b9f..94725dd 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_IOCTLFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,22 +52,26 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_IOCTLFUNCTION - callback for I/O operations <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">typedef enum {
- &nbsp; CURLIOE_OK,            /* I/O operation successful */
- &nbsp; CURLIOE_UNKNOWNCMD,    /* command was unknown to callback */
- &nbsp; CURLIOE_FAILRESTART,   /* failed to restart the read */
- &nbsp; CURLIOE_LAST           /* never use */
- } curlioerr;
- <p class="level0">typedef enum  {
- &nbsp; CURLIOCMD_NOP,         /* no operation */
- &nbsp; CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
- &nbsp; CURLIOCMD_LAST         /* never use */
- } curliocmd;
- <p class="level0">curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLFUNCTION, ioctl_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+typedef enum {
+&nbsp; CURLIOE_OK,            /* I/O operation successful */
+&nbsp; CURLIOE_UNKNOWNCMD,    /* command was unknown to callback */
+&nbsp; CURLIOE_FAILRESTART,   /* failed to restart the read */
+&nbsp; CURLIOE_LAST           /* never use */
+} curlioerr;
+&nbsp;
+typedef enum  {
+&nbsp; CURLIOCMD_NOP,         /* no operation */
+&nbsp; CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
+&nbsp; CURLIOCMD_LAST         /* never use */
+} curliocmd;
+&nbsp;
+curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLFUNCTION, ioctl_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">This callback 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. 
@@ -74,6 +83,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.12.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_IOCTLDATA.html">CURLOPT_IOCTLDATA</a>, <a Class="manpage" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_IOCTLDATA.html">CURLOPT_IOCTLDATA</a>, <a Class="manpage" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index bf304e1..35cd8f8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf differ
index ad9827a..817f34d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 283873c..a2b464e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_IPRESOLVE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_IPRESOLVE - specify which IP protocol version to use <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="level0"><a name="CURLIPRESOLVEWHATEVER"></a><span class="nroffip">CURL_IPRESOLVE_WHATEVER</span> 
@@ -61,6 +66,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 79c6dd3..21e4c95 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf and b/docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf differ
index 08afb29..61198ea 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index d1bef9f..45e76a4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_ISSUERCERT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_ISSUERCERT - issuer SSL certificate filename <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a zero terminated string naming a <span Class="emphasis">file</span> 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="level0">This option makes sense only when used in combination with the <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> option. Otherwise, the result of the check is not considered as failure. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CRLFILE.html">CURLOPT_CRLFILE</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CRLFILE.html">CURLOPT_CRLFILE</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a04ea53..c29ab0b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf and b/docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf differ
index 0ed0c87..9b85b82 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -35,7 +35,7 @@ phrase to load a certificate but you need one to load your private key.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index 9c02291..422456e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_KEYPASSWD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_KEYPASSWD - set passphrase to private key <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a> or <a Class="emphasis" href="./CURLOPT_SSH_PRIVATE_KEYFILE.html">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This option was known as CURLOPT_SSLKEYPASSWD up to 7.16.4 and CURLOPT_SSLCERTPASSWD up to 7.9.2. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <a Class="manpage" href="./CURLOPT_SSH_PRIVATE_KEYFILE.html">CURLOPT_SSH_PRIVATE_KEYFILE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <a Class="manpage" href="./CURLOPT_SSH_PRIVATE_KEYFILE.html">CURLOPT_SSH_PRIVATE_KEYFILE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index db9de05..3e070ef 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf and b/docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf differ
index 571eba3..6ebd2f2 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -45,4 +45,4 @@ This option was known as CURLOPT_KRB4LEVEL up to 7.16.3
 Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 .SH "SEE ALSO"
-.BR CURLOPT_KRBLEVEL "(3), " CURLOPT_FTP_SSL "(3), "
+.BR CURLOPT_KRBLEVEL "(3), " CURLOPT_USE_SSL "(3), "
index 4e503fd..21fefda 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_KRBLEVEL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_KRBLEVEL - set FTP kerberos security level <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter. Set the kerberos security level for FTP; this also enables kerberos awareness.  This is a string that should match one of the following: '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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This option was known as CURLOPT_KRB4LEVEL up to 7.16.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_KRBLEVEL.html">CURLOPT_KRBLEVEL</a>, <span Class="manpage">  CURLOPT_FTP_SSL (3)</span> <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_KRBLEVEL.html">CURLOPT_KRBLEVEL</a>, <a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9a583b5..1cc6da6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf and b/docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf differ
index 88ca1f8..e56f012 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ff86fd5..f62b0a3 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_LOCALPORT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_LOCALPORT - set local port number to use for socket <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORT, long port); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. This sets the local port number of the socket used for the connection. This can be used in combination with <a Class="emphasis" href="./CURLOPT_INTERFACE.html">CURLOPT_INTERFACE</a> and you are recommended to use <a Class="emphasis" href="./CURLOPT_LOCALPORTRANGE.html">CURLOPT_LOCALPORTRANGE</a> as well when this option is set. Valid port numbers are 1 - 65535. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, disabled - use whatever the system thinks is fine <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_LOCALPORTRANGE.html">CURLOPT_LOCALPORTRANGE</a>, <a Class="manpage" href="./CURLOPT_INTERFACE.html">CURLOPT_INTERFACE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_LOCALPORTRANGE.html">CURLOPT_LOCALPORTRANGE</a>, <a Class="manpage" href="./CURLOPT_INTERFACE.html">CURLOPT_INTERFACE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 68e8564..f55c8fa 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_LOCALPORT.pdf and b/docs/libcurl/opts/CURLOPT_LOCALPORT.pdf differ
index 3a7c701..e54a1c8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 1e6181e..25e5262 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_LOCALPORTRANGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_LOCALPORTRANGE - number of additional local ports to try <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE, &nbsp;                         long range); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. The <span Class="emphasis">range</span> argument is the number of attempts libcurl will make to find a working local port number. It starts with the given <a Class="emphasis" href="./CURLOPT_LOCALPORT.html">CURLOPT_LOCALPORT</a> and adds one to the number for each retry. Setting this option 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.2 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_LOCALPORT.html">CURLOPT_LOCALPORT</a>, <a Class="manpage" href="./CURLOPT_INTERFACE.html">CURLOPT_INTERFACE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_LOCALPORT.html">CURLOPT_LOCALPORT</a>, <a Class="manpage" href="./CURLOPT_INTERFACE.html">CURLOPT_INTERFACE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index cf5a7a6..38bfc24 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf and b/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf differ
index dde3c6e..7dff9ca 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ac84955..c4f7bf9 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_LOGIN_OPTIONS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_LOGIN_OPTIONS - set login options <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be pointing to the zero terminated <span Class="emphasis">options</span> string to use for the transfer. 
-<p class="level0">For more information about the login options please see <a href="http://www.ietf.org/rfc/rfc2384.txt">RFC 2384</a>, RFC5092 and IETF draft draft-earhart-url-smtp-00.txt 
+<p class="level0">For more information about the login options please see <a href="http://www.ietf.org/rfc/rfc2384.txt">RFC 2384</a>, <a href="http://www.ietf.org/rfc/rfc5092.txt">RFC 5092</a> and IETF draft draft-earhart-url-smtp-00.txt 
 <p class="level0"><a Class="bold" href="./CURLOPT_LOGIN_OPTIONS.html">CURLOPT_LOGIN_OPTIONS</a> can be used to set protocol specific login options, such as the preferred authentication mechanism via "AUTH=NTLM" or "AUTH=*", and should be used in conjunction with the <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Only IMAP, POP3 and SMTP support login options. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.34.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7c15e64..0d6792e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf and b/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf differ
index 893c1b1..890ea72 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index a10f6e6..700bc70 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_LOW_SPEED_LIMIT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_LOW_SPEED_LIMIT - set low speed limit in bytes per second <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_LIMIT, long speedlimit); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter. It contains the average transfer speed in bytes per second that the transfer should be below during <a Class="emphasis" href="./CURLOPT_LOW_SPEED_TIME.html">CURLOPT_LOW_SPEED_TIME</a> seconds for libcurl to consider it to be too slow and abort. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_LOW_SPEED_TIME.html">CURLOPT_LOW_SPEED_TIME</a>, <a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_LOW_SPEED_TIME.html">CURLOPT_LOW_SPEED_TIME</a>, <a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b7aaaf5..f26b20d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf and b/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf differ
index 90b19f2..ed3b829 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 0d097df..b521077 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_LOW_SPEED_TIME man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_LOW_SPEED_TIME - set low speed limit time period <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_TIME, long speedtime); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter. It contains the time in number seconds that the transfer speed should be below the <a Class="emphasis" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a> for the library to consider it too slow and abort. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 41f2f37..4ade9e9 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf and b/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf differ
index 4591a01..bd581f0 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 3209031..6479901 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAIL_AUTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAIL_AUTH - SMTP authentication address <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a zero terminated string as parameter. This will be used to specify the authentication address (identity) of a submitted message that is being relayed to another server. 
 <p class="level0">This optional parameter allows co-operating agents in a trusted environment to communicate the authentication of individual messages and should only be used by the application program, using libcurl, if the application is itself a mail server acting in such an environment. If the application is operating as such and the AUTH address is not known or is invalid, then an empty string should be used for this parameter. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.25.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a>, <a Class="manpage" href="./CURLOPT_MAIL_RCPT.html">CURLOPT_MAIL_RCPT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a>, <a Class="manpage" href="./CURLOPT_MAIL_RCPT.html">CURLOPT_MAIL_RCPT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5afbd97..8d68a73 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf and b/docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf differ
index bf7160e..0420d49 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f34a2fc..f09e209 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAIL_FROM man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAIL_FROM - SMTP sender address <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_FROM, char *from); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a zero terminated string as parameter. This should be used to specify the sender's email address when sending SMTP mail with libcurl. 
 <p class="level0">An originator email address should be specified with angled brackets (&lt;&gt;) around it, which if not specified will be added automatically. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_RCPT.html">CURLOPT_MAIL_RCPT</a>, <a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_RCPT.html">CURLOPT_MAIL_RCPT</a>, <a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 0d24fce..0676fd3 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf and b/docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf differ
index 95665e7..01fa62a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index a37fcd5..1def8cf 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAIL_RCPT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAIL_RCPT - list of SMTP mail recipients <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT,
- &nbsp;                         struct curl_slist *rcpts);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT,
+&nbsp;                         struct curl_slist *rcpts);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 <span Class="emphasis">curl_slist_append(3)</span> to create the list and <span Class="emphasis">curl_slist_free_all(3)</span> to clean up an entire list. 
 <p class="level0">When performing a mail transfer, each recipient should be specified within a pair of angled brackets (&lt;&gt;), however, should you not use an angled bracket as the first character libcurl will assume you provided a single email address and enclose that address within brackets for you. 
@@ -62,6 +68,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0. The VRFY and EXPN logic was added in 7.34.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a>, <a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a>, <a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index bc2e86f..ba54fe4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf and b/docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf differ
index 2a41b37..ea875fa 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 3edcfba..65e978c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAXCONNECTS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAXCONNECTS - maximum connection cache size <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. The set <span Class="emphasis">amount</span> will be the maximum number of simultaneously open persistent connections that libcurl may cache in the pool associated with this handle. The 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="level0">When reaching the maximum limit, curl closes the oldest one in the cache to prevent increasing the number of open connections. 
@@ -58,6 +63,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLOPT_MAXREDIRS.html">CURLOPT_MAXREDIRS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLMOPT_MAXCONNECTS.html">CURLMOPT_MAXCONNECTS</a>, <a Class="manpage" href="./CURLOPT_MAXREDIRS.html">CURLOPT_MAXREDIRS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 1cc92db..99f6378 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf and b/docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf differ
index e0ce066..5f5959a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 306cc59..713c132 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAXFILESIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAXFILESIZE - maximum file size allowed to download <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter. This allows you to specify the maximum <span Class="emphasis">size</span> (in bytes) of a file to download. If the file requested is found larger than this value, the transfer will not start and <span Class="emphasis">CURLE_FILESIZE_EXCEEDED</span> will be returned. 
 <p class="level0">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. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAXFILESIZE_LARGE.html">CURLOPT_MAXFILESIZE_LARGE</a>, <a Class="manpage" href="./CURLOPT_MAX_RECV_SPEED_LARGE.html">CURLOPT_MAX_RECV_SPEED_LARGE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAXFILESIZE_LARGE.html">CURLOPT_MAXFILESIZE_LARGE</a>, <a Class="manpage" href="./CURLOPT_MAX_RECV_SPEED_LARGE.html">CURLOPT_MAX_RECV_SPEED_LARGE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b434b96..3427ae4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf and b/docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf differ
index b313001..630c0b5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index fb97d1e..f0752b2 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAXFILESIZE_LARGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAXFILESIZE_LARGE - maximum file size allowed to download <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE_LARGE,
- &nbsp;                         curl_off_t size);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE_LARGE,
+&nbsp;                         curl_off_t size);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a curl_off_t as parameter. This allows you to specify the maximum <span Class="emphasis">size</span> (in bytes) of a file to download. If the file requested is found larger than this value, the transfer will not start and <span Class="emphasis">CURLE_FILESIZE_EXCEEDED</span> will be returned. 
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -60,6 +66,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.11.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAXFILESIZE.html">CURLOPT_MAXFILESIZE</a>, <a Class="manpage" href="./CURLOPT_MAX_RECV_SPEED_LARGE.html">CURLOPT_MAX_RECV_SPEED_LARGE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAXFILESIZE.html">CURLOPT_MAXFILESIZE</a>, <a Class="manpage" href="./CURLOPT_MAX_RECV_SPEED_LARGE.html">CURLOPT_MAX_RECV_SPEED_LARGE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3ab4721..6fdca2d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf and b/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf differ
index 34608c3..ce62553 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 5fe7247..dce0f90 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAXREDIRS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,29 +52,32 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAXREDIRS - maximum number of redirects allowed <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. The set number will be the redirection limit <span Class="emphasis">amount</span>. 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="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a> is used at the same time. 
 <p class="level0">Setting the limit to 0 will make libcurl refuse any redirect. 
 <p class="level0">Set it to -1 for an infinite number of redirects. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">-1, unlimited <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com/">http://example.com/</a>");
- <p class="level0">&nbsp; /* enable redirect following */
- &nbsp; curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
- <p class="level0">&nbsp; /* allow three redirects */
- &nbsp; curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
+&nbsp;
+&nbsp; /* enable redirect following */
+&nbsp; curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
+&nbsp;
+&nbsp; /* allow three redirects */
+&nbsp; curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a00bda4..e45f74b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf and b/docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf differ
index e73ad22..031f2cd 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index aa54256..388a3e4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAX_RECV_SPEED_LARGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAX_RECV_SPEED_LARGE - rate limit data download speed <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_RECV_SPEED_LARGE,
- &nbsp;                         curl_off_t speed);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_RECV_SPEED_LARGE,
+&nbsp;                         curl_off_t speed);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a curl_off_t as parameter.  If a download exceeds this <span Class="emphasis">speed</span> (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. 
 <p class="level0">This option doesn't affect transfer speeds done with FILE:// URLs. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -60,6 +66,6 @@ p.roffit {
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAX_SEND_SPEED_LARGE.html">CURLOPT_MAX_SEND_SPEED_LARGE</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAX_SEND_SPEED_LARGE.html">CURLOPT_MAX_SEND_SPEED_LARGE</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ffd933a..6554b00 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf and b/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf differ
index 4893b39..c2c6336 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ed9c19a..d604999 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_MAX_SEND_SPEED_LARGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_MAX_SEND_SPEED_LARGE - rate limit data upload speed <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_SEND_SPEED_LARGE,
- &nbsp;                         curl_off_t maxspeed);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_SEND_SPEED_LARGE,
+&nbsp;                         curl_off_t maxspeed);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a curl_off_t as parameter with the <span Class="emphasis">maxspeed</span>.  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. 
 <p class="level0">This option doesn't affect transfer speeds done with FILE:// URLs. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -60,6 +66,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.15.5 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAX_RECV_SPEED_LARGE.html">CURLOPT_MAX_RECV_SPEED_LARGE</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAX_RECV_SPEED_LARGE.html">CURLOPT_MAX_RECV_SPEED_LARGE</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9b43918..391ac96 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf and b/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf differ
index 9fb13b3..c453dd3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 777f4ff..65b3cec 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NETRC man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NETRC - request that .netrc is used <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC, long level); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">This parameter controls the preference <span Class="emphasis">level</span> 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="./CURLOPT_URL.html">CURLOPT_URL</a>. 
 <p class="level0">libcurl uses a user name (and supplied or prompted password) supplied with <a Class="emphasis" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a> or <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> in preference to any of the options controlled by this parameter. 
@@ -68,6 +73,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 05b8eea..842a3f4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NETRC.pdf and b/docs/libcurl/opts/CURLOPT_NETRC.pdf differ
index 7291999..d3ecc95 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 8b05da0..e401fa6 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NETRC_FILE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NETRC_FILE - file name to read .netrc info from <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, pointing to a zero terminated string containing the full path name to the <span Class="emphasis">file</span> you want libcurl to use as .netrc file. If this option is omitted, and <a Class="emphasis" href="./CURLOPT_NETRC.html">CURLOPT_NETRC</a> is set, libcurl will attempt to find a .netrc file in the current user's home directory. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.9 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_NETRC.html">CURLOPT_NETRC</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_NETRC.html">CURLOPT_NETRC</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index e14615d..aa22736 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf and b/docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf differ
index 2d22595..f195fab 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 401b885..8ea9fcc 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NEW_DIRECTORY_PERMS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NEW_DIRECTORY_PERMS - permissions for remotely created directories <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_DIRECTORY_PERMS,
- &nbsp;                         long mode);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_DIRECTORY_PERMS,
+&nbsp;                         long mode);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0755 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_NEW_FILE_PERMS.html">CURLOPT_NEW_FILE_PERMS</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_NEW_FILE_PERMS.html">CURLOPT_NEW_FILE_PERMS</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 75aa45f..90c2c01 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf and b/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf differ
index eb51f46..2a41aba 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index da31f73..eeb2904 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NEW_FILE_PERMS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NEW_FILE_PERMS - permissions for remotely created files <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_FILE_PERMS,
- &nbsp;                         long mode);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_FILE_PERMS,
+&nbsp;                         long mode);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0644 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_NEW_DIRECTORY_PERMS.html">CURLOPT_NEW_DIRECTORY_PERMS</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_NEW_DIRECTORY_PERMS.html">CURLOPT_NEW_DIRECTORY_PERMS</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4be0871..b0e2ddf 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf and b/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf differ
index b303b95..340b9f4 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index abca439..bfd44db 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NOBODY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,26 +52,28 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NOBODY - do the download request without getting the body <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOBODY, long opt); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A long parameter set to 1 tells libcurl to not include the body-part in the output when doing what would otherwise be a download. For HTTP(S), this makes libcurl do a HEAD request. For most other protocols it means just not asking to transfer the body data. 
 <p class="level0">Enabling this option means asking for a download but without a body. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, the body is transferred <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Most <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* get us the resource without a body! */ 
- &nbsp; curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
- <p class="level0">&nbsp; /* Perform the request */ 
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* get us the resource without a body! */ 
+&nbsp; curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
+&nbsp;
+&nbsp; /* Perform the request */ 
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a>, <a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a>, <a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d58164a..48e130b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NOBODY.pdf and b/docs/libcurl/opts/CURLOPT_NOBODY.pdf differ
index ebdecb0..8194a5e 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -36,6 +36,23 @@ Future versions of libcurl are likely to not have any built-in progress meter
 at all.
 .SH DEFAULT
 1, meaning it normally runs without a progress meter.
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* enable progress meter */
+  curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+
+  /* Perform the request */
+  curl_easy_perform(curl);
+}
+.fi
+.SH AVAILABILITY
+Always
 .SH RETURN VALUE
 Returns CURLE_OK.
 .SH "SEE ALSO"
index 79bde0e..42f7a9a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NOPROGRESS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,28 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NOPROGRESS - switch off the progress meter <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">If <span Class="emphasis">onoff</span> is to 1, it tells the library to shut off the progress meter completely for requests done with this <span Class="emphasis">handle</span>. It will also prevent the <a Class="emphasis" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a> from getting called. 
 <p class="level0">Future versions of libcurl are likely to not have any built-in progress meter at all. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">1, meaning it normally runs without a progress meter. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">1, meaning it normally runs without a progress meter. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* enable progress meter */
+&nbsp; curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2d832a1..2e69b2e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf and b/docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf differ
index 7e2e719..2998a30 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f8b9794..354183f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NOPROXY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NOPROXY - disable proxy use for specific hosts <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a zero terminated string. The string consists of a comma separated list of host names that do not require a proxy to get reached, even if one is specified.  The only wildcard available 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, example.com would match example.com, example.com:80, and www.example.com, but not www.notanexample.com or example.com.othertld. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5301afc..09fc3e9 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NOPROXY.pdf and b/docs/libcurl/opts/CURLOPT_NOPROXY.pdf differ
index 27fe158..dac0710 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 287fbb3..8453ca5 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_NOSIGNAL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_NOSIGNAL - skip all signal handling <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">If <span Class="emphasis">onoff</span> 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 here to allow multi-threaded unix applications to still set/use all timeout options etc, without risking getting signals. 
 <p class="level0">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 the c-ares or threaded resolver backends to enable asynchronous DNS lookups, to enable timeouts for name resolves without the use of signals. 
index 619b766..576519d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf and b/docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf differ
index a397c3e..869b7f6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 75985aa..4908ddb 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_OPENSOCKETDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_OPENSOCKETDATA - custom pointer passed to open socket callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the first argument in the opensocket callback set with <a Class="emphasis" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value of this parameter is NULL. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.17.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7bf876d..6fd553a 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf and b/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf differ
index d5f461d..314e0c4 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b72dedb..4f03508 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_OPENSOCKETFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,40 +52,44 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_OPENSOCKETFUNCTION - set callback for opening sockets <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">typedef enum  {
- &nbsp; CURLSOCKTYPE_IPCXN,  /* socket created for a specific IP connection */
- &nbsp; CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */
- &nbsp; CURLSOCKTYPE_LAST    /* never use */
- } curlsocktype;
- <p class="level0">struct curl_sockaddr {
- &nbsp; int family;
- &nbsp; int socktype;
- &nbsp; int protocol;
- &nbsp; unsigned int addrlen;
- &nbsp; struct sockaddr addr;
- };
- <p class="level0">curl_socket_t opensocket_callback(void *clientp,
- &nbsp;                                 curlsocktype purpose,
- &nbsp;                                 struct curl_sockaddr *address);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETFUNCTION, opensocket_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+typedef enum  {
+&nbsp; CURLSOCKTYPE_IPCXN,  /* socket created for a specific IP connection */
+&nbsp; CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */
+&nbsp; CURLSOCKTYPE_LAST    /* never use */
+} curlsocktype;
+&nbsp;
+struct curl_sockaddr {
+&nbsp; int family;
+&nbsp; int socktype;
+&nbsp; int protocol;
+&nbsp; unsigned int addrlen;
+&nbsp; struct sockaddr addr;
+};
+&nbsp;
+curl_socket_t opensocket_callback(void *clientp,
+&nbsp;                                 curlsocktype purpose,
+&nbsp;                                 struct curl_sockaddr *address);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETFUNCTION, opensocket_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">This callback 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: <span Class="emphasis">CURLSOCKTYPE_IPCXN</span> is for IP based connections and <span Class="emphasis">CURLSOCKTYPE_ACCEPT</span> is for sockets created after accept() - such as when doing active FTP. Future versions of libcurl may support more purposes. 
 <p class="level0">The <span Class="emphasis">clientp</span> pointer contains whatever user-defined value set using the <a Class="emphasis" href="./CURLOPT_OPENSOCKETDATA.html">CURLOPT_OPENSOCKETDATA</a> function. 
 <p class="level0">The callback gets the resolved peer address as the <span Class="emphasis">address</span> argument and is allowed to modify the address or refuse to connect completely. The callback function should return the newly created socket or <span Class="emphasis">CURL_SOCKET_BAD</span> in case no connection could be established or another error was detected. Any additional <span Class="emphasis">setsockopt(2)</span> calls can of course be done on the socket at the user's discretion.  A <span Class="emphasis">CURL_SOCKET_BAD</span> return value from the callback function will signal an unrecoverable error to libcurl and it will return <span Class="emphasis">CURLE_COULDNT_CONNECT</span> from the function that triggered this callback. This return code can be used for IP address blacklisting. 
 <p class="level0">If you want to pass in a socket with an already established connection, pass the socket back with this callback and then use <a Class="emphasis" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a> to signal that it already is connected. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">The default behavior is the equivalent of this: <pre>
-<p class="level0">&nbsp;  return socket(addr-&gt;family, addr-&gt;socktype, addr-&gt;protocol);
- </pre>
+<p class="level0">The default behavior is the equivalent of this: <pre class="level0">
+&nbsp;  return socket(addr-&gt;family, addr-&gt;socktype, addr-&gt;protocol);
+</pre>
 
 <p class="level0"><a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.17.1. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_OPENSOCKETDATA.html">CURLOPT_OPENSOCKETDATA</a>, <a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_CLOSESOCKETFUNCTION.html">CURLOPT_CLOSESOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_OPENSOCKETDATA.html">CURLOPT_OPENSOCKETDATA</a>, <a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_CLOSESOCKETFUNCTION.html">CURLOPT_CLOSESOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 335e93e..0e9d899 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf differ
index b460658..06ed9e1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b2da86d..9f88509 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PASSWORD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PASSWORD - password to use in authentication <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PASSWORD, char *pwd); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be pointing to the zero terminated password to use for the transfer. 
 <p class="level0">The <a Class="emphasis" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a> option should be used in conjunction with the <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,7 +61,7 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, 
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</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>
index 760f360..6f70369 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PASSWORD.pdf and b/docs/libcurl/opts/CURLOPT_PASSWORD.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3 b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3
new file mode 100644 (file)
index 0000000..9b0d3d5
--- /dev/null
@@ -0,0 +1,65 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2016, 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 https://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 CURLOPT_PATH_AS_IS 3 "17 Jun 2014" "libcurl 7.42.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_PATH_AS_IS \- do not handle dot dot sequences
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit);
+.SH DESCRIPTION
+Set the long \fIleaveit\fP to 1, to explicitly tell libcurl to not alter the
+given path before passing it on to the server.
+
+This instructs libcurl to NOT squash sequences of "/../" or "/./" that may
+exist in the URL's path part and that is supposed to be removed according to
+RFC 3986 section 5.2.4.
+
+Some server implementations are known to (erroneously) require the dot dot
+sequences to remain in the path and some clients want to pass these on in
+order to try out server implementations.
+
+By default libcurl will merge such sequences before using the path.
+.SH DEFAULT
+0
+.SH PROTOCOLS
+All
+.SH EXAMPLE
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/../../etc/password");
+
+  curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
+
+  curl_easy_perform(curl);
+}
+.fi
+.SH AVAILABILITY
+Aded in 7.42.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
+.BR CURLOPT_URL "(3), "
+
diff --git a/docs/libcurl/opts/CURLOPT_PATH_AS_IS.html b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.html
new file mode 100644 (file)
index 0000000..4dd6a1c
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PATH_AS_IS man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_PATH_AS_IS - do not handle dot dot sequences <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set the long <span Class="emphasis">leaveit</span> to 1, to explicitly tell libcurl to not alter the given path before passing it on to the server. 
+<p class="level0">This instructs libcurl to NOT squash sequences of "/../" or "/./" that may exist in the URL's path part and that is supposed to be removed according to <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a> section 5.2.4. 
+<p class="level0">Some server implementations are known to (erroneously) require the dot dot sequences to remain in the path and some clients want to pass these on in order to try out server implementations. 
+<p class="level0">By default libcurl will merge such sequences before using the path. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/../../etc/password");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Aded in 7.42.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <a Class="manpage" href="./CURLOPT_URL.html">CURLOPT_URL</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/opts/CURLOPT_PATH_AS_IS.pdf b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.pdf
new file mode 100644 (file)
index 0000000..03ed72a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PATH_AS_IS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3 b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3
new file mode 100644 (file)
index 0000000..ff1fe74
--- /dev/null
@@ -0,0 +1,104 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_PINNEDPUBLICKEY 3 "27 Aug 2014" "libcurl 7.38.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_PINNEDPUBLICKEY \- set pinned public key
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey);
+.SH DESCRIPTION
+Pass a pointer to a zero terminated string as parameter. The string can be the
+file name of your pinned public key. The file format expected is "PEM" or "DER".
+The string can also be any number of base64 encoded sha256 hashes preceded by
+"sha256//" and separated by ";"
+
+When negotiating a TLS or SSL connection, the server sends a certificate
+indicating its identity. A public key is extracted from this certificate and
+if it does not exactly match the public key provided to this option, curl will
+abort the connection before sending or receiving any data.
+
+On mismatch, \fICURLE_SSL_PINNEDPUBKEYNOTMATCH\fP is returned.
+.SH DEFAULT
+NULL
+.SH PROTOCOLS
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
+.SH EXAMPLE
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+  curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "/etc/publickey.der");
+  /* OR
+  curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
+  */
+
+  /* Perform the request */
+  curl_easy_perform(curl);
+}
+.fi
+.SH PUBLIC KEY EXTRACTION
+If you do not have the server's public key file you can extract it from the
+server's certificate.
+.nf
+# retrieve the server's certificate if you don't already have it
+#
+# be sure to examine the certificate to see if it is what you expected
+#
+# Windows-specific:
+# - Use NUL instead of /dev/null.
+# - OpenSSL may wait for input instead of disconnecting. Hit enter.
+# - If you don't have sed, then just copy the certificate into a file:
+#   Lines from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----.
+#
+openssl s_client -servername www.example.com -connect www.example.com:443 < /dev/null | sed -n "/-----BEGIN/,/-----END/p" > www.example.com.pem
+
+# extract public key in pem format from certificate
+openssl x509 -in www.example.com.pem -pubkey -noout > www.example.com.pubkey.pem
+
+# convert public key from pem to der
+openssl asn1parse -noout -inform pem -in www.example.com.pubkey.pem -out www.example.com.pubkey.der
+
+# sha256 hash and base64 encode der to string for use
+openssl dgst -sha256 -binary www.example.com.pubkey.der | openssl base64
+.fi
+The public key in PEM format contains a header, base64 data and a
+footer:
+.nf
+-----BEGIN PUBLIC KEY-----
+[BASE 64 DATA]
+-----END PUBLIC KEY-----
+.fi
+.SH AVAILABILITY
+Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for
+NSS and wolfSSL/CyaSSL. Added for mbedtls in 7.47.0, sha256 support
+added in 7.44.0 for OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL. Other
+SSL backends not supported.
+.SH RETURN VALUE
+Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
+CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+.SH "SEE ALSO"
+.BR CURLOPT_SSL_VERIFYPEER "(3), "
+.BR CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_CAINFO "(3), "
+.BR CURLOPT_CAPATH "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html
new file mode 100644 (file)
index 0000000..3d21603
--- /dev/null
@@ -0,0 +1,111 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PINNEDPUBLICKEY man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_PINNEDPUBLICKEY - set pinned public key <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a zero terminated string as parameter. The string can be the file name of your pinned public key. The file format expected is "PEM" or "DER". The string can also be any number of base64 encoded sha256 hashes preceded by "sha256//" and separated by ";" 
+<p class="level0">When negotiating a TLS or SSL connection, the server sends a certificate indicating its identity. A public key is extracted from this certificate and if it does not exactly match the public key provided to this option, curl will abort the connection before sending or receiving any data. 
+<p class="level0">On mismatch, <span Class="emphasis">CURLE_SSL_PINNEDPUBKEYNOTMATCH</span> is returned. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+&nbsp; curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "/etc/publickey.der");
+&nbsp; /* OR
+&nbsp; curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
+&nbsp; */
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="PUBLIC"></a><h2 class="nroffsh">PUBLIC KEY EXTRACTION</h2>
+<p class="level0">If you do not have the server's public key file you can extract it from the server's certificate. <pre class="level0">
+&#35; retrieve the server's certificate if you don't already have it
+&#35;
+&#35; be sure to examine the certificate to see if it is what you expected
+&#35;
+&#35; Windows-specific:
+&#35; - Use NUL instead of /dev/null.
+&#35; - OpenSSL may wait for input instead of disconnecting. Hit enter.
+&#35; - If you don't have sed, then just copy the certificate into a file:
+&#35;   Lines from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----.
+&#35;
+openssl s_client -servername www.example.com -connect www.example.com:443 &lt; /dev/null | sed -n "/-----BEGIN/,/-----END/p" &gt; www.example.com.pem
+&nbsp;
+&#35; extract public key in pem format from certificate
+openssl x509 -in www.example.com.pem -pubkey -noout &gt; www.example.com.pubkey.pem
+&nbsp;
+&#35; convert public key from pem to der
+openssl asn1parse -noout -inform pem -in www.example.com.pubkey.pem -out www.example.com.pubkey.der
+&nbsp;
+&#35; sha256 hash and base64 encode der to string for use
+openssl dgst -sha256 -binary www.example.com.pubkey.der | openssl base64
+</pre>
+
+<p class="level0">The public key in PEM format contains a header, base64 data and a footer: <pre class="level0">
+-----BEGIN PUBLIC KEY-----
+[BASE 64 DATA]
+-----END PUBLIC KEY-----
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added in 7.43.0 for NSS and wolfSSL/CyaSSL. Added for mbedtls in 7.47.0, sha256 support added in 7.44.0 for OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends not supported. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a>, <a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a>, <a Class="manpage" href="./CURLOPT_CAPATH.html">CURLOPT_CAPATH</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/opts/CURLOPT_PINNEDPUBLICKEY.pdf b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.pdf
new file mode 100644 (file)
index 0000000..207076a
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PIPEWAIT.3 b/docs/libcurl/opts/CURLOPT_PIPEWAIT.3
new file mode 100644 (file)
index 0000000..62f540d
--- /dev/null
@@ -0,0 +1,63 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_PIPEWAIT 3 "12 May 2015" "libcurl 7.43.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);
+.SH DESCRIPTION
+Set \fIwait\fP to 1L to tell libcurl to prefer to wait for a connection to
+confirm or deny that it can do pipelining or multiplexing before continuing.
+
+When about to perform a new transfer that allows pipelining or multiplexing,
+libcurl will check for existing connections to re-use and pipeline on. If no
+such connection exists it will immediately continue and create a fresh new
+connection to use.
+
+By setting this option to 1 - and having \fICURLMOPT_PIPELINE\fP enabled for
+the multi handle this transfer is associated with - libcurl will instead wait
+for the connection to reveal if it is possible to pipeline/multiplex on before
+it continues. This enables libcurl to much better keep the number of
+connections to a minimum when using pipelining or multiplexing protocols.
+
+The effect thus becomes that with this option set, libcurl prefers to wait and
+re-use an existing connection for pipelining rather than the opposite: prefer
+to open a new connection rather than waiting.
+
+The waiting time is as long as it takes for the connection to get up and for
+libcurl to get the necessary response back that informs it about its protocol
+and support level.
+.SH DEFAULT
+0 (off)
+.SH PROTOCOLS
+HTTP(S)
+.SH EXAMPLE
+.SH AVAILABILITY
+Added in 7.43.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_FORBID_REUSE "(3), " CURLOPT_FRESH_CONNECT "(3), "
+.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PIPEWAIT.html b/docs/libcurl/opts/CURLOPT_PIPEWAIT.html
new file mode 100644 (file)
index 0000000..46b66d3
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PIPEWAIT man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_PIPEWAIT - wait for pipelining/multiplexing <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set <span Class="emphasis">wait</span> to 1L to tell libcurl to prefer to wait for a connection to confirm or deny that it can do pipelining or multiplexing before continuing. 
+<p class="level0">When about to perform a new transfer that allows pipelining or multiplexing, libcurl will check for existing connections to re-use and pipeline on. If no such connection exists it will immediately continue and create a fresh new connection to use. 
+<p class="level0">By setting this option to 1 - and having <span Class="emphasis">CURLMOPT_PIPELINE</span> enabled for the multi handle this transfer is associated with - libcurl will instead wait for the connection to reveal if it is possible to pipeline/multiplex on before it continues. This enables libcurl to much better keep the number of connections to a minimum when using pipelining or multiplexing protocols. 
+<p class="level0">The effect thus becomes that with this option set, libcurl prefers to wait and re-use an existing connection for pipelining rather than the opposite: prefer to open a new connection rather than waiting. 
+<p class="level0">The waiting time is as long as it takes for the connection to get up and for libcurl to get the necessary response back that informs it about its protocol and support level. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 (off) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.43.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_FORBID_REUSE.html">CURLOPT_FORBID_REUSE</a>, <a Class="manpage" href="./CURLOPT_FRESH_CONNECT.html">CURLOPT_FRESH_CONNECT</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>, <a Class="manpage" href="./CURLMOPT_MAX_HOST_CONNECTIONS.html">CURLMOPT_MAX_HOST_CONNECTIONS</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/opts/CURLOPT_PIPEWAIT.pdf b/docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf
new file mode 100644 (file)
index 0000000..ca1e192
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf differ
index 5fd19c7..f47b243 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 4154014..6d42cf5 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PORT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PORT - set remote port number to work with <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PORT, long number); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">This option sets <span Class="emphasis">number</span> to be the 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">Usually, you just let the URL decide which port to use but this allows the application to override that. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9a9bb46..05a03b4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PORT.pdf and b/docs/libcurl/opts/CURLOPT_PORT.pdf differ
index cd6b6d4..7754c7d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index bc7dcd1..f340029 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_POST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_POST - request a HTTP POST <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A parameter set to 1 tells libcurl 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="level0">Use one of <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> or <a Class="emphasis" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a> options to specify what data to post and <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a> or <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE_LARGE.html">CURLOPT_POSTFIELDSIZE_LARGE</a> to set the data size. 
@@ -62,6 +67,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_HTTPPOST.html">CURLOPT_HTTPPOST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_HTTPPOST.html">CURLOPT_HTTPPOST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8e0e966..937f4a3 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_POST.pdf and b/docs/libcurl/opts/CURLOPT_POST.pdf differ
index d559143..f9f9ead 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -44,6 +44,9 @@ used by HTML forms. Change Content-Type with \fICURLOPT_HTTPHEADER(3)\fP.
 
 Using \fICURLOPT_POSTFIELDS(3)\fP implies \fICURLOPT_POST(3)\fP.
 
+You can use \fIcurl_easy_escape(3)\fP to url-encode your data, if necessary. It
+returns a pointer to an encoded string that can be passed as \fIpostdata\fP.
+
 If you want to do a zero-byte POST, you need to set
 \fICURLOPT_POSTFIELDSIZE(3)\fP explicitly to zero, as simply setting
 \fICURLOPT_POSTFIELDS(3)\fP to NULL or "" just effectively disables the
index 3b998ef..98dd4c2 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_POSTFIELDS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,33 +52,38 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_POSTFIELDS - specify data to POST to server <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, pointing to the full data to send in a 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 in any way. For example, the web server may assume that this data is url-encoded. 
 <p class="level0">The data pointed to is NOT copied by the library: as a consequence, it must be preserved by the calling application until the associated transfer finishes. This behaviour can be changed (so libcurl does copy the data) by setting the <a Class="emphasis" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a> option. 
 <p class="level0">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 commonly used by HTML forms. Change Content-Type with <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. 
 <p class="level0">Using <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a> implies <a Class="emphasis" href="./CURLOPT_POST.html">CURLOPT_POST</a>. 
+<p class="level0">You can use <span Class="emphasis">curl_easy_escape(3)</span> to url-encode your data, if necessary. It returns a pointer to an encoded string that can be passed as <span Class="emphasis">postdata</span>. 
 <p class="level0">If you want to do a zero-byte POST, you need to set <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a> explicitly to zero, as simply setting <a Class="emphasis" href="./CURLOPT_POSTFIELDS.html">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="level0">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="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> as usual. 
 <p class="level0">To make multipart/formdata posts (aka <a href="http://www.ietf.org/rfc/rfc2388.txt">RFC 2388</a>-posts), check out the <a Class="emphasis" href="./CURLOPT_HTTPPOST.html">CURLOPT_HTTPPOST</a> option combined with <span Class="emphasis">curl_formadd(3)</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; const char *data = "data to send";
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* size of the POST data */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
- <p class="level0">&nbsp; /* pass in a pointer to the data - libcurl will not copy */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; const char *data = "data to send";
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* size of the POST data */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
+&nbsp;
+&nbsp; /* pass in a pointer to the data - libcurl will not copy */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a>, <a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a>, <a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 879a677..01e6096 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf and b/docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf differ
index 0166805..8db05c6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ac4732b..372f8ab 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_POSTFIELDSIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,27 +52,31 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_POSTFIELDSIZE - size of POST data pointed to <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">If you want to post data to the server without having 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">If you post more than 2GB, use <a Class="emphasis" href="./CURLOPT_POSTFIELDSIZE_LARGE.html">CURLOPT_POSTFIELDSIZE_LARGE</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">-1 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; const char *data = "data to send";
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* size of the POST data */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(data));
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; const char *data = "data to send";
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* size of the POST data */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(data));
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDSIZE_LARGE.html">CURLOPT_POSTFIELDSIZE_LARGE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDSIZE_LARGE.html">CURLOPT_POSTFIELDSIZE_LARGE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 98043aa..6a27c2d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf and b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf differ
index 50fc351..9d0c401 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 322ee47..73b3bca 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_POSTFIELDSIZE_LARGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,31 +52,36 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_POSTFIELDSIZE_LARGE - size of POST data pointed to <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE_LARGE,
- &nbsp;                         curl_off_t size);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE_LARGE,
+&nbsp;                         curl_off_t size);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">If you want to post data to the server without having 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">-1 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; const char *data = large_chunk;
- &nbsp; curl_off_t length_of_data; /* set somehow */
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* size of the POST data */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, length_of_data);
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; const char *data = large_chunk;
+&nbsp; curl_off_t length_of_data; /* set somehow */
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* size of the POST data */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, length_of_data);
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_COPYPOSTFIELDS.html">CURLOPT_COPYPOSTFIELDS</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDSIZE.html">CURLOPT_POSTFIELDSIZE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 53bb6bd..21228a4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf and b/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf differ
index 72692fd..3283a1a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ba8a206..6e45358 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_POSTQUOTE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_POSTQUOTE - (S)FTP commands to run after the transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE, struct curl_slist *cmds); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>. 
 <p class="level0">Disable this operation again by setting a NULL to this option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If support for the protocols are built-in. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>, <a Class="manpage" href="./CURLOPT_PREQUOTE.html">CURLOPT_PREQUOTE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>, <a Class="manpage" href="./CURLOPT_PREQUOTE.html">CURLOPT_PREQUOTE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7ee5b9b..e646a41 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf and b/docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf differ
index aa36bd0..07aea6e 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -32,13 +32,13 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTREDIR,
 .SH DESCRIPTION
 Pass a bitmask to control how libcurl acts on redirects after POSTs that get a
 301, 302 or 303 response back.  A parameter with bit 0 set (value
-\fBCURL_REDIR_POST_301\fP) tells the library to respect RFC2616/10.3.2 and not
-convert POST requests into GET requests when following a 301 redirection.
-Setting bit 1 (value \fBCURL_REDIR_POST_302\fP) makes libcurl maintain the
-request method after a 302 redirect whilst setting bit 2 (value
-\fBCURL_REDIR_POST_303\fP) makes libcurl maintain the request method after a
-303 redirect. The value \fBCURL_REDIR_POST_ALL\fP is a convenience define that
-sets all three bits.
+\fBCURL_REDIR_POST_301\fP) tells the library to respect RFC 7231 (section
+6.4.2 to 6.4.4) and not convert POST requests into GET requests when following
+a 301 redirection.  Setting bit 1 (value \fBCURL_REDIR_POST_302\fP) makes
+libcurl maintain the request method after a 302 redirect whilst setting bit 2
+(value \fBCURL_REDIR_POST_303\fP) makes libcurl maintain the request method
+after a 303 redirect. The value \fBCURL_REDIR_POST_ALL\fP is a convenience
+define that sets all three 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
index f4b8ffe..e40cea4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_POSTREDIR man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,32 +52,36 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_POSTREDIR - how to act on a HTTP POST redirect <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTREDIR,
- &nbsp;                         long bitmask);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTREDIR,
+&nbsp;                         long bitmask);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a bitmask to control how libcurl acts on redirects after POSTs that get a 301, 302 or 303 response back.  A parameter with bit 0 set (value <span Class="bold">CURL_REDIR_POST_301</span>) tells the library to respect <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC 2616</a>/10.3.2 and not convert POST requests into GET requests when following a 301 redirection. Setting bit 1 (value <span Class="bold">CURL_REDIR_POST_302</span>) makes libcurl maintain the request method after a 302 redirect whilst setting bit 2 (value <span Class="bold">CURL_REDIR_POST_303</span>) makes libcurl maintain the request method after a 303 redirect. The value <span Class="bold">CURL_REDIR_POST_ALL</span> is a convenience define that sets all three bits. 
+<p class="level0">Pass a bitmask to control how libcurl acts on redirects after POSTs that get a 301, 302 or 303 response back.  A parameter with bit 0 set (value <span Class="bold">CURL_REDIR_POST_301</span>) tells the library to respect <a href="http://www.ietf.org/rfc/rfc7231.txt">RFC 7231</a> (section 6.4.2 to 6.4.4) and not convert POST requests into GET requests when following a 301 redirection.  Setting bit 1 (value <span Class="bold">CURL_REDIR_POST_302</span>) makes libcurl maintain the request method after a 302 redirect whilst setting bit 2 (value <span Class="bold">CURL_REDIR_POST_303</span>) makes libcurl maintain the request method after a 303 redirect. The value <span Class="bold">CURL_REDIR_POST_ALL</span> is a convenience define that sets all three bits. 
 <p class="level0">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="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP(S) <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* a silly POST example */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data=true");
- <p class="level0">&nbsp; /* example.com is redirected, so we tell libcurl to send POST on 301, 302 and
- &nbsp;    303 HTTP response codes */
- &nbsp; curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* a silly POST example */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data=true");
+&nbsp;
+&nbsp; /* example.com is redirected, so we tell libcurl to send POST on 301, 302 and
+&nbsp;    303 HTTP response codes */
+&nbsp; curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.17.1. This option was known as CURLOPT_POST301 up to 7.19.0 as it only supported the 301 then. CURL_REDIR_POST_303 was added in 7.26.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, <a Class="manpage" href="./CURLOPT_POSTFIELDS.html">CURLOPT_POSTFIELDS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 513682a..aa00bdb 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_POSTREDIR.pdf and b/docs/libcurl/opts/CURLOPT_POSTREDIR.pdf differ
index e4163e8..6b95265 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f74c660..0889b07 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PREQUOTE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PREQUOTE - commands to run before FTP or SFTP transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE, char *cmds); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a linked list of FTP or SFTP 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="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>. Disable this operation again by setting a NULL to this option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with the protocol support <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>, <a Class="manpage" href="./CURLOPT_POSTQUOTE.html">CURLOPT_POSTQUOTE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>, <a Class="manpage" href="./CURLOPT_POSTQUOTE.html">CURLOPT_POSTQUOTE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 60ae8e4..722990b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PREQUOTE.pdf and b/docs/libcurl/opts/CURLOPT_PREQUOTE.pdf differ
index bdb11cf..80f2c6b 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -37,7 +37,22 @@ NULL
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+struct private secrets;
+if(curl) {
+  struct private *extracted;
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* store a pointer to our private struct */
+  curl_easy_setopt(curl, CURLOPT_PRIVATE, &secrets);
+
+  curl_easy_perform(curl);
+
+  /* we can extract the private pointer again too */
+  curl_easy_getinfo(curl, CURLINFO_PRIVATE, &extracted);
+}
+.fi
 .SH AVAILABILITY
 Added in 7.10.3
 .SH RETURN VALUE
index 165f333..9934b90 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PRIVATE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,31 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PRIVATE - store a private pointer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a void * as parameter, pointing to data that should be associated with this curl handle.  The pointer can subsequently be retrieved using <span Class="emphasis">curl_easy_getinfo(3)</span> with the CURLINFO_PRIVATE option. libcurl itself never does nothing with this data. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+struct private secrets;
+if(curl) {
+&nbsp; struct private *extracted;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* store a pointer to our private struct */
+&nbsp; curl_easy_setopt(curl, CURLOPT_PRIVATE, &secrets);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+&nbsp;
+&nbsp; /* we can extract the private pointer again too */
+&nbsp; curl_easy_getinfo(curl, CURLINFO_PRIVATE, &extracted);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 6d0c6d4..77b6ee6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PRIVATE.pdf and b/docs/libcurl/opts/CURLOPT_PRIVATE.pdf differ
index c4785dc..7dc70f1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -35,7 +35,7 @@ The default value of this parameter is NULL.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-http://curl.haxx.se/libcurl/c/progressfunc.html
+https://curl.haxx.se/libcurl/c/progressfunc.html
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index cd73126..adfecec 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROGRESSDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROGRESSDATA - custom pointer passed to the progress callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the first argument in the progress callback set with <a Class="emphasis" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value of this parameter is NULL. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><a href="http://curl.haxx.se/libcurl/c/progressfunc.html">http://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><a href="https://curl.haxx.se/libcurl/c/progressfunc.html">https://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a>, <a Class="manpage" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a>, <a Class="manpage" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index efd9226..91e72e3 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf and b/docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf differ
index d8e7a66..b077e3b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -75,7 +75,7 @@ users.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-http://curl.haxx.se/libcurl/c/progressfunc.html
+https://curl.haxx.se/libcurl/c/progressfunc.html
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 489cd70..46a6f91 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROGRESSFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROGRESSFUNCTION - callback to progress meter function <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">int progress_callback(void *clientp, &nbsp;                     double dltotal, &nbsp;                     double dlnow, &nbsp;                     double ultotal, &nbsp;                     double ulnow); 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSFUNCTION, progress_callback); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
@@ -61,9 +66,9 @@ p.roffit {
 <p class="level0"><a Class="emphasis" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a> must be set to 0 to make this function actually get called. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">By default, libcurl has an internal progress meter. That's rarely wanted by users. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><a href="http://curl.haxx.se/libcurl/c/progressfunc.html">http://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><a href="https://curl.haxx.se/libcurl/c/progressfunc.html">https://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index dc418fe..949a4a2 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf differ
index 958eeeb..4fecb81 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -60,6 +60,7 @@ CURLPROTO_RTSP
 CURLPROTO_SCP
 CURLPROTO_SFTP
 CURLPROTO_SMB
+CURLPROTO_SMBS
 CURLPROTO_SMTP
 CURLPROTO_SMTPS
 CURLPROTO_TELNET
index b2eae23..72d0ce7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROTOCOLS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,58 +52,61 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROTOCOLS - set allowed protocols <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 (<span Class="emphasis">CURLPROTO_ALL</span>). See also <a Class="emphasis" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a>. 
-<p class="level0">These are the available protocol defines: <pre>
-<p class="level0">CURLPROTO_DICT
- CURLPROTO_FILE
- CURLPROTO_FTP
- CURLPROTO_FTPS
- CURLPROTO_GOPHER
- CURLPROTO_HTTP
- CURLPROTO_HTTPS
- CURLPROTO_IMAP
- CURLPROTO_IMAPS
- CURLPROTO_LDAP
- CURLPROTO_LDAPS
- CURLPROTO_POP3
- CURLPROTO_POP3S
- CURLPROTO_RTMP
- CURLPROTO_RTMPE
- CURLPROTO_RTMPS
- CURLPROTO_RTMPT
- CURLPROTO_RTMPTE
- CURLPROTO_RTMPTS
- CURLPROTO_RTSP
- CURLPROTO_SCP
- CURLPROTO_SFTP
- CURLPROTO_SMB
- CURLPROTO_SMTP
- CURLPROTO_SMTPS
- CURLPROTO_TELNET
- CURLPROTO_TFTP
- </pre>
+<p class="level0">These are the available protocol defines: <pre class="level0">
+CURLPROTO_DICT
+CURLPROTO_FILE
+CURLPROTO_FTP
+CURLPROTO_FTPS
+CURLPROTO_GOPHER
+CURLPROTO_HTTP
+CURLPROTO_HTTPS
+CURLPROTO_IMAP
+CURLPROTO_IMAPS
+CURLPROTO_LDAP
+CURLPROTO_LDAPS
+CURLPROTO_POP3
+CURLPROTO_POP3S
+CURLPROTO_RTMP
+CURLPROTO_RTMPE
+CURLPROTO_RTMPS
+CURLPROTO_RTMPT
+CURLPROTO_RTMPTE
+CURLPROTO_RTMPTS
+CURLPROTO_RTSP
+CURLPROTO_SCP
+CURLPROTO_SFTP
+CURLPROTO_SMB
+CURLPROTO_SMBS
+CURLPROTO_SMTP
+CURLPROTO_SMTPS
+CURLPROTO_TELNET
+CURLPROTO_TFTP
+</pre>
 
 <p class="level0"><a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">All protocols built-in <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; /* pass in the URL from an external source */
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
- <p class="level0">&nbsp; /* only allow HTTP, TFTP and SFTP */
- &nbsp; curl_easy_setopt(curl, CURLOPT_PROTOCOLS,
- &nbsp;                  CURLPROTO_HTTP | CURLPROTO_TFTP | CURLPROTO_SFTP);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; /* pass in the URL from an external source */
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+&nbsp;
+&nbsp; /* only allow HTTP, TFTP and SFTP */
+&nbsp; curl_easy_setopt(curl, CURLOPT_PROTOCOLS,
+&nbsp;                  CURLPROTO_HTTP | CURLPROTO_TFTP | CURLPROTO_SFTP);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a>, <a Class="manpage" href="./CURLOPT_URL.html">CURLOPT_URL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a>, <a Class="manpage" href="./CURLOPT_URL.html">CURLOPT_URL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 45587f3..96b9ffe 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf and b/docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf differ
index b419e51..f6975bb 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -29,8 +29,8 @@ CURLOPT_PROXY \- set proxy to use
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);
 .SH DESCRIPTION
 Set the \fIproxy\fP to use for the upcoming request. The parameter should be a
-char * to a zero terminated string holding the host name or dotted IP
-address.
+char * to a zero terminated string holding the host name or dotted numerical
+IP address. A numerical IPv6 address must be written within [brackets].
 
 To specify port number in this string, append :[port] to the end of the host
 name. The proxy's port number may optionally be specified with the separate
@@ -61,8 +61,8 @@ 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.
 
-A proxy host string given in an environment variable can also include protocol
-scheme (http://) and embedded user + password.
+A proxy host string can also include protocol scheme (http://) and embedded
+user + password.
 .SH DEFAULT
 Default is NULL, meaning no proxy is used.
 
index d37676a..bf4bc91 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXY - set proxy to use <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Set the <span Class="emphasis">proxy</span> to use for the upcoming request. The parameter should be a char * to a zero terminated string holding the host name or dotted IP address
+<p class="level0">Set the <span Class="emphasis">proxy</span> to use for the upcoming request. The parameter should be a char * to a zero terminated string holding the host name or dotted numerical IP address. A numerical IPv6 address must be written within [brackets]
 <p class="level0">To specify port number in this string, append :[port] to the end of the host name. The proxy's port number may optionally be specified with the separate option <a Class="emphasis" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a>. If not specified, libcurl will default to using port 1080 for proxies. 
 <p class="level0">The proxy string may be prefixed with [scheme]:// to specify which kind of proxy is used. Use socks4://, socks4a://, socks5:// or socks5h:// (the last one to enable socks5 and asking the proxy to do the resolving, also known as <span Class="emphasis">CURLPROXY_SOCKS5_HOSTNAME</span> type) to request the specific SOCKS version to be used. No protocol specified, http:// and all others will be treated as HTTP proxies. 
 <p class="level0">Without a scheme prefix, <a Class="emphasis" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a> can be used to specify which kind of proxy the string identifies. 
 <p class="level0">When you tell the library to use a 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="./CURLOPT_QUOTE.html">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="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a>. 
 <p class="level0">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="./CURLOPT_PROXY.html">CURLOPT_PROXY</a> option does however override any possibly set environment variables. 
 <p class="level0">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="level0">A proxy host string given in an environment variable can also include protocol scheme (http://) and embedded user + password. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">A proxy host string can also include protocol scheme (http://) and embedded user + password. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Default is NULL, meaning no proxy is used. 
 <p class="level0">When you set a host name to use, do not assume that there's any particular single port number used widely for proxies. Specify it! <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All except file://. Note that some protocols don't do very well over proxy. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
@@ -64,6 +69,6 @@ p.roffit {
 <p class="level0">Since 7.14.1 the proxy environment variable names can include the protocol scheme. 
 <p class="level0">Since 7.21.7 the proxy string supports the socks protocols as "schemes". <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a>, <a Class="manpage" href="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a>, <a Class="manpage" href="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 76ace30..550e502 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXY.pdf and b/docs/libcurl/opts/CURLOPT_PROXY.pdf differ
index fe742c0..24dbca5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index e7d050e..d9c5f55 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYAUTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYAUTH - set HTTP proxy authentication methods to try <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter, which is set to a bitmask, to tell libcurl which HTTP 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="./CURLOPT_PROXYUSERPWD.html">CURLOPT_PROXYUSERPWD</a> option. 
 <p class="level0">The bitmask can be constructed by or'ing together the bits fully listed and described in the <a Class="emphasis" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a> man page. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.10.7 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_NOT_BUILT_IN if the bitmask specified no supported authentication methods. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_PROXYUSERPWD.html">CURLOPT_PROXYUSERPWD</a>, <a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <a Class="manpage" href="./CURLOPT_PROXYUSERPWD.html">CURLOPT_PROXYUSERPWD</a>, <a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 377a5c4..0954846 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf and b/docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf differ
index bfa7a7a..bfec629 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 8c14363..5290cf9 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYHEADER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYHEADER - custom HTTP headers to pass to proxy <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYHEADER,
- &nbsp;                         struct curl_slist *headers);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYHEADER,
+&nbsp;                         struct curl_slist *headers);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a linked list of HTTP headers to pass in your HTTP request sent to a proxy. The rules for this list is identical to the <a Class="emphasis" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> option's. 
 <p class="level0">The headers set with this option is only ever used in requests sent to a proxy - when there's also a request sent to a host. 
@@ -62,6 +68,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.37.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HEADEROPT.html">CURLOPT_HEADEROPT</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 07ff613..f7377ab 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf and b/docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf differ
index 43536ca..18272c3 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f41b4f0..aa74a9f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYPASSWORD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYPASSWORD - password to use with proxy authentication <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPASSWORD, char *pwd); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be pointing to the zero terminated password to use for authentication with the proxy. 
 <p class="level0">The <a Class="emphasis" href="./CURLOPT_PROXYPASSWORD.html">CURLOPT_PROXYPASSWORD</a> option should be used in conjunction with the <a Class="emphasis" href="./CURLOPT_PROXYUSERNAME.html">CURLOPT_PROXYUSERNAME</a> option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <a Class="manpage" href="./CURLOPT_PROXYUSERNAME.html">CURLOPT_PROXYUSERNAME</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <a Class="manpage" href="./CURLOPT_PROXYUSERNAME.html">CURLOPT_PROXYUSERNAME</a>, <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 025758f..aa8969e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf and b/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf differ
index d8a1bb1..2380e09 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index e065f33..4424a2e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYPORT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYPORT - port number the proxy listens on <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_PROXY.html">CURLOPT_PROXY</a> or uses the default one. 
 <p class="level0">While this accepts a 'long', the port number is 16 bit so it can't be larger than 65535. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4d66079..1bad809 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYPORT.pdf and b/docs/libcurl/opts/CURLOPT_PROXYPORT.pdf differ
index 2ce0cc0..2177c7c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 2f45432..8483ece 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYTYPE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYTYPE - proxy protocol type <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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> <span Class="emphasis">CURLPROXY_SOCKS4</span>, <span Class="emphasis">CURLPROXY_SOCKS5</span>, <span Class="emphasis">CURLPROXY_SOCKS4A</span> and <span Class="emphasis">CURLPROXY_SOCKS5_HOSTNAME</span>. The HTTP type is default. 
 <p class="level0">If you set <a Class="bold" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a> to <span Class="emphasis">CURLPROXY_HTTP_1_0</span>, it will only affect how libcurl speaks to a proxy when CONNECT is used. The HTTP version used for "regular" HTTP requests is instead controlled with <a Class="emphasis" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYPORT.html">CURLOPT_PROXYPORT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c5a8e40..e74a329 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf and b/docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf differ
index c342ec4..592bd04 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 04e8263..21667f5 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYUSERNAME man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYUSERNAME - user name to use for proxy authentication <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERNAME,
- &nbsp;                         char *username);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERNAME,
+&nbsp;                         char *username);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be pointing to the zero terminated user name to use for the transfer. 
 <p class="level0"><a Class="bold" href="./CURLOPT_PROXYUSERNAME.html">CURLOPT_PROXYUSERNAME</a> sets the user name to be used in protocol authentication with the proxy. 
@@ -61,6 +67,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXYPASSWORD.html">CURLOPT_PROXYPASSWORD</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXYPASSWORD.html">CURLOPT_PROXYPASSWORD</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 03f7611..9a8bbc5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf and b/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf differ
index bbf0da5..1b47b89 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ecd301c..7279f2b 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXYUSERPWD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXYUSERPWD - user name and password to use for proxy authentication <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be [user name]:[password] to use for the connection to the HTTP proxy. Both the name and the password will be URL decoded before use, so to include for example a colon in the user name you should encode it as %3A. (This is different to how <a Class="emphasis" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a> is used - beware.) 
 <p class="level0">Use <a Class="emphasis" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a> to specify the authentication method. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c99bf94..fdb8d9d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf and b/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3 b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3
new file mode 100644 (file)
index 0000000..b935856
--- /dev/null
@@ -0,0 +1,45 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_PROXY_SERVICE_NAME 3 "17 Jun 2015" "libcurl 7.43.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_PROXY_SERVICE_NAME \- proxy service name
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name);
+.SH DESCRIPTION
+Pass a char * as parameter to a string holding the \fIname\fP of the
+service. The default service name is "HTTP". This option allows you to change it.
+.SH DEFAULT
+See above
+.SH PROTOCOLS
+Most
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.43.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
+CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+.SH "SEE ALSO"
+.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.html b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.html
new file mode 100644 (file)
index 0000000..3a88cec
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_PROXY_SERVICE_NAME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_PROXY_SERVICE_NAME - proxy service name <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a char * as parameter to a string holding the <span Class="emphasis">name</span> of the service. The default service name is "HTTP". This option allows you to change it. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">See above <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">Most <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.43.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</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/opts/CURLOPT_PROXY_SERVICE_NAME.pdf b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.pdf
new file mode 100644 (file)
index 0000000..95731dd
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.pdf differ
index ae5ede7..2e5c33a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ae3f30a..fa4f697 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PROXY_TRANSFER_MODE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PROXY_TRANSFER_MODE - append FTP transfer mode to URL for proxy <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TRANSFER_MODE, long enabled); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 a 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="./CURLOPT_TRANSFERTEXT.html">CURLOPT_TRANSFERTEXT</a> has no effect when doing FTP via a proxy. Beware that not all proxies support this feature. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, disabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.18.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if the enabled value is not supported. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_HTTPPROXYTUNNEL.html">CURLOPT_HTTPPROXYTUNNEL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d21dcf7..06bd62f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf and b/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf differ
index bd40b7f..87c6e06 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 1000cc7..eb17c66 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_PUT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_PUT - make a HTTP PUT request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PUT, long put); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_READDATA.html">CURLOPT_READDATA</a> and <a Class="emphasis" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a>. 
 <p class="level0">This option is <span Class="bold">deprecated</span> since version 7.12.1. Use <a Class="emphasis" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>! <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Deprecated since 7.12.1. Do not use. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <a Class="manpage" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <a Class="manpage" href="./CURLOPT_HTTPGET.html">CURLOPT_HTTPGET</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d5f4626..2a4c908 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_PUT.pdf and b/docs/libcurl/opts/CURLOPT_PUT.pdf differ
index 8bf3c14..0b23af6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 91549af..ee17b0d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_QUOTE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_QUOTE - (S)FTP commands to run before transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE, struct curl_slist *cmds); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a linked list of FTP or SFTP commands to pass to the server prior to your 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 <span Class="emphasis">curl_slist_append(3)</span> to append strings (commands) to the list, and clear the entire list afterwards with <span Class="emphasis">curl_slist_free_all(3)</span>. Disable this operation again by setting a NULL to this option. When speaking to a FTP server, prefix the command with an asterisk (*) to make libcurl continue even if the command fails as by default libcurl will stop at first failure. 
 <p class="level0">The set of valid FTP commands depends on the server (see <a href="http://www.ietf.org/rfc/rfc959.txt">RFC 959</a> for a list of mandatory commands). 
@@ -79,6 +84,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">SFTP support added in 7.16.3. *-prefix for SFTP added in 7.24.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_POSTQUOTE.html">CURLOPT_POSTQUOTE</a>, <a Class="manpage" href="./CURLOPT_PREQUOTE.html">CURLOPT_PREQUOTE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_POSTQUOTE.html">CURLOPT_POSTQUOTE</a>, <a Class="manpage" href="./CURLOPT_PREQUOTE.html">CURLOPT_PREQUOTE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 76550af..4e104e5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_QUOTE.pdf and b/docs/libcurl/opts/CURLOPT_QUOTE.pdf differ
index 0c2d688..c822325 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 2b81b5e..c005acc 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RANDOM_FILE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RANDOM_FILE - specify a source for random data <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * to a zero terminated file name. The file will be used to read from to seed the random engine for SSL and more. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL, not used <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_EGDSOCKET.html">CURLOPT_EGDSOCKET</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_EGDSOCKET.html">CURLOPT_EGDSOCKET</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5f8a5ac..cf5916b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf and b/docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf differ
index f5dd555..6d80a21 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -35,9 +35,13 @@ out and X and Y are byte indexes.
 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 RFC2326 Section
-12.29. For RTSP, byte ranges are \fBnot\fP permitted. Instead, ranges should
-be given in npt, utc, or smpte formats.
+techniques). Unfortunately, the HTTP standard (RFC 7233 section 3.1) allows
+servers to ignore range requests so even when you set \fICURLOPT_RANGE\fP for
+a request, you may end up getting the full response sent back.
+
+For RTSP, the formatting of a range should follow RFC2326 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.
 .SH DEFAULT
index c256da8..6c04783 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RANGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,27 +52,30 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RANGE - set byte range to request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANGE, char *range); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should contain the specified range you want to retrieve. It should be in the format "X-Y", where either X or Y may be left out and X and Y are byte indexes. 
-<p class="level0">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 <a href="http://www.ietf.org/rfc/rfc2326.txt">RFC 2326</a> 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="level0">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). Unfortunately, the HTTP standard (RFC 7233 section 3.1) allows servers to ignore range requests so even when you set <span Class="emphasis">CURLOPT_RANGE</span> for a request, you may end up getting the full response sent back. 
+<p class="level0">For RTSP, the formatting of a range should follow <a href="http://www.ietf.org/rfc/rfc2326.txt">RFC 2326</a> 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="level0">Pass a NULL to this option to disable the use of ranges. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, FTP, FILE, RTSP and SFTP. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* get the first 200 bytes */
- &nbsp; curl_easy_setopt(curl, CURLOPT_RANGE, "0-199");
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* get the first 200 bytes */
+&nbsp; curl_easy_setopt(curl, CURLOPT_RANGE, "0-199");
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">FILE since 7.18.0, RTSP since 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RESUME_FROM.html">CURLOPT_RESUME_FROM</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RESUME_FROM.html">CURLOPT_RESUME_FROM</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 196f75d..c728ae3 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RANGE.pdf and b/docs/libcurl/opts/CURLOPT_RANGE.pdf differ
index db66631..51a0390 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -42,7 +42,19 @@ By default, this is a FILE * to stdin.
 .SH PROTOCOLS
 This is used for all protocols when sending data.
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+struct MyData this;
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* pass pointer that gets passed in to the
+     CURLOPT_READFUNCTION callback */
+  curl_easy_setopt(curl, CURLOPT_READDATA, &this);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 This option was once known by the older name \fICURLOPT_INFILE\fP, the name
 \fICURLOPT_READDATA\fP was introduced in 7.9.7.
index cb372fc..2c3438e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_READDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,30 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_READDATA - custom pointer passed to the read callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Data <span Class="emphasis">pointer</span> to pass to the file read function. If you use the <a Class="emphasis" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a> option, this is the pointer you'll get as input in the 4th argument to the callback. 
 <p class="level0">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 * (cast to 'void *'). 
 <p class="level0">If you're using libcurl as a win32 DLL, you MUST use a <a Class="emphasis" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a> if you set this option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">By default, this is a FILE * to stdin. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">This is used for all protocols when sending data. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+struct MyData this;
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* pass pointer that gets passed in to the
+&nbsp;    CURLOPT_READFUNCTION callback */
+&nbsp; curl_easy_setopt(curl, CURLOPT_READDATA, &this);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">This option was once known by the older name <span Class="emphasis">CURLOPT_INFILE</span>, the name <span Class="emphasis">CURLOPT_READDATA</span> was introduced in 7.9.7. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">This will return CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a>, <a Class="manpage" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a>, <a Class="manpage" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c23376d..251c548 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_READDATA.pdf and b/docs/libcurl/opts/CURLOPT_READDATA.pdf differ
index 79139ad..a43e68b 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -34,9 +34,10 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READFUNCTION, read_callback);
 Pass a pointer to your callback function, as the prototype shows above.
 
 This callback 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
-\fIbuffer\fP should be filled up with at most \fIsize\fP multiplied with
-\fInmemb\fP number of bytes by your function.
+in order to send it to the peer - like if you ask it to upload or post data to
+the server. The data area pointed at by the pointer \fIbuffer\fP should be
+filled up with at most \fIsize\fP multiplied with \fInmemb\fP number of bytes
+by your function.
 
 Your function must then return the actual number of bytes that it stored in
 that memory area. Returning 0 will signal end-of-file to the library and cause
@@ -67,7 +68,7 @@ The default internal read callback is fread().
 This is used for all protocols when doing uploads.
 .SH EXAMPLE
 Here's an example setting a read callback for reading that to upload to an FTP
-site: http://curl.haxx.se/libcurl/c/ftpupload.html
+site: https://curl.haxx.se/libcurl/c/ftpupload.html
 .SH AVAILABILITY
 CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT
 was added in 7.12.1.
@@ -75,4 +76,4 @@ was added in 7.12.1.
 This will return CURLE_OK.
 .SH "SEE ALSO"
 .BR CURLOPT_READDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
-.BR CURLOPT_SEEKFUNCTION "(3), "
+.BR CURLOPT_SEEKFUNCTION "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), "
index e1e88dd..f9c3d08 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_READFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,12 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_READFUNCTION - read callback for data uploads <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">size_t read_callback(char *buffer, size_t size, size_t nitems, void *instream); 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READFUNCTION, read_callback); 
 <p class="level0"><a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, as the prototype shows above. 
-<p class="level0">This callback 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">buffer</span> should be filled up with at most <span Class="emphasis">size</span> multiplied with <span Class="emphasis">nmemb</span> number of bytes by your function. 
+<p class="level0">This callback function gets called by libcurl as soon as it needs to read data in order to send it to the peer - like if you ask it to upload or post data to the server. The data area pointed at by the pointer <span Class="emphasis">buffer</span> should be filled up with at most <span Class="emphasis">size</span> multiplied with <span Class="emphasis">nmemb</span> number of bytes by your function. 
 <p class="level0">Your function must then return the actual number of bytes that it 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="level0">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="level0">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. 
@@ -61,9 +66,9 @@ p.roffit {
 <p class="level0">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="./CURLOPT_READDATA.html">CURLOPT_READDATA</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default internal read callback is fread(). <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">This is used for all protocols when doing uploads. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">Here's an example setting a read callback for reading that to upload to an FTP site: <a href="http://curl.haxx.se/libcurl/c/ftpupload.html">http://curl.haxx.se/libcurl/c/ftpupload.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Here's an example setting a read callback for reading that to upload to an FTP site: <a href="https://curl.haxx.se/libcurl/c/ftpupload.html">https://curl.haxx.se/libcurl/c/ftpupload.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT was added in 7.12.1. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">This will return CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a>, <a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a>, <a Class="manpage" href="./CURLOPT_UPLOAD.html">CURLOPT_UPLOAD</a>, <a Class="manpage" href="./CURLOPT_POST.html">CURLOPT_POST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7926845..f1b971e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_READFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_READFUNCTION.pdf differ
index fbec9f5..8bd76f6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -32,8 +32,12 @@ 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(3)\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.
+redirections.
+
+By default libcurl will allow all protocols on redirect except several disabled
+for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0
+SMB and SMBS are also disabled. \fICURLPROTO_ALL\fP enables all protocols on
+redirect, including those disabled for security.
 
 These are the available protocol defines:
 .nf
@@ -60,13 +64,14 @@ CURLPROTO_RTSP
 CURLPROTO_SCP
 CURLPROTO_SFTP
 CURLPROTO_SMB
+CURLPROTO_SMBS
 CURLPROTO_SMTP
 CURLPROTO_SMTPS
 CURLPROTO_TELNET
 CURLPROTO_TFTP
 .fi
 .SH DEFAULT
-All protocols except for FILE, SCP and SMB.
+All protocols except for FILE, SCP and since 7.40.0 SMB and SMBS.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
index 58f8e28..77d92f4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_REDIR_PROTOCOLS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,58 +52,62 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_REDIR_PROTOCOLS - set protocols allowed to redirect to <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REDIR_PROTOCOLS, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">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="./CURLOPT_FOLLOWLOCATION.html">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. 
-<p class="level0">These are the available protocol defines: <pre>
-<p class="level0">CURLPROTO_DICT
- CURLPROTO_FILE
- CURLPROTO_FTP
- CURLPROTO_FTPS
- CURLPROTO_GOPHER
- CURLPROTO_HTTP
- CURLPROTO_HTTPS
- CURLPROTO_IMAP
- CURLPROTO_IMAPS
- CURLPROTO_LDAP
- CURLPROTO_LDAPS
- CURLPROTO_POP3
- CURLPROTO_POP3S
- CURLPROTO_RTMP
- CURLPROTO_RTMPE
- CURLPROTO_RTMPS
- CURLPROTO_RTMPT
- CURLPROTO_RTMPTE
- CURLPROTO_RTMPTS
- CURLPROTO_RTSP
- CURLPROTO_SCP
- CURLPROTO_SFTP
- CURLPROTO_SMB
- CURLPROTO_SMTP
- CURLPROTO_SMTPS
- CURLPROTO_TELNET
- CURLPROTO_TFTP
- </pre>
+<p class="level0">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="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a> is enabled. This allows you to limit specific transfers to only be allowed to use a subset of protocols in redirections. 
+<p class="level0">By default libcurl will allow all protocols on redirect except several disabled for security reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS are also disabled. <span Class="emphasis">CURLPROTO_ALL</span> enables all protocols on redirect, including those disabled for security. 
+<p class="level0">These are the available protocol defines: <pre class="level0">
+CURLPROTO_DICT
+CURLPROTO_FILE
+CURLPROTO_FTP
+CURLPROTO_FTPS
+CURLPROTO_GOPHER
+CURLPROTO_HTTP
+CURLPROTO_HTTPS
+CURLPROTO_IMAP
+CURLPROTO_IMAPS
+CURLPROTO_LDAP
+CURLPROTO_LDAPS
+CURLPROTO_POP3
+CURLPROTO_POP3S
+CURLPROTO_RTMP
+CURLPROTO_RTMPE
+CURLPROTO_RTMPS
+CURLPROTO_RTMPT
+CURLPROTO_RTMPTE
+CURLPROTO_RTMPTS
+CURLPROTO_RTSP
+CURLPROTO_SCP
+CURLPROTO_SFTP
+CURLPROTO_SMB
+CURLPROTO_SMBS
+CURLPROTO_SMTP
+CURLPROTO_SMTPS
+CURLPROTO_TELNET
+CURLPROTO_TFTP
+</pre>
 
 <p class="level0"><a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">All protocols except for FILE, SCP and SMB. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All protocols except for FILE, SCP and since 7.40.0 SMB and SMBS. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; /* pass in the URL from an external source */
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
- <p class="level0">&nbsp; /* only allow redirects to HTTP and HTTPS URLs */
- &nbsp; curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS,
- &nbsp;                  CURLPROTO_HTTP | CURLPROTO_HTTPS);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+curl = curl_easy_init();
+if(curl) {
+&nbsp; /* pass in the URL from an external source */
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
+&nbsp;
+&nbsp; /* only allow redirects to HTTP and HTTPS URLs */
+&nbsp; curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS,
+&nbsp;                  CURLPROTO_HTTP | CURLPROTO_HTTPS);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.4, before then it would follow all protocols. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f5e3527..592c380 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf and b/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf differ
index d00019b..71aae83 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -37,7 +37,17 @@ NULL
 .SH PROTOCOLS
 HTTP
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* tell it where we found the link to this place */
+  curl_easy_setopt(curl, CURLOPT_REFERER, "http://example.com/aboutme.html");
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 If built with HTTP support
 .SH RETURN VALUE
index d9dcbc6..0dc1958 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_REFERER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,26 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_REFERER - set the HTTP referer header <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* tell it where we found the link to this place */
+&nbsp; curl_easy_setopt(curl, CURLOPT_REFERER, "http://example.com/aboutme.html");
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built with HTTP support <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP support is enabled, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERAGENT.html">CURLOPT_USERAGENT</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERAGENT.html">CURLOPT_USERAGENT</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c898926..aa1f920 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_REFERER.pdf and b/docs/libcurl/opts/CURLOPT_REFERER.pdf differ
index 06a393a..a4da9b5 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -44,14 +44,14 @@ ADDRESS can of course be either IPv4 or IPv6 style addressing.
 
 This option effectively pre-populates the DNS cache with entries for the
 host+port pair so redirects and everything that operations against the
-HOST+PORT will instead use your provided ADDRESS. Addresses to set with
-\fICURL_RESOLVE\fP will not time-out from the DNS cache like ordinary
-entries.
+HOST+PORT will instead use your provided ADDRESS. Addresses set with
+\fICURL_RESOLVE\fP will not time-out from the DNS cache like ordinary entries.
 
-You can remove names from the DNS cache again, to stop providing these fake
-resolves, by including a string in the linked list that uses the format
+Remove names from the DNS cache again, to stop providing these fake resolves,
+by including a string in the linked list that uses the format
 \&"-HOST:PORT". The host name must be prefixed with a dash, and the host name
-and port number must exactly match what was already added previously.
+and port number must exactly match what was already added previously. (Added
+in 7.42.0)
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
@@ -75,7 +75,7 @@ if(curl) {
 curl_slist_free_all(host);
 .fi
 .SH AVAILABILITY
-Added in 7.21.3
+Added in 7.21.3. Removal support added in 7.42.0.
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index f3bd342..62451c3 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RESOLVE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,36 +52,40 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RESOLVE - provide custom host name to IP address resolves <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVE,
- &nbsp;                         struct curl_slist *hosts);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVE,
+&nbsp;                         struct curl_slist *hosts);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a linked list of strings with host name resolve information to use for requests with this handle. The linked list should be a fully valid list of <span Class="bold">struct curl_slist</span> structs properly filled in. Use <span Class="emphasis">curl_slist_append(3)</span> to create the list and <span Class="emphasis">curl_slist_free_all(3)</span> to clean up an entire list. 
 <p class="level0">Each single name resolve string should be written using the format HOST:PORT:ADDRESS where HOST is the name libcurl will try to resolve, PORT is the port number of the service where libcurl wants to connect to the HOST and ADDRESS is the numerical IP address. If libcurl is built to support IPv6, ADDRESS can of course be either IPv4 or IPv6 style addressing. 
-<p class="level0">This option effectively pre-populates the DNS cache with entries for the host+port pair so redirects and everything that operations against the HOST+PORT will instead use your provided ADDRESS. Addresses to set with <span Class="emphasis">CURL_RESOLVE</span> will not time-out from the DNS cache like ordinary entries. 
-<p class="level0">You can remove names from the DNS cache again, to stop providing these fake resolves, by including a string in the linked list that uses the format "-HOST:PORT". The host name must be prefixed with a dash, and the host name and port number must exactly match what was already added previously. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">This option effectively pre-populates the DNS cache with entries for the host+port pair so redirects and everything that operations against the HOST+PORT will instead use your provided ADDRESS. Addresses set with <span Class="emphasis">CURL_RESOLVE</span> will not time-out from the DNS cache like ordinary entries. 
+<p class="level0">Remove names from the DNS cache again, to stop providing these fake resolves, by including a string in the linked list that uses the format "-HOST:PORT". The host name must be prefixed with a dash, and the host name and port number must exactly match what was already added previously. (Added in 7.42.0) <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl;
- struct curl_slist *host = NULL;
- host = curl_slist_append(NULL, "example.com:80:127.0.0.1");
- <p class="level0">curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- &nbsp; res = curl_easy_perform(curl);
- <p class="level0">&nbsp; /* always cleanup */
- &nbsp; curl_easy_cleanup(curl);
- }
- <p class="level0">curl_slist_free_all(host);
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl;
+struct curl_slist *host = NULL;
+host = curl_slist_append(NULL, "example.com:80:127.0.0.1");
+&nbsp;
+curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_RESOLVE, host);
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; res = curl_easy_perform(curl);
+&nbsp;
+&nbsp; /* always cleanup */
+&nbsp; curl_easy_cleanup(curl);
+}
+&nbsp;
+curl_slist_free_all(host);
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Added in 7.21.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Added in 7.21.3. Removal support added in 7.42.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_IPRESOLVE.html">CURLOPT_IPRESOLVE</a>, <a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_IPRESOLVE.html">CURLOPT_IPRESOLVE</a>, <a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ee832c9..02e4a51 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RESOLVE.pdf and b/docs/libcurl/opts/CURLOPT_RESOLVE.pdf differ
index c25c646..ac6986f 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 223d95a..179fc01 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RESUME_FROM man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,31 +52,35 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RESUME_FROM - set a point to resume transfer from <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM, long from); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="level0">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">If you need to resume a transfer beyond the 2GB limit, use <a Class="emphasis" href="./CURLOPT_RESUME_FROM_LARGE.html">CURLOPT_RESUME_FROM_LARGE</a> instead. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, not used <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, FTP, SFTP, FILE <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="ftp://example.com">ftp://example.com</a>");
- <p class="level0">&nbsp; /* resume upload at byte index 200 */
- &nbsp; curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 200L);
- <p class="level0">&nbsp; /* ask for upload */
- &nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- <p class="level0">&nbsp; /* set total data amount to expect */
- &nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE, size_of_file);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
+&nbsp;
+&nbsp; /* resume upload at byte index 200 */
+&nbsp; curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 200L);
+&nbsp;
+&nbsp; /* ask for upload */
+&nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+&nbsp;
+&nbsp; /* set total data amount to expect */
+&nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE, size_of_file);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RESUME_FROM_LARGE.html">CURLOPT_RESUME_FROM_LARGE</a>, <a Class="manpage" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RESUME_FROM_LARGE.html">CURLOPT_RESUME_FROM_LARGE</a>, <a Class="manpage" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a>, <a Class="manpage" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2cae610..82c023e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf and b/docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf differ
index bcb30af..4905f39 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 122520b..a0bcffa 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RESUME_FROM_LARGE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,36 +52,42 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RESUME_FROM_LARGE - set a point to resume transfer from <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM_LARGE,
- &nbsp;                         curl_off_t from);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM_LARGE,
+&nbsp;                         curl_off_t from);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a curl_off_t 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="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, not used <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, FTP, SFTP, FILE <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_off_t resume_position = GET_IT_SOMEHOW;
- &nbsp; curl_off_t file_size = GET_IT_SOMEHOW_AS_WELL;
- <p class="level0">&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="ftp://example.com">ftp://example.com</a>");
- <p class="level0">&nbsp; /* resuming upload at this position, possibly beyond 2GB */
- &nbsp; curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resume_position);
- <p class="level0">&nbsp; /* ask for upload */
- &nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- <p class="level0">&nbsp; /* set total data amount to expect */
- &nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, file_size);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_off_t resume_position = GET_IT_SOMEHOW;
+&nbsp; curl_off_t file_size = GET_IT_SOMEHOW_AS_WELL;
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com");
+&nbsp;
+&nbsp; /* resuming upload at this position, possibly beyond 2GB */
+&nbsp; curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resume_position);
+&nbsp;
+&nbsp; /* ask for upload */
+&nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+&nbsp;
+&nbsp; /* set total data amount to expect */
+&nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, file_size);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.11.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RESUME_FROM.html">CURLOPT_RESUME_FROM</a>, <a Class="manpage" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RESUME_FROM.html">CURLOPT_RESUME_FROM</a>, <a Class="manpage" href="./CURLOPT_RANGE.html">CURLOPT_RANGE</a>, <a Class="manpage" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2c7eb2d..6547f35 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf and b/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf differ
index c951016..92536b9 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b1f53ca..c8776e0 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RTSP_CLIENT_CSEQ man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RTSP_CLIENT_CSEQ - set the RTSP client CSEQ number <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long to 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_SERVER_CSEQ.html">CURLOPT_RTSP_SERVER_CSEQ</a>, <a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_SERVER_CSEQ.html">CURLOPT_RTSP_SERVER_CSEQ</a>, <a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3a6b033..63a9e65 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf and b/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf differ
index 9ab175d..60d1d8b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 87592b5..84b4a34 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RTSP_REQUEST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RTSP_REQUEST - specify RTSP request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_REQUEST, long request); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Tell libcurl what kind of RTSP request to make. Pass one of the following RTSP enum values as a long in the <span Class="emphasis">request</span> argument. Unless noted otherwise, commands require the Session ID to be initialized. 
 <p class="level0"><a name="CURLRTSPREQOPTIONS"></a><span class="nroffip">CURL_RTSPREQ_OPTIONS</span> 
@@ -77,6 +82,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_SESSION_ID.html">CURLOPT_RTSP_SESSION_ID</a>, <a Class="manpage" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_SESSION_ID.html">CURLOPT_RTSP_SESSION_ID</a>, <a Class="manpage" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index baec9cb..ca171b0 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf and b/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf differ
index 9e7cf3a..70c5055 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index e90ff59..f6cb9d6 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RTSP_SERVER_CSEQ man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RTSP_SERVER_CSEQ - set the RTSP server CSEQ number <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SERVER_CSEQ, long cseq); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long to set the CSEQ number to expect for the next RTSP Server-&gt;Client request.  <span Class="bold">NOTE</span>: this feature (listening for Server requests) is unimplemented. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_CLIENT_CSEQ.html">CURLOPT_RTSP_CLIENT_CSEQ</a>, <a Class="manpage" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_CLIENT_CSEQ.html">CURLOPT_RTSP_CLIENT_CSEQ</a>, <a Class="manpage" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c64018d..9c55146 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf and b/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf differ
index ec3d387..cd31899 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index d3cf458..05ab11e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RTSP_SESSION_ID man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RTSP_SESSION_ID - set RTSP session ID <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <a Class="manpage" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <a Class="manpage" href="./CURLOPT_RTSP_STREAM_URI.html">CURLOPT_RTSP_STREAM_URI</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3b58f7c..de2d2c7 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf and b/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf differ
index 6a10ea0..8e58c7e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c35879b..19e1d55 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RTSP_STREAM_URI man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RTSP_STREAM_URI - set RTSP stream URI <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set the stream <span Class="emphasis">URI</span> 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="./CURLOPT_URL.html">CURLOPT_URL</a>. When working with RTSP, the <span Class="emphasis">CURLOPT_STREAM_URI(3)</span> indicates what URL to send to the server in the request header while the <a Class="emphasis" href="./CURLOPT_URL.html">CURLOPT_URL</a> indicates where to make the connection to.  (e.g. the <a Class="emphasis" href="./CURLOPT_URL.html">CURLOPT_URL</a> for the above examples might be set to <span Class="emphasis">rtsp://foo/twister</span> <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">'*' <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <a Class="manpage" href="./CURLOPT_RTSP_TRANSPORT.html">CURLOPT_RTSP_TRANSPORT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <a Class="manpage" href="./CURLOPT_RTSP_TRANSPORT.html">CURLOPT_RTSP_TRANSPORT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 79bbdc9..9c7dabe 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf and b/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf differ
index 4d0a4c0..367236b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f79c01f..4e8b4bf 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_RTSP_TRANSPORT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_RTSP_TRANSPORT - set RTSP Transport: header <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_TRANSPORT,
- &nbsp;                         char *transport);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_TRANSPORT,
+&nbsp;                         char *transport);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.20.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <a Class="manpage" href="./CURLOPT_RTSP_SESSION_ID.html">CURLOPT_RTSP_SESSION_ID</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_RTSP_REQUEST.html">CURLOPT_RTSP_REQUEST</a>, <a Class="manpage" href="./CURLOPT_RTSP_SESSION_ID.html">CURLOPT_RTSP_SESSION_ID</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d05ea24..4e8564a 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf and b/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf differ
index 7714217..8fe4ee6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index a703b49..b53682f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SASL_IR man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SASL_IR - enable sending initial response in first packet <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If the value is 1, curl will send the initial response to the server in the first authentication packet in order to reduce the number of ping pong requests. Only applicable to the following supporting SASL authentication mechanisms: 
 <p class="level0">* Login * Plain * GSSAPI * NTLM * OAuth 2.0 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.31.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a>, <a Class="manpage" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a>, <a Class="manpage" href="./CURLOPT_MAIL_FROM.html">CURLOPT_MAIL_FROM</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 841d3a9..f666c2a 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SASL_IR.pdf and b/docs/libcurl/opts/CURLOPT_SASL_IR.pdf differ
index 830f099..d4339ec 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index bd688d1..c2dfec0 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SEEKDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SEEKDATA - custom pointer passed to the seek callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Data <span Class="emphasis">pointer</span> to pass to the seek callback function. If you use the <a Class="emphasis" href="./CURLOPT_SEEKFUNCTION.html">CURLOPT_SEEKFUNCTION</a> option, this is the pointer you'll get as input. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">If you don't set this, NULL is passed to the callback. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.18.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9cbfdea..97f15db 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SEEKDATA.pdf and b/docs/libcurl/opts/CURLOPT_SEEKDATA.pdf differ
index 8747a17..179f0d2 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -43,10 +43,13 @@ shown above.
 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(3) or lseek(3) and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument
-for \fIorigin\fP, although libcurl currently only passes SEEK_SET.
+function/callback). It is also called to rewind a stream when data has already
+been sent to the server and needs to be sent again. This may happen when doing
+a HTTP PUT or POST with a multi-pass authentication method, or when an
+existing HTTP connection is reused too late and the server closes the
+connection. The function shall work like fseek(3) or lseek(3) and it gets
+SEEK_SET, SEEK_CUR or SEEK_END as argument for \fIorigin\fP, although libcurl
+currently only passes SEEK_SET.
 
 \fIuserp\fP is the pointer you set with \fICURLOPT_SEEKDATA(3)\fP.
 
index 6010e49..58030c0 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SEEKFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,19 +52,22 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SEEKFUNCTION - user callback for seeking in input stream <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">/* These are the return codes for the seek callbacks */
- #define CURL_SEEKFUNC_OK       0
- #define CURL_SEEKFUNC_FAIL     1 /* fail the entire transfer */
- #define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
- &nbsp;                                   libcurl might try other means instead */
- <p class="level0">int seek_callback(void *userp, curl_off_t offset, int origin);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+/* These are the return codes for the seek callbacks */
+&#35;define CURL_SEEKFUNC_OK       0
+&#35;define CURL_SEEKFUNC_FAIL     1 /* fail the entire transfer */
+&#35;define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
+&nbsp;                                   libcurl might try other means instead */
+&nbsp;
+int seek_callback(void *userp, curl_off_t offset, int origin);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
-<p class="level0">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(3) or lseek(3) and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument for <span Class="emphasis">origin</span>, although libcurl currently only passes SEEK_SET. 
+<p class="level0">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 data has already been sent to the server and needs to be sent again. This may happen when doing a HTTP PUT or POST with a multi-pass authentication method, or when an existing HTTP connection is reused too late and the server closes the connection. The function shall work like fseek(3) or lseek(3) and it gets SEEK_SET, SEEK_CUR or SEEK_END as argument for <span Class="emphasis">origin</span>, although libcurl currently only passes SEEK_SET. 
 <p class="level0"><span Class="emphasis">userp</span> is the pointer you set with <a Class="emphasis" href="./CURLOPT_SEEKDATA.html">CURLOPT_SEEKDATA</a>. 
 <p class="level0">The callback function must return <span Class="emphasis">CURL_SEEKFUNC_OK</span> on success, <span Class="emphasis">CURL_SEEKFUNC_FAIL</span> to cause the upload operation to fail or <span Class="emphasis">CURL_SEEKFUNC_CANTSEEK</span> 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="level0">If you forward the input arguments directly to fseek(3) or lseek(3), note that the data type for <span Class="emphasis">offset</span> is not the same as defined for curl_off_t on many systems! <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -68,6 +76,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.18.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SEEKDATA.html">CURLOPT_SEEKDATA</a>, <a Class="manpage" href="./CURLOPT_IOCTLFUNCTION.html">CURLOPT_IOCTLFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SEEKDATA.html">CURLOPT_SEEKDATA</a>, <a Class="manpage" href="./CURLOPT_IOCTLFUNCTION.html">CURLOPT_IOCTLFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 712417b..a22589e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3 b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3
new file mode 100644 (file)
index 0000000..d7ef500
--- /dev/null
@@ -0,0 +1,46 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_SERVICE_NAME 3 "17 Jun 2015" "libcurl 7.43.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_SERVICE_NAME \- SPNEGO service name
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name);
+.SH DESCRIPTION
+Pass a char * as parameter to a string holding the \fIname\fP of the
+service. The default service name is "HTTP". This option allows you to
+change it.
+.SH DEFAULT
+See above
+.SH PROTOCOLS
+Most
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.43.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
+CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+.SH "SEE ALSO"
+.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_SERVICE_NAME.html b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.html
new file mode 100644 (file)
index 0000000..3b20c9b
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SERVICE_NAME man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_SERVICE_NAME - SPNEGO service name <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a char * as parameter to a string holding the <span Class="emphasis">name</span> of the service. The default service name is "HTTP". This option allows you to change it. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">See above <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">Most <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.43.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</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/opts/CURLOPT_SERVICE_NAME.pdf b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.pdf
new file mode 100644 (file)
index 0000000..95f9a01
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SERVICE_NAME.pdf differ
index a483540..6a0c7b8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ae2082e..bf02326 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SHARE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SHARE - specify share handle to use <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">share</span> handle as a parameter. The share handle must have been created by a previous call to <span Class="emphasis">curl_share_init(3)</span>. 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 <span Class="emphasis">curl_share_setopt(3)</span> for details. 
 <p class="level0">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. 
@@ -58,6 +63,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_COOKIE.html">CURLOPT_COOKIE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8453beb..e6f3e3f 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SHARE.pdf and b/docs/libcurl/opts/CURLOPT_SHARE.pdf differ
index 61c2b5e..00dd316 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 692af0e..4b2a91b 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SOCKOPTDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SOCKOPTDATA - custom pointer to pass to sockopt callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the first argument in the sockopt callback set with <a Class="emphasis" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value of this parameter is NULL. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns <span Class="emphasis">CURLE_OK</span> if the option is supported, and <span Class="emphasis">CURLE_UNKNOWN_OPTION</span> if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5e4622f..c1ace7c 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf and b/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf differ
index e99fb79..6262dc5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 07186d2..2615137 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SOCKOPTFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,22 +52,26 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SOCKOPTFUNCTION - set callback for setting socket options <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">typedef enum  {
- &nbsp; CURLSOCKTYPE_IPCXN,  /* socket created for a specific IP connection */
- &nbsp; CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */
- &nbsp; CURLSOCKTYPE_LAST    /* never use */
- } curlsocktype;
- <p class="level0">#define CURL_SOCKOPT_OK 0
- #define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return
- &nbsp;                               CURLE_ABORTED_BY_CALLBACK */
- #define CURL_SOCKOPT_ALREADY_CONNECTED 2
- <p class="level0">int sockopt_callback(void *clientp,
- &nbsp;                    curl_socket_t curlfd,
- &nbsp;                    curlsocktype purpose);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+typedef enum  {
+&nbsp; CURLSOCKTYPE_IPCXN,  /* socket created for a specific IP connection */
+&nbsp; CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */
+&nbsp; CURLSOCKTYPE_LAST    /* never use */
+} curlsocktype;
+&nbsp;
+&#35;define CURL_SOCKOPT_OK 0
+&#35;define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return
+&nbsp;                               CURLE_ABORTED_BY_CALLBACK */
+&#35;define CURL_SOCKOPT_ALREADY_CONNECTED 2
+&nbsp;
+int sockopt_callback(void *clientp,
+&nbsp;                    curl_socket_t curlfd,
+&nbsp;                    curlsocktype purpose);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">When set, this callback function gets called by libcurl when the socket has been created, but before the connect call to allow applications to change specific socket options. The callback's <span Class="emphasis">purpose</span> argument identifies the exact purpose for this particular socket: 
@@ -75,6 +84,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.0. The <span Class="emphasis">CURL_SOCKOPT_ALREADY_CONNECTED</span> return code was added in 7.21.5. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTDATA.html">CURLOPT_SOCKOPTDATA</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTDATA.html">CURLOPT_SOCKOPTDATA</a>, <a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 47958b9..f6daed5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf differ
index cb318fc..ad0863b 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 41a462e..304db63 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SOCKS5_GSSAPI_NEC man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SOCKS5_GSSAPI_NEC - set socks proxy gssapi negotiation protection <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long set to 1 to enable or 0 to disable. As part of the gssapi negotiation a protection mode is negotiated. The <a href="http://www.ietf.org/rfc/rfc1961.txt">RFC 1961</a> 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">? <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKS5_GSSAPI_SERVICE.html">CURLOPT_SOCKS5_GSSAPI_SERVICE</a>, <a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKS5_GSSAPI_SERVICE.html">CURLOPT_SOCKS5_GSSAPI_SERVICE</a>, <a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 42a15ab..b6fee55 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf and b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf differ
index d18ea9f..784d168 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 32c43d3..d48a698 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SOCKS5_GSSAPI_SERVICE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SOCKS5_GSSAPI_SERVICE - proxy socks gssapi service name <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_SERVICE, char *name); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter to a string holding the <span Class="emphasis">name</span> of the service. The default service name for a SOCKS5 server is rcmd/server-fqdn. This option allows you to change it. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">See above <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, <a Class="manpage" href="./CURLOPT_PROXYTYPE.html">CURLOPT_PROXYTYPE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 74b6ccd..7a31841 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf and b/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf differ
index 966f746..2ecca12 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6b28744..96a2aed 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_AUTH_TYPES man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_AUTH_TYPES - set desired auth types for SFTP and SCP <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_AUTH_TYPES, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 and CURLSSH_AUTH_AGENT. 
 <p class="level0">Set <span Class="emphasis">CURLSSH_AUTH_ANY</span> to let libcurl pick a suitable one. Currently CURLSSH_AUTH_HOST has no effect. If CURLSSH_AUTH_AGENT is used, libcurl attempts to connect to ssh-agent or pageant and let the agent attempt the authentication. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">CURLSSH_AUTH_HOST was added in 7.16.1, CURLSSH_AUTH_AGENT was added in 7.28.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</a>, <a Class="manpage" href="./CURLOPT_SSH_PUBLIC_KEYFILE.html">CURLOPT_SSH_PUBLIC_KEYFILE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</a>, <a Class="manpage" href="./CURLOPT_SSH_PUBLIC_KEYFILE.html">CURLOPT_SSH_PUBLIC_KEYFILE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a719b92..41b4ba6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf and b/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf differ
index 12e7720..2ea2360 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 0bcbfdd..2eb6be4 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 - checksum of SSH server public key <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
- &nbsp;                         char *md5);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
+&nbsp;                         char *md5);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.17.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_PUBLIC_KEYFILE.html">CURLOPT_SSH_PUBLIC_KEYFILE</a>, <a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_PUBLIC_KEYFILE.html">CURLOPT_SSH_PUBLIC_KEYFILE</a>, <a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index e04a2f8..81e278c 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf and b/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf differ
index 45e7d7a..67c3673 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 9257ac7..edb0f0e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_KEYDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_KEYDATA - pointer to pass to the SSH key callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a void * as parameter. This <span Class="emphasis">pointer</span> will be passed along verbatim to the callback set with <a Class="emphasis" href="./CURLOPT_SSH_KEYFUNCTION.html">CURLOPT_SSH_KEYFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.6 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_KEYDATA.html">CURLOPT_SSH_KEYDATA</a>, <a Class="manpage" href="./CURLOPT_SSH_KNOWNHOSTS.html">CURLOPT_SSH_KNOWNHOSTS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_KEYDATA.html">CURLOPT_SSH_KEYDATA</a>, <a Class="manpage" href="./CURLOPT_SSH_KNOWNHOSTS.html">CURLOPT_SSH_KNOWNHOSTS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5c2b7db..6a996d7 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf and b/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf differ
index 4af9a3b..21bc0e5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index bfc1920..967adbe 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_KEYFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,37 +52,42 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_KEYFUNCTION - callback for known host matching logic <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">enum curl_khstat {
- &nbsp; CURLKHSTAT_FINE_ADD_TO_FILE,
- &nbsp; CURLKHSTAT_FINE,
- &nbsp; CURLKHSTAT_REJECT, /* reject the connection, return an error */
- &nbsp; CURLKHSTAT_DEFER,  /* do not accept it, but we can't answer right
- &nbsp;                       now so this causes a CURLE_DEFER error but
- &nbsp;                       otherwise the connection will be left intact
- &nbsp;                       etc */
- };
- <p class="level0">enum curl_khmatch {
- &nbsp; CURLKHMATCH_OK,       /* match */
- &nbsp; CURLKHMATCH_MISMATCH, /* host found, key mismatch! */
- &nbsp; CURLKHMATCH_MISSING,  /* no matching host/key found */
- };
- <p class="level0">struct curl_khkey {
- &nbsp; const char *key; /* points to a zero-terminated string encoded with
- &nbsp;                     base64 if len is zero, otherwise to the "raw"
- &nbsp;                     data */
- &nbsp; size_t len;
- &nbsp; enum curl_khtype keytype;
- };
- <p class="level0">int ssh_keycallback(CURL *easy,
- &nbsp;                   const struct curl_khkey *knownkey,
- &nbsp;                   const struct curl_khkey *foundkey,
- &nbsp;                   enum curl_khmatch,
- &nbsp;                   void *clientp);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYFUNCTION,
- &nbsp;                         ssh_keycallback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+enum curl_khstat {
+&nbsp; CURLKHSTAT_FINE_ADD_TO_FILE,
+&nbsp; CURLKHSTAT_FINE,
+&nbsp; CURLKHSTAT_REJECT, /* reject the connection, return an error */
+&nbsp; CURLKHSTAT_DEFER,  /* do not accept it, but we can't answer right
+&nbsp;                       now so this causes a CURLE_DEFER error but
+&nbsp;                       otherwise the connection will be left intact
+&nbsp;                       etc */
+};
+&nbsp;
+enum curl_khmatch {
+&nbsp; CURLKHMATCH_OK,       /* match */
+&nbsp; CURLKHMATCH_MISMATCH, /* host found, key mismatch! */
+&nbsp; CURLKHMATCH_MISSING,  /* no matching host/key found */
+};
+&nbsp;
+struct curl_khkey {
+&nbsp; const char *key; /* points to a zero-terminated string encoded with
+&nbsp;                     base64 if len is zero, otherwise to the "raw"
+&nbsp;                     data */
+&nbsp; size_t len;
+&nbsp; enum curl_khtype keytype;
+};
+&nbsp;
+int ssh_keycallback(CURL *easy,
+&nbsp;                   const struct curl_khkey *knownkey,
+&nbsp;                   const struct curl_khkey *foundkey,
+&nbsp;                   enum curl_khmatch,
+&nbsp;                   void *clientp);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYFUNCTION,
+&nbsp;                         ssh_keycallback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">It gets called when the known_host matching has been done, to allow the application to act and decide for libcurl how to proceed. The callback will only be called if <a Class="emphasis" href="./CURLOPT_SSH_KNOWNHOSTS.html">CURLOPT_SSH_KNOWNHOSTS</a> is also set. 
@@ -96,6 +106,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.6 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_KEYDATA.html">CURLOPT_SSH_KEYDATA</a>, <a Class="manpage" href="./CURLOPT_SSH_KNOWNHOSTS.html">CURLOPT_SSH_KNOWNHOSTS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_KEYDATA.html">CURLOPT_SSH_KEYDATA</a>, <a Class="manpage" href="./CURLOPT_SSH_KNOWNHOSTS.html">CURLOPT_SSH_KNOWNHOSTS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index cdbd6b6..4ac6f7d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf differ
index 85574ce..9ea0c86 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index b757f22..e1844ad 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_KNOWNHOSTS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_KNOWNHOSTS - file name holding the SSH known hosts <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_SSH_KEYFUNCTION.html">CURLOPT_SSH_KEYFUNCTION</a> to alter the default behavior on host and key (mis)matching. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.6 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a>, <a Class="manpage" href="./CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a>, <a Class="manpage" href="./CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html">CURLOPT_SSH_HOST_PUBLIC_KEY_MD5</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 51cf58a..72c272d 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf and b/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf differ
index f357f2c..0c35ed5 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c425a1b..f13673c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_PRIVATE_KEYFILE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_PRIVATE_KEYFILE - set private key file for SSH auth <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PRIVATE_KEYFILE,
- &nbsp;                         char *filename);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PRIVATE_KEYFILE,
+&nbsp;                         char *filename);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * pointing to a <span Class="emphasis">filename</span> for your private key. If not used, libcurl defaults to <span Class="bold">$HOME/.ssh/id_dsa</span> if the HOME environment variable is set, and just "id_dsa" in the current directory if HOME is not set. 
 <p class="level0">If the file is password-protected, set the password with <a Class="emphasis" href="./CURLOPT_KEYPASSWD.html">CURLOPT_KEYPASSWD</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -60,6 +66,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_PUBLIC_KEYFILE.html">CURLOPT_SSH_PUBLIC_KEYFILE</a>, <a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_PUBLIC_KEYFILE.html">CURLOPT_SSH_PUBLIC_KEYFILE</a>, <a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ed2ddf9..357f001 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf and b/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf differ
index 35f2a19..f9aaeae 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -35,11 +35,11 @@ libcurl defaults to \fB$HOME/.ssh/id_dsa.pub\fP if the HOME environment
 variable is set, and just "id_dsa.pub" in the current directory if HOME is not
 set.
 
-If an empty string is passed, libcurl will pass no public key to libssh2 which
-then tries to compute it from the private key, this is known to work when
-libssh2 1.4.0+ is linked against OpenSSL.
+If NULL (or an empty string) is passed, libcurl will pass no public key to
+libssh2, which then tries to compute it from the private key.  This is known
+to work with libssh2 1.4.0+ linked against OpenSSL.
 .SH DEFAULT
-As explained above
+NULL
 .SH PROTOCOLS
 SFTP and SCP
 .SH EXAMPLE
index fc38e72..0a6473e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSH_PUBLIC_KEYFILE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,19 +52,20 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSH_PUBLIC_KEYFILE - set public key file for SSH auth <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PUBLIC_KEYFILE,
- &nbsp;                         char *filename);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PUBLIC_KEYFILE,
+&nbsp;                         char *filename);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * pointing to a <span Class="emphasis">filename</span> for your public key. If not used, libcurl defaults to <span Class="bold">$HOME/.ssh/id_dsa.pub</span> if the HOME environment variable is set, and just "id_dsa.pub" in the current directory if HOME is not set. 
-<p class="level0">If an empty string is passed, libcurl will pass no public key to libssh2 which then tries to compute it from the private key, this is known to work when libssh2 1.4.0+ is linked against OpenSSL. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">As explained above <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">If NULL (or an empty string) is passed, libcurl will pass no public key to libssh2, which then tries to compute it from the private key.  This is known to work with libssh2 1.4.0+ linked against OpenSSL. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">SFTP and SCP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">The "" trick was added in 7.26.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_PRIVATE_KEYFILE.html">CURLOPT_SSH_PRIVATE_KEYFILE</a>, <a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSH_PRIVATE_KEYFILE.html">CURLOPT_SSH_PRIVATE_KEYFILE</a>, <a Class="manpage" href="./CURLOPT_SSH_AUTH_TYPES.html">CURLOPT_SSH_AUTH_TYPES</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c588db2..298c669 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf and b/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf differ
index 7ae54f1..b5d68cf 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -43,7 +43,7 @@ private key with \fICURLOPT_SSLKEY(3)\fP.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index 8e3e4bc..d0a8950 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLCERT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLCERT - set SSL client certificate <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to a zero terminated string as parameter. The string should be the file name of your client certificate. The default format is "P12" on Secure Transport and "PEM" on other engines, and can be changed with <a Class="emphasis" href="./CURLOPT_SSLCERTTYPE.html">CURLOPT_SSLCERTTYPE</a>. 
 <p class="level0">With NSS or Secure Transport, this can also be the nickname of the certificate you wish to authenticate with as it is named in the security database. If you want to use a file from the current directory, please precede it with "./" prefix, in order to avoid confusion with a nickname. 
 <p class="level0">When using a client certificate, you most likely also need to provide a private key with <a Class="emphasis" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLCERTTYPE.html">CURLOPT_SSLCERTTYPE</a>, <a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLCERTTYPE.html">CURLOPT_SSLCERTTYPE</a>, <a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7466794..cd2b00a 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLCERT.pdf and b/docs/libcurl/opts/CURLOPT_SSLCERT.pdf differ
index b19d517..98df39d 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -36,7 +36,7 @@ PKCS#12-encoded files.
 .SH DEFAULT
 "PEM"
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index 071eeb7..5d44dcd 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLCERTTYPE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLCERTTYPE - specify type of the client SSL certificate <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">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", except with Secure Transport. OpenSSL (versions 0.9.3 and later) and Secure Transport (on iOS 5 or later, or OS X 10.7 or later) also support "P12" for PKCS#12-encoded files. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">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", except with Secure Transport. OpenSSL (versions 0.9.3 and later) and Secure Transport (on iOS 5 or later, or OS X 10.7 or later) also support "P12" for PKCS&#35;12-encoded files. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">"PEM" <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. Added in 7.9.3 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a>, <a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a>, <a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index dd66602..917ac63 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf and b/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf differ
index a88a5a7..d0c48a4 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -30,19 +30,26 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);
 .SH DESCRIPTION
 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.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-If built TLS enabled.
+Only if the SSL backend is OpenSSL built with engine support.
 .SH RETURN VALUE
-Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
-CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+CURLE_OK - Engine found.
+
+CURLE_SSL_ENGINE_NOTFOUND - Engine not found, or OpenSSL was not built with
+engine support.
+
+CURLE_SSL_ENGINE_INITFAILED - Engine found but initialization failed.
+
+CURLE_NOT_BUILT_IN - Option not built in, OpenSSL is not the SSL backend.
+
+CURLE_UNKNOWN_OPTION - Option not recognized.
+
+CURLE_OUT_OF_MEMORY - Insufficient heap space.
 .SH "SEE ALSO"
 .BR CURLOPT_SSLENGINE_DEFAULT "(3), " CURLOPT_SSLKEY "(3), "
index 7263f40..fac92fd 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLENGINE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,19 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLENGINE - set SSL engine identifier <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">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="level0">If the crypto device cannot be loaded, <span Class="emphasis">CURLE_SSL_ENGINE_NOTFOUND</span> is returned. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
-<p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLENGINE_DEFAULT.html">CURLOPT_SSLENGINE_DEFAULT</a>, <a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0">Only if the SSL backend is OpenSSL built with engine support. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLE_OK - Engine found. 
+<p class="level0">CURLE_SSL_ENGINE_NOTFOUND - Engine not found, or OpenSSL was not built with engine support. 
+<p class="level0">CURLE_SSL_ENGINE_INITFAILED - Engine found but initialization failed. 
+<p class="level0">CURLE_NOT_BUILT_IN - Option not built in, OpenSSL is not the SSL backend. 
+<p class="level0">CURLE_UNKNOWN_OPTION - Option not recognized. 
+<p class="level0">CURLE_OUT_OF_MEMORY - Insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLENGINE_DEFAULT.html">CURLOPT_SSLENGINE_DEFAULT</a>, <a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a9a478e..0df2a72 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLENGINE.pdf and b/docs/libcurl/opts/CURLOPT_SSLENGINE.pdf differ
index 6570df1..2fe7aed 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -28,21 +28,27 @@ CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default
 
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val);
 .SH DESCRIPTION
-Pass a long set to 1 as parameter. Sets the actual crypto engine as the
-default for (asymmetric) crypto operations.
+Pass a long set to 1 to make the already specified crypto engine the default
+for (asymmetric) crypto operations.
 
-If the crypto device cannot be set, \fICURLE_SSL_ENGINE_SETFAILED\fP is
-returned.
+This option has no effect unless set after \fICURLOPT_SSLENGINE\fP.
 .SH DEFAULT
 None
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-If built TLS enabled.
+Only if the SSL backend is OpenSSL built with engine support.
 .SH RETURN VALUE
-Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
-CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+CURLE_OK - Engine set as default.
+
+CURLE_SSL_ENGINE_SETFAILED - Engine could not be set as default.
+
+CURLE_NOT_BUILT_IN - Option not built in, OpenSSL is not the SSL backend.
+
+CURLE_UNKNOWN_OPTION - Option not recognized.
+
+CURLE_OUT_OF_MEMORY - Insufficient heap space.
 .SH "SEE ALSO"
 .BR CURLOPT_SSLENGINE "(3), " CURLOPT_SSLCERT "(3), "
index 75c3bbc..3bcdf16 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLENGINE_DEFAULT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,19 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLENGINE_DEFAULT - make SSL engine default <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a long set to 1 as parameter. Sets the actual crypto engine as the default for (asymmetric) crypto operations. 
-<p class="level0">If the crypto device cannot be set, <span Class="emphasis">CURLE_SSL_ENGINE_SETFAILED</span> is returned. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Pass a long set to 1 to make the already specified crypto engine the default for (asymmetric) crypto operations. 
+<p class="level0">This option has no effect unless set after <span Class="emphasis">CURLOPT_SSLENGINE</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">None <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
-<p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLENGINE.html">CURLOPT_SSLENGINE</a>, <a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0">Only if the SSL backend is OpenSSL built with engine support. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">CURLE_OK - Engine set as default. 
+<p class="level0">CURLE_SSL_ENGINE_SETFAILED - Engine could not be set as default. 
+<p class="level0">CURLE_NOT_BUILT_IN - Option not built in, OpenSSL is not the SSL backend. 
+<p class="level0">CURLE_UNKNOWN_OPTION - Option not recognized. 
+<p class="level0">CURLE_OUT_OF_MEMORY - Insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLENGINE.html">CURLOPT_SSLENGINE</a>, <a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 506cb92..a852e87 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf and b/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf differ
index add69d8..8bc8205 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -38,7 +38,7 @@ present in the keychain or PKCS#12 file containing the certificate.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index faabcf3..dcac3bf 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLKEY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,15 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLKEY - specify private keyfile for TLS and SSL client cert <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY, char *keyfile); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_SSLKEYTYPE.html">CURLOPT_SSLKEYTYPE</a>. 
-<p class="level0">(iOS and Mac OS X only) This option is ignored if curl was built against Secure Transport. Secure Transport expects the private key to be already present in the keychain or PKCS#12 file containing the certificate. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">(iOS and Mac OS X only) This option is ignored if curl was built against Secure Transport. Secure Transport expects the private key to be already present in the keychain or PKCS&#35;12 file containing the certificate. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLKEYTYPE.html">CURLOPT_SSLKEYTYPE</a>, <a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLKEYTYPE.html">CURLOPT_SSLKEYTYPE</a>, <a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index fe27c02..b52cdb9 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLKEY.pdf and b/docs/libcurl/opts/CURLOPT_SSLKEY.pdf differ
index d491634..7616a3f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -38,7 +38,7 @@ engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE(3)\fP.
 .SH DEFAULT
 "PEM"
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index be6b2bd..c0f230e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLKEYTYPE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,15 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLKEYTYPE - set type of the private key file <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEYTYPE, char *type); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="level0">The format "ENG" enables you to load the private key from a crypto engine. In this case <a Class="emphasis" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a> is used as an identifier passed to the engine. You have to set the crypto engine with <a Class="emphasis" href="./CURLOPT_SSLENGINE.html">CURLOPT_SSLENGINE</a>. "DER" format key file currently does not work because of a bug in OpenSSL. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">"PEM" <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLKEY.html">CURLOPT_SSLKEY</a>, <a Class="manpage" href="./CURLOPT_SSLCERT.html">CURLOPT_SSLCERT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f5446ae..a9c46f0 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf and b/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf differ
index a10dabd..2f40e46 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -52,7 +52,7 @@ TLSv1.2 (Added in 7.34.0)
 .SH DEFAULT
 CURL_SSLVERSION_DEFAULT
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 .nf
 CURL *curl = curl_easy_init();
index efbca5b..e1bd845 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSLVERSION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSLVERSION - set preferred TLS/SSL version <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter to control which version of SSL/TLS to attempt to use. 
 <p class="level0">Use one of the available defines for this purpose. The available options are: 
@@ -68,22 +73,24 @@ p.roffit {
 <p class="level1">TLSv1.2 (Added in 7.34.0) 
 <p class="level0"><a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">CURL_SSLVERSION_DEFAULT <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
- <p class="level0">&nbsp; /* ask libcurl to use TLS version 1.0 or later */
- &nbsp; curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+&nbsp;
+&nbsp; /* ask libcurl to use TLS version 1.0 or later */
+&nbsp; curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">SSLv2 is disabled by default since 7.18.1. Other SSL versions availability may vary depending on which backend libcurl has been built to use. 
 <p class="level0">SSLv3 is disabled by default since 7.39.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_IPRESOLVE.html">CURLOPT_IPRESOLVE</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <a Class="manpage" href="./CURLOPT_HTTP_VERSION.html">CURLOPT_HTTP_VERSION</a>, <a Class="manpage" href="./CURLOPT_IPRESOLVE.html">CURLOPT_IPRESOLVE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ed73b15..be37554 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSLVERSION.pdf and b/docs/libcurl/opts/CURLOPT_SSLVERSION.pdf differ
index 7e05a59..71833b5 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -40,7 +40,7 @@ compile OpenSSL.
 
 You'll find more details about cipher lists on this URL:
 
- http://www.openssl.org/docs/apps/ciphers.html
+ https://www.openssl.org/docs/apps/ciphers.html
 
 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
@@ -53,7 +53,7 @@ You'll find more details about the NSS cipher lists on this URL:
 .SH DEFAULT
 NULL, use internal default
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
index eab61ca..090df66 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_CIPHER_LIST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,20 +52,20 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_CIPHER_LIST - specify ciphers to use for TLS <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CIPHER_LIST, char *list); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="level0">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="level0">You'll find more details about cipher lists on this URL: 
-<p class="level0">&nbsp;<a href="http://www.openssl.org/docs/apps/ciphers.html">http://www.openssl.org/docs/apps/ciphers.html</a> 
+<p class="level0">&nbsp;https://www.openssl.org/docs/apps/ciphers.html 
 <p class="level0">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="level0">You'll find more details about the NSS cipher lists on this URL: 
-<p class="level0">&nbsp;<a href="http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives">http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives</a> <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">&nbsp;http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html&#35;Directives <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL, use internal default <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_USE_SSL.html">CURLOPT_USE_SSL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4b0f4d0..ea3c453 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf and b/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf differ
index 4873cdd..be2cf34 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -34,11 +34,12 @@ parameter.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
 TODO
 .SH AVAILABILITY
-Added in 7.11.0. Only used with the OpenSSL backend.
+Added in 7.11.0 for OpenSSL. Added in 7.42.0 for wolfSSL/CyaSSL. Other SSL
+backends not supported.
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index 7c3995d..e25c9f2 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_CTX_DATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,14 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_CTX_DATA - custom pointer passed to ssl_ctx callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Data <span Class="emphasis">pointer</span> to pass to the ssl context callback set by the option <a Class="emphasis" href="./CURLOPT_SSL_CTX_FUNCTION.html">CURLOPT_SSL_CTX_FUNCTION</a>, this is the pointer you'll get as third parameter. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Added in 7.11.0. Only used with the OpenSSL backend. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Added in 7.11.0 for OpenSSL. Added in 7.42.0 for wolfSSL/CyaSSL. Other SSL backends not supported. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_CTX_FUNCTION.html">CURLOPT_SSL_CTX_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_CTX_FUNCTION.html">CURLOPT_SSL_CTX_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 8e9f8bd..1b3a932 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf and b/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf differ
index 1e8dbe5..177947b 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -22,7 +22,7 @@
 .\"
 .TH CURLOPT_SSL_CTX_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 .SH NAME
-CURLOPT_SSL_CTX_FUNCTION \- openssl specific callback to do SSL magic
+CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL or wolfSSL/CyaSSL
 .SH SYNOPSIS
 .nf
 #include <curl/curl.h>
@@ -32,38 +32,109 @@ CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *userptr);
 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_FUNCTION,
                           ssl_ctx_callback);
 .SH DESCRIPTION
-This option only works for libcurl powered by OpenSSL. If libcurl was built
-against another SSL library, this functionality is absent.
+This option only works for libcurl powered by OpenSSL or wolfSSL/CyaSSL. If
+libcurl was built against another SSL library this functionality is absent.
 
 Pass a pointer to your callback function, which should match the prototype
 shown above.
 
 This callback function gets called by libcurl just before the initialization
-of a 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 from the callback, no attempt to
-establish a connection is made and the perform operation will return the error
-code.  Set the \fIuserptr\fP argument with the \fICURLOPT_SSL_CTX_DATA(3)\fP
-option.
+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 the SSL
+initialization. The \fIssl_ctx\fP parameter is actually a pointer to the SSL
+library's \fISSL_CTX\fP. If an error is returned from the callback no attempt
+to establish a connection is made and the perform operation will return the
+callback's error code. Set the \fIuserptr\fP argument with the
+\fICURLOPT_SSL_CTX_DATA(3)\fP option.
 
 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 a 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.
+To use this properly, a non-trivial amount of knowledge of your SSL library is
+necessary. For example, you can use this function to call library-specific
+callbacks to add additional validation code for certificates, and even to
+change the actual URI of a HTTPS request.
 .SH DEFAULT
 NULL
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
-TODO
+.nf
+/* OpenSSL specific */
+
+#include <openssl/ssl.h>
+#include <curl/curl.h>
+#include <stdio.h>
+
+static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
+{
+  X509_STORE *store;
+  X509 *cert=NULL;
+  BIO *bio;
+  char *mypem = /* example CA cert PEM - shortened */
+    "-----BEGIN CERTIFICATE-----\n"
+    "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\n"
+    "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\n"
+    "IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA\n"
+    "Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO\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");
+
+  /* decrease reference counts */
+  X509_free(cert);
+  BIO_free(bio);
+
+  /* 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_SSLCERTTYPE, "PEM");
+  rv=curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);
+  rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
+
+  /* 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;
+}
+.fi
 .SH AVAILABILITY
-Added in 7.11.0. Only supported when built with OpenSSL.
+Added in 7.11.0 for OpenSSL. Added in 7.42.0 for wolfSSL/CyaSSL. Other SSL
+backends not supported.
 .SH RETURN VALUE
 Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 .SH "SEE ALSO"
index 2b0f441..6fc4524 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_CTX_FUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -46,24 +51,100 @@ p.roffit {
 </head><body>
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
-<p class="level0">CURLOPT_SSL_CTX_FUNCTION - openssl specific callback to do SSL magic <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">CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *userptr);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_FUNCTION,
- &nbsp;                         ssl_ctx_callback);
- </pre>
+<p class="level0">CURLOPT_SSL_CTX_FUNCTION - SSL context callback for OpenSSL or wolfSSL/CyaSSL <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *userptr);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_FUNCTION,
+&nbsp;                         ssl_ctx_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">This option only works for libcurl powered by OpenSSL. If libcurl was built against another SSL library, this functionality is absent. 
+<p class="level0">This option only works for libcurl powered by OpenSSL or wolfSSL/CyaSSL. If libcurl was built against another SSL library this functionality is absent. 
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
-<p class="level0">This callback function gets called by libcurl just before the initialization of a 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 from the callback, no attempt to establish a connection is made and the perform operation will return the error code.  Set the <span Class="emphasis">userptr</span> argument with the <a Class="emphasis" href="./CURLOPT_SSL_CTX_DATA.html">CURLOPT_SSL_CTX_DATA</a> option. 
+<p class="level0">This callback 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 the SSL initialization. The <span Class="emphasis">ssl_ctx</span> parameter is actually a pointer to the SSL library's <span Class="emphasis">SSL_CTX</span>. If an error is returned from the callback no attempt to establish a connection is made and the perform operation will return the callback's error code. Set the <span Class="emphasis">userptr</span> argument with the <a Class="emphasis" href="./CURLOPT_SSL_CTX_DATA.html">CURLOPT_SSL_CTX_DATA</a> option. 
 <p class="level0">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="level0">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 a 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">To use this properly, a non-trivial amount of knowledge of your SSL library is necessary. For example, you can use this function to call library-specific callbacks to add additional validation code for certificates, and even to change the actual URI of a HTTPS request. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Added in 7.11.0. Only supported when built with OpenSSL. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+/* OpenSSL specific */
+&nbsp;
+&#35;include &lt;openssl/ssl.h&gt;
+&#35;include &lt;curl/curl.h&gt;
+&#35;include &lt;stdio.h&gt;
+&nbsp;
+static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
+{
+&nbsp; X509_STORE *store;
+&nbsp; X509 *cert=NULL;
+&nbsp; BIO *bio;
+&nbsp; char *mypem = /* example CA cert PEM - shortened */
+&nbsp;   "-----BEGIN CERTIFICATE-----n"
+&nbsp;   "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290n"
+&nbsp;   "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNBn"
+&nbsp;   "IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRAn"
+&nbsp;   "Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAOn"
+&nbsp;   "GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzkn"
+&nbsp;   "zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmWn"
+&nbsp;   "omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVDn"\
+&nbsp;   "-----END CERTIFICATE-----n";
+&nbsp; /* get a BIO */
+&nbsp; bio=BIO_new_mem_buf(mypem, -1);
+&nbsp; /* use it to read the PEM formatted certificate from memory into an X509
+&nbsp;  * structure that SSL can use
+&nbsp;  */
+&nbsp; PEM_read_bio_X509(bio, &cert, 0, NULL);
+&nbsp; if(cert == NULL)
+&nbsp;   printf("PEM_read_bio_X509 failed...n");
+&nbsp;
+&nbsp; /* get a pointer to the X509 certificate store (which may be empty!) */
+&nbsp; store=SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
+&nbsp;
+&nbsp; /* add our certificate to this store */
+&nbsp; if(X509_STORE_add_cert(store, cert)==0)
+&nbsp;   printf("error adding certificaten");
+&nbsp;
+&nbsp; /* decrease reference counts */
+&nbsp; X509_free(cert);
+&nbsp; BIO_free(bio);
+&nbsp;
+&nbsp; /* all set to go */
+&nbsp; return CURLE_OK;
+}
+&nbsp;
+int main(void)
+{
+&nbsp; CURL * ch;
+&nbsp; CURLcode rv;
+&nbsp;
+&nbsp; rv=curl_global_init(CURL_GLOBAL_ALL);
+&nbsp; ch=curl_easy_init();
+&nbsp; rv=curl_easy_setopt(ch, CURLOPT_SSLCERTTYPE, "PEM");
+&nbsp; rv=curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);
+&nbsp; rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/");
+&nbsp;
+&nbsp; /* Retrieve page using cacerts' certificate -&gt; will succeed
+&nbsp;  * load the certificate by installing a function doing the nescessary
+&nbsp;  * "modifications" to the SSL CONTEXT just before link init
+&nbsp;  */
+&nbsp; rv=curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
+&nbsp; rv=curl_easy_perform(ch);
+&nbsp; if(rv==CURLE_OK)
+&nbsp;   printf("*** transfer succeeded ***n");
+&nbsp; else
+&nbsp;   printf("*** transfer failed ***n");
+&nbsp;
+&nbsp; curl_easy_cleanup(ch);
+&nbsp; curl_global_cleanup();
+&nbsp; return rv;
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.11.0 for OpenSSL. Added in 7.42.0 for wolfSSL/CyaSSL. Other SSL backends not supported. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_CTX_DATA.html">CURLOPT_SSL_CTX_DATA</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_CTX_DATA.html">CURLOPT_SSL_CTX_DATA</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index af3d959..cda97e0 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf differ
index 6716f72..61863c8 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 69d6df2..bea4c30 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_ENABLE_ALPN man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_ENABLE_ALPN - enable ALPN <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_ALPN, long npn); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter, 0 or 1 where 1 is for enable and 0 for disable. This option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl is built to use supports it), which can be used to negotiate http2. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1, enabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.36.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_ENABLE_NPN.html">CURLOPT_SSL_ENABLE_NPN</a>, <a Class="manpage" href="./CURLOPT_SSL_OPTIONS.html">CURLOPT_SSL_OPTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_ENABLE_NPN.html">CURLOPT_SSL_ENABLE_NPN</a>, <a Class="manpage" href="./CURLOPT_SSL_OPTIONS.html">CURLOPT_SSL_OPTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 96f158c..ca96c8e 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf and b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf differ
index 5db9b51..67f0ebe 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 3278e95..e81c76d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_ENABLE_NPN man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_ENABLE_NPN - enable NPN <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter, 0 or 1 where 1 is for enable and 0 for disable. This option enables/disables NPN in the SSL handshake (if the SSL backend libcurl is built to use supports it), which can be used to negotiate http2. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1, enabled <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.36.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_ENABLE_ALPN.html">CURLOPT_SSL_ENABLE_ALPN</a>, <a Class="manpage" href="./CURLOPT_SSL_OPTIONS.html">CURLOPT_SSL_OPTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_ENABLE_ALPN.html">CURLOPT_SSL_ENABLE_ALPN</a>, <a Class="manpage" href="./CURLOPT_SSL_OPTIONS.html">CURLOPT_SSL_OPTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 49767cb..00752a1 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf and b/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3 b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3
new file mode 100644 (file)
index 0000000..3073dad
--- /dev/null
@@ -0,0 +1,48 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_SSL_FALSESTART 3 "14 Feb 2015" "libcurl 7.41.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_SSL_FALSESTART \- enable TLS false start
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);
+.SH DESCRIPTION
+Pass a long as parameter set to 1 to enable or 0 to disable.
+
+This option determines whether libcurl should use false start during the TLS
+handshake. False start is a mode where a TLS client will start sending
+application data before verifying the server's Finished message, thus saving a
+round trip when performing a full handshake.
+.SH DEFAULT
+0
+.SH PROTOCOLS
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.42.0. This option is currently only supported by the NSS and
+Secure Transport (on iOS 7.0 or later, or OS X 10.9 or later) TLS backends.
+.SH RETURN VALUE
+Returns CURLE_OK if false start is supported by the SSL backend, otherwise
+returns CURLE_NOT_BUILT_IN.
diff --git a/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.html b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.html
new file mode 100644 (file)
index 0000000..d683098
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSL_FALSESTART man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_SSL_FALSESTART - enable TLS false start <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a long as parameter set to 1 to enable or 0 to disable. 
+<p class="level0">This option determines whether libcurl should use false start during the TLS handshake. False start is a mode where a TLS client will start sending application data before verifying the server's Finished message, thus saving a round trip when performing a full handshake. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.42.0. This option is currently only supported by the NSS and Secure Transport (on iOS 7.0 or later, or OS X 10.9 or later) TLS backends. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if false start is supported by the SSL backend, otherwise returns CURLE_NOT_BUILT_IN. <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/opts/CURLOPT_SSL_FALSESTART.pdf b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.pdf
new file mode 100644 (file)
index 0000000..120af14
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.pdf differ
index 09bcb96..4943233 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -30,13 +30,25 @@ CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask);
 .SH DESCRIPTION
 Pass a long with a bitmask to tell libcurl about specific SSL behaviors.
 
-\fICURLSSLOPT_ALLOW_BEAST\fP is the only supported bit and by setting this the
-user will tell libcurl to not attempt to use any workarounds for a security
-flaw in the SSL3 and TLS1.0 protocols.  If this option isn't used or this bit
-is set to 0, the SSL layer libcurl uses may use a work-around for this flaw
-although it might cause interoperability problems with some (older) SSL
-implementations. WARNING: avoiding this work-around lessens the security, and
-by setting this option to 1 you ask for exactly that.
+\fICURLSSLOPT_ALLOW_BEAST\fP tells libcurl to not attempt to use any
+workarounds for a security flaw in the SSL3 and TLS1.0 protocols.  If this
+option isn't used or this bit is set to 0, the SSL layer libcurl uses may use a
+work-around for this flaw although it might cause interoperability problems
+with some (older) SSL implementations. WARNING: avoiding this work-around
+lessens the security, and by setting this option to 1 you ask for exactly that.
+This option is only supported for DarwinSSL, NSS and OpenSSL.
+
+Added in 7.44.0:
+
+\fICURLSSLOPT_NO_REVOKE\fP tells libcurl to disable certificate revocation
+checks for those SSL backends where such behavior is present. \fBCurrently this
+option is only supported for WinSSL (the native Windows SSL library), with an
+exception in the case of Windows' Untrusted Publishers blacklist which it seems
+can't be bypassed.\fP This option may have broader support to accommodate other
+SSL backends in the future.
+https://curl.haxx.se/docs/ssl-compared.html
+
+
 .SH DEFAULT
 0
 .SH PROTOCOLS
index f268c59..9491b4f 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_OPTIONS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,19 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_OPTIONS - set SSL behavior options <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long with a bitmask to tell libcurl about specific SSL behaviors. 
-<p class="level0"><span Class="emphasis">CURLSSLOPT_ALLOW_BEAST</span> is the only supported bit and by setting this the user will tell libcurl to not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols.  If this option isn't used or this bit is set to 0, the SSL layer libcurl uses may use a work-around for this flaw although it might cause interoperability problems with some (older) SSL implementations. WARNING: avoiding this work-around lessens the security, and by setting this option to 1 you ask for exactly that. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0"><span Class="emphasis">CURLSSLOPT_ALLOW_BEAST</span> tells libcurl to not attempt to use any workarounds for a security flaw in the SSL3 and TLS1.0 protocols.  If this option isn't used or this bit is set to 0, the SSL layer libcurl uses may use a work-around for this flaw although it might cause interoperability problems with some (older) SSL implementations. WARNING: avoiding this work-around lessens the security, and by setting this option to 1 you ask for exactly that. This option is only supported for DarwinSSL, NSS and OpenSSL. 
+<p class="level0">Added in 7.44.0: 
+<p class="level0"><span Class="emphasis">CURLSSLOPT_NO_REVOKE</span> tells libcurl to disable certificate revocation checks for those SSL backends where such behavior is present. <span class="bold">Currently this option is only supported for WinSSL (the native Windows SSL library), with an exception in the case of Windows' Untrusted Publishers blacklist which it seems can't be bypassed.</span> This option may have broader support to accommodate other SSL backends in the future. <a href="https://curl.haxx.se/docs/ssl-compared.html">https://curl.haxx.se/docs/ssl-compared.html</a> 
+<p class="level0">
+<p class="level0"><a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All TLS-based protocols <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.25.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_SSL_CIPHER_LIST.html">CURLOPT_SSL_CIPHER_LIST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_SSL_CIPHER_LIST.html">CURLOPT_SSL_CIPHER_LIST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c974eb5..9f666c5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf and b/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf differ
index 4baa061..c939465 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 0f32572..7e6777a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_SESSIONID_CACHE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_SESSIONID_CACHE - enable/disable use of the SSL session-ID cache <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_SESSIONID_CACHE,
- &nbsp;                        long enabled);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_SESSIONID_CACHE,
+&nbsp;                        long enabled);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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 enabled. While nothing ever should get hurt by attempting to reuse SSL session-IDs, there seem to be or have been broken SSL implementations in the wild that may require you to disable this in order for you to succeed. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">1 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.16.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_DNS_CACHE_TIMEOUT.html">CURLOPT_DNS_CACHE_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 467c624..f5413de 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf and b/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf differ
index ca39a09..1591473 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -64,9 +64,19 @@ also set to zero and cannot be overridden.
 .SH DEFAULT
 2
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+  /* Set the default value: strict name check please */
+  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 If built TLS enabled.
 .SH RETURN VALUE
index 7de718d..40b8381 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_VERIFYHOST man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_VERIFYHOST - verify the certificate's name against host <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter specifying what to <span Class="emphasis">verify</span>. 
 <p class="level0">This option determines whether libcurl verifies that the server cert is for the server it is known as. 
@@ -59,11 +64,23 @@ p.roffit {
 <p class="level0">The default value for this option is 2. 
 <p class="level0">This option controls checking the server's certificate's claimed identity. The server could be lying.  To control lying, see <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>.  If libcurl is built against NSS and <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> is zero, <a Class="emphasis" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a> is also set to zero and cannot be overridden. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">2 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+&nbsp;
+&nbsp; /* Set the default value: strict name check please */
+&nbsp; curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not. 
 <p class="level0">If 1 is set as argument, <span Class="emphasis">CURLE_BAD_FUNCTION_ARGUMENT</span> is returned. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3ba7cfd..d546d5b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf and b/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf differ
index f2bad74..5a63481 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -60,9 +60,19 @@ the correct end-point.
 .SH DEFAULT
 By default, curl assumes a value of 1.
 .SH PROTOCOLS
-All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc.
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+
+  /* Set the default value: strict certificate check please */
+  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 If built TLS enabled.
 .SH RETURN VALUE
index 7b9a56c..df73b74 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_SSL_VERIFYPEER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_SSL_VERIFYPEER - verify the peer's SSL certificate <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYPEER, long verify); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter to enable or disable. 
 <p class="level0">This option determines whether curl verifies the authenticity of the peer's certificate. A value of 1 means curl verifies; 0 (zero) means it doesn't. 
@@ -56,10 +61,22 @@ p.roffit {
 <p class="level0">Authenticating the certificate is not enough to be sure about the server. You typically also want to ensure that the server is the server you mean to be talking to.  Use <a Class="emphasis" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a> for that. The check that the host name in the certificate is valid for the host name you're connecting to is done independently of the <a Class="emphasis" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a> option. 
 <p class="level0">WARNING: disabling verification of the certificate allows bad guys to man-in-the-middle the communication without you knowing it. Disabling verification makes the communication insecure. Just having encryption on a transfer is not enough as you cannot be sure that you are communicating with the correct end-point. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">By default, curl assumes a value of 1. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
-<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+&nbsp;
+&nbsp; /* Set the default value: strict certificate check please */
+&nbsp; curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">If built TLS enabled. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2bba563..75c3948 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf and b/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3 b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3
new file mode 100644 (file)
index 0000000..3021225
--- /dev/null
@@ -0,0 +1,53 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_SSL_VERIFYSTATUS 3 "04 Dec 2014" "libcurl 7.40.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify);
+.SH DESCRIPTION
+Pass a long as parameter set to 1 to enable or 0 to disable.
+
+This option determines whether libcurl verifies the status of the server cert
+using the "Certificate Status Request" TLS extension (aka. OCSP stapling).
+
+Note that if this option is enabled but the server does not support the TLS
+extension, the verification will fail.
+.SH DEFAULT
+0
+.SH PROTOCOLS
+All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.41.0. This option is currently only supported by the OpenSSL, GnuTLS
+and NSS TLS backends.
+.SH RETURN VALUE
+Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise
+returns CURLE_NOT_BUILT_IN.
+.SH "SEE ALSO"
+.BR CURLOPT_SSL_VERIFYHOST "(3), "
+.BR CURLOPT_SSL_VERIFYPEER "(3), "
+.BR CURLOPT_CAINFO "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.html b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.html
new file mode 100644 (file)
index 0000000..f7dfdd1
--- /dev/null
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_SSL_VERIFYSTATUS man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_SSL_VERIFYSTATUS - verify the certificate's status <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a long as parameter set to 1 to enable or 0 to disable. 
+<p class="level0">This option determines whether libcurl verifies the status of the server cert using the "Certificate Status Request" TLS extension (aka. OCSP stapling). 
+<p class="level0">Note that if this option is enabled but the server does not support the TLS extension, the verification will fail. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.41.0. This option is currently only supported by the OpenSSL, GnuTLS and NSS TLS backends. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise returns CURLE_NOT_BUILT_IN. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSL_VERIFYHOST.html">CURLOPT_SSL_VERIFYHOST</a>, <a Class="manpage" href="./CURLOPT_SSL_VERIFYPEER.html">CURLOPT_SSL_VERIFYPEER</a>, <a Class="manpage" href="./CURLOPT_CAINFO.html">CURLOPT_CAINFO</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/opts/CURLOPT_SSL_VERIFYSTATUS.pdf b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.pdf
new file mode 100644 (file)
index 0000000..59d4aa6
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.pdf differ
index 67e9501..7dfe371 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -36,7 +36,16 @@ stderr
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+FILE *filep = fopen("dump", "wb");
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+  curl_easy_setopt(curl, CURLOPT_STDERR, filep);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 50fcd93..d4fe496 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_STDERR man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,25 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_STDERR - redirect stderr to another stream <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STDERR, FILE *stream); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a FILE * as parameter. Tell libcurl to use this <span Class="emphasis">stream</span> instead of stderr when showing the progress meter and displaying <a Class="emphasis" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a> data. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">stderr <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+FILE *filep = fopen("dump", "wb");
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp; curl_easy_setopt(curl, CURLOPT_STDERR, filep);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 18a1a52..0bcf637 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_STDERR.pdf and b/docs/libcurl/opts/CURLOPT_STDERR.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3 b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3
new file mode 100644 (file)
index 0000000..831d211
--- /dev/null
@@ -0,0 +1,56 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_STREAM_DEPENDS 3 "13 Sep 2015" "libcurl 7.46.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_STREAM_DEPENDS \- set stream this transfer depends on
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, CURL *dephandle);
+.SH DESCRIPTION
+Pass a CURL * pointer in \fIdephandle\fP to identify the stream within the
+same connection that this stream is depending upon. This option clears the
+exclusive it and is mutually exclusive to the
+\fICURLOPT_STREAM_DEPENDS_E(3)\fP option.
+
+The spec says "Including a dependency expresses a preference to allocate
+resources to the identified stream rather than to the dependent stream."
+
+This option can be set during transfer.
+
+\fIdephandle\fP must not be the same as \fIhandle\fP, that will cause this
+function to return an error. It must be another easy handle, and it also needs
+to be a handle of a transfer that will be sent over the same HTTP/2 connection
+for this option to have an actual effect.
+.SH DEFAULT
+NULL
+.SH PROTOCOLS
+HTTP/2
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.46.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_STREAM_WEIGHT "(3), " CURLOPT_STREAM_DEPENDS_E "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.html b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.html
new file mode 100644 (file)
index 0000000..7ce6b96
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_STREAM_DEPENDS man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_STREAM_DEPENDS - set stream this transfer depends on <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, CURL *dephandle); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a CURL * pointer in <span Class="emphasis">dephandle</span> to identify the stream within the same connection that this stream is depending upon. This option clears the exclusive it and is mutually exclusive to the <a Class="emphasis" href="./CURLOPT_STREAM_DEPENDS_E.html">CURLOPT_STREAM_DEPENDS_E</a> option. 
+<p class="level0">The spec says "Including a dependency expresses a preference to allocate resources to the identified stream rather than to the dependent stream." 
+<p class="level0">This option can be set during transfer. 
+<p class="level0"><span Class="emphasis">dephandle</span> must not be the same as <span Class="emphasis">handle</span>, that will cause this function to return an error. It must be another easy handle, and it also needs to be a handle of a transfer that will be sent over the same HTTP/2 connection for this option to have an actual effect. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP/2 <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.46.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_STREAM_WEIGHT.html">CURLOPT_STREAM_WEIGHT</a>, <a Class="manpage" href="./CURLOPT_STREAM_DEPENDS_E.html">CURLOPT_STREAM_DEPENDS_E</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/opts/CURLOPT_STREAM_DEPENDS.pdf b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.pdf
new file mode 100644 (file)
index 0000000..901e855
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3 b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3
new file mode 100644 (file)
index 0000000..c1d9fd0
--- /dev/null
@@ -0,0 +1,59 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_STREAM_DEPENDS_E 3 "13 Sep 2015" "libcurl 7.46.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_STREAM_DEPENDS_E \- set stream this transfer depends on execlusively
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL *dephandle);
+.SH DESCRIPTION
+Pass a CURL * pointer in \fIdephandle\fP to identify the stream within the
+same connection that this stream is depending upon exclusively. That means it
+depends on it and sets the Exclusive bit.
+
+The spec says "Including a dependency expresses a preference to allocate
+resources to the identified stream rather than to the dependent stream."
+
+Setting a dependency with the exclusive flag for a reprioritized stream causes
+all the dependencies of the new parent stream to become dependent on the
+reprioritized stream.
+
+This option can be set during transfer.
+
+\fIdephandle\fP must not be the same as \fIhandle\fP, that will cause this
+function to return an error. It must be another easy handle, and it also needs
+to be a handle of a transfer that will be sent over the same HTTP/2 connection
+for this option to have an actual effect.
+.SH DEFAULT
+NULL
+.SH PROTOCOLS
+HTTP/2
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.46.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_STREAM_WEIGHT "(3), " CURLOPT_STREAM_DEPENDS "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.html b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.html
new file mode 100644 (file)
index 0000000..c8903f6
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_STREAM_DEPENDS_E man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_STREAM_DEPENDS_E - set stream this transfer depends on execlusively <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL *dephandle); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a CURL * pointer in <span Class="emphasis">dephandle</span> to identify the stream within the same connection that this stream is depending upon exclusively. That means it depends on it and sets the Exclusive bit. 
+<p class="level0">The spec says "Including a dependency expresses a preference to allocate resources to the identified stream rather than to the dependent stream." 
+<p class="level0">Setting a dependency with the exclusive flag for a reprioritized stream causes all the dependencies of the new parent stream to become dependent on the reprioritized stream. 
+<p class="level0">This option can be set during transfer. 
+<p class="level0"><span Class="emphasis">dephandle</span> must not be the same as <span Class="emphasis">handle</span>, that will cause this function to return an error. It must be another easy handle, and it also needs to be a handle of a transfer that will be sent over the same HTTP/2 connection for this option to have an actual effect. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP/2 <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.46.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_STREAM_WEIGHT.html">CURLOPT_STREAM_WEIGHT</a>, <a Class="manpage" href="./CURLOPT_STREAM_DEPENDS.html">CURLOPT_STREAM_DEPENDS</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/opts/CURLOPT_STREAM_DEPENDS_E.pdf b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.pdf
new file mode 100644 (file)
index 0000000..7f62609
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3 b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3
new file mode 100644 (file)
index 0000000..a2b2472
--- /dev/null
@@ -0,0 +1,63 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2015, 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 https://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 CURLOPT_STREAM_WEIGHT 3 "13 Sep 2015" "libcurl 7.46.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_STREAM_WEIGHT \- set numerical stream weight
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight);
+.SH DESCRIPTION
+Set the long \fIweight\fP to a number between 1 and 256.
+
+When using HTTP/2, this option sets the individual weight for this particular
+stream used by the easy \fIhandle\fP. Setting and using weights only makes
+sense and is only usable when doing multiple streams over the same
+connections, which thus implies that you use \fICURLMOPT_PIPELINING(3)\fP.
+
+This option can be set during transfer and will then cause the updated weight
+info get sent to the server the next time a HTTP/2 frame is sent to the
+server.
+
+See section 5.3 of RFC 7540 for protocol details:
+https://httpwg.github.io/specs/rfc7540.html#StreamPriority
+
+Streams with the same parent should be allocated resources proportionally
+based on their weight. So if you have two streams going, stream A with weight
+16 and stream B with weight 32, stream B will get two thirds (32/48) of the
+available bandwidth (assuming the server can send off the data equally for
+both streams).
+.SH DEFAULT
+If nothing is set, the HTTP/2 protocol itself will use its own default which
+is 16.
+.SH PROTOCOLS
+HTTP/2
+.SH EXAMPLE
+TODO
+.SH AVAILABILITY
+Added in 7.46.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
+.SH "SEE ALSO"
+.BR CURLOPT_STREAM_DEPENDS "(3), " CURLOPT_STREAM_DEPENDS_E "(3), "
+.BR CURLOPT_PIPEWAIT "(3), " CURLMOPT_PIPELINING "(3), "
diff --git a/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.html b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.html
new file mode 100644 (file)
index 0000000..f46b0be
--- /dev/null
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_STREAM_WEIGHT man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_STREAM_WEIGHT - set numerical stream weight <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set the long <span Class="emphasis">weight</span> to a number between 1 and 256. 
+<p class="level0">When using HTTP/2, this option sets the individual weight for this particular stream used by the easy <span Class="emphasis">handle</span>. Setting and using weights only makes sense and is only usable when doing multiple streams over the same connections, which thus implies that you use <a Class="emphasis" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</a>. 
+<p class="level0">This option can be set during transfer and will then cause the updated weight info get sent to the server the next time a HTTP/2 frame is sent to the server. 
+<p class="level0">See section 5.3 of <a href="http://www.ietf.org/rfc/rfc7540.txt">RFC 7540</a> for protocol details: <a href="https://httpwg.github.io/specs/rfc7540.html&#35;StreamPriority">https://httpwg.github.io/specs/rfc7540.html&#35;StreamPriority</a> 
+<p class="level0">Streams with the same parent should be allocated resources proportionally based on their weight. So if you have two streams going, stream A with weight 16 and stream B with weight 32, stream B will get two thirds (32/48) of the available bandwidth (assuming the server can send off the data equally for both streams). <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">If nothing is set, the HTTP/2 protocol itself will use its own default which is 16. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">HTTP/2 <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.46.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_STREAM_DEPENDS.html">CURLOPT_STREAM_DEPENDS</a>, <a Class="manpage" href="./CURLOPT_STREAM_DEPENDS_E.html">CURLOPT_STREAM_DEPENDS_E</a>, <a Class="manpage" href="./CURLOPT_PIPEWAIT.html">CURLOPT_PIPEWAIT</a>, <a Class="manpage" href="./CURLMOPT_PIPELINING.html">CURLMOPT_PIPELINING</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/opts/CURLOPT_STREAM_WEIGHT.pdf b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf
new file mode 100644 (file)
index 0000000..5f3428e
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf differ
index daf3df4..cc3642f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -38,7 +38,23 @@ disable keepalive probes
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* enable TCP keep-alive for this transfer */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+
+  /* keep-alive idle time to 120 seconds */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+
+  /* interval time between keep-alive probes: 60 seconds */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Added in 7.25.0
 .SH RETURN VALUE
index 765594e..015202d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TCP_KEEPALIVE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,32 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TCP_KEEPALIVE - enable TCP keep-alive probing <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. If set to 1, TCP keepalive probes will be sent. The delay and frequency of these probes can be controlled by the <a Class="emphasis" href="./CURLOPT_TCP_KEEPIDLE.html">CURLOPT_TCP_KEEPIDLE</a> and <a Class="emphasis" href="./CURLOPT_TCP_KEEPINTVL.html">CURLOPT_TCP_KEEPINTVL</a> options, provided the operating system supports them. Set to 0 (default behavior) to disable keepalive probes <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* enable TCP keep-alive for this transfer */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+&nbsp;
+&nbsp; /* keep-alive idle time to 120 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+&nbsp;
+&nbsp; /* interval time between keep-alive probes: 60 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.25.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TCP_KEEPIDLE.html">CURLOPT_TCP_KEEPIDLE</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPINTVL.html">CURLOPT_TCP_KEEPINTVL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TCP_KEEPIDLE.html">CURLOPT_TCP_KEEPIDLE</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPINTVL.html">CURLOPT_TCP_KEEPINTVL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 3f60961..9fbe7fd 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf and b/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf differ
index 1724824..f5f5762 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -36,7 +36,23 @@ operating systems support this option.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* enable TCP keep-alive for this transfer */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+
+  /* set keep-alive idle time to 120 seconds */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+
+  /* interval time between keep-alive probes: 60 seconds */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Added in 7.25.0
 .SH RETURN VALUE
index a575947..a1edda3 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TCP_KEEPIDLE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,32 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TCP_KEEPIDLE - set TCP keep-alive idle time wait <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. Sets the <span Class="emphasis">delay</span>, in seconds, that the operating system will wait while the connection is idle before sending keepalive probes. Not all operating systems support this option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">? <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* enable TCP keep-alive for this transfer */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+&nbsp;
+&nbsp; /* set keep-alive idle time to 120 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+&nbsp;
+&nbsp; /* interval time between keep-alive probes: 60 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.25.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TCP_KEEPALIVE.html">CURLOPT_TCP_KEEPALIVE</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPINTVL.html">CURLOPT_TCP_KEEPINTVL</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TCP_KEEPALIVE.html">CURLOPT_TCP_KEEPALIVE</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPINTVL.html">CURLOPT_TCP_KEEPINTVL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index cdcc179..fc0c417 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf and b/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf differ
index e4bcf7f..f332a8f 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -34,7 +34,23 @@ option. (Added in 7.25.0)
 .SH DEFAULT
 .SH PROTOCOLS
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* enable TCP keep-alive for this transfer */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+
+  /* keep-alive idle time to 120 seconds */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+
+  /* interval time between keep-alive probes: 60 seconds */
+  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index b7579fb..3bcf4fb 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TCP_KEEPINTVL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,32 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TCP_KEEPINTVL - set TCP keep-alive interval <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long. Sets the interval, in seconds, that the operating system will wait between sending keepalive probes. Not all operating systems support this option. (Added in 7.25.0) <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0"><a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0"><a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* enable TCP keep-alive for this transfer */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
+&nbsp;
+&nbsp; /* keep-alive idle time to 120 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
+&nbsp;
+&nbsp; /* interval time between keep-alive probes: 60 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TCP_KEEPALIVE.html">CURLOPT_TCP_KEEPALIVE</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPIDLE.html">CURLOPT_TCP_KEEPIDLE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TCP_KEEPALIVE.html">CURLOPT_TCP_KEEPALIVE</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPIDLE.html">CURLOPT_TCP_KEEPIDLE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7982bab..7aad4d2 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf and b/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf differ
index bd13516..efb2586 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 7f2ba49..d2e42f5 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TCP_NODELAY man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TCP_NODELAY - set the TCP_NODELAY option <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long specifying whether the TCP_NODELAY option is to 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="level0">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). 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPALIVE.html">CURLOPT_TCP_KEEPALIVE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SOCKOPTFUNCTION.html">CURLOPT_SOCKOPTFUNCTION</a>, <a Class="manpage" href="./CURLOPT_TCP_KEEPALIVE.html">CURLOPT_TCP_KEEPALIVE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7277e8e..c3e6cd2 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf and b/docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf differ
index f5a9bc5..7a181ed 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index ac50076..25f2923 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TELNETOPTIONS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TELNETOPTIONS - custom telnet options <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS, &nbsp;                         struct curl_slist *cmds); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with TELNET <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if TELNET is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <a Class="manpage" href="./CURLOPT_QUOTE.html">CURLOPT_QUOTE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ade0176..5885791 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf and b/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf differ
index 05bc639..6aafbd1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 080d612..237e4e7 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TFTP_BLKSIZE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TFTP_BLKSIZE - TFTP block size <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Specify <span Class="emphasis">blocksize</span> to use for TFTP data transmission. Valid range as per <a href="http://www.ietf.org/rfc/rfc2348.txt">RFC 2348</a> 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">512 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAXFILESIZE.html">CURLOPT_MAXFILESIZE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAXFILESIZE.html">CURLOPT_MAXFILESIZE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index ef1d0fd..7780f4b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf and b/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf differ
diff --git a/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3 b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3
new file mode 100644 (file)
index 0000000..53b1770
--- /dev/null
@@ -0,0 +1,71 @@
+.\" **************************************************************************
+.\" *                                  _   _ ____  _
+.\" *  Project                     ___| | | |  _ \| |
+.\" *                             / __| | | | |_) | |
+.\" *                            | (__| |_| |  _ <| |___
+.\" *                             \___|\___/|_| \_\_____|
+.\" *
+.\" * Copyright (C) 1998 - 2014, 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 CURLOPT_TFTP_NO_OPTIONS 3 "23 Feb 2016" "libcurl 7.48.0" "curl_easy_setopt options"
+.SH NAME
+CURLOPT_TFTP_NO_OPTIONS \- Do not send TFTP options requests.
+.SH SYNOPSIS
+#include <curl/curl.h>
+
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff);
+.SH DESCRIPTION
+Set \fIonoff\fP to 1L to exclude all TFTP options defined in RFC2347, RFC2348
+and RFC2349 from read and write requests (RRQs/WRQs).
+
+This option improves interop with some legacy servers that do not acknowledge
+or properly implement TFTP options. When this option is used
+\fICURLOPT_TFTP_BLKSIZE(3)\fP is ignored.
+.SH DEFAULT
+0
+.SH PROTOCOLS
+TFTP
+.SH EXAMPLE
+.nf
+size_t write_callback(char *ptr, size_t size, size_t nmemb, void *fp)
+{
+  return fwrite(ptr, size, nmemb, (FILE *)fp);
+}
+
+CURL *curl = curl_easy_init();
+if(curl) {
+  FILE *fp = fopen("foo.bin", "wb");
+  if(fp) {
+    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)fp);
+    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
+
+    curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/foo.bin");
+
+    /* do not send TFTP options requests */
+    curl_easy_setopt(curl, CURLOPT_TFTP_NO_OPTIONS, 1L);
+
+    /* Perform the request */
+    curl_easy_perform(curl);
+
+    fclose(fp);
+  }
+  curl_easy_cleanup(curl);
+}
+.fi
+.SH AVAILABILITY
+Added in 7.48.0
+.SH RETURN VALUE
+Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
diff --git a/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.html b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.html
new file mode 100644 (file)
index 0000000..7666925
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html><head>
+<title>CURLOPT_TFTP_NO_OPTIONS man page</title>
+<meta name="generator" content="roffit">
+<STYLE type="text/css">
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
+ padding-left: 2em;
+}
+
+P.level1, pre.level1 {
+ padding-left: 4em;
+}
+
+P.level2, pre.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">CURLOPT_TFTP_NO_OPTIONS - Do not send TFTP options requests. <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Set <span Class="emphasis">onoff</span> to 1L to exclude all TFTP options defined in <a href="http://www.ietf.org/rfc/rfc2347.txt">RFC 2347</a>, <a href="http://www.ietf.org/rfc/rfc2348.txt">RFC 2348</a> and <a href="http://www.ietf.org/rfc/rfc2349.txt">RFC 2349</a> from read and write requests (RRQs/WRQs). 
+<p class="level0">This option improves interop with some legacy servers that do not acknowledge or properly implement TFTP options. When this option is used <a Class="emphasis" href="./CURLOPT_TFTP_BLKSIZE.html">CURLOPT_TFTP_BLKSIZE</a> is ignored. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">TFTP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
+<p class="level0"><pre class="level0">
+size_t write_callback(char *ptr, size_t size, size_t nmemb, void *fp)
+{
+&nbsp; return fwrite(ptr, size, nmemb, (FILE *)fp);
+}
+&nbsp;
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; FILE *fp = fopen("foo.bin", "wb");
+&nbsp; if(fp) {
+&nbsp;   curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)fp);
+&nbsp;   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
+&nbsp;
+&nbsp;   curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/foo.bin");
+&nbsp;
+&nbsp;   /* do not send TFTP options requests */
+&nbsp;   curl_easy_setopt(curl, CURLOPT_TFTP_NO_OPTIONS, 1L);
+&nbsp;
+&nbsp;   /* Perform the request */
+&nbsp;   curl_easy_perform(curl);
+&nbsp;
+&nbsp;   fclose(fp);
+&nbsp; }
+&nbsp; curl_easy_cleanup(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Added in 7.48.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <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/opts/CURLOPT_TFTP_NO_OPTIONS.pdf b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.pdf
new file mode 100644 (file)
index 0000000..4a783d1
Binary files /dev/null and b/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.pdf differ
index 66c34ff..d8acd1c 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2014, 2016, 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.
+.\" * are also available at https://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
@@ -42,7 +42,21 @@ CURL_TIMECOND_NONE (0)
 .SH PROTOCOLS
 HTTP, FTP, RTSP, and FILE
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* January 1, 2020 is 1577833200 */
+  curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+
+  /* If-Modified-Since the above time stamp */
+  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
+
+  /* Perform the request */
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index dedeed0..2cc7d2e 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TIMECONDITION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,31 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TIMECONDITION - select condition for a time request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMECONDITION, long cond); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter. This defines how the <a Class="emphasis" href="./CURLOPT_TIMEVALUE.html">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>. 
 <p class="level0">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. <span Class="emphasis">curl_easy_getinfo(3)</span> 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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">CURL_TIMECOND_NONE (0) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, FTP, RTSP, and FILE <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* January 1, 2020 is 1577833200 */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+&nbsp;
+&nbsp; /* If-Modified-Since the above time stamp */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEVALUE.html">CURLOPT_TIMEVALUE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEVALUE.html">CURLOPT_TIMEVALUE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7c4f1b6..893b1aa 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf and b/docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf differ
index 41e0569..45e69b4 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -50,7 +50,17 @@ Default timeout is 0 (zero) which means it never times out during transfer.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* complete within 20 seconds */
+  curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 1b1b784..5f0fe62 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TIMEOUT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TIMEOUT - set maximum time the request is allowed to take <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter containing <span Class="emphasis">timeout</span> - 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 may cause libcurl to use the SIGALRM signal to timeout system calls. 
 <p class="level0">In unix-like systems, this might cause signals to be used unless <a Class="emphasis" href="./CURLOPT_NOSIGNAL.html">CURLOPT_NOSIGNAL</a> is set. 
@@ -55,9 +60,21 @@ p.roffit {
 <p class="level0">Since this puts a hard limit for how long time a request is allowed to take, it has limited use in dynamic use cases with varying transfer times. You are then advised to explore <a Class="emphasis" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <a Class="emphasis" href="./CURLOPT_LOW_SPEED_TIME.html">CURLOPT_LOW_SPEED_TIME</a> or using <a Class="emphasis" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a> to implement your own timeout logic. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Default timeout is 0 (zero) which means it never times out during transfer. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* complete within 20 seconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT_MS.html">CURLOPT_TIMEOUT_MS</a>, <span Class="manpage">  </span> <a Class="manpage" href="./CURLOPT_CONNECTTIMEOUT.html">CURLOPT_CONNECTTIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT_MS.html">CURLOPT_TIMEOUT_MS</a>, <a Class="manpage" href="./CURLOPT_CONNECTTIMEOUT.html">CURLOPT_CONNECTTIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 958c762..bdbf814 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TIMEOUT.pdf and b/docs/libcurl/opts/CURLOPT_TIMEOUT.pdf differ
index fe9a3cd..2a7afb1 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -54,7 +54,17 @@ Default timeout is 0 (zero) which means it never times out during transfer.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* complete within 20000 milliseconds */
+  curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 20000L);
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 383bff3..503694a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TIMEOUT_MS man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TIMEOUT_MS - set maximum time the request is allowed to take <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long as parameter containing <span Class="emphasis">timeout</span> - the maximum time in milliseconds 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 may cause libcurl to use the SIGALRM signal to timeout system calls. 
 <p class="level0">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. 
@@ -56,9 +61,21 @@ p.roffit {
 <p class="level0">Since this puts a hard limit for how long time a request is allowed to take, it has limited use in dynamic use cases with varying transfer times. You are then advised to explore <a Class="emphasis" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <a Class="emphasis" href="./CURLOPT_LOW_SPEED_TIME.html">CURLOPT_LOW_SPEED_TIME</a> or using <a Class="emphasis" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a> to implement your own timeout logic. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Default timeout is 0 (zero) which means it never times out during transfer. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* complete within 20000 milliseconds */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 20000L);
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <span Class="manpage">  </span> <a Class="manpage" href="./CURLOPT_CONNECTTIMEOUT.html">CURLOPT_CONNECTTIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMEOUT.html">CURLOPT_TIMEOUT</a>, <a Class="manpage" href="./CURLOPT_CONNECTTIMEOUT.html">CURLOPT_CONNECTTIMEOUT</a>, <a Class="manpage" href="./CURLOPT_LOW_SPEED_LIMIT.html">CURLOPT_LOW_SPEED_LIMIT</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f5ced77..25b1cf8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf and b/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf differ
index 43a3871..92ca6f6 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2014, 2016, 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.
+.\" * are also available at https://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
@@ -36,7 +36,21 @@ since 1 Jan 1970, and the time will be used in a condition as specified with
 .SH PROTOCOLS
 HTTP, FTP, RTSP, and FILE
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  /* January 1, 2020 is 1577833200 */
+  curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+
+  /* If-Modified-Since the above time stamp */
+  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
+
+  /* Perform the request */
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 Always
 .SH RETURN VALUE
index 14df2f1..0863394 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TIMEVALUE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,30 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TIMEVALUE - set time value for conditional <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long <span Class="emphasis">val</span> as parameter. This should be the time counted as seconds since 1 Jan 1970, and the time will be used in a condition as specified with <a Class="emphasis" href="./CURLOPT_TIMECONDITION.html">CURLOPT_TIMECONDITION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, FTP, RTSP, and FILE <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* January 1, 2020 is 1577833200 */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
+&nbsp;
+&nbsp; /* If-Modified-Since the above time stamp */
+&nbsp; curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TIMECONDITION.html">CURLOPT_TIMECONDITION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TIMECONDITION.html">CURLOPT_TIMECONDITION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 9265a93..499a763 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf and b/docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf differ
index 1c8697f..78fad0e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 3af10cb..da60f3c 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TLSAUTH_PASSWORD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TLSAUTH_PASSWORD - password to use for TLS authentication <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should point to the zero terminated password to use for the TLS authentication method specified with the <a Class="emphasis" href="./CURLOPT_TLSAUTH_TYPE.html">CURLOPT_TLSAUTH_TYPE</a> option. Requires that the <a Class="emphasis" href="./CURLOPT_TLSAUTH_USERNAME.html">CURLOPT_TLSAUTH_USERNAME</a> option also be set. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TLSAUTH_TYPE.html">CURLOPT_TLSAUTH_TYPE</a>, <a Class="manpage" href="./CURLOPT_TLSAUTH_USERNAME.html">CURLOPT_TLSAUTH_USERNAME</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TLSAUTH_TYPE.html">CURLOPT_TLSAUTH_TYPE</a>, <a Class="manpage" href="./CURLOPT_TLSAUTH_USERNAME.html">CURLOPT_TLSAUTH_USERNAME</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 631361a..6447fbc 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf and b/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf differ
index b5cdd5b..5655e7d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -26,19 +26,19 @@ CURLOPT_TLSAUTH_TYPE \- set TLS authentication methods
 .SH SYNOPSIS
 #include <curl/curl.h>
 
-CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, long bitmask);
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type);
 .SH DESCRIPTION
-Pass a long as parameter, which is set to a bitmask, to tell libcurl which
-authentication method(s) you want it to use for TLS authentication.
+Pass a pointer to a zero terminated string as parameter. The string
+should be the method of the TLS authentication. Supported method is "SRP".
 
-.IP CURL_TLSAUTH_SRP
+.IP SRP
 TLS-SRP authentication. Secure Remote Password authentication for TLS is
 defined in RFC5054 and provides mutual authentication if both sides have a
 shared secret. To use TLS-SRP, you must also set the
 \fICURLOPT_TLSAUTH_USERNAME(3)\fP and \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
 options.
 .SH DEFAULT
-CURL_TLSAUTH_NONE (0)
+blank
 .SH PROTOCOLS
 All TLS-based protocols
 .SH EXAMPLE
index 7a96979..df70349 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TLSAUTH_TYPE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,17 +52,17 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TLSAUTH_TYPE - set TLS authentication methods <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, CURLOPT_TLSAUTH_TYPE, long bitmask); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
-<p class="level0">Pass a long as parameter, which is set to a bitmask, to tell libcurl which authentication method(s) you want it to use for TLS authentication
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
+<p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
+<p class="level0">Pass a pointer to a zero terminated string as parameter. The string should be the method of the TLS authentication. Supported method is "SRP"
 <p class="level0">
-<p class="level0"><a name="CURLTLSAUTHSRP"></a><span class="nroffip">CURL_TLSAUTH_SRP</span> 
+<p class="level0"><a name="SRP"></a><span class="nroffip">SRP</span> 
 <p class="level1">TLS-SRP authentication. Secure Remote Password authentication for TLS is defined in <a href="http://www.ietf.org/rfc/rfc5054.txt">RFC 5054</a> and provides mutual authentication if both sides have a shared secret. To use TLS-SRP, you must also set the <a Class="emphasis" href="./CURLOPT_TLSAUTH_USERNAME.html">CURLOPT_TLSAUTH_USERNAME</a> and <a Class="emphasis" href="./CURLOPT_TLSAUTH_PASSWORD.html">CURLOPT_TLSAUTH_PASSWORD</a> options. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">CURL_TLSAUTH_NONE (0) <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level0">blank <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All TLS-based protocols <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">You need to build libcurl with GnuTLS or OpenSSL with TLS-SRP support for this to work. Added in 7.21.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TLSAUTH_USERNAME.html">CURLOPT_TLSAUTH_USERNAME</a>, <a Class="manpage" href="./CURLOPT_TLSAUTH_PASSWORD.html">CURLOPT_TLSAUTH_PASSWORD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TLSAUTH_USERNAME.html">CURLOPT_TLSAUTH_USERNAME</a>, <a Class="manpage" href="./CURLOPT_TLSAUTH_PASSWORD.html">CURLOPT_TLSAUTH_PASSWORD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index e8549b0..7d009e8 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf and b/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf differ
index c5bb2df..5022e4e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 2d8fcf6..f5873cb 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TLSAUTH_USERNAME man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TLSAUTH_USERNAME - user name to use for TLS authentication <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should point to the zero terminated username to use for the TLS authentication method specified with the <a Class="emphasis" href="./CURLOPT_TLSAUTH_TYPE.html">CURLOPT_TLSAUTH_TYPE</a> option. Requires that the <a Class="emphasis" href="./CURLOPT_TLSAUTH_PASSWORD.html">CURLOPT_TLSAUTH_PASSWORD</a> option also be set. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -55,6 +60,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.4 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_TLSAUTH_TYPE.html">CURLOPT_TLSAUTH_TYPE</a>, <a Class="manpage" href="./CURLOPT_TLSAUTH_PASSWORD.html">CURLOPT_TLSAUTH_PASSWORD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_TLSAUTH_TYPE.html">CURLOPT_TLSAUTH_TYPE</a>, <a Class="manpage" href="./CURLOPT_TLSAUTH_PASSWORD.html">CURLOPT_TLSAUTH_PASSWORD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c4be60c..ae81c4b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf and b/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf differ
index 6e62413..aa1759c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 7a95187..a852a68 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TRANSFERTEXT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TRANSFERTEXT - request a text based transfer for FTP <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFERTEXT, long text); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="level0">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. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with FTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_CRLF.html">CURLOPT_CRLF</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_CRLF.html">CURLOPT_CRLF</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index a7fceec..894b4c9 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf and b/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf differ
index 7f2a11c..132b914 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 5cb1e39..f9ca706 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_TRANSFER_ENCODING man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_TRANSFER_ENCODING - ask for HTTP Transfer Encoding <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFER_ENCODING, long enable); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long set to 1 to <span Class="emphasis">enable</span> or 0 to disable. 
 <p class="level0">Adds a request for compressed Transfer Encoding in the outgoing HTTP request. If the server supports this and so desires, it can respond with the HTTP response sent using a compressed Transfer-Encoding that will be automatically uncompressed by libcurl on reception. 
@@ -57,6 +62,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.6 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a>, <a Class="manpage" href="./CURLOPT_HTTP_TRANSFER_DECODING.html">CURLOPT_HTTP_TRANSFER_DECODING</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_ACCEPT_ENCODING.html">CURLOPT_ACCEPT_ENCODING</a>, <a Class="manpage" href="./CURLOPT_HTTP_TRANSFER_DECODING.html">CURLOPT_HTTP_TRANSFER_DECODING</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index f135e55..30852d5 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf and b/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf differ
index a659cd2..299c3cc 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 17fcef6..83733fb 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_UNIX_SOCKET_PATH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,33 +52,33 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_UNIX_SOCKET_PATH - set Unix domain socket <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Enables the use of Unix domain sockets as connection endpoint and sets the path to <span Class="emphasis">path</span>. If <span Class="emphasis">path</span> is NULL, then Unix domain sockets are disabled. An empty string will result in an error at some point, it will not disable use of Unix domain sockets. 
 <p class="level0">When enabled, cURL will connect to the Unix domain socket instead of establishing a TCP connection to a host. Since no TCP connection is created, cURL does not need to resolve the DNS hostname in the URL. 
 <p class="level0">The maximum path length on Cygwin, Linux and Solaris is 107. On other platforms it might be even less. 
-<p class="level0">Proxy and TCP options such as <a Class="manpage" href="./CURLOPT_TCP_NODELAY.html">CURLOPT_TCP_NODELAY</a>, are not supported. Proxy options such as <a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>, have no effect either as these are TCP-oriented, and asking a proxy server to connect to a certain Unix domain socket is not possible. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">Proxy and TCP options such as <a Class="manpage" href="./CURLOPT_TCP_NODELAY.html">CURLOPT_TCP_NODELAY</a>are not supported. Proxy options such as <a Class="manpage" href="./CURLOPT_PROXY.html">CURLOPT_PROXY</a>have no effect either as these are TCP-oriented, and asking a proxy server to connect to a certain Unix domain socket is not possible. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">Default is NULL, meaning that no Unix domain sockets are used. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All protocols except for file:// and FTP are supported in theory. HTTP, IMAP, POP3 and SMTP should in particular work (including their SSL/TLS variants). <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
 <p class="level0">Given that you have an nginx server running, listening on /tmp/nginx.sock, you can request a HTTP resource with: 
-<p class="level0"><pre>
-<p class="level0">&nbsp;   curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, "/tmp/nginx.sock");
- &nbsp;   curl_easy_setopt(curl_handle, CURLOPT_URL, "<a href="http://localhost/">http://localhost/</a>");
- </pre>
+<p class="level0"><pre class="level0">
+&nbsp;   curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, "/tmp/nginx.sock");
+&nbsp;   curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/");
+</pre>
 
 <p class="level0">
 <p class="level0">If you are on Linux and somehow have a need for paths larger than 107 bytes, you could use the proc filesystem to bypass the limitation: 
-<p class="level0"><pre>
-<p class="level0">&nbsp;   int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
- &nbsp;   char path[108];
- &nbsp;   snprintf(path, sizeof(path), "/proc/self/fd/%d/nginx.sock", dirfd);
- &nbsp;   curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, path);
- &nbsp;   /* Be sure to keep dirfd valid until you discard the handle */
- </pre>
+<p class="level0"><pre class="level0">
+&nbsp;   int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
+&nbsp;   char path[108];
+&nbsp;   snprintf(path, sizeof(path), "/proc/self/fd/%d/nginx.sock", dirfd);
+&nbsp;   curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, path);
+&nbsp;   /* Be sure to keep dirfd valid until you discard the handle */
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Since 7.40.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <span Class="manpage">  unix (7)</span> <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_OPENSOCKETFUNCTION.html">CURLOPT_OPENSOCKETFUNCTION</a>, <span Class="manpage">unix (7)</span><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 200b623..123b170 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf and b/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf differ
index 68c3860..9e4cf26 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 9d16b0f..daa98f1 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_UNRESTRICTED_AUTH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_UNRESTRICTED_AUTH - send credentials to other hosts too <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNRESTRICTED_AUTH,
- &nbsp;                         long goahead);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNRESTRICTED_AUTH,
+&nbsp;                         long goahead);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A long parameter set to 1 tells libcurl it can continue to send authentication (user+password) credentials when following locations, even when hostname changed. This option is meaningful only when setting <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0 <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
@@ -59,6 +65,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Along with HTTP <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, <a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a>, <a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 56e223b..4e7e79b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf and b/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf differ
index d24bd28..0ad201a 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index f0c399f..7de44b8 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_UPLOAD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,34 +52,39 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_UPLOAD - enable data upload <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">The long parameter <span Class="emphasis">upload</span> set to 1 tells the library to prepare for and perform an upload. The <a Class="emphasis" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a> and <a Class="emphasis" href="./CURLOPT_INFILESIZE.html">CURLOPT_INFILESIZE</a> or <a Class="emphasis" href="./CURLOPT_INFILESIZE_LARGE.html">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="level0">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="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a> as usual. 
 <p class="level0">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="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. With HTTP 1.0 or without chunked transfer, you must specify the size. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, default is download <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Most <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; /* we want to use our own read function */
- &nbsp; curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
- <p class="level0">&nbsp; /* enable uploading */
- &nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
- <p class="level0">&nbsp; /* specify target */
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="ftp://example.com/dir/to/newfile">ftp://example.com/dir/to/newfile</a>");
- <p class="level0">&nbsp; /* now specify which pointer to pass to our callback */
- &nbsp; curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
- <p class="level0">&nbsp; /* Set the size of the file to upload */
- &nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
- <p class="level0">&nbsp; /* Now run off and do what you've been told! */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; /* we want to use our own read function */
+&nbsp; curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
+&nbsp;
+&nbsp; /* enable uploading */
+&nbsp; curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
+&nbsp;
+&nbsp; /* specify target */
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile");
+&nbsp;
+&nbsp; /* now specify which pointer to pass to our callback */
+&nbsp; curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
+&nbsp;
+&nbsp; /* Set the size of the file to upload */
+&nbsp; curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
+&nbsp;
+&nbsp; /* Now run off and do what you've been told! */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_PUT.html">CURLOPT_PUT</a>, <a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_PUT.html">CURLOPT_PUT</a>, <a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a>, <a Class="manpage" href="./CURLOPT_INFILESIZE_LARGE.html">CURLOPT_INFILESIZE_LARGE</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 4b3a45f..5aa47c6 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_UPLOAD.pdf and b/docs/libcurl/opts/CURLOPT_UPLOAD.pdf differ
index bf19228..a7d81df 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2016, 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.
+.\" * are also available at https://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
@@ -40,9 +40,11 @@ libcurl doesn't validate the syntax or use this variable until the transfer is
 issued. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP will
 still return \fICURLE_OK\fP.
 
-If the given URL lacks the scheme (such as "http://" or "ftp://" etc) then
-libcurl will attempt to resolve the protocol based on one of the following
-given host names: HTTP, FTP, DICT, LDAP, IMAP, POP3 or SMTP
+If the given URL is missing a scheme name (such as "http://" or "ftp://" etc)
+then libcurl will make a guess based on the host. If the outermost sub-domain
+name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be
+used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by
+setting a default protocol, see \fICURLOPT_DEFAULT_PROTOCOL(3)\fP for details.
 
 Should the protocol, either that specified by the scheme or deduced by libcurl
 from the host name, not be supported by libcurl then
@@ -284,6 +286,29 @@ escape it by providing it as backslash and its ASCII value in hexadecimal:
 .SH DEFAULT
 There is no default URL. If this option isn't set, no transfer can be
 performed.
+.SH SECURITY CONCERNS
+Applications may at times find it convenient to allow users to specify URLs
+for various purposes and that string would then end up fed to this option.
+
+Getting a URL from an external untrusted party will bring reasons for several
+security concerns:
+
+If you have an application that runs as or in a server application, getting an
+unfiltered URL can easily trick your application to access a local resource
+instead of a remote. Protecting yourself against localhost accesses is very
+hard when accepting user provided URLs.
+
+Such custom URLs can also access other ports than you planned as port numbers
+are part of the regular URL format. The combination of a local host and a
+custom port number can allow external users to play tricks with your local
+services.
+
+Accepting external URLs may also use other protocols than http:// or other
+common ones. Restrict what accept with \fICURLOPT_PROTOCOLS(3)\fP.
+
+User provided URLs can also be made to point to sites that redirect further on
+(possibly to other protocols too). Consider your
+\fICURLOPT_FOLLOWLOCATION(3)\fP and \fICURLOPT_REDIR_PROTOCOLS(3)\fP settings.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
@@ -307,4 +332,5 @@ similar is called.
 .SH "SEE ALSO"
 .BR CURLOPT_VERBOSE "(3), " CURLOPT_PROTOCOLS "(3), "
 .BR CURLOPT_FORBID_REUSE "(3), " CURLOPT_FRESH_CONNECT "(3), "
-.BR curl_easy_perform "(3)"
+.BR curl_easy_perform "(3), "
+.BR CURLINFO_REDIRECT_URL "(3), " CURLOPT_PATH_AS_IS "(3), "
index 0f75582..e9a87d2 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_URL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,13 +52,13 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_URL - provide the URL to use in the request <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass in a pointer to the <span Class="emphasis">URL</span> to work with. The parameter should be a char * to a zero terminated string which must be URL-encoded in the following format: 
 <p class="level0">scheme://host:port/path 
 <p class="level0">For a greater explanation of the format please see <a href="http://www.ietf.org/rfc/rfc3986.txt">RFC 3986</a>. 
 <p class="level0">libcurl doesn't validate the syntax or use this variable until the transfer is issued. Even if you set a crazy value here, <span Class="emphasis">curl_easy_setopt(3)</span> will still return <span Class="emphasis">CURLE_OK</span>. 
-<p class="level0">If the given URL lacks the scheme (such as "http://" or "ftp://" etc) then libcurl will attempt to resolve the protocol based on one of the following given host names: HTTP, FTP, DICT, LDAP, IMAP, POP3 or SMTP 
+<p class="level0">If the given URL is missing a scheme name (such as "http://" or "ftp://" etc) then libcurl will make a guess based on the host. If the outermost sub-domain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by setting a default protocol, see <a Class="emphasis" href="./CURLOPT_DEFAULT_PROTOCOL.html">CURLOPT_DEFAULT_PROTOCOL</a> for details. 
 <p class="level0">Should the protocol, either that specified by the scheme or deduced by libcurl from the host name, not be supported by libcurl then <span Class="emphasis">CURLE_UNSUPPORTED_PROTOCOL</span> will be returned from either the <span Class="emphasis">curl_easy_perform(3)</span> or <span Class="emphasis">curl_multi_perform(3)</span> functions when you call them. Use <span Class="emphasis">curl_version_info(3)</span> for detailed information of which protocols are supported by the build of libcurl you are using. 
 <p class="level0"><a Class="emphasis" href="./CURLOPT_PROTOCOLS.html">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 Class="emphasis" href="./CURLOPT_URL.html">CURLOPT_URL</a> is the only option that <span Class="bold">must</span> be set before a transfer is started. 
@@ -61,17 +66,17 @@ p.roffit {
 <p class="level0"><a href="http://www.example.com/">http://www.example.com/</a> 
 <p class="level0"><a href="http://hostname/">http://hostname/</a> 
 <p class="level0"><a href="http://192.168.0.1/">http://192.168.0.1/</a> 
-<p class="level0">http://[2001:1890:1112:1::20]/ 
+<p class="level0"><a href="http://[2001:1890:1112:1::20]/">http://[2001:1890:1112:1::20]/</a> 
 <p class="level0">It is also possible to specify the user name, password and any supported login options as part of the host, for the following protocols, when connecting to servers that require authentication: 
-<p class="level0"><a href="http://user">http://user</a>:password@www.example.com 
-<p class="level0"><a href="ftp://user">ftp://user</a>:password@ftp.example.com 
+<p class="level0"><a href="http://user:password@www.example.com">http://user:password@www.example.com</a> 
+<p class="level0"><a href="ftp://user:password@ftp.example.com">ftp://user:password@ftp.example.com</a> 
 <p class="level0">smb://domain%2fuser:password@server.example.com 
 <p class="level0">imap://user:password;options@mail.example.com 
 <p class="level0">pop3://user:password;options@mail.example.com 
 <p class="level0">smtp://user:password;options@mail.example.com 
 <p class="level0">At present only IMAP, POP3 and SMTP support login options as part of the host. For more information about the login options in URL syntax please see <a href="http://www.ietf.org/rfc/rfc2384.txt">RFC 2384</a>, <a href="http://www.ietf.org/rfc/rfc5092.txt">RFC 5092</a> and IETF draft draft-earhart-url-smtp-00.txt (Added in 7.31.0). 
 <p class="level0">The port is optional and when not specified libcurl will use the default port based on the determined or specified protocol: 80 for HTTP, 21 for FTP and 25 for SMTP, etc. The following examples show how to specify the port: 
-<p class="level0"><a href="http://www.example.com">http://www.example.com</a>:8080/ - This will connect to a web server using port 8080 rather than 80. 
+<p class="level0"><a href="http://www.example.com:8080/">http://www.example.com:8080/</a> - This will connect to a web server using port 8080 rather than 80. 
 <p class="level0">smtp://mail.example.com:587/ - This will connect to a SMTP server on the alternative mail port. 
 <p class="level0">The path part of the URL is protocol specific and whilst some examples are given below this list is not conclusive: 
 <p class="level0">
@@ -86,8 +91,8 @@ p.roffit {
 <p class="level1"><a href="ftp://ftp.example.com">ftp://ftp.example.com</a> - This retrieves the directory listing for the root directory. 
 <p class="level1"><a href="ftp://ftp.example.com/readme.txt">ftp://ftp.example.com/readme.txt</a> - This downloads the file readme.txt from the root directory. 
 <p class="level1"><a href="ftp://ftp.example.com/libcurl/readme.txt">ftp://ftp.example.com/libcurl/readme.txt</a> - This downloads readme.txt from the libcurl directory. 
-<p class="level1"><a href="ftp://user">ftp://user</a>:password@ftp.example.com/readme.txt - This retrieves the readme.txt file from the user's home directory. When a username and password is specified, everything that is specified in the path part is relative to the user's home directory. To retrieve files from the root directory or a directory underneath the root directory then the absolute path must be specified by prepending an additional forward slash to the beginning of the path. 
-<p class="level1"><a href="ftp://user">ftp://user</a>:password@ftp.example.com//readme.txt - This retrieves the readme.txt from the root directory when logging in as a specified user. 
+<p class="level1"><a href="ftp://user:password@ftp.example.com/readme.txt">ftp://user:password@ftp.example.com/readme.txt</a> - This retrieves the readme.txt file from the user's home directory. When a username and password is specified, everything that is specified in the path part is relative to the user's home directory. To retrieve files from the root directory or a directory underneath the root directory then the absolute path must be specified by prepending an additional forward slash to the beginning of the path. 
+<p class="level1"><a href="ftp://user:password@ftp.example.com//readme.txt">ftp://user:password@ftp.example.com//readme.txt</a> - This retrieves the readme.txt from the root directory when logging in as a specified user. 
 <p class="level1">
 <p class="level0"><a name="SMTP"></a><span class="nroffip">SMTP</span> 
 <p class="level1">The path part of a SMTP request specifies the host name to present during communication with the mail server. If the path is omitted then libcurl will attempt to resolve the local computer's host name. However, this may not return the fully qualified domain name that is required by some mail servers and specifying this path allows you to set an alternative name, such as your machine's fully qualified domain name, which you might have obtained from an external function such as gethostname or getaddrinfo. 
@@ -118,9 +123,9 @@ p.roffit {
 <p class="level1">
 <p class="level0"><a name="SFTP"></a><span class="nroffip">SFTP</span> 
 <p class="level1">The path part of a SFTP request specifies the file to retrieve and from what directory. If the file part is omitted then libcurl downloads the directory listing for the directory specified.  If the path ends in a / then a directory listing is returned instead of a file.  If the path is omitted entirely then the directory listing for the root / home directory will be returned.  If the user name is not embedded in the URL, it can be set with the <a Class="emphasis" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a> or <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> option. 
-<p class="level1">s<a href="ftp://user">ftp://user</a>:password@example.com/etc/issue - This specifies the file /etc/issue 
-<p class="level1">s<a href="ftp://user">ftp://user</a>@example.com/~/my-file - This specifies the file my-file in the user's home directory 
-<p class="level1">s<a href="ftp://ssh.example.com/">ftp://ssh.example.com/</a>~/Documents/ - This requests a directory listing of the Documents directory under the user's home directory 
+<p class="level1">sftp://user:password@example.com/etc/issue - This specifies the file /etc/issue 
+<p class="level1">sftp://user@example.com/~/my-file - This specifies the file my-file in the user's home directory 
+<p class="level1">sftp://ssh.example.com/~/Documents/ - This requests a directory listing of the Documents directory under the user's home directory 
 <p class="level1">
 <p class="level0"><a name="SMB"></a><span class="nroffip">SMB</span> 
 <p class="level1">The path part of a SMB request specifies the file to retrieve and from what share and directory or the share to upload to and as such, may not be omitted. If the user name is not embedded in the URL, it can be set with the <a Class="emphasis" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a> or <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> option. If the user name is embedded in the URL then it must contain the domain name and as such, the backslash must be URL encoded as %2f. 
@@ -135,21 +140,28 @@ p.roffit {
 <p class="level1">For more information about the individual components of a LDAP URL please see <a href="http://www.ietf.org/rfc/rfc4516.txt">RFC 4516</a>. 
 <p class="level0"><a name="RTMP"></a><span class="nroffip">RTMP</span> 
 <p class="level1">There's no official URL spec for RTMP so libcurl uses the URL syntax supported by the underlying librtmp library. It has a syntax where it wants a traditional URL, followed by a space and a series of space-separated name=value pairs. 
-<p class="level1">While space is not typically a "legal" letter, libcurl accepts them. When a user wants to pass in a '#' (hash) character it will be treated as a fragment and get cut off by libcurl if provided literally. You will instead have to escape it by providing it as backslash and its ASCII value in hexadecimal: "\23". <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
-<p class="level0">There is no default URL. If this option isn't set, no transfer can be performed. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
+<p class="level1">While space is not typically a "legal" letter, libcurl accepts them. When a user wants to pass in a '&#35;' (hash) character it will be treated as a fragment and get cut off by libcurl if provided literally. You will instead have to escape it by providing it as backslash and its ASCII value in hexadecimal: "\23". <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
+<p class="level0">There is no default URL. If this option isn't set, no transfer can be performed. <a name="SECURITY"></a><h2 class="nroffsh">SECURITY CONCERNS</h2>
+<p class="level0">Applications may at times find it convenient to allow users to specify URLs for various purposes and that string would then end up fed to this option. 
+<p class="level0">Getting a URL from an external untrusted party will bring reasons for several security concerns: 
+<p class="level0">If you have an application that runs as or in a server application, getting an unfiltered URL can easily trick your application to access a local resource instead of a remote. Protecting yourself against localhost accesses is very hard when accepting user provided URLs. 
+<p class="level0">Such custom URLs can also access other ports than you planned as port numbers are part of the regular URL format. The combination of a local host and a custom port number can allow external users to play tricks with your local services. 
+<p class="level0">Accepting external URLs may also use other protocols than http:// or other common ones. Restrict what accept with <a Class="emphasis" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a>. 
+<p class="level0">User provided URLs can also be made to point to sites that redirect further on (possibly to other protocols too). Consider your <a Class="emphasis" href="./CURLOPT_FOLLOWLOCATION.html">CURLOPT_FOLLOWLOCATION</a> and <a Class="emphasis" href="./CURLOPT_REDIR_PROTOCOLS.html">CURLOPT_REDIR_PROTOCOLS</a> settings. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">POP3 and SMTP were added in 7.31.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient heap space. 
 <p class="level0">Note that <span Class="emphasis">curl_easy_setopt(3)</span> won't actually parse the given string so given a bad URL, it will not be detected until <span Class="emphasis">curl_easy_perform(3)</span> or similar is called. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_FORBID_REUSE.html">CURLOPT_FORBID_REUSE</a>, <a Class="manpage" href="./CURLOPT_FRESH_CONNECT.html">CURLOPT_FRESH_CONNECT</a>, <span Class="manpage"> </span> <span Class="manpage">curl_easy_perform (3)</span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_VERBOSE.html">CURLOPT_VERBOSE</a>, <a Class="manpage" href="./CURLOPT_PROTOCOLS.html">CURLOPT_PROTOCOLS</a>, <a Class="manpage" href="./CURLOPT_FORBID_REUSE.html">CURLOPT_FORBID_REUSE</a>, <a Class="manpage" href="./CURLOPT_FRESH_CONNECT.html">CURLOPT_FRESH_CONNECT</a>, <span Class="manpage">curl_easy_perform (3)</span>, <a Class="manpage" href="./CURLINFO_REDIRECT_URL.html">CURLINFO_REDIRECT_URL</a>, <a Class="manpage" href="./CURLOPT_PATH_AS_IS.html">CURLOPT_PATH_AS_IS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 7867b41..5350a8b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_URL.pdf and b/docs/libcurl/opts/CURLOPT_URL.pdf differ
index 13ccbd4..c769e95 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -37,7 +37,16 @@ NULL, no User-Agent: header is used by default.
 .SH PROTOCOLS
 HTTP, HTTPS
 .SH EXAMPLE
-TODO
+.nf
+CURL *curl = curl_easy_init();
+if(curl) {
+  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+
+  curl_easy_setopt(curl, CURLOPT_USERAGENT, "Dark Secret Ninja/1.0");
+
+  curl_easy_perform(curl);
+}
+.fi
 .SH AVAILABILITY
 As long as HTTP is supported
 .SH RETURN VALUE
index e418ec5..52f7f97 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_USERAGENT man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,14 +52,25 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_USERAGENT - set HTTP user-agent header <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">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="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">NULL, no User-Agent: header is used by default. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">HTTP, HTTPS <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; curl_easy_setopt(curl, CURLOPT_USERAGENT, "Dark Secret Ninja/1.0");
+&nbsp;
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
+
+<p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">As long as HTTP is supported <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_REFERER.html">CURLOPT_REFERER</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_REFERER.html">CURLOPT_REFERER</a>, <a Class="manpage" href="./CURLOPT_HTTPHEADER.html">CURLOPT_HTTPHEADER</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index d3ef568..f516d22 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_USERAGENT.pdf and b/docs/libcurl/opts/CURLOPT_USERAGENT.pdf differ
index 7546f74..a5ebb0e 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index e0d459d..963f63d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_USERNAME man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,12 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_USERNAME - user name to use in authentication <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">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERNAME,
- &nbsp;                         char *username);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERNAME,
+&nbsp;                         char *username);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should be pointing to the zero terminated user name to use for the transfer. 
 <p class="level0"><a Class="bold" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> sets the user name to be used in protocol authentication. You should not use this option together with the (older) <a Class="emphasis" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a> option. 
@@ -65,6 +71,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.19.1 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <span Class="manpage"> </span> <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a>, <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERPWD.html">CURLOPT_USERPWD</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <a Class="manpage" href="./CURLOPT_HTTPAUTH.html">CURLOPT_HTTPAUTH</a>, <a Class="manpage" href="./CURLOPT_PROXYAUTH.html">CURLOPT_PROXYAUTH</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 904f8b0..a27f5a4 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_USERNAME.pdf and b/docs/libcurl/opts/CURLOPT_USERNAME.pdf differ
index 22e920f..19404f6 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index c1c3394..659c99a 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_USERPWD man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_USERPWD - user name and password to use in authentication <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, pointing to a zero terminated login details string for the connection. The format of which is: [user name]:[password]. 
 <p class="level0">When using Kerberos V5 authentication with a Windows based server, you should specify the user name part with the domain name in order for the server to successfully obtain a Kerberos Ticket. If you don't then the initial part of the authentication handshake may fail. 
@@ -62,6 +67,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <a Class="manpage" href="./CURLOPT_PASSWORD.html">CURLOPT_PASSWORD</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5e5209b..c1ba576 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_USERPWD.pdf and b/docs/libcurl/opts/CURLOPT_USERPWD.pdf differ
index 348f1b0..37a224d 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 22916b0..639be8d 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_USE_SSL man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_USE_SSL - request using SSL / TLS for the transfer <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USE_SSL, long level); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a long using one of the values from below, to make libcurl use your desired <span Class="emphasis">level</span> of SSL for the transfer. 
 <p class="level0">These are all protocols that start out plain text and get "upgraded" to SSL using the STARTTLS command. 
@@ -62,20 +67,22 @@ p.roffit {
 <p class="level1">Require SSL for all communication or fail with <span Class="emphasis">CURLE_USE_SSL_FAILED</span>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">CURLUSESSL_NONE <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">FTP, SMTP, POP3, IMAP <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="ftp://example.com/dir/file.ext">ftp://example.com/dir/file.ext</a>");
- <p class="level0">&nbsp; /* require use of SSL for this, or fail */
- &nbsp; curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/file.ext");
+&nbsp;
+&nbsp; /* require use of SSL for this, or fail */
+&nbsp; curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">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_* <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_SSL_OPTIONS.html">CURLOPT_SSL_OPTIONS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_SSLVERSION.html">CURLOPT_SSLVERSION</a>, <a Class="manpage" href="./CURLOPT_SSL_OPTIONS.html">CURLOPT_SSL_OPTIONS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b2c5442..069cc8b 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_USE_SSL.pdf and b/docs/libcurl/opts/CURLOPT_USE_SSL.pdf differ
index 732b8c4..e6a6fd1 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 402a394..58d5e94 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_VERBOSE man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,27 +52,29 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_VERBOSE - set verbose mode on/off <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set the <span Class="emphasis">onoff</span> parameter to 1 to make the library display a lot of verbose information about its operations on this <span Class="emphasis">handle</span>. 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="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>. 
 <p class="level0">You hardly ever want this set in production use, you will almost always want this when you debug/report problems. 
 <p class="level0">To also get all the protocol data sent and received, consider using the <a Class="emphasis" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">0, meaning disabled. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><pre>
-<p class="level0">CURL *curl = curl_easy_init();
- if(curl) {
- &nbsp; curl_easy_setopt(curl, CURLOPT_URL, "<a href="http://example.com">http://example.com</a>");
- <p class="level0">&nbsp; /* ask libcurl to show us the verbose output */
- &nbsp; curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
- <p class="level0">&nbsp; /* Perform the request */
- &nbsp; curl_easy_perform(curl);
- }
- </pre>
+<p class="level0"><pre class="level0">
+CURL *curl = curl_easy_init();
+if(curl) {
+&nbsp; curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
+&nbsp;
+&nbsp; /* ask libcurl to show us the verbose output */
+&nbsp; curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
+&nbsp;
+&nbsp; /* Perform the request */
+&nbsp; curl_easy_perform(curl);
+}
+</pre>
 
 <p class="level0"><a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Always <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_STDERR.html">CURLOPT_STDERR</a>, <a Class="manpage" href="./CURLOPT_DEBUGFUNCTION.html">CURLOPT_DEBUGFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 5250d4e..a1a9b56 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_VERBOSE.pdf and b/docs/libcurl/opts/CURLOPT_VERBOSE.pdf differ
index b567045..1ca1bed 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -78,7 +78,7 @@ Using the rules above, a file name pattern can be constructed:
 .SH PROTOCOLS
 This feature is only supported for FTP download.
 .SH EXAMPLE
-See http://curl.haxx.se/libcurl/c/ftp-wildcard.html
+See https://curl.haxx.se/libcurl/c/ftp-wildcard.html
 .SH AVAILABILITY
 Added in 7.21.0
 .SH RETURN VALUE
index 1abff18..56c8866 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_WILDCARDMATCH man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_WILDCARDMATCH - enable directory wildcard transfers <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Set <span Class="emphasis">onoff</span> 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="./CURLOPT_URL.html">CURLOPT_URL</a> option, using an fnmatch-like pattern (Shell Pattern Matching) in the last part of URL (file name). 
 <p class="level0">By default, libcurl uses its internal wildcard matching implementation. You can provide your own matching function by the <a Class="emphasis" href="./CURLOPT_FNMATCH_FUNCTION.html">CURLOPT_FNMATCH_FUNCTION</a> option. 
@@ -75,9 +80,9 @@ p.roffit {
 <p class="level0">
 <p class="level0"><a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">This feature is only supported for FTP download. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">See <a href="http://curl.haxx.se/libcurl/c/ftp-wildcard.html">http://curl.haxx.se/libcurl/c/ftp-wildcard.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">See <a href="https://curl.haxx.se/libcurl/c/ftp-wildcard.html">https://curl.haxx.se/libcurl/c/ftp-wildcard.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.21.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_FNMATCH_FUNCTION.html">CURLOPT_FNMATCH_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_URL.html">CURLOPT_URL</a>, <a class="manpage" href="#"> </a> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_FNMATCH_FUNCTION.html">CURLOPT_FNMATCH_FUNCTION</a>, <a Class="manpage" href="./CURLOPT_URL.html">CURLOPT_URL</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index c0d81dc..fc0907a 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf and b/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf differ
index be07c76..fdb5886 100644 (file)
@@ -5,11 +5,11 @@
 .\" *                            | (__| |_| |  _ <| |___
 .\" *                             \___|\___/|_| \_\_____|
 .\" *
-.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+.\" * Copyright (C) 1998 - 2015, 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.
+.\" * are also available at https://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
@@ -46,12 +46,14 @@ By default, this is a FILE * to stdout.
 Used for all protocols.
 .SH EXAMPLE
 A common technique is to use the write callback to store the incoming data
-into a dynamically growing allocated buffer, and then this CURLOPT_WRITEDATA
-is used to point to a struct or the buffer to store data in. Like in the
-getinmemory example: http://curl.haxx.se/libcurl/c/getinmemory.html
+into a dynamically growing allocated buffer, and then this
+\fICURLOPT_WRITEDATA(3)\fP is used to point to a struct or the buffer to store
+data in. Like in the getinmemory example:
+https://curl.haxx.se/libcurl/c/getinmemory.html
 .SH AVAILABILITY
 Available in all libcurl versions. This option was formerly known as
-\fICURLOPT_FILE\fP, the name \fICURLOPT_WRITEDATA\fP was introduced in 7.9.7.
+\fICURLOPT_FILE\fP, the name \fICURLOPT_WRITEDATA(3)\fP was introduced in
+7.9.7.
 .SH RETURN VALUE
 This will return CURLE_OK.
 .SH "SEE ALSO"
index fb9dff9..c147ef0 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_WRITEDATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,16 +52,16 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_WRITEDATA - custom pointer passed to the write callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">A data <span Class="emphasis">pointer</span> to pass to the write callback. If you use the <a Class="emphasis" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a> option, this is the pointer you'll get in that callback's 4th argument. If you don't use a write callback, you must make <span Class="emphasis">pointer</span> a 'FILE *' (cast to 'void *') as libcurl will pass this to <span Class="emphasis">fwrite(3)</span> when writing data. 
 <p class="level0">The internal <a Class="emphasis" href="./CURLOPT_WRITEFUNCTION.html">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="level0">If you're using libcurl as a win32 DLL, you <span Class="bold">MUST</span> use the <a Class="emphasis" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a> if you set this option or you will experience crashes. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">By default, this is a FILE * to stdout. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">Used for all protocols. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">A common technique is to use the write callback to store the incoming data into a dynamically growing allocated buffer, and then this CURLOPT_WRITEDATA is used to point to a struct or the buffer to store data in. Like in the getinmemory example: <a href="http://curl.haxx.se/libcurl/c/getinmemory.html">http://curl.haxx.se/libcurl/c/getinmemory.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
-<p class="level0">Available in all libcurl versions. This option was formerly known as <span Class="emphasis">CURLOPT_FILE</span>, the name <span Class="emphasis">CURLOPT_WRITEDATA</span> was introduced in 7.9.7. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
+<p class="level0">A common technique is to use the write callback to store the incoming data into a dynamically growing allocated buffer, and then this <a Class="emphasis" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a> is used to point to a struct or the buffer to store data in. Like in the getinmemory example: <a href="https://curl.haxx.se/libcurl/c/getinmemory.html">https://curl.haxx.se/libcurl/c/getinmemory.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0">Available in all libcurl versions. This option was formerly known as <span Class="emphasis">CURLOPT_FILE</span>, the name <a Class="emphasis" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a> was introduced in 7.9.7. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">This will return CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_WRITEFUNCTION.html">CURLOPT_WRITEFUNCTION</a>, <a Class="manpage" href="./CURLOPT_READDATA.html">CURLOPT_READDATA</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 2751caa..2c771d2 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_WRITEDATA.pdf and b/docs/libcurl/opts/CURLOPT_WRITEDATA.pdf differ
index f5a45a3..2c77a4c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -76,6 +76,6 @@ This will return CURLE_OK.
 .SH EXAMPLE
 A common technique is to use this callback to store the incoming data into a
 dynamically growing allocated buffer. Like in the getinmemory example:
-http://curl.haxx.se/libcurl/c/getinmemory.html
+https://curl.haxx.se/libcurl/c/getinmemory.html
 .SH "SEE ALSO"
 .BR CURLOPT_WRITEDATA "(3), " CURLOPT_READFUNCTION "(3), "
index 94bb1b2..3acb7e6 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_WRITEFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,11 +52,13 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_WRITEFUNCTION - set callback for writing received data <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">size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
- <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEFUNCTION, write_callback);
- </pre>
+<p class="level0"><pre class="level0">
+&#35;include &lt;curl/curl.h&gt;
+&nbsp;
+size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
+&nbsp;
+CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEFUNCTION, write_callback);
+</pre>
 <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
 <p class="level0">This callback function gets called by libcurl as soon as there is data received that needs to be saved.  <span Class="emphasis">ptr</span> points to the delivered data, and the size of that data is <span Class="emphasis">size</span> multiplied with <span Class="emphasis">nmemb</span>. 
@@ -66,7 +73,7 @@ p.roffit {
 <p class="level0">For all protocols <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Support for the CURL_WRITEFUNC_PAUSE return code was added in version 7.18.0. <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">This will return CURLE_OK. <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0">A common technique is to use this callback to store the incoming data into a dynamically growing allocated buffer. Like in the getinmemory example: <a href="http://curl.haxx.se/libcurl/c/getinmemory.html">http://curl.haxx.se/libcurl/c/getinmemory.html</a> <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a>, <a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0">A common technique is to use this callback to store the incoming data into a dynamically growing allocated buffer. Like in the getinmemory example: <a href="https://curl.haxx.se/libcurl/c/getinmemory.html">https://curl.haxx.se/libcurl/c/getinmemory.html</a> <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
+<p class="level0"><a Class="manpage" href="./CURLOPT_WRITEDATA.html">CURLOPT_WRITEDATA</a>, <a Class="manpage" href="./CURLOPT_READFUNCTION.html">CURLOPT_READFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 42c2177..0271813 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf differ
index b2c170f..fc1de8c 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -37,7 +37,7 @@ The default value of this parameter is NULL.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-http://curl.haxx.se/libcurl/c/progressfunc.html
+https://curl.haxx.se/libcurl/c/progressfunc.html
 .SH AVAILABILITY
 Added in 7.32.0
 .SH RETURN VALUE
index 3c61c0e..8946e15 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_XFERINFODATA man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,15 +52,15 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_XFERINFODATA - custom pointer passed to the progress callback <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, void *pointer); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a <span Class="emphasis">pointer</span> that will be untouched by libcurl and passed as the first argument in the progress callback set with <a Class="emphasis" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a>. 
 <p class="level0">This is an alias for <a Class="emphasis" href="./CURLOPT_PROGRESSDATA.html">CURLOPT_PROGRESSDATA</a>. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">The default value of this parameter is NULL. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><a href="http://curl.haxx.se/libcurl/c/progressfunc.html">http://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><a href="https://curl.haxx.se/libcurl/c/progressfunc.html">https://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.32.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a>, <a Class="manpage" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a>, <a Class="manpage" href="./CURLOPT_XFERINFOFUNCTION.html">CURLOPT_XFERINFOFUNCTION</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 87d1cfd..55f1a91 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf and b/docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf differ
index cad8118..9bd89db 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -72,7 +72,7 @@ users.
 .SH PROTOCOLS
 All
 .SH EXAMPLE
-http://curl.haxx.se/libcurl/c/progressfunc.html
+https://curl.haxx.se/libcurl/c/progressfunc.html
 .SH AVAILABILITY
 Added in 7.32.0. This callback replaces \fICURLOPT_PROGRESSFUNCTION(3)\fP
 .SH RETURN VALUE
index 12435a1..a5a2e58 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_XFERINFOFUNCTION man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_XFERINFOFUNCTION - callback to progress meter function <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">int progress_callback(void *clientp, &nbsp;                     curl_off_t dltotal, &nbsp;                     curl_off_t dlnow, &nbsp;                     curl_off_t ultotal, &nbsp;                     curl_off_t ulnow); 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFOFUNCTION, progress_callback); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a pointer to your callback function, which should match the prototype shown above. 
@@ -60,9 +65,9 @@ p.roffit {
 <p class="level0"><a Class="emphasis" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a> must be set to 0 to make this function actually get called. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
 <p class="level0">By default, libcurl has an internal progress meter. That's rarely wanted by users. <a name="PROTOCOLS"></a><h2 class="nroffsh">PROTOCOLS</h2>
 <p class="level0">All <a name="EXAMPLE"></a><h2 class="nroffsh">EXAMPLE</h2>
-<p class="level0"><a href="http://curl.haxx.se/libcurl/c/progressfunc.html">http://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
+<p class="level0"><a href="https://curl.haxx.se/libcurl/c/progressfunc.html">https://curl.haxx.se/libcurl/c/progressfunc.html</a> <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.32.0. This callback replaces <a Class="emphasis" href="./CURLOPT_PROGRESSFUNCTION.html">CURLOPT_PROGRESSFUNCTION</a> <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_XFERINFODATA.html">CURLOPT_XFERINFODATA</a>, <a Class="manpage" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_XFERINFODATA.html">CURLOPT_XFERINFODATA</a>, <a Class="manpage" href="./CURLOPT_NOPROGRESS.html">CURLOPT_NOPROGRESS</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index 56d3a0d..2082dca 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf and b/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf differ
index 2644c88..b6c1fee 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 0658c30..e502102 100644 (file)
@@ -4,15 +4,20 @@
 <title>CURLOPT_XOAUTH2_BEARER man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -47,7 +52,7 @@ p.roffit {
 
 <p class="level0"><a name="NAME"></a><h2 class="nroffsh">NAME</h2>
 <p class="level0">CURLOPT_XOAUTH2_BEARER - specify OAuth 2.0 access token <a name="SYNOPSIS"></a><h2 class="nroffsh">SYNOPSIS</h2>
-<p class="level0">#include &lt;curl/curl.h&gt; 
+<p class="level0">&#35;include &lt;curl/curl.h&gt; 
 <p class="level0">CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token); <a name="DESCRIPTION"></a><h2 class="nroffsh">DESCRIPTION</h2>
 <p class="level0">Pass a char * as parameter, which should point to the zero terminated OAuth 2.0 Bearer Access Token for use with IMAP, POP3 and SMTP servers that support the OAuth 2.0 Authorization Framework. 
 <p class="level0">Note: The user name used to generate the Bearer Token should be supplied via the <a Class="emphasis" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a> option. <a name="DEFAULT"></a><h2 class="nroffsh">DEFAULT</h2>
@@ -56,6 +61,6 @@ p.roffit {
 <p class="level0">TODO <a name="AVAILABILITY"></a><h2 class="nroffsh">AVAILABILITY</h2>
 <p class="level0">Added in 7.33.0 <a name="RETURN"></a><h2 class="nroffsh">RETURN VALUE</h2>
 <p class="level0">Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or CURLE_OUT_OF_MEMORY if there was insufficient heap space. <a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a>, <span Class="manpage"> </span> <p class="roffit">
+<p class="level0"><a Class="manpage" href="./CURLOPT_MAIL_AUTH.html">CURLOPT_MAIL_AUTH</a>, <a Class="manpage" href="./CURLOPT_USERNAME.html">CURLOPT_USERNAME</a><p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index b8406cf..fa91616 100644 (file)
Binary files a/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf and b/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf differ
index eac785c..61e5640 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -66,8 +66,9 @@ man_MANS = CURLOPT_ACCEPT_ENCODING.3 CURLOPT_ACCEPTTIMEOUT_MS.3               \
  CURLOPT_NEW_DIRECTORY_PERMS.3 CURLOPT_NEW_FILE_PERMS.3                        \
  CURLOPT_NOBODY.3 CURLOPT_NOPROGRESS.3 CURLOPT_NOPROXY.3               \
  CURLOPT_NOSIGNAL.3 CURLOPT_OPENSOCKETDATA.3                           \
- CURLOPT_OPENSOCKETFUNCTION.3 CURLOPT_PASSWORD.3 CURLOPT_PORT.3                \
- CURLOPT_POST.3 CURLOPT_POSTFIELDS.3 CURLOPT_POSTFIELDSIZE.3           \
+ CURLOPT_OPENSOCKETFUNCTION.3 CURLOPT_PASSWORD.3                       \
+ CURLOPT_PINNEDPUBLICKEY.3 CURLOPT_PORT.3 CURLOPT_POST.3               \
+ CURLOPT_POSTFIELDS.3 CURLOPT_POSTFIELDSIZE.3                          \
  CURLOPT_POSTFIELDSIZE_LARGE.3 CURLOPT_POSTQUOTE.3 CURLOPT_POSTREDIR.3 \
  CURLOPT_PREQUOTE.3 CURLOPT_PRIVATE.3 CURLOPT_PROGRESSDATA.3           \
  CURLOPT_PROGRESSFUNCTION.3 CURLOPT_PROTOCOLS.3 CURLOPT_PROXY.3                \
@@ -90,28 +91,53 @@ man_MANS = CURLOPT_ACCEPT_ENCODING.3 CURLOPT_ACCEPTTIMEOUT_MS.3             \
  CURLOPT_SSLCERT.3 CURLOPT_SSLCERTTYPE.3 CURLOPT_SSL_CIPHER_LIST.3     \
  CURLOPT_SSL_CTX_DATA.3 CURLOPT_SSL_CTX_FUNCTION.3                     \
  CURLOPT_SSL_ENABLE_ALPN.3 CURLOPT_SSL_ENABLE_NPN.3 CURLOPT_SSLENGINE.3        \
- CURLOPT_SSLENGINE_DEFAULT.3 CURLOPT_SSLKEY.3 CURLOPT_SSLKEYTYPE.3     \
- CURLOPT_SSL_OPTIONS.3 CURLOPT_SSL_SESSIONID_CACHE.3                   \
- CURLOPT_SSL_VERIFYHOST.3 CURLOPT_SSL_VERIFYPEER.3 CURLOPT_SSLVERSION.3        \
- CURLOPT_STDERR.3 CURLOPT_TCP_KEEPALIVE.3 CURLOPT_TCP_KEEPIDLE.3       \
- CURLOPT_TCP_KEEPINTVL.3 CURLOPT_TCP_NODELAY.3 CURLOPT_TELNETOPTIONS.3 \
- CURLOPT_TFTP_BLKSIZE.3 CURLOPT_TIMECONDITION.3 CURLOPT_TIMEOUT.3      \
+ CURLOPT_SSLENGINE_DEFAULT.3 CURLOPT_SSL_FALSESTART.3 CURLOPT_SSLKEY.3 \
+ CURLOPT_SSLKEYTYPE.3 CURLOPT_SSL_OPTIONS.3                            \
+ CURLOPT_SSL_SESSIONID_CACHE.3 CURLOPT_SSL_VERIFYHOST.3                        \
+ CURLOPT_SSL_VERIFYPEER.3 CURLOPT_SSL_VERIFYSTATUS.3                   \
+ CURLOPT_SSLVERSION.3 CURLOPT_STDERR.3 CURLOPT_TCP_KEEPALIVE.3         \
+ CURLOPT_TCP_KEEPIDLE.3 CURLOPT_TCP_KEEPINTVL.3 CURLOPT_TCP_NODELAY.3  \
+ CURLOPT_TELNETOPTIONS.3 CURLOPT_TFTP_BLKSIZE.3                                \
+ CURLOPT_TFTP_NO_OPTIONS.3 CURLOPT_TIMECONDITION.3 CURLOPT_TIMEOUT.3   \
  CURLOPT_TIMEOUT_MS.3 CURLOPT_TIMEVALUE.3 CURLOPT_TLSAUTH_PASSWORD.3   \
  CURLOPT_TLSAUTH_TYPE.3 CURLOPT_TLSAUTH_USERNAME.3                     \
  CURLOPT_TRANSFER_ENCODING.3 CURLOPT_TRANSFERTEXT.3                    \
- CURLOPT_UNRESTRICTED_AUTH.3 CURLOPT_UPLOAD.3 CURLOPT_URL.3            \
- CURLOPT_USERAGENT.3 CURLOPT_USERNAME.3 CURLOPT_USERPWD.3              \
+ CURLOPT_UNRESTRICTED_AUTH.3 CURLOPT_UPLOAD.3                          \
+ CURLOPT_URL.3 CURLOPT_USERAGENT.3 CURLOPT_USERNAME.3 CURLOPT_USERPWD.3        \
  CURLOPT_USE_SSL.3 CURLOPT_VERBOSE.3 CURLOPT_WILDCARDMATCH.3           \
  CURLOPT_WRITEDATA.3 CURLOPT_WRITEFUNCTION.3 CURLOPT_XFERINFODATA.3    \
  CURLOPT_XFERINFOFUNCTION.3 CURLOPT_XOAUTH2_BEARER.3                   \
- CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3                                  \
+ CURLOPT_STREAM_DEPENDS.3 CURLOPT_STREAM_DEPENDS_E.3                   \
+ CURLOPT_STREAM_WEIGHT.3 CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3          \
  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 CURLMOPT_MAXCONNECTS.3         \
  CURLMOPT_MAX_HOST_CONNECTIONS.3 CURLMOPT_MAX_PIPELINE_LENGTH.3                \
  CURLMOPT_MAX_TOTAL_CONNECTIONS.3 CURLMOPT_PIPELINING.3                        \
  CURLMOPT_PIPELINING_SERVER_BL.3 CURLMOPT_PIPELINING_SITE_BL.3         \
  CURLMOPT_SOCKETDATA.3 CURLMOPT_SOCKETFUNCTION.3 CURLMOPT_TIMERDATA.3  \
- CURLMOPT_TIMERFUNCTION.3 CURLOPT_UNIX_SOCKET_PATH.3
-
+ CURLMOPT_TIMERFUNCTION.3 CURLOPT_UNIX_SOCKET_PATH.3                   \
+ CURLOPT_PATH_AS_IS.3 CURLOPT_PROXY_SERVICE_NAME.3                     \
+ CURLOPT_SERVICE_NAME.3 CURLOPT_PIPEWAIT.3 CURLMOPT_PUSHDATA.3         \
+ CURLMOPT_PUSHFUNCTION.3 CURLOPT_DEFAULT_PROTOCOL.3                    \
+ CURLINFO_ACTIVESOCKET.3 CURLINFO_APPCONNECT_TIME.3 CURLINFO_CERTINFO.3        \
+ CURLINFO_CONDITION_UNMET.3 CURLINFO_CONNECT_TIME.3                    \
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 CURLINFO_CONTENT_LENGTH_UPLOAD.3   \
+ CURLINFO_CONTENT_TYPE.3 CURLINFO_COOKIELIST.3 CURLINFO_EFFECTIVE_URL.3        \
+ CURLINFO_FILETIME.3 CURLINFO_FTP_ENTRY_PATH.3 CURLINFO_HEADER_SIZE.3  \
+ CURLINFO_HTTPAUTH_AVAIL.3 CURLINFO_HTTP_CONNECTCODE.3                 \
+ CURLINFO_LASTSOCKET.3 CURLINFO_LOCAL_IP.3 CURLINFO_LOCAL_PORT.3       \
+ CURLINFO_NAMELOOKUP_TIME.3 CURLINFO_NUM_CONNECTS.3 CURLINFO_OS_ERRNO.3        \
+ CURLINFO_PRETRANSFER_TIME.3 CURLINFO_PRIMARY_IP.3                     \
+ CURLINFO_PRIMARY_PORT.3 CURLINFO_PRIVATE.3 CURLINFO_PROXYAUTH_AVAIL.3 \
+ CURLINFO_REDIRECT_COUNT.3 CURLINFO_REDIRECT_TIME.3                    \
+ CURLINFO_REDIRECT_URL.3 CURLINFO_REQUEST_SIZE.3                       \
+ CURLINFO_RESPONSE_CODE.3 CURLINFO_RTSP_CLIENT_CSEQ.3                  \
+ CURLINFO_RTSP_CSEQ_RECV.3 CURLINFO_RTSP_SERVER_CSEQ.3                 \
+ CURLINFO_RTSP_SESSION_ID.3 CURLINFO_SIZE_DOWNLOAD.3                   \
+ CURLINFO_SIZE_UPLOAD.3 CURLINFO_SPEED_DOWNLOAD.3                      \
+ CURLINFO_SPEED_UPLOAD.3 CURLINFO_SSL_ENGINES.3                                \
+ CURLINFO_SSL_VERIFYRESULT.3 CURLINFO_STARTTRANSFER_TIME.3             \
+ CURLINFO_TLS_SESSION.3 CURLINFO_TLS_SSL_PTR.3                         \
+ CURLINFO_TOTAL_TIME.3
 
 HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html \
  CURLOPT_ADDRESS_SCOPE.html CURLOPT_APPEND.html                                \
@@ -166,8 +192,8 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html      \
  CURLOPT_NEW_FILE_PERMS.html CURLOPT_NOBODY.html                       \
  CURLOPT_NOPROGRESS.html CURLOPT_NOPROXY.html CURLOPT_NOSIGNAL.html    \
  CURLOPT_OPENSOCKETDATA.html CURLOPT_OPENSOCKETFUNCTION.html           \
- CURLOPT_PASSWORD.html CURLOPT_PORT.html CURLOPT_POST.html             \
- CURLOPT_POSTFIELDS.html CURLOPT_POSTFIELDSIZE.html                    \
+ CURLOPT_PASSWORD.html CURLOPT_PINNEDPUBLICKEY.html CURLOPT_PORT.html  \
+ CURLOPT_POST.html CURLOPT_POSTFIELDS.html CURLOPT_POSTFIELDSIZE.html  \
  CURLOPT_POSTFIELDSIZE_LARGE.html CURLOPT_POSTQUOTE.html               \
  CURLOPT_POSTREDIR.html CURLOPT_PREQUOTE.html CURLOPT_PRIVATE.html     \
  CURLOPT_PROGRESSDATA.html CURLOPT_PROGRESSFUNCTION.html               \
@@ -193,15 +219,16 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html    \
  CURLOPT_SSL_CIPHER_LIST.html CURLOPT_SSL_CTX_DATA.html                        \
  CURLOPT_SSL_CTX_FUNCTION.html CURLOPT_SSL_ENABLE_ALPN.html            \
  CURLOPT_SSL_ENABLE_NPN.html CURLOPT_SSLENGINE.html                    \
- CURLOPT_SSLENGINE_DEFAULT.html CURLOPT_SSLKEY.html                    \
- CURLOPT_SSLKEYTYPE.html CURLOPT_SSL_OPTIONS.html                      \
+ CURLOPT_SSLENGINE_DEFAULT.html CURLOPT_SSL_FALSESTART.html            \
+ CURLOPT_SSLKEY.html CURLOPT_SSLKEYTYPE.html CURLOPT_SSL_OPTIONS.html  \
  CURLOPT_SSL_SESSIONID_CACHE.html CURLOPT_SSL_VERIFYHOST.html          \
- CURLOPT_SSL_VERIFYPEER.html CURLOPT_SSLVERSION.html                   \
- CURLOPT_STDERR.html CURLOPT_TCP_KEEPALIVE.html                                \
+ CURLOPT_SSL_VERIFYPEER.html CURLOPT_SSL_VERIFYSTATUS.html             \
+ CURLOPT_SSLVERSION.html CURLOPT_STDERR.html CURLOPT_TCP_KEEPALIVE.html        \
  CURLOPT_TCP_KEEPIDLE.html CURLOPT_TCP_KEEPINTVL.html                  \
  CURLOPT_TCP_NODELAY.html CURLOPT_TELNETOPTIONS.html                   \
- CURLOPT_TFTP_BLKSIZE.html CURLOPT_TIMECONDITION.html                  \
- CURLOPT_TIMEOUT.html CURLOPT_TIMEOUT_MS.html CURLOPT_TIMEVALUE.html   \
+ CURLOPT_TFTP_BLKSIZE.html CURLOPT_TFTP_NO_OPTIONS.html                        \
+ CURLOPT_TIMECONDITION.html CURLOPT_TIMEOUT.html                       \
+ CURLOPT_TIMEOUT_MS.html CURLOPT_TIMEVALUE.html                                \
  CURLOPT_TLSAUTH_PASSWORD.html CURLOPT_TLSAUTH_TYPE.html               \
  CURLOPT_TLSAUTH_USERNAME.html CURLOPT_TRANSFER_ENCODING.html          \
  CURLOPT_TRANSFERTEXT.html CURLOPT_UNRESTRICTED_AUTH.html              \
@@ -210,14 +237,41 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html    \
  CURLOPT_VERBOSE.html CURLOPT_WILDCARDMATCH.html CURLOPT_WRITEDATA.html        \
  CURLOPT_WRITEFUNCTION.html CURLOPT_XFERINFODATA.html                  \
  CURLOPT_XFERINFOFUNCTION.html CURLOPT_XOAUTH2_BEARER.html             \
- CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html                               \
+ CURLOPT_STREAM_DEPENDS.html CURLOPT_STREAM_DEPENDS_E.html             \
+ CURLOPT_STREAM_WEIGHT.html CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html    \
  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html CURLMOPT_MAXCONNECTS.html   \
  CURLMOPT_MAX_HOST_CONNECTIONS.html CURLMOPT_MAX_PIPELINE_LENGTH.html  \
  CURLMOPT_MAX_TOTAL_CONNECTIONS.html CURLMOPT_PIPELINING.html          \
  CURLMOPT_PIPELINING_SERVER_BL.html CURLMOPT_PIPELINING_SITE_BL.html   \
  CURLMOPT_SOCKETDATA.html CURLMOPT_SOCKETFUNCTION.html                 \
  CURLMOPT_TIMERDATA.html CURLMOPT_TIMERFUNCTION.html                   \
- CURLOPT_UNIX_SOCKET_PATH.html
+ CURLOPT_UNIX_SOCKET_PATH.html CURLOPT_PATH_AS_IS.html                 \
+ CURLOPT_PROXY_SERVICE_NAME.html CURLOPT_SERVICE_NAME.html             \
+ CURLOPT_PIPEWAIT.html CURLMOPT_PUSHDATA.html                          \
+ CURLMOPT_PUSHFUNCTION.html CURLOPT_DEFAULT_PROTOCOL.html              \
+ CURLINFO_ACTIVESOCKET.html CURLINFO_APPCONNECT_TIME.html              \
+ CURLINFO_CERTINFO.html CURLINFO_CONDITION_UNMET.html                  \
+ CURLINFO_CONNECT_TIME.html CURLINFO_CONTENT_LENGTH_DOWNLOAD.html      \
+ CURLINFO_CONTENT_LENGTH_UPLOAD.html CURLINFO_CONTENT_TYPE.html                \
+ CURLINFO_COOKIELIST.html CURLINFO_EFFECTIVE_URL.html                  \
+ CURLINFO_FILETIME.html CURLINFO_FTP_ENTRY_PATH.html                   \
+ CURLINFO_HEADER_SIZE.html CURLINFO_HTTPAUTH_AVAIL.html                        \
+ CURLINFO_HTTP_CONNECTCODE.html CURLINFO_LASTSOCKET.html               \
+ CURLINFO_LOCAL_IP.html CURLINFO_LOCAL_PORT.html                       \
+ CURLINFO_NAMELOOKUP_TIME.html CURLINFO_NUM_CONNECTS.html              \
+ CURLINFO_OS_ERRNO.html CURLINFO_PRETRANSFER_TIME.html                 \
+ CURLINFO_PRIMARY_IP.html CURLINFO_PRIMARY_PORT.html                   \
+ CURLINFO_PRIVATE.html CURLINFO_PROXYAUTH_AVAIL.html                   \
+ CURLINFO_REDIRECT_COUNT.html CURLINFO_REDIRECT_TIME.html              \
+ CURLINFO_REDIRECT_URL.html CURLINFO_REQUEST_SIZE.html                 \
+ CURLINFO_RESPONSE_CODE.html CURLINFO_RTSP_CLIENT_CSEQ.html            \
+ CURLINFO_RTSP_CSEQ_RECV.html CURLINFO_RTSP_SERVER_CSEQ.html           \
+ CURLINFO_RTSP_SESSION_ID.html CURLINFO_SIZE_DOWNLOAD.html             \
+ CURLINFO_SIZE_UPLOAD.html CURLINFO_SPEED_DOWNLOAD.html                        \
+ CURLINFO_SPEED_UPLOAD.html CURLINFO_SSL_ENGINES.html                  \
+ CURLINFO_SSL_VERIFYRESULT.html CURLINFO_STARTTRANSFER_TIME.html       \
+ CURLINFO_TLS_SESSION.html CURLINFO_TLS_SSL_PTR.html                   \
+ CURLINFO_TOTAL_TIME.html
 
 PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf    \
  CURLOPT_ADDRESS_SCOPE.pdf CURLOPT_APPEND.pdf CURLOPT_AUTOREFERER.pdf  \
@@ -269,8 +323,9 @@ PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf \
  CURLOPT_NEW_DIRECTORY_PERMS.pdf CURLOPT_NEW_FILE_PERMS.pdf            \
  CURLOPT_NOBODY.pdf CURLOPT_NOPROGRESS.pdf CURLOPT_NOPROXY.pdf         \
  CURLOPT_NOSIGNAL.pdf CURLOPT_OPENSOCKETDATA.pdf                       \
- CURLOPT_OPENSOCKETFUNCTION.pdf CURLOPT_PASSWORD.pdf CURLOPT_PORT.pdf  \
- CURLOPT_POST.pdf CURLOPT_POSTFIELDS.pdf CURLOPT_POSTFIELDSIZE.pdf     \
+ CURLOPT_OPENSOCKETFUNCTION.pdf CURLOPT_PASSWORD.pdf                   \
+ CURLOPT_PINNEDPUBLICKEY.pdf CURLOPT_PORT.pdf CURLOPT_POST.pdf         \
+ CURLOPT_POSTFIELDS.pdf CURLOPT_POSTFIELDSIZE.pdf                      \
  CURLOPT_POSTFIELDSIZE_LARGE.pdf CURLOPT_POSTQUOTE.pdf                 \
  CURLOPT_POSTREDIR.pdf CURLOPT_PREQUOTE.pdf CURLOPT_PRIVATE.pdf                \
  CURLOPT_PROGRESSDATA.pdf CURLOPT_PROGRESSFUNCTION.pdf                 \
@@ -296,30 +351,58 @@ PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf       \
  CURLOPT_SSL_CIPHER_LIST.pdf CURLOPT_SSL_CTX_DATA.pdf                  \
  CURLOPT_SSL_CTX_FUNCTION.pdf CURLOPT_SSL_ENABLE_ALPN.pdf              \
  CURLOPT_SSL_ENABLE_NPN.pdf CURLOPT_SSLENGINE.pdf                      \
- CURLOPT_SSLENGINE_DEFAULT.pdf CURLOPT_SSLKEY.pdf                      \
- CURLOPT_SSLKEYTYPE.pdf CURLOPT_SSL_OPTIONS.pdf                                \
+ CURLOPT_SSLENGINE_DEFAULT.pdf CURLOPT_SSL_FALSESTART.pdf              \
+ CURLOPT_SSLKEY.pdf CURLOPT_SSLKEYTYPE.pdf CURLOPT_SSL_OPTIONS.pdf     \
  CURLOPT_SSL_SESSIONID_CACHE.pdf CURLOPT_SSL_VERIFYHOST.pdf            \
- CURLOPT_SSL_VERIFYPEER.pdf CURLOPT_SSLVERSION.pdf CURLOPT_STDERR.pdf  \
- CURLOPT_TCP_KEEPALIVE.pdf CURLOPT_TCP_KEEPIDLE.pdf                    \
- CURLOPT_TCP_KEEPINTVL.pdf CURLOPT_TCP_NODELAY.pdf                     \
- CURLOPT_TELNETOPTIONS.pdf CURLOPT_TFTP_BLKSIZE.pdf                    \
- CURLOPT_TIMECONDITION.pdf CURLOPT_TIMEOUT.pdf CURLOPT_TIMEOUT_MS.pdf  \
- CURLOPT_TIMEVALUE.pdf CURLOPT_TLSAUTH_PASSWORD.pdf                    \
- CURLOPT_TLSAUTH_TYPE.pdf CURLOPT_TLSAUTH_USERNAME.pdf                 \
- CURLOPT_TRANSFER_ENCODING.pdf CURLOPT_TRANSFERTEXT.pdf                        \
- CURLOPT_UNRESTRICTED_AUTH.pdf CURLOPT_UPLOAD.pdf CURLOPT_URL.pdf      \
- CURLOPT_USERAGENT.pdf CURLOPT_USERNAME.pdf CURLOPT_USERPWD.pdf                \
- CURLOPT_USE_SSL.pdf CURLOPT_VERBOSE.pdf CURLOPT_WILDCARDMATCH.pdf     \
- CURLOPT_WRITEDATA.pdf CURLOPT_WRITEFUNCTION.pdf                       \
- CURLOPT_XFERINFODATA.pdf CURLOPT_XFERINFOFUNCTION.pdf                 \
- CURLOPT_XOAUTH2_BEARER.pdf CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf     \
+ CURLOPT_SSL_VERIFYPEER.pdf CURLOPT_SSL_VERIFYSTATUS.pdf               \
+ CURLOPT_SSLVERSION.pdf CURLOPT_STDERR.pdf CURLOPT_TCP_KEEPALIVE.pdf   \
+ CURLOPT_TCP_KEEPIDLE.pdf CURLOPT_TCP_KEEPINTVL.pdf                    \
+ CURLOPT_TCP_NODELAY.pdf CURLOPT_TELNETOPTIONS.pdf                     \
+ CURLOPT_TFTP_BLKSIZE.pdf CURLOPT_TFTP_NO_OPTIONS.pdf                  \
+ CURLOPT_TIMECONDITION.pdf CURLOPT_TIMEOUT.pdf                         \
+ CURLOPT_TIMEOUT_MS.pdf CURLOPT_TIMEVALUE.pdf                          \
+ CURLOPT_TLSAUTH_PASSWORD.pdf CURLOPT_TLSAUTH_TYPE.pdf                 \
+ CURLOPT_TLSAUTH_USERNAME.pdf CURLOPT_TRANSFER_ENCODING.pdf            \
+ CURLOPT_TRANSFERTEXT.pdf CURLOPT_UNRESTRICTED_AUTH.pdf                        \
+ CURLOPT_UPLOAD.pdf CURLOPT_URL.pdf CURLOPT_USERAGENT.pdf              \
+ CURLOPT_USERNAME.pdf CURLOPT_USERPWD.pdf CURLOPT_USE_SSL.pdf          \
+ CURLOPT_VERBOSE.pdf CURLOPT_WILDCARDMATCH.pdf CURLOPT_WRITEDATA.pdf   \
+ CURLOPT_WRITEFUNCTION.pdf CURLOPT_XFERINFODATA.pdf                    \
+ CURLOPT_XFERINFOFUNCTION.pdf CURLOPT_XOAUTH2_BEARER.pdf               \
+ CURLOPT_STREAM_DEPENDS.pdf CURLOPT_STREAM_DEPENDS_E.pdf               \
+ CURLOPT_STREAM_WEIGHT.pdf CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf      \
  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf CURLMOPT_MAXCONNECTS.pdf     \
  CURLMOPT_MAX_HOST_CONNECTIONS.pdf CURLMOPT_MAX_PIPELINE_LENGTH.pdf    \
  CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf CURLMOPT_PIPELINING.pdf            \
  CURLMOPT_PIPELINING_SERVER_BL.pdf CURLMOPT_PIPELINING_SITE_BL.pdf     \
  CURLMOPT_SOCKETDATA.pdf CURLMOPT_SOCKETFUNCTION.pdf                   \
  CURLMOPT_TIMERDATA.pdf CURLMOPT_TIMERFUNCTION.pdf                     \
- CURLOPT_UNIX_SOCKET_PATH.pdf
+ CURLOPT_UNIX_SOCKET_PATH.pdf CURLOPT_PATH_AS_IS.pdf                   \
+ CURLOPT_PROXY_SERVICE_NAME.pdf CURLOPT_SERVICE_NAME.pdf               \
+ CURLOPT_PIPEWAIT.pdf CURLMOPT_PUSHDATA.pdf CURLMOPT_PUSHFUNCTION.pdf  \
+ CURLOPT_DEFAULT_PROTOCOL.pdf CURLINFO_ACTIVESOCKET.pdf                        \
+ CURLINFO_APPCONNECT_TIME.pdf CURLINFO_CERTINFO.pdf                    \
+ CURLINFO_CONDITION_UNMET.pdf CURLINFO_CONNECT_TIME.pdf                        \
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf                                  \
+ CURLINFO_CONTENT_LENGTH_UPLOAD.pdf CURLINFO_CONTENT_TYPE.pdf          \
+ CURLINFO_COOKIELIST.pdf CURLINFO_EFFECTIVE_URL.pdf                    \
+ CURLINFO_FILETIME.pdf CURLINFO_FTP_ENTRY_PATH.pdf                     \
+ CURLINFO_HEADER_SIZE.pdf CURLINFO_HTTPAUTH_AVAIL.pdf                  \
+ CURLINFO_HTTP_CONNECTCODE.pdf CURLINFO_LASTSOCKET.pdf                 \
+ CURLINFO_LOCAL_IP.pdf CURLINFO_LOCAL_PORT.pdf                         \
+ CURLINFO_NAMELOOKUP_TIME.pdf CURLINFO_NUM_CONNECTS.pdf                        \
+ CURLINFO_OS_ERRNO.pdf CURLINFO_PRETRANSFER_TIME.pdf                   \
+ CURLINFO_PRIMARY_IP.pdf CURLINFO_PRIMARY_PORT.pdf CURLINFO_PRIVATE.pdf        \
+ CURLINFO_PROXYAUTH_AVAIL.pdf CURLINFO_REDIRECT_COUNT.pdf              \
+ CURLINFO_REDIRECT_TIME.pdf CURLINFO_REDIRECT_URL.pdf                  \
+ CURLINFO_REQUEST_SIZE.pdf CURLINFO_RESPONSE_CODE.pdf                  \
+ CURLINFO_RTSP_CLIENT_CSEQ.pdf CURLINFO_RTSP_CSEQ_RECV.pdf             \
+ CURLINFO_RTSP_SERVER_CSEQ.pdf CURLINFO_RTSP_SESSION_ID.pdf            \
+ CURLINFO_SIZE_DOWNLOAD.pdf CURLINFO_SIZE_UPLOAD.pdf                   \
+ CURLINFO_SPEED_DOWNLOAD.pdf CURLINFO_SPEED_UPLOAD.pdf                 \
+ CURLINFO_SSL_ENGINES.pdf CURLINFO_SSL_VERIFYRESULT.pdf                        \
+ CURLINFO_STARTTRANSFER_TIME.pdf CURLINFO_TLS_SESSION.pdf              \
+ CURLINFO_TLS_SSL_PTR.pdf CURLINFO_TOTAL_TIME.pdf
 
 CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
 
index cb2f5d2..eb06aef 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
 #
 ###########################################################################
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -100,8 +110,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = docs/libcurl/opts
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -122,7 +130,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -179,6 +188,7 @@ man3dir = $(mandir)/man3
 am__installdirs = "$(DESTDIR)$(man3dir)"
 MANS = $(man_MANS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -237,7 +247,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -257,6 +267,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -290,6 +301,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -301,17 +313,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -357,6 +370,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -411,8 +425,9 @@ man_MANS = CURLOPT_ACCEPT_ENCODING.3 CURLOPT_ACCEPTTIMEOUT_MS.3             \
  CURLOPT_NEW_DIRECTORY_PERMS.3 CURLOPT_NEW_FILE_PERMS.3                        \
  CURLOPT_NOBODY.3 CURLOPT_NOPROGRESS.3 CURLOPT_NOPROXY.3               \
  CURLOPT_NOSIGNAL.3 CURLOPT_OPENSOCKETDATA.3                           \
- CURLOPT_OPENSOCKETFUNCTION.3 CURLOPT_PASSWORD.3 CURLOPT_PORT.3                \
- CURLOPT_POST.3 CURLOPT_POSTFIELDS.3 CURLOPT_POSTFIELDSIZE.3           \
+ CURLOPT_OPENSOCKETFUNCTION.3 CURLOPT_PASSWORD.3                       \
+ CURLOPT_PINNEDPUBLICKEY.3 CURLOPT_PORT.3 CURLOPT_POST.3               \
+ CURLOPT_POSTFIELDS.3 CURLOPT_POSTFIELDSIZE.3                          \
  CURLOPT_POSTFIELDSIZE_LARGE.3 CURLOPT_POSTQUOTE.3 CURLOPT_POSTREDIR.3 \
  CURLOPT_PREQUOTE.3 CURLOPT_PRIVATE.3 CURLOPT_PROGRESSDATA.3           \
  CURLOPT_PROGRESSFUNCTION.3 CURLOPT_PROTOCOLS.3 CURLOPT_PROXY.3                \
@@ -435,27 +450,53 @@ man_MANS = CURLOPT_ACCEPT_ENCODING.3 CURLOPT_ACCEPTTIMEOUT_MS.3           \
  CURLOPT_SSLCERT.3 CURLOPT_SSLCERTTYPE.3 CURLOPT_SSL_CIPHER_LIST.3     \
  CURLOPT_SSL_CTX_DATA.3 CURLOPT_SSL_CTX_FUNCTION.3                     \
  CURLOPT_SSL_ENABLE_ALPN.3 CURLOPT_SSL_ENABLE_NPN.3 CURLOPT_SSLENGINE.3        \
- CURLOPT_SSLENGINE_DEFAULT.3 CURLOPT_SSLKEY.3 CURLOPT_SSLKEYTYPE.3     \
- CURLOPT_SSL_OPTIONS.3 CURLOPT_SSL_SESSIONID_CACHE.3                   \
- CURLOPT_SSL_VERIFYHOST.3 CURLOPT_SSL_VERIFYPEER.3 CURLOPT_SSLVERSION.3        \
- CURLOPT_STDERR.3 CURLOPT_TCP_KEEPALIVE.3 CURLOPT_TCP_KEEPIDLE.3       \
- CURLOPT_TCP_KEEPINTVL.3 CURLOPT_TCP_NODELAY.3 CURLOPT_TELNETOPTIONS.3 \
- CURLOPT_TFTP_BLKSIZE.3 CURLOPT_TIMECONDITION.3 CURLOPT_TIMEOUT.3      \
+ CURLOPT_SSLENGINE_DEFAULT.3 CURLOPT_SSL_FALSESTART.3 CURLOPT_SSLKEY.3 \
+ CURLOPT_SSLKEYTYPE.3 CURLOPT_SSL_OPTIONS.3                            \
+ CURLOPT_SSL_SESSIONID_CACHE.3 CURLOPT_SSL_VERIFYHOST.3                        \
+ CURLOPT_SSL_VERIFYPEER.3 CURLOPT_SSL_VERIFYSTATUS.3                   \
+ CURLOPT_SSLVERSION.3 CURLOPT_STDERR.3 CURLOPT_TCP_KEEPALIVE.3         \
+ CURLOPT_TCP_KEEPIDLE.3 CURLOPT_TCP_KEEPINTVL.3 CURLOPT_TCP_NODELAY.3  \
+ CURLOPT_TELNETOPTIONS.3 CURLOPT_TFTP_BLKSIZE.3                                \
+ CURLOPT_TFTP_NO_OPTIONS.3 CURLOPT_TIMECONDITION.3 CURLOPT_TIMEOUT.3   \
  CURLOPT_TIMEOUT_MS.3 CURLOPT_TIMEVALUE.3 CURLOPT_TLSAUTH_PASSWORD.3   \
  CURLOPT_TLSAUTH_TYPE.3 CURLOPT_TLSAUTH_USERNAME.3                     \
  CURLOPT_TRANSFER_ENCODING.3 CURLOPT_TRANSFERTEXT.3                    \
- CURLOPT_UNRESTRICTED_AUTH.3 CURLOPT_UPLOAD.3 CURLOPT_URL.3            \
- CURLOPT_USERAGENT.3 CURLOPT_USERNAME.3 CURLOPT_USERPWD.3              \
+ CURLOPT_UNRESTRICTED_AUTH.3 CURLOPT_UPLOAD.3                          \
+ CURLOPT_URL.3 CURLOPT_USERAGENT.3 CURLOPT_USERNAME.3 CURLOPT_USERPWD.3        \
  CURLOPT_USE_SSL.3 CURLOPT_VERBOSE.3 CURLOPT_WILDCARDMATCH.3           \
  CURLOPT_WRITEDATA.3 CURLOPT_WRITEFUNCTION.3 CURLOPT_XFERINFODATA.3    \
  CURLOPT_XFERINFOFUNCTION.3 CURLOPT_XOAUTH2_BEARER.3                   \
- CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3                                  \
+ CURLOPT_STREAM_DEPENDS.3 CURLOPT_STREAM_DEPENDS_E.3                   \
+ CURLOPT_STREAM_WEIGHT.3 CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3          \
  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 CURLMOPT_MAXCONNECTS.3         \
  CURLMOPT_MAX_HOST_CONNECTIONS.3 CURLMOPT_MAX_PIPELINE_LENGTH.3                \
  CURLMOPT_MAX_TOTAL_CONNECTIONS.3 CURLMOPT_PIPELINING.3                        \
  CURLMOPT_PIPELINING_SERVER_BL.3 CURLMOPT_PIPELINING_SITE_BL.3         \
  CURLMOPT_SOCKETDATA.3 CURLMOPT_SOCKETFUNCTION.3 CURLMOPT_TIMERDATA.3  \
- CURLMOPT_TIMERFUNCTION.3 CURLOPT_UNIX_SOCKET_PATH.3
+ CURLMOPT_TIMERFUNCTION.3 CURLOPT_UNIX_SOCKET_PATH.3                   \
+ CURLOPT_PATH_AS_IS.3 CURLOPT_PROXY_SERVICE_NAME.3                     \
+ CURLOPT_SERVICE_NAME.3 CURLOPT_PIPEWAIT.3 CURLMOPT_PUSHDATA.3         \
+ CURLMOPT_PUSHFUNCTION.3 CURLOPT_DEFAULT_PROTOCOL.3                    \
+ CURLINFO_ACTIVESOCKET.3 CURLINFO_APPCONNECT_TIME.3 CURLINFO_CERTINFO.3        \
+ CURLINFO_CONDITION_UNMET.3 CURLINFO_CONNECT_TIME.3                    \
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 CURLINFO_CONTENT_LENGTH_UPLOAD.3   \
+ CURLINFO_CONTENT_TYPE.3 CURLINFO_COOKIELIST.3 CURLINFO_EFFECTIVE_URL.3        \
+ CURLINFO_FILETIME.3 CURLINFO_FTP_ENTRY_PATH.3 CURLINFO_HEADER_SIZE.3  \
+ CURLINFO_HTTPAUTH_AVAIL.3 CURLINFO_HTTP_CONNECTCODE.3                 \
+ CURLINFO_LASTSOCKET.3 CURLINFO_LOCAL_IP.3 CURLINFO_LOCAL_PORT.3       \
+ CURLINFO_NAMELOOKUP_TIME.3 CURLINFO_NUM_CONNECTS.3 CURLINFO_OS_ERRNO.3        \
+ CURLINFO_PRETRANSFER_TIME.3 CURLINFO_PRIMARY_IP.3                     \
+ CURLINFO_PRIMARY_PORT.3 CURLINFO_PRIVATE.3 CURLINFO_PROXYAUTH_AVAIL.3 \
+ CURLINFO_REDIRECT_COUNT.3 CURLINFO_REDIRECT_TIME.3                    \
+ CURLINFO_REDIRECT_URL.3 CURLINFO_REQUEST_SIZE.3                       \
+ CURLINFO_RESPONSE_CODE.3 CURLINFO_RTSP_CLIENT_CSEQ.3                  \
+ CURLINFO_RTSP_CSEQ_RECV.3 CURLINFO_RTSP_SERVER_CSEQ.3                 \
+ CURLINFO_RTSP_SESSION_ID.3 CURLINFO_SIZE_DOWNLOAD.3                   \
+ CURLINFO_SIZE_UPLOAD.3 CURLINFO_SPEED_DOWNLOAD.3                      \
+ CURLINFO_SPEED_UPLOAD.3 CURLINFO_SSL_ENGINES.3                                \
+ CURLINFO_SSL_VERIFYRESULT.3 CURLINFO_STARTTRANSFER_TIME.3             \
+ CURLINFO_TLS_SESSION.3 CURLINFO_TLS_SSL_PTR.3                         \
+ CURLINFO_TOTAL_TIME.3
 
 HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html \
  CURLOPT_ADDRESS_SCOPE.html CURLOPT_APPEND.html                                \
@@ -510,8 +551,8 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html      \
  CURLOPT_NEW_FILE_PERMS.html CURLOPT_NOBODY.html                       \
  CURLOPT_NOPROGRESS.html CURLOPT_NOPROXY.html CURLOPT_NOSIGNAL.html    \
  CURLOPT_OPENSOCKETDATA.html CURLOPT_OPENSOCKETFUNCTION.html           \
- CURLOPT_PASSWORD.html CURLOPT_PORT.html CURLOPT_POST.html             \
- CURLOPT_POSTFIELDS.html CURLOPT_POSTFIELDSIZE.html                    \
+ CURLOPT_PASSWORD.html CURLOPT_PINNEDPUBLICKEY.html CURLOPT_PORT.html  \
+ CURLOPT_POST.html CURLOPT_POSTFIELDS.html CURLOPT_POSTFIELDSIZE.html  \
  CURLOPT_POSTFIELDSIZE_LARGE.html CURLOPT_POSTQUOTE.html               \
  CURLOPT_POSTREDIR.html CURLOPT_PREQUOTE.html CURLOPT_PRIVATE.html     \
  CURLOPT_PROGRESSDATA.html CURLOPT_PROGRESSFUNCTION.html               \
@@ -537,15 +578,16 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html    \
  CURLOPT_SSL_CIPHER_LIST.html CURLOPT_SSL_CTX_DATA.html                        \
  CURLOPT_SSL_CTX_FUNCTION.html CURLOPT_SSL_ENABLE_ALPN.html            \
  CURLOPT_SSL_ENABLE_NPN.html CURLOPT_SSLENGINE.html                    \
- CURLOPT_SSLENGINE_DEFAULT.html CURLOPT_SSLKEY.html                    \
- CURLOPT_SSLKEYTYPE.html CURLOPT_SSL_OPTIONS.html                      \
+ CURLOPT_SSLENGINE_DEFAULT.html CURLOPT_SSL_FALSESTART.html            \
+ CURLOPT_SSLKEY.html CURLOPT_SSLKEYTYPE.html CURLOPT_SSL_OPTIONS.html  \
  CURLOPT_SSL_SESSIONID_CACHE.html CURLOPT_SSL_VERIFYHOST.html          \
- CURLOPT_SSL_VERIFYPEER.html CURLOPT_SSLVERSION.html                   \
- CURLOPT_STDERR.html CURLOPT_TCP_KEEPALIVE.html                                \
+ CURLOPT_SSL_VERIFYPEER.html CURLOPT_SSL_VERIFYSTATUS.html             \
+ CURLOPT_SSLVERSION.html CURLOPT_STDERR.html CURLOPT_TCP_KEEPALIVE.html        \
  CURLOPT_TCP_KEEPIDLE.html CURLOPT_TCP_KEEPINTVL.html                  \
  CURLOPT_TCP_NODELAY.html CURLOPT_TELNETOPTIONS.html                   \
- CURLOPT_TFTP_BLKSIZE.html CURLOPT_TIMECONDITION.html                  \
- CURLOPT_TIMEOUT.html CURLOPT_TIMEOUT_MS.html CURLOPT_TIMEVALUE.html   \
+ CURLOPT_TFTP_BLKSIZE.html CURLOPT_TFTP_NO_OPTIONS.html                        \
+ CURLOPT_TIMECONDITION.html CURLOPT_TIMEOUT.html                       \
+ CURLOPT_TIMEOUT_MS.html CURLOPT_TIMEVALUE.html                                \
  CURLOPT_TLSAUTH_PASSWORD.html CURLOPT_TLSAUTH_TYPE.html               \
  CURLOPT_TLSAUTH_USERNAME.html CURLOPT_TRANSFER_ENCODING.html          \
  CURLOPT_TRANSFERTEXT.html CURLOPT_UNRESTRICTED_AUTH.html              \
@@ -554,14 +596,41 @@ HTMLPAGES = CURLOPT_ACCEPT_ENCODING.html CURLOPT_ACCEPTTIMEOUT_MS.html    \
  CURLOPT_VERBOSE.html CURLOPT_WILDCARDMATCH.html CURLOPT_WRITEDATA.html        \
  CURLOPT_WRITEFUNCTION.html CURLOPT_XFERINFODATA.html                  \
  CURLOPT_XFERINFOFUNCTION.html CURLOPT_XOAUTH2_BEARER.html             \
- CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html                               \
+ CURLOPT_STREAM_DEPENDS.html CURLOPT_STREAM_DEPENDS_E.html             \
+ CURLOPT_STREAM_WEIGHT.html CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html    \
  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html CURLMOPT_MAXCONNECTS.html   \
  CURLMOPT_MAX_HOST_CONNECTIONS.html CURLMOPT_MAX_PIPELINE_LENGTH.html  \
  CURLMOPT_MAX_TOTAL_CONNECTIONS.html CURLMOPT_PIPELINING.html          \
  CURLMOPT_PIPELINING_SERVER_BL.html CURLMOPT_PIPELINING_SITE_BL.html   \
  CURLMOPT_SOCKETDATA.html CURLMOPT_SOCKETFUNCTION.html                 \
  CURLMOPT_TIMERDATA.html CURLMOPT_TIMERFUNCTION.html                   \
- CURLOPT_UNIX_SOCKET_PATH.html
+ CURLOPT_UNIX_SOCKET_PATH.html CURLOPT_PATH_AS_IS.html                 \
+ CURLOPT_PROXY_SERVICE_NAME.html CURLOPT_SERVICE_NAME.html             \
+ CURLOPT_PIPEWAIT.html CURLMOPT_PUSHDATA.html                          \
+ CURLMOPT_PUSHFUNCTION.html CURLOPT_DEFAULT_PROTOCOL.html              \
+ CURLINFO_ACTIVESOCKET.html CURLINFO_APPCONNECT_TIME.html              \
+ CURLINFO_CERTINFO.html CURLINFO_CONDITION_UNMET.html                  \
+ CURLINFO_CONNECT_TIME.html CURLINFO_CONTENT_LENGTH_DOWNLOAD.html      \
+ CURLINFO_CONTENT_LENGTH_UPLOAD.html CURLINFO_CONTENT_TYPE.html                \
+ CURLINFO_COOKIELIST.html CURLINFO_EFFECTIVE_URL.html                  \
+ CURLINFO_FILETIME.html CURLINFO_FTP_ENTRY_PATH.html                   \
+ CURLINFO_HEADER_SIZE.html CURLINFO_HTTPAUTH_AVAIL.html                        \
+ CURLINFO_HTTP_CONNECTCODE.html CURLINFO_LASTSOCKET.html               \
+ CURLINFO_LOCAL_IP.html CURLINFO_LOCAL_PORT.html                       \
+ CURLINFO_NAMELOOKUP_TIME.html CURLINFO_NUM_CONNECTS.html              \
+ CURLINFO_OS_ERRNO.html CURLINFO_PRETRANSFER_TIME.html                 \
+ CURLINFO_PRIMARY_IP.html CURLINFO_PRIMARY_PORT.html                   \
+ CURLINFO_PRIVATE.html CURLINFO_PROXYAUTH_AVAIL.html                   \
+ CURLINFO_REDIRECT_COUNT.html CURLINFO_REDIRECT_TIME.html              \
+ CURLINFO_REDIRECT_URL.html CURLINFO_REQUEST_SIZE.html                 \
+ CURLINFO_RESPONSE_CODE.html CURLINFO_RTSP_CLIENT_CSEQ.html            \
+ CURLINFO_RTSP_CSEQ_RECV.html CURLINFO_RTSP_SERVER_CSEQ.html           \
+ CURLINFO_RTSP_SESSION_ID.html CURLINFO_SIZE_DOWNLOAD.html             \
+ CURLINFO_SIZE_UPLOAD.html CURLINFO_SPEED_DOWNLOAD.html                        \
+ CURLINFO_SPEED_UPLOAD.html CURLINFO_SSL_ENGINES.html                  \
+ CURLINFO_SSL_VERIFYRESULT.html CURLINFO_STARTTRANSFER_TIME.html       \
+ CURLINFO_TLS_SESSION.html CURLINFO_TLS_SSL_PTR.html                   \
+ CURLINFO_TOTAL_TIME.html
 
 PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf    \
  CURLOPT_ADDRESS_SCOPE.pdf CURLOPT_APPEND.pdf CURLOPT_AUTOREFERER.pdf  \
@@ -613,8 +682,9 @@ PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf \
  CURLOPT_NEW_DIRECTORY_PERMS.pdf CURLOPT_NEW_FILE_PERMS.pdf            \
  CURLOPT_NOBODY.pdf CURLOPT_NOPROGRESS.pdf CURLOPT_NOPROXY.pdf         \
  CURLOPT_NOSIGNAL.pdf CURLOPT_OPENSOCKETDATA.pdf                       \
- CURLOPT_OPENSOCKETFUNCTION.pdf CURLOPT_PASSWORD.pdf CURLOPT_PORT.pdf  \
- CURLOPT_POST.pdf CURLOPT_POSTFIELDS.pdf CURLOPT_POSTFIELDSIZE.pdf     \
+ CURLOPT_OPENSOCKETFUNCTION.pdf CURLOPT_PASSWORD.pdf                   \
+ CURLOPT_PINNEDPUBLICKEY.pdf CURLOPT_PORT.pdf CURLOPT_POST.pdf         \
+ CURLOPT_POSTFIELDS.pdf CURLOPT_POSTFIELDSIZE.pdf                      \
  CURLOPT_POSTFIELDSIZE_LARGE.pdf CURLOPT_POSTQUOTE.pdf                 \
  CURLOPT_POSTREDIR.pdf CURLOPT_PREQUOTE.pdf CURLOPT_PRIVATE.pdf                \
  CURLOPT_PROGRESSDATA.pdf CURLOPT_PROGRESSFUNCTION.pdf                 \
@@ -640,30 +710,58 @@ PDFPAGES = CURLOPT_ACCEPT_ENCODING.pdf CURLOPT_ACCEPTTIMEOUT_MS.pdf       \
  CURLOPT_SSL_CIPHER_LIST.pdf CURLOPT_SSL_CTX_DATA.pdf                  \
  CURLOPT_SSL_CTX_FUNCTION.pdf CURLOPT_SSL_ENABLE_ALPN.pdf              \
  CURLOPT_SSL_ENABLE_NPN.pdf CURLOPT_SSLENGINE.pdf                      \
- CURLOPT_SSLENGINE_DEFAULT.pdf CURLOPT_SSLKEY.pdf                      \
- CURLOPT_SSLKEYTYPE.pdf CURLOPT_SSL_OPTIONS.pdf                                \
+ CURLOPT_SSLENGINE_DEFAULT.pdf CURLOPT_SSL_FALSESTART.pdf              \
+ CURLOPT_SSLKEY.pdf CURLOPT_SSLKEYTYPE.pdf CURLOPT_SSL_OPTIONS.pdf     \
  CURLOPT_SSL_SESSIONID_CACHE.pdf CURLOPT_SSL_VERIFYHOST.pdf            \
- CURLOPT_SSL_VERIFYPEER.pdf CURLOPT_SSLVERSION.pdf CURLOPT_STDERR.pdf  \
- CURLOPT_TCP_KEEPALIVE.pdf CURLOPT_TCP_KEEPIDLE.pdf                    \
- CURLOPT_TCP_KEEPINTVL.pdf CURLOPT_TCP_NODELAY.pdf                     \
- CURLOPT_TELNETOPTIONS.pdf CURLOPT_TFTP_BLKSIZE.pdf                    \
- CURLOPT_TIMECONDITION.pdf CURLOPT_TIMEOUT.pdf CURLOPT_TIMEOUT_MS.pdf  \
- CURLOPT_TIMEVALUE.pdf CURLOPT_TLSAUTH_PASSWORD.pdf                    \
- CURLOPT_TLSAUTH_TYPE.pdf CURLOPT_TLSAUTH_USERNAME.pdf                 \
- CURLOPT_TRANSFER_ENCODING.pdf CURLOPT_TRANSFERTEXT.pdf                        \
- CURLOPT_UNRESTRICTED_AUTH.pdf CURLOPT_UPLOAD.pdf CURLOPT_URL.pdf      \
- CURLOPT_USERAGENT.pdf CURLOPT_USERNAME.pdf CURLOPT_USERPWD.pdf                \
- CURLOPT_USE_SSL.pdf CURLOPT_VERBOSE.pdf CURLOPT_WILDCARDMATCH.pdf     \
- CURLOPT_WRITEDATA.pdf CURLOPT_WRITEFUNCTION.pdf                       \
- CURLOPT_XFERINFODATA.pdf CURLOPT_XFERINFOFUNCTION.pdf                 \
- CURLOPT_XOAUTH2_BEARER.pdf CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf     \
+ CURLOPT_SSL_VERIFYPEER.pdf CURLOPT_SSL_VERIFYSTATUS.pdf               \
+ CURLOPT_SSLVERSION.pdf CURLOPT_STDERR.pdf CURLOPT_TCP_KEEPALIVE.pdf   \
+ CURLOPT_TCP_KEEPIDLE.pdf CURLOPT_TCP_KEEPINTVL.pdf                    \
+ CURLOPT_TCP_NODELAY.pdf CURLOPT_TELNETOPTIONS.pdf                     \
+ CURLOPT_TFTP_BLKSIZE.pdf CURLOPT_TFTP_NO_OPTIONS.pdf                  \
+ CURLOPT_TIMECONDITION.pdf CURLOPT_TIMEOUT.pdf                         \
+ CURLOPT_TIMEOUT_MS.pdf CURLOPT_TIMEVALUE.pdf                          \
+ CURLOPT_TLSAUTH_PASSWORD.pdf CURLOPT_TLSAUTH_TYPE.pdf                 \
+ CURLOPT_TLSAUTH_USERNAME.pdf CURLOPT_TRANSFER_ENCODING.pdf            \
+ CURLOPT_TRANSFERTEXT.pdf CURLOPT_UNRESTRICTED_AUTH.pdf                        \
+ CURLOPT_UPLOAD.pdf CURLOPT_URL.pdf CURLOPT_USERAGENT.pdf              \
+ CURLOPT_USERNAME.pdf CURLOPT_USERPWD.pdf CURLOPT_USE_SSL.pdf          \
+ CURLOPT_VERBOSE.pdf CURLOPT_WILDCARDMATCH.pdf CURLOPT_WRITEDATA.pdf   \
+ CURLOPT_WRITEFUNCTION.pdf CURLOPT_XFERINFODATA.pdf                    \
+ CURLOPT_XFERINFOFUNCTION.pdf CURLOPT_XOAUTH2_BEARER.pdf               \
+ CURLOPT_STREAM_DEPENDS.pdf CURLOPT_STREAM_DEPENDS_E.pdf               \
+ CURLOPT_STREAM_WEIGHT.pdf CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf      \
  CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf CURLMOPT_MAXCONNECTS.pdf     \
  CURLMOPT_MAX_HOST_CONNECTIONS.pdf CURLMOPT_MAX_PIPELINE_LENGTH.pdf    \
  CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf CURLMOPT_PIPELINING.pdf            \
  CURLMOPT_PIPELINING_SERVER_BL.pdf CURLMOPT_PIPELINING_SITE_BL.pdf     \
  CURLMOPT_SOCKETDATA.pdf CURLMOPT_SOCKETFUNCTION.pdf                   \
  CURLMOPT_TIMERDATA.pdf CURLMOPT_TIMERFUNCTION.pdf                     \
- CURLOPT_UNIX_SOCKET_PATH.pdf
+ CURLOPT_UNIX_SOCKET_PATH.pdf CURLOPT_PATH_AS_IS.pdf                   \
+ CURLOPT_PROXY_SERVICE_NAME.pdf CURLOPT_SERVICE_NAME.pdf               \
+ CURLOPT_PIPEWAIT.pdf CURLMOPT_PUSHDATA.pdf CURLMOPT_PUSHFUNCTION.pdf  \
+ CURLOPT_DEFAULT_PROTOCOL.pdf CURLINFO_ACTIVESOCKET.pdf                        \
+ CURLINFO_APPCONNECT_TIME.pdf CURLINFO_CERTINFO.pdf                    \
+ CURLINFO_CONDITION_UNMET.pdf CURLINFO_CONNECT_TIME.pdf                        \
+ CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf                                  \
+ CURLINFO_CONTENT_LENGTH_UPLOAD.pdf CURLINFO_CONTENT_TYPE.pdf          \
+ CURLINFO_COOKIELIST.pdf CURLINFO_EFFECTIVE_URL.pdf                    \
+ CURLINFO_FILETIME.pdf CURLINFO_FTP_ENTRY_PATH.pdf                     \
+ CURLINFO_HEADER_SIZE.pdf CURLINFO_HTTPAUTH_AVAIL.pdf                  \
+ CURLINFO_HTTP_CONNECTCODE.pdf CURLINFO_LASTSOCKET.pdf                 \
+ CURLINFO_LOCAL_IP.pdf CURLINFO_LOCAL_PORT.pdf                         \
+ CURLINFO_NAMELOOKUP_TIME.pdf CURLINFO_NUM_CONNECTS.pdf                        \
+ CURLINFO_OS_ERRNO.pdf CURLINFO_PRETRANSFER_TIME.pdf                   \
+ CURLINFO_PRIMARY_IP.pdf CURLINFO_PRIMARY_PORT.pdf CURLINFO_PRIVATE.pdf        \
+ CURLINFO_PROXYAUTH_AVAIL.pdf CURLINFO_REDIRECT_COUNT.pdf              \
+ CURLINFO_REDIRECT_TIME.pdf CURLINFO_REDIRECT_URL.pdf                  \
+ CURLINFO_REQUEST_SIZE.pdf CURLINFO_RESPONSE_CODE.pdf                  \
+ CURLINFO_RTSP_CLIENT_CSEQ.pdf CURLINFO_RTSP_CSEQ_RECV.pdf             \
+ CURLINFO_RTSP_SERVER_CSEQ.pdf CURLINFO_RTSP_SESSION_ID.pdf            \
+ CURLINFO_SIZE_DOWNLOAD.pdf CURLINFO_SIZE_UPLOAD.pdf                   \
+ CURLINFO_SPEED_DOWNLOAD.pdf CURLINFO_SPEED_UPLOAD.pdf                 \
+ CURLINFO_SSL_ENGINES.pdf CURLINFO_SSL_VERIFYRESULT.pdf                        \
+ CURLINFO_STARTTRANSFER_TIME.pdf CURLINFO_TLS_SESSION.pdf              \
+ CURLINFO_TLS_SSL_PTR.pdf CURLINFO_TOTAL_TIME.pdf
 
 CLEANFILES = $(HTMLPAGES) $(PDFPAGES)
 EXTRA_DIST = $(man_MANS) $(HTMLPAGES) $(PDFPAGES)
@@ -685,7 +783,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/libcurl/opts/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign docs/libcurl/opts/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -906,6 +1003,8 @@ uninstall-man: uninstall-man3
        ps ps-am tags-am uninstall uninstall-am uninstall-man \
        uninstall-man3
 
+.PRECIOUS: Makefile
+
 
 html: $(HTMLPAGES)
 
index b8b0838..daf1809 100644 (file)
@@ -118,6 +118,7 @@ CURLE_SSL_CRL_BADFILE           7.19.0
 CURLE_SSL_ENGINE_INITFAILED     7.12.3
 CURLE_SSL_ENGINE_NOTFOUND       7.9.3
 CURLE_SSL_ENGINE_SETFAILED      7.9.3
+CURLE_SSL_INVALIDCERTSTATUS     7.41.0
 CURLE_SSL_ISSUER_ERROR          7.19.0
 CURLE_SSL_PEER_CERTIFICATE      7.8           7.17.1
 CURLE_SSL_PINNEDPUBKEYNOTMATCH  7.39.0
@@ -163,6 +164,7 @@ CURLFORM_BUFFER                 7.9.8
 CURLFORM_BUFFERLENGTH           7.9.8
 CURLFORM_BUFFERPTR              7.9.8
 CURLFORM_CONTENTHEADER          7.9.3
+CURLFORM_CONTENTLEN             7.46.0
 CURLFORM_CONTENTSLENGTH         7.9
 CURLFORM_CONTENTTYPE            7.9
 CURLFORM_COPYCONTENTS           7.9
@@ -198,6 +200,7 @@ CURLGSSAPI_DELEGATION_NONE      7.22.0
 CURLGSSAPI_DELEGATION_POLICY_FLAG 7.22.0
 CURLHEADER_SEPARATE             7.37.0
 CURLHEADER_UNIFIED              7.37.0
+CURLINFO_ACTIVESOCKET           7.45.0
 CURLINFO_APPCONNECT_TIME        7.19.0
 CURLINFO_CERTINFO               7.19.1
 CURLINFO_CONDITION_UNMET        7.19.4
@@ -246,6 +249,7 @@ CURLINFO_RTSP_SESSION_ID        7.20.0
 CURLINFO_SIZE_DOWNLOAD          7.4.1
 CURLINFO_SIZE_UPLOAD            7.4.1
 CURLINFO_SLIST                  7.12.3
+CURLINFO_SOCKET                 7.45.0
 CURLINFO_SPEED_DOWNLOAD         7.4.1
 CURLINFO_SPEED_UPLOAD           7.4.1
 CURLINFO_SSL_DATA_IN            7.12.1
@@ -255,7 +259,8 @@ CURLINFO_SSL_VERIFYRESULT       7.5
 CURLINFO_STARTTRANSFER_TIME     7.9.2
 CURLINFO_STRING                 7.4.1
 CURLINFO_TEXT                   7.9.6
-CURLINFO_TLS_SESSION            7.34.0
+CURLINFO_TLS_SESSION            7.34.0        7.48.0
+CURLINFO_TLS_SSL_PTR            7.48.0
 CURLINFO_TOTAL_TIME             7.4.1
 CURLINFO_TYPEMASK               7.4.1
 CURLIOCMD_NOP                   7.12.3
@@ -283,6 +288,8 @@ CURLMOPT_MAX_TOTAL_CONNECTIONS  7.30.0
 CURLMOPT_PIPELINING             7.16.0
 CURLMOPT_PIPELINING_SERVER_BL   7.30.0
 CURLMOPT_PIPELINING_SITE_BL     7.30.0
+CURLMOPT_PUSHDATA               7.44.0
+CURLMOPT_PUSHFUNCTION           7.44.0
 CURLMOPT_SOCKETDATA             7.15.4
 CURLMOPT_SOCKETFUNCTION         7.15.4
 CURLMOPT_TIMERDATA              7.16.0
@@ -303,6 +310,7 @@ CURLOPTTYPE_FUNCTIONPOINT       7.1
 CURLOPTTYPE_LONG                7.1
 CURLOPTTYPE_OBJECTPOINT         7.1
 CURLOPTTYPE_OFF_T               7.11.0
+CURLOPTTYPE_STRINGPOINT         7.46.0
 CURLOPT_ACCEPTTIMEOUT_MS        7.24.0
 CURLOPT_ACCEPT_ENCODING         7.21.6
 CURLOPT_ADDRESS_SCOPE           7.19.0
@@ -336,6 +344,7 @@ CURLOPT_CRLFILE                 7.19.0
 CURLOPT_CUSTOMREQUEST           7.1
 CURLOPT_DEBUGDATA               7.9.6
 CURLOPT_DEBUGFUNCTION           7.9.6
+CURLOPT_DEFAULT_PROTOCOL        7.45.0
 CURLOPT_DIRLISTONLY             7.17.0
 CURLOPT_DNS_CACHE_TIMEOUT       7.9.3
 CURLOPT_DNS_INTERFACE           7.33.0
@@ -430,7 +439,9 @@ CURLOPT_PASSWDDATA              7.4.2         7.11.1      7.15.5
 CURLOPT_PASSWDFUNCTION          7.4.2         7.11.1      7.15.5
 CURLOPT_PASSWORD                7.19.1
 CURLOPT_PASV_HOST               7.12.1        7.16.0      7.15.5
+CURLOPT_PATH_AS_IS              7.42.0
 CURLOPT_PINNEDPUBLICKEY         7.39.0
+CURLOPT_PIPEWAIT                7.43.0
 CURLOPT_PORT                    7.1
 CURLOPT_POST                    7.1
 CURLOPT_POST301                 7.17.1        7.19.1
@@ -452,6 +463,7 @@ CURLOPT_PROXYPORT               7.1
 CURLOPT_PROXYTYPE               7.10
 CURLOPT_PROXYUSERNAME           7.19.1
 CURLOPT_PROXYUSERPWD            7.1
+CURLOPT_PROXY_SERVICE_NAME      7.43.0
 CURLOPT_PROXY_TRANSFER_MODE     7.18.0
 CURLOPT_PUT                     7.1
 CURLOPT_QUOTE                   7.1
@@ -475,6 +487,7 @@ CURLOPT_SASL_IR                 7.31.0
 CURLOPT_SEEKDATA                7.18.0
 CURLOPT_SEEKFUNCTION            7.18.0
 CURLOPT_SERVER_RESPONSE_TIMEOUT 7.20.0
+CURLOPT_SERVICE_NAME            7.43.0
 CURLOPT_SHARE                   7.10
 CURLOPT_SOCKOPTDATA             7.16.0
 CURLOPT_SOCKOPTFUNCTION         7.16.0
@@ -509,17 +522,23 @@ CURLOPT_SSL_CTX_DATA            7.10.6
 CURLOPT_SSL_CTX_FUNCTION        7.10.6
 CURLOPT_SSL_ENABLE_ALPN         7.36.0
 CURLOPT_SSL_ENABLE_NPN          7.36.0
+CURLOPT_SSL_FALSESTART          7.42.0
 CURLOPT_SSL_OPTIONS             7.25.0
 CURLOPT_SSL_SESSIONID_CACHE     7.16.0
 CURLOPT_SSL_VERIFYHOST          7.8.1
 CURLOPT_SSL_VERIFYPEER          7.4.2
+CURLOPT_SSL_VERIFYSTATUS        7.41.0
 CURLOPT_STDERR                  7.1
+CURLOPT_STREAM_DEPENDS          7.46.0
+CURLOPT_STREAM_DEPENDS_E        7.46.0
+CURLOPT_STREAM_WEIGHT           7.46.0
 CURLOPT_TCP_KEEPALIVE           7.25.0
 CURLOPT_TCP_KEEPIDLE            7.25.0
 CURLOPT_TCP_KEEPINTVL           7.25.0
 CURLOPT_TCP_NODELAY             7.11.2
 CURLOPT_TELNETOPTIONS           7.7
 CURLOPT_TFTP_BLKSIZE            7.19.4
+CURLOPT_TFTP_NO_OPTIONS         7.48.0
 CURLOPT_TIMECONDITION           7.1
 CURLOPT_TIMEOUT                 7.1
 CURLOPT_TIMEOUT_MS              7.16.2
@@ -552,6 +571,9 @@ CURLPAUSE_RECV                  7.18.0
 CURLPAUSE_RECV_CONT             7.18.0
 CURLPAUSE_SEND                  7.18.0
 CURLPAUSE_SEND_CONT             7.18.0
+CURLPIPE_HTTP1                  7.43.0
+CURLPIPE_MULTIPLEX              7.43.0
+CURLPIPE_NOTHING                7.43.0
 CURLPROTO_ALL                   7.19.4
 CURLPROTO_DICT                  7.19.4
 CURLPROTO_FILE                  7.19.4
@@ -614,6 +636,7 @@ CURLSSLBACKEND_CYASSL           7.34.0
 CURLSSLBACKEND_DARWINSSL        7.34.0
 CURLSSLBACKEND_GNUTLS           7.34.0
 CURLSSLBACKEND_GSKIT            7.34.0
+CURLSSLBACKEND_MBEDTLS          7.46.0
 CURLSSLBACKEND_NONE             7.34.0
 CURLSSLBACKEND_NSS              7.34.0
 CURLSSLBACKEND_OPENSSL          7.34.0
@@ -621,6 +644,7 @@ CURLSSLBACKEND_POLARSSL         7.34.0
 CURLSSLBACKEND_QSOSSL           7.34.0        -           7.38.1
 CURLSSLBACKEND_SCHANNEL         7.34.0
 CURLSSLOPT_ALLOW_BEAST          7.25.0
+CURLSSLOPT_NO_REVOKE            7.44.0
 CURLUSESSL_ALL                  7.17.0
 CURLUSESSL_CONTROL              7.17.0
 CURLUSESSL_NONE                 7.17.0
@@ -658,9 +682,19 @@ CURL_GLOBAL_DEFAULT             7.8
 CURL_GLOBAL_NOTHING             7.8
 CURL_GLOBAL_SSL                 7.8
 CURL_GLOBAL_WIN32               7.8.1
+CURL_HTTPPOST_BUFFER            7.46.0
+CURL_HTTPPOST_CALLBACK          7.46.0
+CURL_HTTPPOST_FILENAME          7.46.0
+CURL_HTTPPOST_LARGE             7.46.0
+CURL_HTTPPOST_PTRBUFFER         7.46.0
+CURL_HTTPPOST_PTRCONTENTS       7.46.0
+CURL_HTTPPOST_PTRNAME           7.46.0
+CURL_HTTPPOST_READFILE          7.46.0
 CURL_HTTP_VERSION_1_0           7.9.1
 CURL_HTTP_VERSION_1_1           7.9.1
+CURL_HTTP_VERSION_2             7.43.0
 CURL_HTTP_VERSION_2_0           7.33.0
+CURL_HTTP_VERSION_2TLS          7.47.0
 CURL_HTTP_VERSION_NONE          7.9.1
 CURL_IPRESOLVE_V4               7.10.8
 CURL_IPRESOLVE_V6               7.10.8
@@ -691,6 +725,8 @@ CURL_POLL_OUT                   7.14.0
 CURL_POLL_REMOVE                7.14.0
 CURL_PROGRESS_BAR               7.1.1         -           7.4.1
 CURL_PROGRESS_STATS             7.1.1         -           7.4.1
+CURL_PUSH_DENY                  7.44.0
+CURL_PUSH_OK                    7.44.0
 CURL_READFUNC_ABORT             7.12.1
 CURL_READFUNC_PAUSE             7.18.0
 CURL_REDIR_GET_ALL              7.19.1
@@ -746,6 +782,7 @@ CURL_VERSION_LARGEFILE          7.11.1
 CURL_VERSION_LIBZ               7.10
 CURL_VERSION_NTLM               7.10.6
 CURL_VERSION_NTLM_WB            7.22.0
+CURL_VERSION_PSL                7.47.0
 CURL_VERSION_SPNEGO             7.10.8
 CURL_VERSION_SSL                7.10
 CURL_VERSION_SSPI               7.13.2
index d1ff7a6..cfcecd0 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
@@ -24,7 +24,7 @@
 # Experience has shown that the symbols-in-versions file is very useful to
 # applications that want to build with a wide range of libcurl versions.
 # It is however easy to get it wrong and the source gets a bit messy with all
-# the fixed numerical comparisions.
+# the fixed numerical comparisons.
 #
 # The point of this script is to provide an easy-to-use macro for libcurl-
 # using applications to do preprocessor checks for specific libcurl defines,
@@ -71,7 +71,7 @@ while(<F>) {
         my $dep;
 
         # is there removed info?
-        if($vers =~ /([\d.]+)[ \t-]+([\d.]+)[ \t]+([\d.]+)/) {
+        if($vers =~ /([\d.]+)[ \t-]+([\d.-]+)[ \t]+([\d.]+)/) {
             ($intr, $dep, $rm)=($1, $2, $3);
         }
         # is it a dep-only line?
index 0c633de..e600125 100644 (file)
@@ -4,15 +4,20 @@
 <title>mk-ca-bundle man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -70,6 +75,7 @@ p.roffit {
 <p class="level1">Valid purposes are: 
 <p class="level2">ALL, DIGITAL_SIGNATURE, NON_REPUDIATION, KEY_ENCIPHERMENT, DATA_ENCIPHERMENT, KEY_AGREEMENT, KEY_CERT_SIGN, CRL_SIGN, SERVER_AUTH (default), CLIENT_AUTH, CODE_SIGNING, EMAIL_PROTECTION, IPSEC_END_SYSTEM, IPSEC_TUNNEL, IPSEC_USER, TIME_STAMPING, STEP_UP_APPROVED 
 <p class="level1">
+<p class="level0"><a name=""></a><span class="nroffip"></span> 
 <p class="level1">Valid trust levels are: 
 <p class="level2">ALL, TRUSTED_DELEGATOR (default), NOT_TRUSTED, MUST_VERIFY_TRUST, TRUSTED 
 <p class="level1">
@@ -88,12 +94,12 @@ p.roffit {
 <p class="level0"><a name="-v"></a><span class="nroffip">-v</span> 
 <p class="level1">be verbose and print out processed CAs <a name="EXIT"></a><h2 class="nroffsh">EXIT STATUS</h2>
 <p class="level0">Returns 0 on success. Returns 1 if it fails to download data. <a name="CERTDATA"></a><h2 class="nroffsh">CERTDATA FORMAT</h2>
-<p class="level0">The file format used by Mozilla for this trust information seems to be documented here: <pre>
-<p class="level0"><a href="http://p11-glue.freedesktop.org/doc/storing-trust-policy/storing-trust-existing.html">http://p11-glue.freedesktop.org/doc/storing-trust-policy/storing-trust-existing.html</a>
- </pre>
+<p class="level0">The file format used by Mozilla for this trust information seems to be documented here: <pre class="level0">
+http://p11-glue.freedesktop.org/doc/storing-trust-policy/storing-trust-existing.html
+</pre>
 
 <p class="level0"><a name="SEE"></a><h2 class="nroffsh">SEE ALSO</h2>
-<p class="level0"><span Class="manpage">curl (1)</span> <a name="HISTORY"></a><h2 class="nroffsh">HISTORY</h2>
-<p class="level0"><span Class="bold">mk-ca-bundle</span> is a command line tool that is shipped as part of every curl and libcurl release (see <a href="http://curl.haxx.se/">http://curl.haxx.se/</a>). It was originally based on the parse-certs script written by Roland Krikava and was later much improved by Guenter Knauf.  This manual page was initially written by Jan Schaumann &lt;jschauma@netmeister.org&gt;. <p class="roffit">
+<p class="level0"><span Class="manpage">curl (1)</span><a name="HISTORY"></a><h2 class="nroffsh">HISTORY</h2>
+<p class="level0"><span Class="bold">mk-ca-bundle</span> is a command line tool that is shipped as part of every curl and libcurl release (see <a href="https://curl.haxx.se/).">https://curl.haxx.se/).</a> It was originally based on the parse-certs script written by Roland Krikava and was later much improved by Guenter Knauf.  This manual page was initially written by Jan Schaumann &lt;jschauma@netmeister.org&gt;. <p class="roffit">
  This HTML page was made with <a href="http://daniel.haxx.se/projects/roffit/">roffit</a>.
 </body></html>
index fbd4b36..d10965b 100644 (file)
Binary files a/docs/mk-ca-bundle.pdf and b/docs/mk-ca-bundle.pdf differ
index 1b6b48f..b1a2980 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = include
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -162,6 +171,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -245,7 +255,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -265,6 +275,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -298,6 +309,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -309,17 +321,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -365,6 +378,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -392,7 +406,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign include/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -687,6 +700,8 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 86e8b78..7c924fc 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 1087121..696cae4 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,9 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = include/curl
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(srcdir)/curlbuild.h.in $(top_srcdir)/mkinstalldirs \
-       $(pkginclude_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -101,7 +108,9 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \
+       $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h curlbuild.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
@@ -173,6 +182,7 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/curlbuild.h.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 pkgincludedir = $(includedir)/curl
 ACLOCAL = @ACLOCAL@
@@ -232,7 +242,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -252,6 +262,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -285,6 +296,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -296,17 +308,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -352,6 +365,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -373,7 +387,7 @@ top_srcdir = @top_srcdir@
 #
 # 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.
+# are also available at https://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
@@ -420,7 +434,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/curl/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign include/curl/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -680,6 +693,8 @@ uninstall-am: uninstall-pkgincludeHEADERS
        mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
        uninstall-am uninstall-pkgincludeHEADERS
 
+.PRECIOUS: Makefile
+
 
 checksrc:
        @@PERL@ $(top_srcdir)/lib/checksrc.pl -Wcurlbuild.h -D$(top_srcdir)/include/curl $(pkginclude_HEADERS) $(EXTRA_DIST)
index 44b1b7e..e0d5c0f 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 /*
  * If you have libcurl problems, all docs and details are found here:
- *   http://curl.haxx.se/libcurl/
+ *   https://curl.haxx.se/libcurl/
  *
  * curl-library mailing list subscription and unsubscription web interface:
- *   http://cool.haxx.se/mailman/listinfo/curl-library/
+ *   https://cool.haxx.se/mailman/listinfo/curl-library/
  */
 
 #include "curlver.h"         /* libcurl version defines   */
@@ -56,7 +56,8 @@
 #include <time.h>
 
 #if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
-#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || defined(__LWIP_OPT_H__))
+#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || \
+      defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H))
 /* The check above prevents the winsock2 inclusion if winsock.h already was
    included, since they can't co-exist without problems */
 #include <winsock2.h>
@@ -112,7 +113,7 @@ typedef void CURL;
 
 #ifndef curl_socket_typedef
 /* socket typedef */
-#if defined(WIN32) && !defined(__LWIP_OPT_H__)
+#if defined(WIN32) && !defined(__LWIP_OPT_H__) && !defined(LWIP_HDR_OPT_H)
 typedef SOCKET curl_socket_t;
 #define CURL_SOCKET_BAD INVALID_SOCKET
 #else
@@ -127,7 +128,8 @@ struct curl_httppost {
   char *name;                       /* pointer to allocated name */
   long namelength;                  /* length of name length */
   char *contents;                   /* pointer to allocated data contents */
-  long contentslength;              /* length of contents field */
+  long contentslength;              /* length of contents field, see also
+                                       CURL_HTTPPOST_LARGE */
   char *buffer;                     /* pointer to allocated buffer contents */
   long bufferlength;                /* length of buffer field */
   char *contenttype;                /* Content-Type */
@@ -136,24 +138,33 @@ struct curl_httppost {
                                        file, this link should link to following
                                        files */
   long flags;                       /* as defined below */
-#define HTTPPOST_FILENAME (1<<0)    /* specified content is a file name */
-#define HTTPPOST_READFILE (1<<1)    /* specified content is a file name */
-#define HTTPPOST_PTRNAME (1<<2)     /* name is only stored pointer
-                                       do not free in formfree */
-#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer
-                                       do not free in formfree */
-#define HTTPPOST_BUFFER (1<<4)      /* upload file from buffer */
-#define HTTPPOST_PTRBUFFER (1<<5)   /* upload file from pointer contents */
-#define HTTPPOST_CALLBACK (1<<6)    /* upload file contents by using the
-                                       regular read callback to get the data
-                                       and pass the given pointer as custom
-                                       pointer */
+
+/* specified content is a file name */
+#define CURL_HTTPPOST_FILENAME (1<<0)
+/* specified content is a file name */
+#define CURL_HTTPPOST_READFILE (1<<1)
+/* name is only stored pointer do not free in formfree */
+#define CURL_HTTPPOST_PTRNAME (1<<2)
+/* contents is only stored pointer do not free in formfree */
+#define CURL_HTTPPOST_PTRCONTENTS (1<<3)
+/* upload file from buffer */
+#define CURL_HTTPPOST_BUFFER (1<<4)
+/* upload file from pointer contents */
+#define CURL_HTTPPOST_PTRBUFFER (1<<5)
+/* upload file contents by using the regular read callback to get the data and
+   pass the given pointer as custom pointer */
+#define CURL_HTTPPOST_CALLBACK (1<<6)
+/* use size in 'contentlen', added in 7.46.0 */
+#define CURL_HTTPPOST_LARGE (1<<7)
 
   char *showfilename;               /* The file name to show. If not set, the
                                        actual file name will be used (if this
                                        is a file part) */
   void *userp;                      /* custom pointer used for
                                        HTTPPOST_CALLBACK posts */
+  curl_off_t contentlen;            /* alternative length of contents
+                                       field. Used if CURL_HTTPPOST_LARGE is
+                                       set. Added in 7.46.0 */
 };
 
 /* This is the CURLOPT_PROGRESSFUNCTION callback proto. It is now considered
@@ -523,6 +534,7 @@ typedef enum {
                                     session will be queued */
   CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not
                                      match */
+  CURLE_SSL_INVALIDCERTSTATUS,   /* 91 - invalid certificate status */
   CURL_LAST /* never use! */
 } CURLcode;
 
@@ -724,6 +736,10 @@ typedef enum {
    servers, a user can this way allow the vulnerability back. */
 #define CURLSSLOPT_ALLOW_BEAST (1<<0)
 
+/* - NO_REVOKE tells libcurl to disable certificate revocation checks for those
+   SSL backends where such behavior is present. */
+#define CURLSSLOPT_NO_REVOKE (1<<1)
+
 #ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                           the obsolete stuff removed! */
 
@@ -813,9 +829,13 @@ typedef enum {
    but 32 */
 #define CURLOPTTYPE_LONG          0
 #define CURLOPTTYPE_OBJECTPOINT   10000
+#define CURLOPTTYPE_STRINGPOINT   10000
 #define CURLOPTTYPE_FUNCTIONPOINT 20000
 #define CURLOPTTYPE_OFF_T         30000
 
+/* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the
+   string options from the header file */
+
 /* name is uppercase CURLOPT_<name>,
    type is one of the defined CURLOPTTYPE_<type>
    number is unique identifier */
@@ -829,6 +849,7 @@ typedef enum {
 /* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
 #define LONG          CURLOPTTYPE_LONG
 #define OBJECTPOINT   CURLOPTTYPE_OBJECTPOINT
+#define STRINGPOINT   CURLOPTTYPE_OBJECTPOINT
 #define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
 #define OFF_T         CURLOPTTYPE_OFF_T
 #define CINIT(name,type,number) CURLOPT_/**/name = type + number
@@ -845,22 +866,22 @@ typedef enum {
   CINIT(WRITEDATA, OBJECTPOINT, 1),
 
   /* The full URL to get/put */
-  CINIT(URL,  OBJECTPOINT, 2),
+  CINIT(URL, STRINGPOINT, 2),
 
   /* Port number to connect to, if other than default. */
   CINIT(PORT, LONG, 3),
 
   /* Name of proxy to use. */
-  CINIT(PROXY, OBJECTPOINT, 4),
+  CINIT(PROXY, STRINGPOINT, 4),
 
   /* "user:password;options" to use when fetching. */
-  CINIT(USERPWD, OBJECTPOINT, 5),
+  CINIT(USERPWD, STRINGPOINT, 5),
 
   /* "user:password" to use with proxy. */
-  CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
+  CINIT(PROXYUSERPWD, STRINGPOINT, 6),
 
   /* Range to get, specified as an ASCII string. */
-  CINIT(RANGE, OBJECTPOINT, 7),
+  CINIT(RANGE, STRINGPOINT, 7),
 
   /* not used */
 
@@ -897,14 +918,14 @@ typedef enum {
   CINIT(POSTFIELDS, OBJECTPOINT, 15),
 
   /* Set the referrer page (needed by some CGIs) */
-  CINIT(REFERER, OBJECTPOINT, 16),
+  CINIT(REFERER, STRINGPOINT, 16),
 
   /* Set the FTP PORT string (interface name, named or numerical IP address)
      Use i.e '-' to use default address. */
-  CINIT(FTPPORT, OBJECTPOINT, 17),
+  CINIT(FTPPORT, STRINGPOINT, 17),
 
   /* Set the User-Agent string (examined by some CGIs) */
-  CINIT(USERAGENT, OBJECTPOINT, 18),
+  CINIT(USERAGENT, STRINGPOINT, 18),
 
   /* If the download receives less than "low speed limit" bytes/second
    * during "low speed time" seconds, the operations is aborted.
@@ -927,7 +948,7 @@ typedef enum {
   CINIT(RESUME_FROM, LONG, 21),
 
   /* Set cookie in request: */
-  CINIT(COOKIE, OBJECTPOINT, 22),
+  CINIT(COOKIE, STRINGPOINT, 22),
 
   /* This points to a linked list of headers, struct curl_slist kind. This
      list is also used for RTSP (in spite of its name) */
@@ -937,10 +958,10 @@ typedef enum {
   CINIT(HTTPPOST, OBJECTPOINT, 24),
 
   /* name of the file keeping your private SSL-certificate */
-  CINIT(SSLCERT, OBJECTPOINT, 25),
+  CINIT(SSLCERT, STRINGPOINT, 25),
 
   /* password for the SSL or SSH private key */
-  CINIT(KEYPASSWD, OBJECTPOINT, 26),
+  CINIT(KEYPASSWD, STRINGPOINT, 26),
 
   /* send TYPE parameter? */
   CINIT(CRLF, LONG, 27),
@@ -954,7 +975,7 @@ typedef enum {
 
   /* point to a file to read the initial cookies from, also enables
      "cookie awareness" */
-  CINIT(COOKIEFILE, OBJECTPOINT, 31),
+  CINIT(COOKIEFILE, STRINGPOINT, 31),
 
   /* What version to specifically try to use.
      See CURL_SSLVERSION defines below. */
@@ -973,9 +994,9 @@ typedef enum {
      HTTP: DELETE, TRACE and others
      FTP: to use a different list command
      */
-  CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
+  CINIT(CUSTOMREQUEST, STRINGPOINT, 36),
 
-  /* HTTP request, for odd commands like DELETE, TRACE and others */
+  /* FILE handle to use instead of stderr */
   CINIT(STDERR, OBJECTPOINT, 37),
 
   /* 38 is not used */
@@ -1032,19 +1053,19 @@ typedef enum {
   CINIT(HTTPPROXYTUNNEL, LONG, 61),
 
   /* Set the interface string to use as outgoing network interface */
-  CINIT(INTERFACE, OBJECTPOINT, 62),
+  CINIT(INTERFACE, STRINGPOINT, 62),
 
   /* Set the krb4/5 security level, this also enables krb4/5 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.  */
-  CINIT(KRBLEVEL, OBJECTPOINT, 63),
+  CINIT(KRBLEVEL, STRINGPOINT, 63),
 
   /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
   CINIT(SSL_VERIFYPEER, LONG, 64),
 
   /* The CApath or CAfile used to validate the peer certificate
      this option is used only if SSL_VERIFYPEER is true */
-  CINIT(CAINFO, OBJECTPOINT, 65),
+  CINIT(CAINFO, STRINGPOINT, 65),
 
   /* 66 = OBSOLETE */
   /* 67 = OBSOLETE */
@@ -1078,10 +1099,10 @@ typedef enum {
 
   /* Set to a file name that contains random data for libcurl to use to
      seed the random engine when doing SSL connects. */
-  CINIT(RANDOM_FILE, OBJECTPOINT, 76),
+  CINIT(RANDOM_FILE, STRINGPOINT, 76),
 
   /* Set to the Entropy Gathering Daemon socket pathname */
-  CINIT(EGDSOCKET, OBJECTPOINT, 77),
+  CINIT(EGDSOCKET, STRINGPOINT, 77),
 
   /* Time-out connect operations after this amount of seconds, if connects are
      OK within this time, then fine... This only aborts the connect phase. */
@@ -1103,10 +1124,10 @@ typedef enum {
 
   /* Specify which file name to write all known cookies in after completed
      operation. Set file name to "-" (dash) to make it go to stdout. */
-  CINIT(COOKIEJAR, OBJECTPOINT, 82),
+  CINIT(COOKIEJAR, STRINGPOINT, 82),
 
   /* Specify which SSL ciphers to use */
-  CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
+  CINIT(SSL_CIPHER_LIST, STRINGPOINT, 83),
 
   /* Specify which HTTP version to use! This must be set to one of the
      CURL_HTTP_VERSION* enums set below. */
@@ -1118,16 +1139,16 @@ typedef enum {
   CINIT(FTP_USE_EPSV, LONG, 85),
 
   /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
-  CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
+  CINIT(SSLCERTTYPE, STRINGPOINT, 86),
 
   /* name of the file keeping your private SSL-key */
-  CINIT(SSLKEY, OBJECTPOINT, 87),
+  CINIT(SSLKEY, STRINGPOINT, 87),
 
   /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
-  CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
+  CINIT(SSLKEYTYPE, STRINGPOINT, 88),
 
   /* crypto engine for the SSL-sub system */
-  CINIT(SSLENGINE, OBJECTPOINT, 89),
+  CINIT(SSLENGINE, STRINGPOINT, 89),
 
   /* set the crypto engine for the SSL-sub system as default
      the param has no meaning...
@@ -1154,7 +1175,7 @@ typedef enum {
 
   /* The CApath directory used to validate the peer certificate
      this option is used only if SSL_VERIFYPEER is true */
-  CINIT(CAPATH, OBJECTPOINT, 97),
+  CINIT(CAPATH, STRINGPOINT, 97),
 
   /* Instruct libcurl to use a smaller receive buffer */
   CINIT(BUFFERSIZE, LONG, 98),
@@ -1174,7 +1195,7 @@ typedef enum {
   /* Set the Accept-Encoding string. Use this to tell a server you would like
      the response to be compressed. Before 7.21.6, this was known as
      CURLOPT_ENCODING */
-  CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102),
+  CINIT(ACCEPT_ENCODING, STRINGPOINT, 102),
 
   /* Set pointer to private data */
   CINIT(PRIVATE, OBJECTPOINT, 103),
@@ -1255,7 +1276,7 @@ typedef enum {
      to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
      a poor attempt to find the user's home directory and check for a .netrc
      file in there. */
-  CINIT(NETRC_FILE, OBJECTPOINT, 118),
+  CINIT(NETRC_FILE, STRINGPOINT, 118),
 
   /* Enable SSL/TLS for FTP, pick one of:
      CURLUSESSL_TRY     - try using SSL, proceed anyway otherwise
@@ -1298,10 +1319,10 @@ typedef enum {
 
   /* zero terminated string for pass on to the FTP server when asked for
      "account" info */
-  CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
+  CINIT(FTP_ACCOUNT, STRINGPOINT, 134),
 
-  /* feed cookies into cookie engine */
-  CINIT(COOKIELIST, OBJECTPOINT, 135),
+  /* feed cookie into cookie engine */
+  CINIT(COOKIELIST, STRINGPOINT, 135),
 
   /* ignore Content-Length */
   CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
@@ -1347,7 +1368,7 @@ typedef enum {
   CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
 
   /* Pointer to command string to send if USER/PASS fails. */
-  CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
+  CINIT(FTP_ALTERNATIVE_TO_USER, STRINGPOINT, 147),
 
   /* callback function for setting socket options */
   CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
@@ -1361,8 +1382,8 @@ typedef enum {
   CINIT(SSH_AUTH_TYPES, LONG, 151),
 
   /* Used by scp/sftp to do public/private key authentication */
-  CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152),
-  CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153),
+  CINIT(SSH_PUBLIC_KEYFILE, STRINGPOINT, 152),
+  CINIT(SSH_PRIVATE_KEYFILE, STRINGPOINT, 153),
 
   /* Send CCC (Clear Command Channel) after authentication */
   CINIT(FTP_SSL_CCC, LONG, 154),
@@ -1386,7 +1407,7 @@ typedef enum {
   CINIT(POSTREDIR, LONG, 161),
 
   /* used by scp/sftp to verify the host's public key */
-  CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162),
+  CINIT(SSH_HOST_PUBLIC_KEY_MD5, STRINGPOINT, 162),
 
   /* Callback function for opening socket (instead of socket(2)). Optionally,
      callback is able change the address or refuse to connect returning
@@ -1406,10 +1427,10 @@ typedef enum {
   CINIT(SEEKDATA, OBJECTPOINT, 168),
 
   /* CRL file */
-  CINIT(CRLFILE, OBJECTPOINT, 169),
+  CINIT(CRLFILE, STRINGPOINT, 169),
 
   /* Issuer certificate */
-  CINIT(ISSUERCERT, OBJECTPOINT, 170),
+  CINIT(ISSUERCERT, STRINGPOINT, 170),
 
   /* (IPv6) Address scope */
   CINIT(ADDRESS_SCOPE, LONG, 171),
@@ -1419,12 +1440,12 @@ typedef enum {
   CINIT(CERTINFO, LONG, 172),
 
   /* "name" and "pwd" to use when fetching. */
-  CINIT(USERNAME, OBJECTPOINT, 173),
-  CINIT(PASSWORD, OBJECTPOINT, 174),
+  CINIT(USERNAME, STRINGPOINT, 173),
+  CINIT(PASSWORD, STRINGPOINT, 174),
 
     /* "name" and "pwd" to use with Proxy when fetching. */
-  CINIT(PROXYUSERNAME, OBJECTPOINT, 175),
-  CINIT(PROXYPASSWORD, OBJECTPOINT, 176),
+  CINIT(PROXYUSERNAME, STRINGPOINT, 175),
+  CINIT(PROXYPASSWORD, STRINGPOINT, 176),
 
   /* Comma separated list of hostnames defining no-proxy zones. These should
      match both hostnames directly, and hostnames within a domain. For
@@ -1433,13 +1454,13 @@ typedef enum {
      implementations of this, .local.com will be considered to be the same as
      local.com. A single * is the only valid wildcard, and effectively
      disables the use of proxy. */
-  CINIT(NOPROXY, OBJECTPOINT, 177),
+  CINIT(NOPROXY, STRINGPOINT, 177),
 
   /* block size for TFTP transfers */
   CINIT(TFTP_BLKSIZE, LONG, 178),
 
   /* Socks Service */
-  CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179),
+  CINIT(SOCKS5_GSSAPI_SERVICE, STRINGPOINT, 179),
 
   /* Socks Service */
   CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),
@@ -1457,7 +1478,7 @@ typedef enum {
   CINIT(REDIR_PROTOCOLS, LONG, 182),
 
   /* set the SSH knownhost file name to use */
-  CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183),
+  CINIT(SSH_KNOWNHOSTS, STRINGPOINT, 183),
 
   /* set the SSH host key callback, must point to a curl_sshkeycallback
      function */
@@ -1467,9 +1488,9 @@ typedef enum {
   CINIT(SSH_KEYDATA, OBJECTPOINT, 185),
 
   /* set the SMTP mail originator */
-  CINIT(MAIL_FROM, OBJECTPOINT, 186),
+  CINIT(MAIL_FROM, STRINGPOINT, 186),
 
-  /* set the SMTP mail receiver(s) */
+  /* set the list of SMTP mail receiver(s) */
   CINIT(MAIL_RCPT, OBJECTPOINT, 187),
 
   /* FTP: send PRET before PASV */
@@ -1479,13 +1500,13 @@ typedef enum {
   CINIT(RTSP_REQUEST, LONG, 189),
 
   /* The RTSP session identifier */
-  CINIT(RTSP_SESSION_ID, OBJECTPOINT, 190),
+  CINIT(RTSP_SESSION_ID, STRINGPOINT, 190),
 
   /* The RTSP stream URI */
-  CINIT(RTSP_STREAM_URI, OBJECTPOINT, 191),
+  CINIT(RTSP_STREAM_URI, STRINGPOINT, 191),
 
   /* The Transport: header to use in RTSP requests */
-  CINIT(RTSP_TRANSPORT, OBJECTPOINT, 192),
+  CINIT(RTSP_TRANSPORT, STRINGPOINT, 192),
 
   /* Manually initialize the client RTSP CSeq for this handle */
   CINIT(RTSP_CLIENT_CSEQ, LONG, 193),
@@ -1523,13 +1544,13 @@ typedef enum {
   CINIT(RESOLVE, OBJECTPOINT, 203),
 
   /* Set a username for authenticated TLS */
-  CINIT(TLSAUTH_USERNAME, OBJECTPOINT, 204),
+  CINIT(TLSAUTH_USERNAME, STRINGPOINT, 204),
 
   /* Set a password for authenticated TLS */
-  CINIT(TLSAUTH_PASSWORD, OBJECTPOINT, 205),
+  CINIT(TLSAUTH_PASSWORD, STRINGPOINT, 205),
 
   /* Set authentication type for authenticated TLS */
-  CINIT(TLSAUTH_TYPE, OBJECTPOINT, 206),
+  CINIT(TLSAUTH_TYPE, STRINGPOINT, 206),
 
   /* Set to 1 to enable the "TE:" header in HTTP requests to ask for
      compressed transfer-encoded responses. Set to 0 to disable the use of TE:
@@ -1552,7 +1573,7 @@ typedef enum {
   CINIT(GSSAPI_DELEGATION, LONG, 210),
 
   /* Set the name servers to use for DNS resolution */
-  CINIT(DNS_SERVERS, OBJECTPOINT, 211),
+  CINIT(DNS_SERVERS, STRINGPOINT, 211),
 
   /* Time-out accept operations (currently for FTP only) after this amount
      of miliseconds. */
@@ -1569,7 +1590,7 @@ typedef enum {
   CINIT(SSL_OPTIONS, LONG, 216),
 
   /* Set the SMTP auth originator */
-  CINIT(MAIL_AUTH, OBJECTPOINT, 217),
+  CINIT(MAIL_AUTH, STRINGPOINT, 217),
 
   /* Enable/disable SASL initial response */
   CINIT(SASL_IR, LONG, 218),
@@ -1580,23 +1601,23 @@ typedef enum {
   CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219),
 
   /* The XOAUTH2 bearer token */
-  CINIT(XOAUTH2_BEARER, OBJECTPOINT, 220),
+  CINIT(XOAUTH2_BEARER, STRINGPOINT, 220),
 
   /* Set the interface string to use as outgoing network
    * interface for DNS requests.
    * Only supported by the c-ares DNS backend */
-  CINIT(DNS_INTERFACE, OBJECTPOINT, 221),
+  CINIT(DNS_INTERFACE, STRINGPOINT, 221),
 
   /* Set the local IPv4 address to use for outgoing DNS requests.
    * Only supported by the c-ares DNS backend */
-  CINIT(DNS_LOCAL_IP4, OBJECTPOINT, 222),
+  CINIT(DNS_LOCAL_IP4, STRINGPOINT, 222),
 
   /* Set the local IPv4 address to use for outgoing DNS requests.
    * Only supported by the c-ares DNS backend */
-  CINIT(DNS_LOCAL_IP6, OBJECTPOINT, 223),
+  CINIT(DNS_LOCAL_IP6, STRINGPOINT, 223),
 
   /* Set authentication options directly */
-  CINIT(LOGIN_OPTIONS, OBJECTPOINT, 224),
+  CINIT(LOGIN_OPTIONS, STRINGPOINT, 224),
 
   /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
   CINIT(SSL_ENABLE_NPN, LONG, 225),
@@ -1617,10 +1638,43 @@ typedef enum {
 
   /* The public key in DER form used to validate the peer public key
      this option is used only if SSL_VERIFYPEER is true */
-  CINIT(PINNEDPUBLICKEY, OBJECTPOINT, 230),
+  CINIT(PINNEDPUBLICKEY, STRINGPOINT, 230),
 
   /* Path to Unix domain socket */
-  CINIT(UNIX_SOCKET_PATH, OBJECTPOINT, 231),
+  CINIT(UNIX_SOCKET_PATH, STRINGPOINT, 231),
+
+  /* Set if we should verify the certificate status. */
+  CINIT(SSL_VERIFYSTATUS, LONG, 232),
+
+  /* Set if we should enable TLS false start. */
+  CINIT(SSL_FALSESTART, LONG, 233),
+
+  /* Do not squash dot-dot sequences */
+  CINIT(PATH_AS_IS, LONG, 234),
+
+  /* Proxy Service Name */
+  CINIT(PROXY_SERVICE_NAME, STRINGPOINT, 235),
+
+  /* Service Name */
+  CINIT(SERVICE_NAME, STRINGPOINT, 236),
+
+  /* Wait/don't wait for pipe/mutex to clarify */
+  CINIT(PIPEWAIT, LONG, 237),
+
+  /* Set the protocol used when curl is given a URL without a protocol */
+  CINIT(DEFAULT_PROTOCOL, STRINGPOINT, 238),
+
+  /* Set stream weight, 1 - 256 (default is 16) */
+  CINIT(STREAM_WEIGHT, LONG, 239),
+
+  /* Set stream dependency on another CURL handle */
+  CINIT(STREAM_DEPENDS, OBJECTPOINT, 240),
+
+  /* Set E-xclusive stream dependency on another CURL handle */
+  CINIT(STREAM_DEPENDS_E, OBJECTPOINT, 241),
+
+  /* Do not send any tftp option requests to the server */
+  CINIT(TFTP_NO_OPTIONS, LONG, 242),
 
   CURLOPT_LASTENTRY /* the last unused */
 } CURLoption;
@@ -1671,11 +1725,17 @@ enum {
                              for us! */
   CURL_HTTP_VERSION_1_0,  /* please use HTTP 1.0 in the request */
   CURL_HTTP_VERSION_1_1,  /* please use HTTP 1.1 in the request */
-  CURL_HTTP_VERSION_2_0,  /* please use HTTP 2.0 in the request */
+  CURL_HTTP_VERSION_2_0,  /* please use HTTP 2 in the request */
+  CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */
 
   CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
 };
 
+/* Convenience definition simple because the name of the version is HTTP/2 and
+   not 2.0. The 2_0 version of the enum name was set while the version was
+   still planned to be 2.0 and we stick to it for compatibility. */
+#define CURL_HTTP_VERSION_2 CURL_HTTP_VERSION_2_0
+
 /*
  * Public API enums for RTSP requests
  */
@@ -1791,6 +1851,7 @@ typedef enum {
   CFINIT(OBSOLETE2),
 
   CFINIT(STREAM),
+  CFINIT(CONTENTLEN), /* added in 7.46.0, provide a curl_off_t length */
 
   CURLFORM_LASTENTRY /* the last unused */
 } CURLformoption;
@@ -2045,12 +2106,13 @@ typedef enum {
   CURLSSLBACKEND_CYASSL = 7,
   CURLSSLBACKEND_SCHANNEL = 8,
   CURLSSLBACKEND_DARWINSSL = 9,
-  CURLSSLBACKEND_AXTLS = 10
+  CURLSSLBACKEND_AXTLS = 10,
+  CURLSSLBACKEND_MBEDTLS = 11
 } curl_sslbackend;
 
 /* Information about the SSL library used and the respective internal SSL
    handle, which can be used to obtain further information regarding the
-   connection. Asked for with CURLINFO_TLS_SESSION. */
+   connection. Asked for with CURLINFO_TLS_SSL_PTR or CURLINFO_TLS_SESSION. */
 struct curl_tlssessioninfo {
   curl_sslbackend backend;
   void *internals;
@@ -2060,6 +2122,7 @@ struct curl_tlssessioninfo {
 #define CURLINFO_LONG     0x200000
 #define CURLINFO_DOUBLE   0x300000
 #define CURLINFO_SLIST    0x400000
+#define CURLINFO_SOCKET   0x500000
 #define CURLINFO_MASK     0x0fffff
 #define CURLINFO_TYPEMASK 0xf00000
 
@@ -2108,9 +2171,11 @@ typedef enum {
   CURLINFO_LOCAL_IP         = CURLINFO_STRING + 41,
   CURLINFO_LOCAL_PORT       = CURLINFO_LONG   + 42,
   CURLINFO_TLS_SESSION      = CURLINFO_SLIST  + 43,
+  CURLINFO_ACTIVESOCKET     = CURLINFO_SOCKET + 44,
+  CURLINFO_TLS_SSL_PTR      = CURLINFO_SLIST  + 45,
   /* Fill in new entries below here! */
 
-  CURLINFO_LASTONE          = 43
+  CURLINFO_LASTONE          = 45
 } CURLINFO;
 
 /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
@@ -2270,6 +2335,8 @@ typedef struct {
 #define CURL_VERSION_GSSAPI       (1<<17) /* Built against a GSS-API library */
 #define CURL_VERSION_KERBEROS5    (1<<18) /* Kerberos V5 auth is supported */
 #define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */
+#define CURL_VERSION_PSL          (1<<20) /* Mozilla's Public Suffix List, used
+                                             for cookie domain verification */
 
  /*
  * NAME curl_version_info()
index f09419a..58323d0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -49,7 +49,7 @@
  *
  * If you think that something actually needs to be changed, adjusted
  * or fixed in this file, then, report it on the libcurl development
- * mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+ * mailing list: https://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
 
 #elif defined(__GNUC__)
 #  if defined(__ILP32__) || \
-      defined(__i386__) || defined(__ppc__) || defined(__arm__) || defined(__sparc__)
+      defined(__i386__) || defined(__ppc__) || defined(__arm__) || \
+      defined(__sparc__) || defined(__mips__) || defined(__sh__)
 #    define CURL_SIZEOF_LONG           4
 #    define CURL_TYPEOF_CURL_OFF_T     long long
 #    define CURL_FORMAT_CURL_OFF_T     "lld"
index 60bc7a7..bbb31a9 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -35,7 +35,7 @@
  *
  * If you think that something actually needs to be changed, adjusted
  * or fixed in this file, then, report it on the libcurl development
- * mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+ * mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/
  *
  * This header file shall only export symbols which are 'curl' or 'CURL'
  * prefixed, otherwise public name space would be polluted.
index e29f195..ffab356 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -35,7 +35,7 @@
  *
  * If you think that something actually needs to be changed, adjusted
  * or fixed in this file, then, report it on the libcurl development
- * mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
+ * mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/
  *
  * This header file shall only export symbols which are 'curl' or 'CURL'
  * prefixed, otherwise public name space would be polluted.
index 7c2ede3..55d21f6 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -47,7 +47,7 @@
  * library is properly built and used.
  *
  * You can find further help on the libcurl development mailing list:
- * http://cool.haxx.se/mailman/listinfo/curl-library/
+ * https://cool.haxx.se/mailman/listinfo/curl-library/
  *
  * NOTE 2
  * ------
index ccdafc1..18c10fe 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
    a script at release-time. This was made its own header file in 7.11.2 */
 
 /* This is the global package copyright */
-#define LIBCURL_COPYRIGHT "1996 - 2015 Daniel Stenberg, <daniel@haxx.se>."
+#define LIBCURL_COPYRIGHT "1996 - 2016 Daniel Stenberg, <daniel@haxx.se>."
 
 /* This is the version number of the libcurl package from which this header
    file origins: */
-#define LIBCURL_VERSION "7.40.0"
+#define LIBCURL_VERSION "7.48.0"
 
 /* The numeric version number is also available "in parts" by using these
    defines: */
 #define LIBCURL_VERSION_MAJOR 7
-#define LIBCURL_VERSION_MINOR 40
+#define LIBCURL_VERSION_MINOR 48
 #define LIBCURL_VERSION_PATCH 0
 
 /* This is the numeric version of the libcurl version number, meant for easier
    This 6-digit (24 bits) 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.
+
+   Note: This define is the full hex number and _does not_ use the
+   CURL_VERSION_BITS() macro since curl's own configure script greps for it
+   and needs it to contain the full number.
 */
-#define LIBCURL_VERSION_NUM 0x072800
+#define LIBCURL_VERSION_NUM 0x073000
 
 /*
  * This is the date and time when the full source package was created. The
  *
  * "Mon Feb 12 11:35:33 UTC 2007"
  */
-#define LIBCURL_TIMESTAMP "Thu Jan  8 08:17:17 UTC 2015"
+#define LIBCURL_TIMESTAMP "Wed Mar 23 06:57:50 UTC 2016"
+
+#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|z)
+#define CURL_AT_LEAST_VERSION(x,y,z) \
+  (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
 
 #endif /* __CURL_CURLVER_H */
index c1e3e76..afc766c 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index cc9e7f5..de8c962 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -57,15 +57,8 @@ CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
 # undef vaprintf
 # define printf curl_mprintf
 # define fprintf curl_mfprintf
-#ifdef CURLDEBUG
-/* When built with CURLDEBUG we define away the sprintf functions since we
-   don't want internal code to be using them */
-# define sprintf sprintf_was_used
-# define vsprintf vsprintf_was_used
-#else
 # define sprintf curl_msprintf
 # define vsprintf curl_mvsprintf
-#endif
 # define snprintf curl_msnprintf
 # define vprintf curl_mvprintf
 # define vfprintf curl_mvfprintf
index 3c4acb0..0fbbd96 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -74,6 +74,11 @@ typedef enum {
    curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
 #define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
 
+/* bitmask bits for CURLMOPT_PIPELINING */
+#define CURLPIPE_NOTHING   0L
+#define CURLPIPE_HTTP1     1L
+#define CURLPIPE_MULTIPLEX 2L
+
 typedef enum {
   CURLMSG_NONE, /* first, not used */
   CURLMSG_DONE, /* This easy handle has completed. 'result' contains
@@ -365,6 +370,12 @@ typedef enum {
   /* maximum number of open connections in total */
   CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13),
 
+   /* This is the server push callback function pointer */
+  CINIT(PUSHFUNCTION, FUNCTIONPOINT, 14),
+
+  /* This is the argument passed to the server push callback */
+  CINIT(PUSHDATA, OBJECTPOINT, 15),
+
   CURLMOPT_LASTENTRY /* the last unused */
 } CURLMoption;
 
@@ -392,6 +403,31 @@ CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
 CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
                                         curl_socket_t sockfd, void *sockp);
 
+
+/*
+ * Name: curl_push_callback
+ *
+ * Desc: This callback gets called when a new stream is being pushed by the
+ *       server. It approves or denies the new stream.
+ *
+ * Returns: CURL_PUSH_OK or CURL_PUSH_DENY.
+ */
+#define CURL_PUSH_OK   0
+#define CURL_PUSH_DENY 1
+
+struct curl_pushheaders;  /* forward declaration only */
+
+CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
+                                        size_t num);
+CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
+                                         const char *name);
+
+typedef int (*curl_push_callback)(CURL *parent,
+                                  CURL *easy,
+                                  size_t num_headers,
+                                  struct curl_pushheaders *headers,
+                                  void *userp);
+
 #ifdef __cplusplus
 } /* end of extern "C" */
 #endif
index ad82ef6..6f0f7f3 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 69d41a2..6ec8bcf 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -218,58 +218,67 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
 
 /* evaluates to true if option takes a char* argument */
 #define _curl_is_string_option(option)                                        \
-  ((option) == CURLOPT_URL ||                                                 \
-   (option) == CURLOPT_PROXY ||                                               \
-   (option) == CURLOPT_INTERFACE ||                                           \
-   (option) == CURLOPT_NETRC_FILE ||                                          \
-   (option) == CURLOPT_USERPWD ||                                             \
-   (option) == CURLOPT_USERNAME ||                                            \
-   (option) == CURLOPT_PASSWORD ||                                            \
-   (option) == CURLOPT_PROXYUSERPWD ||                                        \
-   (option) == CURLOPT_PROXYUSERNAME ||                                       \
-   (option) == CURLOPT_PROXYPASSWORD ||                                       \
-   (option) == CURLOPT_NOPROXY ||                                             \
-   (option) == CURLOPT_ACCEPT_ENCODING ||                                     \
-   (option) == CURLOPT_REFERER ||                                             \
-   (option) == CURLOPT_USERAGENT ||                                           \
+  ((option) == CURLOPT_ACCEPT_ENCODING ||                                     \
+   (option) == CURLOPT_CAINFO ||                                              \
+   (option) == CURLOPT_CAPATH ||                                              \
    (option) == CURLOPT_COOKIE ||                                              \
    (option) == CURLOPT_COOKIEFILE ||                                          \
    (option) == CURLOPT_COOKIEJAR ||                                           \
    (option) == CURLOPT_COOKIELIST ||                                          \
+   (option) == CURLOPT_CRLFILE ||                                             \
+   (option) == CURLOPT_CUSTOMREQUEST ||                                       \
+   (option) == CURLOPT_DEFAULT_PROTOCOL ||                                    \
+   (option) == CURLOPT_DNS_INTERFACE ||                                       \
+   (option) == CURLOPT_DNS_LOCAL_IP4 ||                                       \
+   (option) == CURLOPT_DNS_LOCAL_IP6 ||                                       \
+   (option) == CURLOPT_DNS_SERVERS ||                                         \
+   (option) == CURLOPT_EGDSOCKET ||                                           \
    (option) == CURLOPT_FTPPORT ||                                             \
-   (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER ||                             \
    (option) == CURLOPT_FTP_ACCOUNT ||                                         \
-   (option) == CURLOPT_RANGE ||                                               \
-   (option) == CURLOPT_CUSTOMREQUEST ||                                       \
-   (option) == CURLOPT_SSLCERT ||                                             \
-   (option) == CURLOPT_SSLCERTTYPE ||                                         \
-   (option) == CURLOPT_SSLKEY ||                                              \
-   (option) == CURLOPT_SSLKEYTYPE ||                                          \
+   (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER ||                             \
+   (option) == CURLOPT_INTERFACE ||                                           \
+   (option) == CURLOPT_ISSUERCERT ||                                          \
    (option) == CURLOPT_KEYPASSWD ||                                           \
-   (option) == CURLOPT_SSLENGINE ||                                           \
-   (option) == CURLOPT_CAINFO ||                                              \
-   (option) == CURLOPT_CAPATH ||                                              \
-   (option) == CURLOPT_RANDOM_FILE ||                                         \
-   (option) == CURLOPT_EGDSOCKET ||                                           \
-   (option) == CURLOPT_SSL_CIPHER_LIST ||                                     \
    (option) == CURLOPT_KRBLEVEL ||                                            \
-   (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 ||                             \
-   (option) == CURLOPT_SSH_PUBLIC_KEYFILE ||                                  \
-   (option) == CURLOPT_SSH_PRIVATE_KEYFILE ||                                 \
-   (option) == CURLOPT_CRLFILE ||                                             \
-   (option) == CURLOPT_ISSUERCERT ||                                          \
-   (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE ||                               \
-   (option) == CURLOPT_SSH_KNOWNHOSTS ||                                      \
+   (option) == CURLOPT_LOGIN_OPTIONS ||                                       \
+   (option) == CURLOPT_MAIL_AUTH ||                                           \
    (option) == CURLOPT_MAIL_FROM ||                                           \
+   (option) == CURLOPT_NETRC_FILE ||                                          \
+   (option) == CURLOPT_NOPROXY ||                                             \
+   (option) == CURLOPT_PASSWORD ||                                            \
+   (option) == CURLOPT_PINNEDPUBLICKEY ||                                     \
+   (option) == CURLOPT_PROXY ||                                               \
+   (option) == CURLOPT_PROXYPASSWORD ||                                       \
+   (option) == CURLOPT_PROXYUSERNAME ||                                       \
+   (option) == CURLOPT_PROXYUSERPWD ||                                        \
+   (option) == CURLOPT_PROXY_SERVICE_NAME ||                                  \
+   (option) == CURLOPT_RANDOM_FILE ||                                         \
+   (option) == CURLOPT_RANGE ||                                               \
+   (option) == CURLOPT_REFERER ||                                             \
    (option) == CURLOPT_RTSP_SESSION_ID ||                                     \
    (option) == CURLOPT_RTSP_STREAM_URI ||                                     \
    (option) == CURLOPT_RTSP_TRANSPORT ||                                      \
+   (option) == CURLOPT_SERVICE_NAME ||                                        \
+   (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE ||                               \
+   (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 ||                             \
+   (option) == CURLOPT_SSH_KNOWNHOSTS ||                                      \
+   (option) == CURLOPT_SSH_PRIVATE_KEYFILE ||                                 \
+   (option) == CURLOPT_SSH_PUBLIC_KEYFILE ||                                  \
+   (option) == CURLOPT_SSLCERT ||                                             \
+   (option) == CURLOPT_SSLCERTTYPE ||                                         \
+   (option) == CURLOPT_SSLENGINE ||                                           \
+   (option) == CURLOPT_SSLKEY ||                                              \
+   (option) == CURLOPT_SSLKEYTYPE ||                                          \
+   (option) == CURLOPT_SSL_CIPHER_LIST ||                                     \
+   (option) == CURLOPT_TLSAUTH_PASSWORD ||                                    \
+   (option) == CURLOPT_TLSAUTH_TYPE ||                                        \
+   (option) == CURLOPT_TLSAUTH_USERNAME ||                                    \
+   (option) == CURLOPT_UNIX_SOCKET_PATH ||                                    \
+   (option) == CURLOPT_URL ||                                                 \
+   (option) == CURLOPT_USERAGENT ||                                           \
+   (option) == CURLOPT_USERNAME ||                                            \
+   (option) == CURLOPT_USERPWD ||                                             \
    (option) == CURLOPT_XOAUTH2_BEARER ||                                      \
-   (option) == CURLOPT_DNS_SERVERS ||                                         \
-   (option) == CURLOPT_DNS_INTERFACE ||                                       \
-   (option) == CURLOPT_DNS_LOCAL_IP4 ||                                       \
-   (option) == CURLOPT_DNS_LOCAL_IP6 ||                                       \
-   (option) == CURLOPT_LOGIN_OPTIONS ||                                       \
    0)
 
 /* evaluates to true if option takes a curl_write_callback argument */
@@ -285,21 +294,22 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
 
 /* evaluates to true if option takes a data argument to pass to a callback */
 #define _curl_is_cb_data_option(option)                                       \
-  ((option) == CURLOPT_WRITEDATA ||                                           \
-   (option) == CURLOPT_READDATA ||                                            \
+  ((option) == CURLOPT_CHUNK_DATA ||                                          \
+   (option) == CURLOPT_CLOSESOCKETDATA ||                                     \
+   (option) == CURLOPT_DEBUGDATA ||                                           \
+   (option) == CURLOPT_FNMATCH_DATA ||                                        \
+   (option) == CURLOPT_HEADERDATA ||                                          \
+   (option) == CURLOPT_INTERLEAVEDATA ||                                      \
    (option) == CURLOPT_IOCTLDATA ||                                           \
-   (option) == CURLOPT_SOCKOPTDATA ||                                         \
    (option) == CURLOPT_OPENSOCKETDATA ||                                      \
+   (option) == CURLOPT_PRIVATE ||                                             \
    (option) == CURLOPT_PROGRESSDATA ||                                        \
-   (option) == CURLOPT_HEADERDATA ||                                         \
-   (option) == CURLOPT_DEBUGDATA ||                                           \
-   (option) == CURLOPT_SSL_CTX_DATA ||                                        \
+   (option) == CURLOPT_READDATA ||                                            \
    (option) == CURLOPT_SEEKDATA ||                                            \
-   (option) == CURLOPT_PRIVATE ||                                             \
+   (option) == CURLOPT_SOCKOPTDATA ||                                         \
    (option) == CURLOPT_SSH_KEYDATA ||                                         \
-   (option) == CURLOPT_INTERLEAVEDATA ||                                      \
-   (option) == CURLOPT_CHUNK_DATA ||                                          \
-   (option) == CURLOPT_FNMATCH_DATA ||                                        \
+   (option) == CURLOPT_SSL_CTX_DATA ||                                        \
+   (option) == CURLOPT_WRITEDATA ||                                           \
    0)
 
 /* evaluates to true if option takes a POST data argument (void* or char*) */
@@ -310,13 +320,15 @@ _CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
 
 /* evaluates to true if option takes a struct curl_slist * argument */
 #define _curl_is_slist_option(option)                                         \
-  ((option) == CURLOPT_HTTPHEADER ||                                          \
-   (option) == CURLOPT_HTTP200ALIASES ||                                      \
-   (option) == CURLOPT_QUOTE ||                                               \
+  ((option) == CURLOPT_HTTP200ALIASES ||                                      \
+   (option) == CURLOPT_HTTPHEADER ||                                          \
+   (option) == CURLOPT_MAIL_RCPT ||                                           \
    (option) == CURLOPT_POSTQUOTE ||                                           \
    (option) == CURLOPT_PREQUOTE ||                                            \
+   (option) == CURLOPT_PROXYHEADER ||                                         \
+   (option) == CURLOPT_QUOTE ||                                               \
+   (option) == CURLOPT_RESOLVE ||                                             \
    (option) == CURLOPT_TELNETOPTIONS ||                                       \
-   (option) == CURLOPT_MAIL_RCPT ||                                           \
    0)
 
 /* groups of curl_easy_getinfo infos that take the same type of argument */
index 377bb86..59990a1 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-11-20.07; # UTC
+scriptversion=2014-09-12.12; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='  '
 nl='
 '
-IFS=" ""       $nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@ mvprog=${MVPROG-mv}
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -97,7 +82,7 @@ dir_arg=
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@ while test $# -ne 0; do
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-       shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-       case $mode in
-         *' '* | *'    '* | *'
-'*       | *'*'* | *'?'* | *'['*)
-           echo "$0: invalid mode: $mode" >&2
-           exit 1;;
-       esac
-       shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-       shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-       # Protect names problematic for 'test' and other utilities.
-       case $dst_arg in
-         -* | [=\(\)!]) dst_arg=./$dst_arg;;
-       esac
-       shift;;
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
 
-    -T) no_target_directory=true;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)        shift
-       break;;
+    --) shift
+        break;;
 
-    -*)        echo "$0: invalid option: $1" >&2
-       exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -208,6 +204,15 @@ if test $# -eq 0; then
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
   do_exit='(exit $ret); exit $ret'
   trap "ret=129; $do_exit" 1
   trap "ret=130; $do_exit" 2
@@ -223,16 +228,16 @@ if test -z "$dir_arg"; then
 
     *[0-7])
       if test -z "$stripcmd"; then
-       u_plus_rw=
+        u_plus_rw=
       else
-       u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-       u_plus_rw=
+        u_plus_rw=
       else
-       u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -269,41 +274,15 @@ do
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-       echo "$0: $dst_arg: Is a directory" >&2
-       exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
       dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-       (dirname "$dst") 2>/dev/null ||
-       expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-            X"$dst" : 'X\(//\)[^/]' \| \
-            X"$dst" : 'X\(//\)$' \| \
-            X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-       echo X"$dst" |
-           sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\/\)[^/].*/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\/\)$/{
-                  s//\1/
-                  q
-                }
-                /^X\(\/\).*/{
-                  s//\1/
-                  q
-                }
-                s/.*/./; q'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
@@ -314,74 +293,81 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-       # Create intermediate dirs using mode 755 as modified by the umask.
-       # This is like FreeBSD 'install' as of 1997-10-28.
-       umask=`umask`
-       case $stripcmd.$umask in
-         # Optimize common cases.
-         *[2367][2367]) mkdir_umask=$umask;;
-         .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-         *[0-7])
-           mkdir_umask=`expr $umask + 22 \
-             - $umask % 100 % 40 + $umask % 20 \
-             - $umask % 10 % 4 + $umask % 2
-           `;;
-         *) mkdir_umask=$umask,go-w;;
-       esac
-
-       # With -d, create the new directory with the user-specified mode.
-       # Otherwise, rely on $mkdir_umask.
-       if test -n "$dir_arg"; then
-         mkdir_mode=-m$mode
-       else
-         mkdir_mode=
-       fi
-
-       posix_mkdir=false
-       case $umask in
-         *[123567][0-7][0-7])
-           # POSIX mkdir -p sets u+wx bits regardless of umask, which
-           # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-           ;;
-         *)
-           tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-           trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-           if (umask $mkdir_umask &&
-               exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-           then
-             if test -z "$dir_arg" || {
-                  # Check for POSIX incompatibilities with -m.
-                  # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                  # other-writable bit of parent directory when it shouldn't.
-                  # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                  ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                  case $ls_ld_tmpdir in
-                    d????-?r-*) different_mode=700;;
-                    d????-?--*) different_mode=755;;
-                    *) false;;
-                  esac &&
-                  $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                    ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                    test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                  }
-                }
-             then posix_mkdir=:
-             fi
-             rmdir "$tmpdir/d" "$tmpdir"
-           else
-             # Remove any dirs left behind by ancient mkdir implementations.
-             rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-           fi
-           trap '' 0;;
-       esac;;
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            # $RANDOM is not portable (e.g. dash);  use it when possible to
+            # lower collision chance
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
+            # create the $tmpdir first (and fail if unsuccessful) to make sure
+            # that nobody tries to guess the $tmpdir name.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-       umask $mkdir_umask &&
-       $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -391,53 +377,51 @@ do
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-       /*) prefix='/';;
-       [-=\(\)!]*) prefix='./';;
-       *)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-       test X"$d" = X && continue
-
-       prefix=$prefix$d
-       if test -d "$prefix"; then
-         prefixes=
-       else
-         if $posix_mkdir; then
-           (umask=$mkdir_umask &&
-            $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-           # Don't fail if two instances are running concurrently.
-           test -d "$prefix" || exit 1
-         else
-           case $prefix in
-             *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-             *) qprefix=$prefix;;
-           esac
-           prefixes="$prefixes '$qprefix'"
-         fi
-       fi
-       prefix=$prefix/
+        test X"$d" = X && continue
+
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-       # Don't fail if two instances are running concurrently.
-       (umask $mkdir_umask &&
-        eval "\$doit_exec \$mkdirprog $prefixes") ||
-         test -d "$dstdir" || exit 1
-       obsolete_mkdir_used=true
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -472,15 +456,12 @@ do
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"    2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -493,24 +474,24 @@ do
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-       # Now remove or move aside any old file at destination location.
-       # We try this two ways since rm can't unlink itself on some
-       # systems and the destination file might be busy for other
-       # reasons.  In this case, the final cleanup might fail but the new
-       # file should still install successfully.
-       {
-         test ! -f "$dst" ||
-         $doit $rmcmd -f "$dst" 2>/dev/null ||
-         { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-           { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-         } ||
-         { echo "$0: cannot unlink or rename $dst" >&2
-           (exit 1); exit 1
-         }
-       } &&
-
-       # Now rename the file to the real destination.
-       $doit $mvcmd "$dsttmp" "$dst"
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
+
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
index e7886ac..49a3409 100644 (file)
@@ -98,4 +98,7 @@ if(WIN32)
   endif()
 endif()
 
-install(TARGETS ${LIB_NAME} DESTINATION lib)
+install(TARGETS ${LIB_NAME}
+  ARCHIVE DESTINATION lib
+  LIBRARY DESTINATION lib
+  RUNTIME DESTINATION bin)
index 14f5ac8..b5928b8 100644 (file)
@@ -1,6 +1,28 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2005 - 2009, Gisle Vanem <gvanem@yahoo.no>.
+# Copyright (C) 2005 - 2015, 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 https://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.
+#
+#***************************************************************************
+
 #
 #  Watcom / OpenWatcom / Win32 makefile for libcurl.
-#  G. Vanem <gvanem@broadpark.no>
 #
 
 .ERASE
@@ -101,7 +123,7 @@ ZLIB_ROOT = ../../zlib-1.2.8
 !ifdef %libssh2_root
 LIBSSH2_ROOT = $(%libssh2_root)
 !else
-LIBSSH2_ROOT = ../../libssh2-1.4.3
+LIBSSH2_ROOT = ../../libssh2-1.5.0
 !endif
 
 !ifdef %librtmp_root
@@ -113,7 +135,7 @@ LIBRTMP_ROOT = ../../rtmpdump-2.3
 !ifdef %openssl_root
 OPENSSL_ROOT = $(%openssl_root)
 !else
-OPENSSL_ROOT = ../../openssl-0.9.8zc
+OPENSSL_ROOT = ../../openssl-1.0.2a
 !endif
 
 !ifdef %ares_root
index 6dffbd9..6f5317a 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
 ###########################################################################
 AUTOMAKE_OPTIONS = foreign nostdinc
 
-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 config-win32.h     \
@@ -32,9 +28,9 @@ EXTRA_DIST = Makefile.b32 Makefile.m32 Makefile.vc6 config-win32.h    \
  makefile.dj config-dos.h libcurl.plist libcurl.rc config-amigaos.h    \
  makefile.amiga Makefile.netware nwlib.c nwos.c config-win32ce.h       \
  config-os400.h setup-os400.h config-symbian.h Makefile.Watcom         \
- config-tpf.h $(DOCS) mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST)   \
+ config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST)   \
  firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl       \
- objnames-test08.sh objnames-test10.sh objnames.inc
+ objnames-test08.sh objnames-test10.sh objnames.inc checksrc.whitelist
 
 lib_LTLIBRARIES = libcurl.la
 
@@ -84,9 +80,9 @@ if SONAME_BUMP
 #
 # This conditional soname bump SHOULD be removed at next "proper" bump.
 #
-VERSIONINFO=-version-info 8:0:3
+VERSIONINFO=-version-info 9:0:4
 else
-VERSIONINFO=-version-info 7:0:3
+VERSIONINFO=-version-info 8:0:4
 endif
 
 # This flag accepts an argument of the form current[:revision[:age]]. So,
index b9531fd..1914a94 100644 (file)
@@ -1,13 +1,33 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2000, Jaepil Kim, <pit@paradise.net.nz>.
+# Copyright (C) 2001 - 2015, 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 https://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.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
 #
-#  Initially written by Jaepil Kim, pit@paradise.net.nz
 ############################################################
 
 !if "$(__MAKE__)" == ""
@@ -27,7 +47,7 @@ ZLIB_PATH = ..\..\zlib-1.2.8
 
 # Edit the path below to point to the base of your OpenSSL package.
 !ifndef OPENSSL_PATH
-OPENSSL_PATH = ..\..\openssl-0.9.8zc
+OPENSSL_PATH = ..\..\openssl-1.0.2a
 !endif
 
 # Set libcurl static lib, dll and import lib
@@ -74,7 +94,7 @@ LINKLIB  = $(LINKLIB) $(ZLIB_PATH)\zlib.lib
 
 # SSL support is enabled setting WITH_SSL=1
 !ifdef WITH_SSL
-DEFINES  = $(DEFINES) -DUSE_SSLEAY
+DEFINES  = $(DEFINES) -DUSE_OPENSSL
 INCDIRS  = $(INCDIRS);$(OPENSSL_PATH)\inc32;$(OPENSSL_PATH)\inc32\openssl
 LINKLIB  = $(LINKLIB) $(OPENSSL_PATH)\out32\ssleay32.lib $(OPENSSL_PATH)\out32\libeay32.lib
 !endif
index 5947cf0..2c21bfa 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
 ###########################################################################
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -110,10 +120,6 @@ host_triplet = @host@
 @USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_6 = -DCURL_STATICLIB
 @DOING_CURL_SYMBOL_HIDING_TRUE@am__append_7 = -DCURL_HIDDEN_SYMBOLS
 @DOING_CURL_SYMBOL_HIDING_TRUE@am__append_8 = $(CFLAG_CURL_SYMBOL_HIDING)
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(srcdir)/curl_config.h.in \
-       $(top_srcdir)/mkinstalldirs $(srcdir)/libcurl.vers.in \
-       $(top_srcdir)/depcomp
 subdir = lib
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
@@ -135,7 +141,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = curl_config.h $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES = libcurl.vers
 CONFIG_CLEAN_VPATH_FILES =
@@ -212,19 +219,19 @@ am__objects_1 = libcurl_la-file.lo libcurl_la-timeval.lo \
        libcurl_la-curl_ntlm_wb.lo libcurl_la-curl_ntlm_core.lo \
        libcurl_la-curl_ntlm_msgs.lo libcurl_la-curl_sasl.lo \
        libcurl_la-curl_multibyte.lo libcurl_la-hostcheck.lo \
-       libcurl_la-bundles.lo libcurl_la-conncache.lo \
-       libcurl_la-pipeline.lo libcurl_la-dotdot.lo \
-       libcurl_la-x509asn1.lo libcurl_la-http2.lo \
-       libcurl_la-curl_sasl_sspi.lo libcurl_la-smb.lo \
-       libcurl_la-curl_sasl_gssapi.lo libcurl_la-curl_endian.lo
+       libcurl_la-conncache.lo libcurl_la-pipeline.lo \
+       libcurl_la-dotdot.lo libcurl_la-x509asn1.lo \
+       libcurl_la-http2.lo libcurl_la-curl_sasl_sspi.lo \
+       libcurl_la-smb.lo libcurl_la-curl_sasl_gssapi.lo \
+       libcurl_la-curl_endian.lo libcurl_la-curl_des.lo
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_2 = vtls/libcurl_la-openssl.lo vtls/libcurl_la-gtls.lo \
        vtls/libcurl_la-vtls.lo vtls/libcurl_la-nss.lo \
        vtls/libcurl_la-polarssl.lo \
        vtls/libcurl_la-polarssl_threadlock.lo \
        vtls/libcurl_la-axtls.lo vtls/libcurl_la-cyassl.lo \
-       vtls/libcurl_la-curl_schannel.lo \
-       vtls/libcurl_la-curl_darwinssl.lo vtls/libcurl_la-gskit.lo
+       vtls/libcurl_la-schannel.lo vtls/libcurl_la-darwinssl.lo \
+       vtls/libcurl_la-gskit.lo vtls/libcurl_la-mbedtls.lo
 am__objects_3 = $(am__objects_1) $(am__objects_2)
 am__objects_4 =
 am__objects_5 = $(am__objects_4) $(am__objects_4)
@@ -282,19 +289,19 @@ am__objects_6 = libcurlu_la-file.lo libcurlu_la-timeval.lo \
        libcurlu_la-curl_ntlm.lo libcurlu_la-curl_ntlm_wb.lo \
        libcurlu_la-curl_ntlm_core.lo libcurlu_la-curl_ntlm_msgs.lo \
        libcurlu_la-curl_sasl.lo libcurlu_la-curl_multibyte.lo \
-       libcurlu_la-hostcheck.lo libcurlu_la-bundles.lo \
-       libcurlu_la-conncache.lo libcurlu_la-pipeline.lo \
-       libcurlu_la-dotdot.lo libcurlu_la-x509asn1.lo \
-       libcurlu_la-http2.lo libcurlu_la-curl_sasl_sspi.lo \
-       libcurlu_la-smb.lo libcurlu_la-curl_sasl_gssapi.lo \
-       libcurlu_la-curl_endian.lo
+       libcurlu_la-hostcheck.lo libcurlu_la-conncache.lo \
+       libcurlu_la-pipeline.lo libcurlu_la-dotdot.lo \
+       libcurlu_la-x509asn1.lo libcurlu_la-http2.lo \
+       libcurlu_la-curl_sasl_sspi.lo libcurlu_la-smb.lo \
+       libcurlu_la-curl_sasl_gssapi.lo libcurlu_la-curl_endian.lo \
+       libcurlu_la-curl_des.lo
 am__objects_7 = vtls/libcurlu_la-openssl.lo vtls/libcurlu_la-gtls.lo \
        vtls/libcurlu_la-vtls.lo vtls/libcurlu_la-nss.lo \
        vtls/libcurlu_la-polarssl.lo \
        vtls/libcurlu_la-polarssl_threadlock.lo \
        vtls/libcurlu_la-axtls.lo vtls/libcurlu_la-cyassl.lo \
-       vtls/libcurlu_la-curl_schannel.lo \
-       vtls/libcurlu_la-curl_darwinssl.lo vtls/libcurlu_la-gskit.lo
+       vtls/libcurlu_la-schannel.lo vtls/libcurlu_la-darwinssl.lo \
+       vtls/libcurlu_la-gskit.lo vtls/libcurlu_la-mbedtls.lo
 am__objects_8 = $(am__objects_6) $(am__objects_7)
 am_libcurlu_la_OBJECTS = $(am__objects_8) $(am__objects_5)
 libcurlu_la_OBJECTS = $(am_libcurlu_la_OBJECTS)
@@ -363,6 +370,9 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+       $(srcdir)/curl_config.h.in $(srcdir)/libcurl.vers.in \
+       $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -423,7 +433,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -445,6 +455,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -478,6 +489,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -489,17 +501,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -545,6 +558,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -562,11 +576,11 @@ top_srcdir = @top_srcdir@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -577,19 +591,15 @@ top_srcdir = @top_srcdir@
 #
 ###########################################################################
 AUTOMAKE_OPTIONS = foreign nostdinc
-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 config-win32.h     \
  config-win32ce.h config-riscos.h config-mac.h curl_config.h.in                \
  makefile.dj config-dos.h libcurl.plist libcurl.rc config-amigaos.h    \
  makefile.amiga Makefile.netware nwlib.c nwos.c config-win32ce.h       \
  config-os400.h setup-os400.h config-symbian.h Makefile.Watcom         \
- config-tpf.h $(DOCS) mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST)   \
+ config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST)   \
  firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl       \
- objnames-test08.sh objnames-test10.sh objnames.inc
+ objnames-test08.sh objnames-test10.sh objnames.inc checksrc.whitelist
 
 lib_LTLIBRARIES = libcurl.la
 @BUILD_UNITTESTS_FALSE@noinst_LTLIBRARIES = 
@@ -623,7 +633,7 @@ lib_LTLIBRARIES = libcurl.la
 AM_CPPFLAGS = -I$(top_builddir)/include/curl -I$(top_builddir)/include \
        -I$(top_srcdir)/include -I$(top_builddir)/lib \
        -I$(top_srcdir)/lib $(am__append_1) -DBUILDING_LIBCURL
-@SONAME_BUMP_FALSE@VERSIONINFO = -version-info 7:0:3
+@SONAME_BUMP_FALSE@VERSIONINFO = -version-info 8:0:4
 
 #
 # Bumping of SONAME conditionally may seem like a weird thing to do, and yeah
@@ -634,7 +644,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include/curl -I$(top_builddir)/include \
 #
 # This conditional soname bump SHOULD be removed at next "proper" bump.
 #
-@SONAME_BUMP_TRUE@VERSIONINFO = -version-info 8:0:3
+@SONAME_BUMP_TRUE@VERSIONINFO = -version-info 9:0:4
 AM_LDFLAGS = 
 AM_CFLAGS = 
 libcurl_la_CPPFLAGS_EXTRA = $(am__append_6) $(am__append_7)
@@ -649,11 +659,13 @@ libcurlu_la_LDFLAGS = $(AM_LDFLAGS) -static $(LIBCURL_LIBS)
 libcurlu_la_CFLAGS = $(AM_CFLAGS)
 LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \
   vtls/polarssl.c vtls/polarssl_threadlock.c vtls/axtls.c               \
-  vtls/cyassl.c vtls/curl_schannel.c vtls/curl_darwinssl.c vtls/gskit.c
+  vtls/cyassl.c vtls/schannel.c vtls/darwinssl.c vtls/gskit.c           \
+  vtls/mbedtls.c
 
 LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \
   vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h vtls/axtls.h   \
-  vtls/cyassl.h vtls/curl_schannel.h vtls/curl_darwinssl.h vtls/gskit.h
+  vtls/cyassl.h vtls/schannel.h vtls/darwinssl.h vtls/gskit.h           \
+  vtls/mbedtls.h
 
 LIB_CFILES = 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       \
@@ -671,8 +683,9 @@ LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
   http_negotiate_sspi.c http_proxy.c non-ascii.c asyn-ares.c            \
   asyn-thread.c curl_gssapi.c curl_ntlm.c curl_ntlm_wb.c                \
   curl_ntlm_core.c curl_ntlm_msgs.c curl_sasl.c curl_multibyte.c        \
-  hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c      \
-  http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c
+  hostcheck.c conncache.c pipeline.c dotdot.c x509asn1.c                \
+  http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c       \
+  curl_des.c
 
 LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
   formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
@@ -688,9 +701,10 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
   rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
   curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
   curl_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
-  curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h bundles.h   \
+  curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h             \
   conncache.h curl_setup_once.h multihandle.h setup-vms.h pipeline.h    \
-  dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h
+  dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h  \
+  curl_printf.h
 
 LIB_RCFILES = libcurl.rc
 CSOURCES = $(LIB_CFILES) $(LIB_VTLS_CFILES)
@@ -716,7 +730,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign lib/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -725,7 +738,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -820,12 +833,14 @@ vtls/libcurl_la-axtls.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
 vtls/libcurl_la-cyassl.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurl_la-curl_schannel.lo: vtls/$(am__dirstamp) \
+vtls/libcurl_la-schannel.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurl_la-curl_darwinssl.lo: vtls/$(am__dirstamp) \
+vtls/libcurl_la-darwinssl.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
 vtls/libcurl_la-gskit.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
+vtls/libcurl_la-mbedtls.lo: vtls/$(am__dirstamp) \
+       vtls/$(DEPDIR)/$(am__dirstamp)
 
 libcurl.la: $(libcurl_la_OBJECTS) $(libcurl_la_DEPENDENCIES) $(EXTRA_libcurl_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(libcurl_la_LINK) -rpath $(libdir) $(libcurl_la_OBJECTS) $(libcurl_la_LIBADD) $(LIBS)
@@ -845,12 +860,14 @@ vtls/libcurlu_la-axtls.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
 vtls/libcurlu_la-cyassl.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurlu_la-curl_schannel.lo: vtls/$(am__dirstamp) \
+vtls/libcurlu_la-schannel.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
-vtls/libcurlu_la-curl_darwinssl.lo: vtls/$(am__dirstamp) \
+vtls/libcurlu_la-darwinssl.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
 vtls/libcurlu_la-gskit.lo: vtls/$(am__dirstamp) \
        vtls/$(DEPDIR)/$(am__dirstamp)
+vtls/libcurlu_la-mbedtls.lo: vtls/$(am__dirstamp) \
+       vtls/$(DEPDIR)/$(am__dirstamp)
 
 libcurlu.la: $(libcurlu_la_OBJECTS) $(libcurlu_la_DEPENDENCIES) $(EXTRA_libcurlu_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(libcurlu_la_LINK) $(am_libcurlu_la_rpath) $(libcurlu_la_OBJECTS) $(libcurlu_la_LIBADD) $(LIBS)
@@ -867,12 +884,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-asyn-ares.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-asyn-thread.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-base64.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-bundles.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-conncache.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-connect.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-content_encoding.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cookie.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_addrinfo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_des.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_endian.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_fnmatch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_gethostname.Plo@am__quote@
@@ -971,12 +988,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-asyn-ares.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-asyn-thread.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-base64.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-bundles.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-conncache.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-connect.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-content_encoding.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cookie.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_addrinfo.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_des.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_endian.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_fnmatch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_gethostname.Plo@am__quote@
@@ -1072,26 +1089,28 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-wildcard.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-x509asn1.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-axtls.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-curl_darwinssl.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-curl_schannel.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-cyassl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-darwinssl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gskit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-gtls.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-nss.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-openssl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-polarssl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-polarssl_threadlock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-schannel.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurl_la-vtls.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-axtls.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-curl_darwinssl.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-curl_schannel.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-cyassl.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-darwinssl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gskit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-gtls.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-nss.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-openssl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-polarssl.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-polarssl_threadlock.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-schannel.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@vtls/$(DEPDIR)/libcurlu_la-vtls.Plo@am__quote@
 
 .c.o:
@@ -1776,13 +1795,6 @@ libcurl_la-hostcheck.lo: hostcheck.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-hostcheck.lo `test -f 'hostcheck.c' || echo '$(srcdir)/'`hostcheck.c
 
-libcurl_la-bundles.lo: bundles.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-bundles.lo -MD -MP -MF $(DEPDIR)/libcurl_la-bundles.Tpo -c -o libcurl_la-bundles.lo `test -f 'bundles.c' || echo '$(srcdir)/'`bundles.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-bundles.Tpo $(DEPDIR)/libcurl_la-bundles.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='bundles.c' object='libcurl_la-bundles.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-bundles.lo `test -f 'bundles.c' || echo '$(srcdir)/'`bundles.c
-
 libcurl_la-conncache.lo: conncache.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-conncache.lo -MD -MP -MF $(DEPDIR)/libcurl_la-conncache.Tpo -c -o libcurl_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-conncache.Tpo $(DEPDIR)/libcurl_la-conncache.Plo
@@ -1846,6 +1858,13 @@ libcurl_la-curl_endian.lo: curl_endian.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-curl_endian.lo `test -f 'curl_endian.c' || echo '$(srcdir)/'`curl_endian.c
 
+libcurl_la-curl_des.lo: curl_des.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-curl_des.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_des.Tpo -c -o libcurl_la-curl_des.lo `test -f 'curl_des.c' || echo '$(srcdir)/'`curl_des.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_des.Tpo $(DEPDIR)/libcurl_la-curl_des.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='curl_des.c' object='libcurl_la-curl_des.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-curl_des.lo `test -f 'curl_des.c' || echo '$(srcdir)/'`curl_des.c
+
 vtls/libcurl_la-openssl.lo: vtls/openssl.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-openssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-openssl.Tpo -c -o vtls/libcurl_la-openssl.lo `test -f 'vtls/openssl.c' || echo '$(srcdir)/'`vtls/openssl.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-openssl.Tpo vtls/$(DEPDIR)/libcurl_la-openssl.Plo
@@ -1902,19 +1921,19 @@ vtls/libcurl_la-cyassl.lo: vtls/cyassl.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-cyassl.lo `test -f 'vtls/cyassl.c' || echo '$(srcdir)/'`vtls/cyassl.c
 
-vtls/libcurl_la-curl_schannel.lo: vtls/curl_schannel.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-curl_schannel.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-curl_schannel.Tpo -c -o vtls/libcurl_la-curl_schannel.lo `test -f 'vtls/curl_schannel.c' || echo '$(srcdir)/'`vtls/curl_schannel.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-curl_schannel.Tpo vtls/$(DEPDIR)/libcurl_la-curl_schannel.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/curl_schannel.c' object='vtls/libcurl_la-curl_schannel.lo' libtool=yes @AMDEPBACKSLASH@
+vtls/libcurl_la-schannel.lo: vtls/schannel.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-schannel.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-schannel.Tpo -c -o vtls/libcurl_la-schannel.lo `test -f 'vtls/schannel.c' || echo '$(srcdir)/'`vtls/schannel.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-schannel.Tpo vtls/$(DEPDIR)/libcurl_la-schannel.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/schannel.c' object='vtls/libcurl_la-schannel.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-curl_schannel.lo `test -f 'vtls/curl_schannel.c' || echo '$(srcdir)/'`vtls/curl_schannel.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-schannel.lo `test -f 'vtls/schannel.c' || echo '$(srcdir)/'`vtls/schannel.c
 
-vtls/libcurl_la-curl_darwinssl.lo: vtls/curl_darwinssl.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-curl_darwinssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-curl_darwinssl.Tpo -c -o vtls/libcurl_la-curl_darwinssl.lo `test -f 'vtls/curl_darwinssl.c' || echo '$(srcdir)/'`vtls/curl_darwinssl.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-curl_darwinssl.Tpo vtls/$(DEPDIR)/libcurl_la-curl_darwinssl.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/curl_darwinssl.c' object='vtls/libcurl_la-curl_darwinssl.lo' libtool=yes @AMDEPBACKSLASH@
+vtls/libcurl_la-darwinssl.lo: vtls/darwinssl.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-darwinssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-darwinssl.Tpo -c -o vtls/libcurl_la-darwinssl.lo `test -f 'vtls/darwinssl.c' || echo '$(srcdir)/'`vtls/darwinssl.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-darwinssl.Tpo vtls/$(DEPDIR)/libcurl_la-darwinssl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/darwinssl.c' object='vtls/libcurl_la-darwinssl.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-curl_darwinssl.lo `test -f 'vtls/curl_darwinssl.c' || echo '$(srcdir)/'`vtls/curl_darwinssl.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-darwinssl.lo `test -f 'vtls/darwinssl.c' || echo '$(srcdir)/'`vtls/darwinssl.c
 
 vtls/libcurl_la-gskit.lo: vtls/gskit.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-gskit.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-gskit.Tpo -c -o vtls/libcurl_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
@@ -1923,6 +1942,13 @@ vtls/libcurl_la-gskit.lo: vtls/gskit.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
 
+vtls/libcurl_la-mbedtls.lo: vtls/mbedtls.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT vtls/libcurl_la-mbedtls.lo -MD -MP -MF vtls/$(DEPDIR)/libcurl_la-mbedtls.Tpo -c -o vtls/libcurl_la-mbedtls.lo `test -f 'vtls/mbedtls.c' || echo '$(srcdir)/'`vtls/mbedtls.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurl_la-mbedtls.Tpo vtls/$(DEPDIR)/libcurl_la-mbedtls.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/mbedtls.c' object='vtls/libcurl_la-mbedtls.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurl_la-mbedtls.lo `test -f 'vtls/mbedtls.c' || echo '$(srcdir)/'`vtls/mbedtls.c
+
 libcurlu_la-file.lo: file.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-file.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-file.Tpo -c -o libcurlu_la-file.lo `test -f 'file.c' || echo '$(srcdir)/'`file.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-file.Tpo $(DEPDIR)/libcurlu_la-file.Plo
@@ -2581,13 +2607,6 @@ libcurlu_la-hostcheck.lo: hostcheck.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-hostcheck.lo `test -f 'hostcheck.c' || echo '$(srcdir)/'`hostcheck.c
 
-libcurlu_la-bundles.lo: bundles.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-bundles.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-bundles.Tpo -c -o libcurlu_la-bundles.lo `test -f 'bundles.c' || echo '$(srcdir)/'`bundles.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-bundles.Tpo $(DEPDIR)/libcurlu_la-bundles.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='bundles.c' object='libcurlu_la-bundles.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-bundles.lo `test -f 'bundles.c' || echo '$(srcdir)/'`bundles.c
-
 libcurlu_la-conncache.lo: conncache.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-conncache.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-conncache.Tpo -c -o libcurlu_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-conncache.Tpo $(DEPDIR)/libcurlu_la-conncache.Plo
@@ -2651,6 +2670,13 @@ libcurlu_la-curl_endian.lo: curl_endian.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-curl_endian.lo `test -f 'curl_endian.c' || echo '$(srcdir)/'`curl_endian.c
 
+libcurlu_la-curl_des.lo: curl_des.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-curl_des.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_des.Tpo -c -o libcurlu_la-curl_des.lo `test -f 'curl_des.c' || echo '$(srcdir)/'`curl_des.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_des.Tpo $(DEPDIR)/libcurlu_la-curl_des.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='curl_des.c' object='libcurlu_la-curl_des.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-curl_des.lo `test -f 'curl_des.c' || echo '$(srcdir)/'`curl_des.c
+
 vtls/libcurlu_la-openssl.lo: vtls/openssl.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-openssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-openssl.Tpo -c -o vtls/libcurlu_la-openssl.lo `test -f 'vtls/openssl.c' || echo '$(srcdir)/'`vtls/openssl.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-openssl.Tpo vtls/$(DEPDIR)/libcurlu_la-openssl.Plo
@@ -2707,19 +2733,19 @@ vtls/libcurlu_la-cyassl.lo: vtls/cyassl.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-cyassl.lo `test -f 'vtls/cyassl.c' || echo '$(srcdir)/'`vtls/cyassl.c
 
-vtls/libcurlu_la-curl_schannel.lo: vtls/curl_schannel.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-curl_schannel.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-curl_schannel.Tpo -c -o vtls/libcurlu_la-curl_schannel.lo `test -f 'vtls/curl_schannel.c' || echo '$(srcdir)/'`vtls/curl_schannel.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-curl_schannel.Tpo vtls/$(DEPDIR)/libcurlu_la-curl_schannel.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/curl_schannel.c' object='vtls/libcurlu_la-curl_schannel.lo' libtool=yes @AMDEPBACKSLASH@
+vtls/libcurlu_la-schannel.lo: vtls/schannel.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-schannel.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-schannel.Tpo -c -o vtls/libcurlu_la-schannel.lo `test -f 'vtls/schannel.c' || echo '$(srcdir)/'`vtls/schannel.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-schannel.Tpo vtls/$(DEPDIR)/libcurlu_la-schannel.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/schannel.c' object='vtls/libcurlu_la-schannel.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-curl_schannel.lo `test -f 'vtls/curl_schannel.c' || echo '$(srcdir)/'`vtls/curl_schannel.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-schannel.lo `test -f 'vtls/schannel.c' || echo '$(srcdir)/'`vtls/schannel.c
 
-vtls/libcurlu_la-curl_darwinssl.lo: vtls/curl_darwinssl.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-curl_darwinssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-curl_darwinssl.Tpo -c -o vtls/libcurlu_la-curl_darwinssl.lo `test -f 'vtls/curl_darwinssl.c' || echo '$(srcdir)/'`vtls/curl_darwinssl.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-curl_darwinssl.Tpo vtls/$(DEPDIR)/libcurlu_la-curl_darwinssl.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/curl_darwinssl.c' object='vtls/libcurlu_la-curl_darwinssl.lo' libtool=yes @AMDEPBACKSLASH@
+vtls/libcurlu_la-darwinssl.lo: vtls/darwinssl.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-darwinssl.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-darwinssl.Tpo -c -o vtls/libcurlu_la-darwinssl.lo `test -f 'vtls/darwinssl.c' || echo '$(srcdir)/'`vtls/darwinssl.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-darwinssl.Tpo vtls/$(DEPDIR)/libcurlu_la-darwinssl.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/darwinssl.c' object='vtls/libcurlu_la-darwinssl.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-curl_darwinssl.lo `test -f 'vtls/curl_darwinssl.c' || echo '$(srcdir)/'`vtls/curl_darwinssl.c
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-darwinssl.lo `test -f 'vtls/darwinssl.c' || echo '$(srcdir)/'`vtls/darwinssl.c
 
 vtls/libcurlu_la-gskit.lo: vtls/gskit.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-gskit.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-gskit.Tpo -c -o vtls/libcurlu_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
@@ -2728,6 +2754,13 @@ vtls/libcurlu_la-gskit.lo: vtls/gskit.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-gskit.lo `test -f 'vtls/gskit.c' || echo '$(srcdir)/'`vtls/gskit.c
 
+vtls/libcurlu_la-mbedtls.lo: vtls/mbedtls.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT vtls/libcurlu_la-mbedtls.lo -MD -MP -MF vtls/$(DEPDIR)/libcurlu_la-mbedtls.Tpo -c -o vtls/libcurlu_la-mbedtls.lo `test -f 'vtls/mbedtls.c' || echo '$(srcdir)/'`vtls/mbedtls.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) vtls/$(DEPDIR)/libcurlu_la-mbedtls.Tpo vtls/$(DEPDIR)/libcurlu_la-mbedtls.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='vtls/mbedtls.c' object='vtls/libcurlu_la-mbedtls.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o vtls/libcurlu_la-mbedtls.lo `test -f 'vtls/mbedtls.c' || echo '$(srcdir)/'`vtls/mbedtls.c
+
 mostlyclean-libtool:
        -rm -f *.lo
 
@@ -2945,6 +2978,8 @@ uninstall-am: uninstall-libLTLIBRARIES
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
 
+.PRECIOUS: Makefile
+
 
 checksrc:
        @@PERL@ $(top_srcdir)/lib/checksrc.pl -D$(top_srcdir)/lib $(CSOURCES) $(HHEADERS)
index 8f9d16d..39884d0 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
 
 LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c     \
   vtls/polarssl.c vtls/polarssl_threadlock.c vtls/axtls.c               \
-  vtls/cyassl.c vtls/curl_schannel.c vtls/curl_darwinssl.c vtls/gskit.c
+  vtls/cyassl.c vtls/schannel.c vtls/darwinssl.c vtls/gskit.c           \
+  vtls/mbedtls.c
 
 LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h                \
   vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h vtls/axtls.h   \
-  vtls/cyassl.h vtls/curl_schannel.h vtls/curl_darwinssl.h vtls/gskit.h
+  vtls/cyassl.h vtls/schannel.h vtls/darwinssl.h vtls/gskit.h           \
+  vtls/mbedtls.h
 
 LIB_CFILES = 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       \
@@ -44,8 +46,9 @@ LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c   \
   http_negotiate_sspi.c http_proxy.c non-ascii.c asyn-ares.c            \
   asyn-thread.c curl_gssapi.c curl_ntlm.c curl_ntlm_wb.c                \
   curl_ntlm_core.c curl_ntlm_msgs.c curl_sasl.c curl_multibyte.c        \
-  hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c      \
-  http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c
+  hostcheck.c conncache.c pipeline.c dotdot.c x509asn1.c                \
+  http2.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c curl_endian.c       \
+  curl_des.c
 
 LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
   formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
@@ -61,9 +64,10 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
   rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
   curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
   curl_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
-  curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h bundles.h   \
+  curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h             \
   conncache.h curl_setup_once.h multihandle.h setup-vms.h pipeline.h    \
-  dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h
+  dotdot.h x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h  \
+  curl_printf.h
 
 LIB_RCFILES = libcurl.rc
 
index f3673c5..2142bfc 100644 (file)
@@ -1,7 +1,29 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1999 - 2015, 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 https://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.a with MingW (GCC-3.2 or later)
-## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3)
+## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4)
 ##
 ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
 ## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
@@ -18,23 +40,23 @@ ZLIB_PATH = ../../zlib-1.2.8
 endif
 # Edit the path below to point to the base of your OpenSSL package.
 ifndef OPENSSL_PATH
-OPENSSL_PATH = ../../openssl-0.9.8zc
+OPENSSL_PATH = ../../openssl-1.0.2a
 endif
 # Edit the path below to point to the base of your LibSSH2 package.
 ifndef LIBSSH2_PATH
-LIBSSH2_PATH = ../../libssh2-1.4.3
+LIBSSH2_PATH = ../../libssh2-1.5.0
 endif
 # Edit the path below to point to the base of your librtmp package.
 ifndef LIBRTMP_PATH
-LIBRTMP_PATH = ../../librtmp-2.3
+LIBRTMP_PATH = ../../librtmp-2.4
 endif
 # Edit the path below to point to the base of your libidn package.
 ifndef LIBIDN_PATH
-LIBIDN_PATH = ../../libidn-1.18
+LIBIDN_PATH = ../../libidn-1.32
 endif
 # Edit the path below to point to the base of your MS IDN package.
 # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
-# http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815
+# https://www.microsoft.com/en-us/download/details.aspx?id=734
 ifndef WINIDN_PATH
 WINIDN_PATH = ../../Microsoft IDN Mitigation APIs
 endif
@@ -44,7 +66,7 @@ LDAP_SDK = c:/novell/ndk/cldapsdk/win32
 endif
 # Edit the path below to point to the base of your nghttp2 package.
 ifndef NGHTTP2_PATH
-NGHTTP2_PATH = ../../nghttp2-0.6.7
+NGHTTP2_PATH = ../../nghttp2-1.0.0
 endif
 
 PROOT = ..
@@ -55,10 +77,10 @@ LIBCARES_PATH = $(PROOT)/ares
 endif
 
 CC     = $(CROSSPREFIX)gcc
-CFLAGS = -g -O2 -Wall
+CFLAGS = $(CURL_CFLAG_EXTRAS) -g -O2 -Wall
 CFLAGS += -fno-strict-aliasing
 # comment LDFLAGS below to keep debug info
-LDFLAGS        = -s
+LDFLAGS        = $(CURL_LDFLAG_EXTRAS) $(CURL_LDFLAG_EXTRAS_DLL) -s
 AR     = $(CROSSPREFIX)ar
 RANLIB = $(CROSSPREFIX)ranlib
 RC     = $(CROSSPREFIX)windres
@@ -75,10 +97,12 @@ endif
 endif
 
 ifeq ($(ARCH),w64)
-CFLAGS  += -D_AMD64_
+CFLAGS  += -m64 -D_AMD64_
+LDFLAGS += -m64
 RCFLAGS += -F pe-x86-64
 else
 CFLAGS  += -m32
+LDFLAGS += -m32
 RCFLAGS += -F pe-i386
 endif
 
@@ -129,7 +153,9 @@ ZLIB = 1
 endif
 ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
 SSH2 = 1
+ifneq ($(findstring -winssl,$(CFG)),-winssl)
 SSL = 1
+endif
 ZLIB = 1
 endif
 ifeq ($(findstring -ssl,$(CFG)),-ssl)
@@ -191,6 +217,11 @@ ifdef SSH2
   INCLUDES += -I"$(LIBSSH2_PATH)/include" -I"$(LIBSSH2_PATH)/win32"
   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
   DLL_LIBS += -L"$(LIBSSH2_PATH)/win32" -lssh2
+  ifdef WINSSL
+    ifndef DYN
+      DLL_LIBS += -lbcrypt -lcrypt32
+    endif
+  endif
 endif
 ifdef SSL
   ifndef OPENSSL_INCLUDE
@@ -214,14 +245,17 @@ ifdef SSL
       OPENSSL_LIBS = -lcrypto -lssl
     endif
   endif
+  ifndef DYN
+    OPENSSL_LIBS += -lgdi32 -lcrypt32
+  endif
   INCLUDES += -I"$(OPENSSL_INCLUDE)"
-  CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL -DHAVE_OPENSSL_ENGINE_H -DHAVE_OPENSSL_PKCS12_H \
+  CFLAGS += -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_LIBPATH)" $(OPENSSL_LIBS)
   ifdef SRP
     ifeq "$(wildcard $(OPENSSL_INCLUDE)/openssl/srp.h)" "$(OPENSSL_INCLUDE)/openssl/srp.h"
-      CFLAGS += -DHAVE_SSLEAY_SRP -DUSE_TLS_SRP
+      CFLAGS += -DHAVE_OPENSSL_SRP -DUSE_TLS_SRP
     endif
   endif
 endif
@@ -323,5 +357,3 @@ $(PROOT)/include/curl/curlbuild.h:
 
 $(LIBCARES_PATH)/libcares.a:
        $(MAKE) -C $(LIBCARES_PATH) -f Makefile.m32
-
-
index 802959c..789670f 100644 (file)
@@ -1,9 +1,31 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2004 - 2015, Guenter Knauf, <http://www.gknw.net/phpbb>.
+# Copyright (C) 2001 - 2015, 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 https://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.nlm (NetWare version - gnu make)
-## Use: make -f Makefile.netware
 ##
-## Comments to: Guenter Knauf http://www.gknw.net/phpbb
+## Use: make -f Makefile.netware
 #
 #################################################################
 
@@ -19,12 +41,12 @@ endif
 
 # Edit the path below to point to the base of your OpenSSL package.
 ifndef OPENSSL_PATH
-OPENSSL_PATH = ../../openssl-0.9.8zc
+OPENSSL_PATH = ../../openssl-1.0.2a
 endif
 
 # Edit the path below to point to the base of your LibSSH2 package.
 ifndef LIBSSH2_PATH
-LIBSSH2_PATH = ../../libssh2-1.4.3
+LIBSSH2_PATH = ../../libssh2-1.5.0
 endif
 
 # Edit the path below to point to the base of your axTLS package.
@@ -65,7 +87,7 @@ endif
 TARGET  = libcurl
 VERSION        = $(LIBCURL_VERSION)
 COPYR  = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
-DESCR  = cURL libcurl $(LIBCURL_VERSION_STR) ($(LIBARCH)) - http://curl.haxx.se
+DESCR  = cURL libcurl $(LIBCURL_VERSION_STR) ($(LIBARCH)) - https://curl.haxx.se
 MTSAFE = YES
 STACK  = 64000
 SCREEN = none
@@ -214,6 +236,11 @@ WITH_SSL =
 else
 ifeq ($(findstring -ssl,$(CFG)),-ssl)
 WITH_SSL = 1
+ifeq ($(findstring -srp,$(CFG)),-srp)
+ifeq "$(wildcard $(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)/openssl/srp.h)" "$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L)/openssl/srp.h"
+WITH_SRP = 1
+endif
+endif
 endif
 endif
 ifeq ($(findstring -zlib,$(CFG)),-zlib)
@@ -474,7 +501,7 @@ curl_config.h: Makefile.netware
        @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) >> $@
+       @echo $(DL)#define PACKAGE_BUGREPORT "a suitable curl mailing list => https://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) >> $@
@@ -638,6 +665,10 @@ ifdef WITH_SSL
        @echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@
        @echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@
        @echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@
+ifdef WITH_SRP
+       @echo $(DL)#define HAVE_SSLEAY_SRP 1$(DL) >> $@
+       @echo $(DL)#define USE_TLS_SRP 1$(DL) >> $@
+endif
 ifdef WITH_SPNEGO
        @echo $(DL)#define HAVE_SPNEGO 1$(DL) >> $@
 endif
@@ -690,6 +721,11 @@ ifdef WITH_SSL
 else
        @echo SSL support:     no
 endif
+ifdef WITH_SRP
+       @echo SRP support:     enabled
+else
+       @echo SRP support:     no
+endif
 ifdef WITH_SSH2
        @echo SSH2 support:    enabled (libssh2)
 else
index 461e4f7..6d1de48 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
 !INCLUDE ..\winbuild\Makefile.msvc.names\r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH   = ../../openssl-0.9.8zc\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF LIBSSH2_PATH\r
-LIBSSH2_PATH   = ../../libssh2-1.4.3\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -90,7 +90,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -105,7 +105,7 @@ WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
 \r
 CCNODBG      = cl.exe /O2 /DNDEBUG\r
 CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1\r
-CFLAGSSSL    = /DUSE_SSLEAY /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
 CFLAGSWINSSL = /DUSE_SCHANNEL\r
 CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
 CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
@@ -427,7 +427,7 @@ CFGSET   = TRUE
 TARGET = $(LIBCURL_DYN_LIB_DBG)\r
 DIROBJ = $(CFG)\r
 LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
-CC     = $(CCDEBUG) $(RTLIBD) \r
+CC     = $(CCDEBUG) $(RTLIBD)\r
 CFGSET = TRUE\r
 RESOURCE = $(DIROBJ)\libcurl.res\r
 !ENDIF\r
@@ -528,13 +528,12 @@ X_OBJS= \
        $(DIROBJ)\asyn-thread.obj \\r
        $(DIROBJ)\axtls.obj \\r
        $(DIROBJ)\base64.obj \\r
-       $(DIROBJ)\bundles.obj \\r
        $(DIROBJ)\conncache.obj \\r
        $(DIROBJ)\connect.obj \\r
        $(DIROBJ)\content_encoding.obj \\r
        $(DIROBJ)\cookie.obj \\r
        $(DIROBJ)\curl_addrinfo.obj \\r
-       $(DIROBJ)\curl_darwinssl.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
        $(DIROBJ)\curl_endian.obj \\r
        $(DIROBJ)\curl_fnmatch.obj \\r
        $(DIROBJ)\curl_gethostname.obj \\r
@@ -549,10 +548,10 @@ X_OBJS= \
        $(DIROBJ)\curl_sasl.obj \\r
        $(DIROBJ)\curl_sasl_gssapi.obj \\r
        $(DIROBJ)\curl_sasl_sspi.obj \\r
-       $(DIROBJ)\curl_schannel.obj \\r
        $(DIROBJ)\curl_sspi.obj \\r
        $(DIROBJ)\curl_threads.obj \\r
        $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
        $(DIROBJ)\dict.obj \\r
        $(DIROBJ)\dotdot.obj \\r
        $(DIROBJ)\easy.obj \\r
@@ -607,6 +606,7 @@ X_OBJS= \
        $(DIROBJ)\progress.obj \\r
        $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
        $(DIROBJ)\select.obj \\r
        $(DIROBJ)\sendf.obj \\r
diff --git a/lib/Makefile.vc11 b/lib/Makefile.vc11
new file mode 100644 (file)
index 0000000..5e09349
--- /dev/null
@@ -0,0 +1,677 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-library.\r
+\r
+###########################################################################\r
+#\r
+# Makefile for building libcurl with MSVC11\r
+#\r
+# Usage: see usage message below\r
+#        Should be invoked from \lib directory\r
+#        Edit the paths and desired library name\r
+#        SSL path is only required if you intend compiling\r
+#        with SSL.\r
+#\r
+# This make file leaves the result either a .lib or .dll file\r
+# in the \lib directory. It should be called from the \lib\r
+# directory.\r
+#\r
+# An option would have been to allow the source directory to\r
+# be specified, but I saw no requirement.\r
+#\r
+# Another option would have been to leave the .lib and .dll\r
+# files in the "cfg" directory, but then the make file\r
+# in \src would need to be changed.\r
+#\r
+##############################################################\r
+\r
+# ----------------------------------------------\r
+# Verify that current subdir is libcurl's 'lib'\r
+# ----------------------------------------------\r
+\r
+!IF ! EXIST(.\curl_addrinfo.c)\r
+!  MESSAGE Can not process this makefile from outside of libcurl's 'lib' subdirectory.\r
+!  MESSAGE Change to libcurl's 'lib' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF LIBSSH2_PATH\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH  = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC11 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+#############################################################\r
+## Nothing more to do below this line!\r
+\r
+CCNODBG      = cl.exe /O2 /DNDEBUG\r
+CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSWINSSL = /DUSE_SCHANNEL\r
+CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
+CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+CFLAGS       = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+CFLAGSLIB    = /DCURL_STATICLIB\r
+LNKDLL       = link.exe /DLL\r
+LNKLIB       = link.exe /lib\r
+LFLAGS       = /nologo /machine:$(MACHINE)\r
+SSLLIBS      = libeay32.lib ssleay32.lib\r
+ZLIBLIBSDLL  = zdll.lib\r
+ZLIBLIBS     = zlib.lib\r
+WINLIBS      = ws2_32.lib wldap32.lib advapi32.lib\r
+CFLAGS       = $(CFLAGS)\r
+\r
+CFGSET       = FALSE\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+!IFDEF USE_IPV6\r
+CFLAGS = $(CFLAGS) /DUSE_IPV6\r
+!ENDIF\r
+\r
+!IFDEF USE_IDN\r
+CFLAGS = $(CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES\r
+!ENDIF\r
+\r
+##############################################################\r
+# Runtime library configuration\r
+\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+\r
+######################\r
+# release\r
+\r
+!IF "$(CFG)" == "release"\r
+TARGET = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl\r
+\r
+!IF "$(CFG)" == "release-winssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl-zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-dll\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC     = $(CCNODBG) $(RTLIB)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug\r
+\r
+!IF "$(CFG)" == "debug"\r
+TARGET = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl\r
+\r
+!IF "$(CFG)" == "debug-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib\r
+\r
+!IF "$(CFG)" == "debug-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll\r
+\r
+!IF "$(CFG)" == "debug-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC     = $(CCDEBUG) $(RTLIBD)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+#######################\r
+# Usage\r
+#\r
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""\r
+!MESSAGE Usage: nmake /f makefile.vc11 CFG=<config> <target>\r
+!MESSAGE where <config> is one of:\r
+!MESSAGE   release                      - release static library\r
+!MESSAGE   release-ssl                  - release static library with ssl\r
+!MESSAGE   release-zlib                 - release static library with zlib\r
+!MESSAGE   release-ssl-zlib             - release static library with ssl and zlib\r
+!MESSAGE   release-ssl-ssh2-zlib        - release static library with ssl, ssh2 and zlib\r
+!MESSAGE   release-ssl-dll              - release static library with dynamic ssl\r
+!MESSAGE   release-zlib-dll             - release static library with dynamic zlib\r
+!MESSAGE   release-ssl-dll-zlib-dll     - release static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   release-dll                  - release dynamic library\r
+!MESSAGE   release-dll-ssl-dll          - release dynamic library with dynamic ssl\r
+!MESSAGE   release-dll-zlib-dll         - release dynamic library with dynamic zlib\r
+!MESSAGE   release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug                        - debug static library\r
+!MESSAGE   debug-ssl                    - debug static library with ssl\r
+!MESSAGE   debug-zlib                   - debug static library with zlib\r
+!MESSAGE   debug-ssl-zlib               - debug static library with ssl and zlib\r
+!MESSAGE   debug-ssl-ssh2-zlib          - debug static library with ssl, ssh2 and zlib\r
+!MESSAGE   debug-ssl-dll                - debug static library with dynamic ssl\r
+!MESSAGE   debug-zlib-dll               - debug static library with dynamic zlib\r
+!MESSAGE   debug-ssl-dll-zlib-dll       - debug static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug-dll                    - debug dynamic library\r
+!MESSAGE   debug-dll-ssl-dll            - debug dynamic library with dynamic ssl\r
+!MESSAGE   debug-dll-zlib-dll           - debug dynamic library with dynamic zlib1\r
+!MESSAGE   debug-dll-ssl-dll-zlib-dll   - debug dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE <target> can be left blank in which case all is assumed\r
+!ERROR please choose a valid configuration "$(CFG)"\r
+!ENDIF\r
+\r
+#######################\r
+# Only the clean target can be used if a config was not provided.\r
+#\r
+!IF "$(CFGSET)" == "FALSE"\r
+clean:\r
+       @-erase /s *.dll 2> NUL\r
+       @-erase /s *.exp 2> NUL\r
+       @-erase /s *.idb 2> NUL\r
+       @-erase /s *.lib 2> NUL\r
+       @-erase /s *.obj 2> NUL\r
+       @-erase /s *.pch 2> NUL\r
+       @-erase /s *.pdb 2> NUL\r
+       @-erase /s *.res 2> NUL\r
+!ELSE\r
+# A config was provided, so the library can be built.\r
+#\r
+X_OBJS= \\r
+       $(DIROBJ)\amigaos.obj \\r
+       $(DIROBJ)\asyn-ares.obj \\r
+       $(DIROBJ)\asyn-thread.obj \\r
+       $(DIROBJ)\axtls.obj \\r
+       $(DIROBJ)\base64.obj \\r
+       $(DIROBJ)\conncache.obj \\r
+       $(DIROBJ)\connect.obj \\r
+       $(DIROBJ)\content_encoding.obj \\r
+       $(DIROBJ)\cookie.obj \\r
+       $(DIROBJ)\curl_addrinfo.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
+       $(DIROBJ)\curl_endian.obj \\r
+       $(DIROBJ)\curl_fnmatch.obj \\r
+       $(DIROBJ)\curl_gethostname.obj \\r
+       $(DIROBJ)\curl_gssapi.obj \\r
+       $(DIROBJ)\curl_memrchr.obj \\r
+       $(DIROBJ)\curl_multibyte.obj \\r
+       $(DIROBJ)\curl_ntlm.obj \\r
+       $(DIROBJ)\curl_ntlm_core.obj \\r
+       $(DIROBJ)\curl_ntlm_msgs.obj \\r
+       $(DIROBJ)\curl_ntlm_wb.obj \\r
+       $(DIROBJ)\curl_rtmp.obj \\r
+       $(DIROBJ)\curl_sasl.obj \\r
+       $(DIROBJ)\curl_sasl_gssapi.obj \\r
+       $(DIROBJ)\curl_sasl_sspi.obj \\r
+       $(DIROBJ)\curl_sspi.obj \\r
+       $(DIROBJ)\curl_threads.obj \\r
+       $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
+       $(DIROBJ)\dict.obj \\r
+       $(DIROBJ)\dotdot.obj \\r
+       $(DIROBJ)\easy.obj \\r
+       $(DIROBJ)\escape.obj \\r
+       $(DIROBJ)\file.obj \\r
+       $(DIROBJ)\fileinfo.obj \\r
+       $(DIROBJ)\formdata.obj \\r
+       $(DIROBJ)\ftp.obj \\r
+       $(DIROBJ)\ftplistparser.obj \\r
+       $(DIROBJ)\getenv.obj \\r
+       $(DIROBJ)\getinfo.obj \\r
+       $(DIROBJ)\gopher.obj \\r
+       $(DIROBJ)\gtls.obj \\r
+       $(DIROBJ)\hash.obj \\r
+       $(DIROBJ)\hmac.obj \\r
+       $(DIROBJ)\hostasyn.obj \\r
+       $(DIROBJ)\hostcheck.obj \\r
+       $(DIROBJ)\hostip.obj \\r
+       $(DIROBJ)\hostip4.obj \\r
+       $(DIROBJ)\hostip6.obj \\r
+       $(DIROBJ)\hostsyn.obj \\r
+       $(DIROBJ)\http.obj \\r
+       $(DIROBJ)\http_chunks.obj \\r
+       $(DIROBJ)\http_digest.obj \\r
+       $(DIROBJ)\http_negotiate.obj \\r
+       $(DIROBJ)\http_negotiate_sspi.obj \\r
+       $(DIROBJ)\http_proxy.obj \\r
+       $(DIROBJ)\idn_win32.obj \\r
+       $(DIROBJ)\if2ip.obj \\r
+       $(DIROBJ)\imap.obj \\r
+       $(DIROBJ)\inet_ntop.obj \\r
+       $(DIROBJ)\inet_pton.obj \\r
+       $(DIROBJ)\krb5.obj \\r
+       $(DIROBJ)\ldap.obj \\r
+       $(DIROBJ)\llist.obj \\r
+       $(DIROBJ)\md4.obj \\r
+       $(DIROBJ)\md5.obj \\r
+       $(DIROBJ)\memdebug.obj \\r
+       $(DIROBJ)\mprintf.obj \\r
+       $(DIROBJ)\multi.obj \\r
+       $(DIROBJ)\netrc.obj \\r
+       $(DIROBJ)\non-ascii.obj \\r
+       $(DIROBJ)\nonblock.obj \\r
+       $(DIROBJ)\nss.obj \\r
+       $(DIROBJ)\openldap.obj \\r
+       $(DIROBJ)\parsedate.obj \\r
+       $(DIROBJ)\pingpong.obj \\r
+       $(DIROBJ)\pipeline.obj \\r
+       $(DIROBJ)\polarssl.obj \\r
+       $(DIROBJ)\polarssl_threadlock.obj \\r
+       $(DIROBJ)\pop3.obj \\r
+       $(DIROBJ)\progress.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
+       $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
+       $(DIROBJ)\security.obj \\r
+       $(DIROBJ)\select.obj \\r
+       $(DIROBJ)\sendf.obj \\r
+       $(DIROBJ)\share.obj \\r
+       $(DIROBJ)\slist.obj \\r
+       $(DIROBJ)\smb.obj \\r
+       $(DIROBJ)\smtp.obj \\r
+       $(DIROBJ)\socks.obj \\r
+       $(DIROBJ)\socks_gssapi.obj \\r
+       $(DIROBJ)\socks_sspi.obj \\r
+       $(DIROBJ)\speedcheck.obj \\r
+       $(DIROBJ)\splay.obj \\r
+       $(DIROBJ)\ssh.obj \\r
+       $(DIROBJ)\vtls.obj \\r
+       $(DIROBJ)\openssl.obj \\r
+       $(DIROBJ)\strdup.obj \\r
+       $(DIROBJ)\strequal.obj \\r
+       $(DIROBJ)\strerror.obj \\r
+       $(DIROBJ)\strtok.obj \\r
+       $(DIROBJ)\strtoofft.obj \\r
+       $(DIROBJ)\telnet.obj \\r
+       $(DIROBJ)\tftp.obj \\r
+       $(DIROBJ)\timeval.obj \\r
+       $(DIROBJ)\transfer.obj \\r
+       $(DIROBJ)\url.obj \\r
+       $(DIROBJ)\version.obj \\r
+       $(DIROBJ)\warnless.obj \\r
+       $(DIROBJ)\wildcard.obj \\r
+       $(RESOURCE)\r
+\r
+all : $(TARGET)\r
+\r
+$(TARGET): $(X_OBJS)\r
+       $(LNK) $(LFLAGS) $(X_OBJS)\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\*.exp                  . /y\r
+       -xcopy $(DIROBJ)\*.pdb                  . /y\r
+\r
+$(X_OBJS): $(DIROBJ)\r
+\r
+$(DIROBJ):\r
+       @if not exist "$(DIROBJ)" mkdir $(DIROBJ)\r
+\r
+.SUFFIXES: .c .obj .res\r
+\r
+{.\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+{.\vtls\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+debug-dll\libcurl.res \\r
+debug-dll-ssl-dll\libcurl.res \\r
+debug-dll-zlib-dll\libcurl.res \\r
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc\r
+\r
+release-dll\libcurl.res \\r
+release-dll-ssl-dll\libcurl.res \\r
+release-dll-zlib-dll\libcurl.res \\r
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc\r
+!ENDIF  # End of case where a config was provided.\r
diff --git a/lib/Makefile.vc12 b/lib/Makefile.vc12
new file mode 100644 (file)
index 0000000..45b9d72
--- /dev/null
@@ -0,0 +1,677 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-library.\r
+\r
+###########################################################################\r
+#\r
+# Makefile for building libcurl with MSVC12\r
+#\r
+# Usage: see usage message below\r
+#        Should be invoked from \lib directory\r
+#        Edit the paths and desired library name\r
+#        SSL path is only required if you intend compiling\r
+#        with SSL.\r
+#\r
+# This make file leaves the result either a .lib or .dll file\r
+# in the \lib directory. It should be called from the \lib\r
+# directory.\r
+#\r
+# An option would have been to allow the source directory to\r
+# be specified, but I saw no requirement.\r
+#\r
+# Another option would have been to leave the .lib and .dll\r
+# files in the "cfg" directory, but then the make file\r
+# in \src would need to be changed.\r
+#\r
+##############################################################\r
+\r
+# ----------------------------------------------\r
+# Verify that current subdir is libcurl's 'lib'\r
+# ----------------------------------------------\r
+\r
+!IF ! EXIST(.\curl_addrinfo.c)\r
+!  MESSAGE Can not process this makefile from outside of libcurl's 'lib' subdirectory.\r
+!  MESSAGE Change to libcurl's 'lib' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF LIBSSH2_PATH\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH  = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC12 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+#############################################################\r
+## Nothing more to do below this line!\r
+\r
+CCNODBG      = cl.exe /O2 /DNDEBUG\r
+CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSWINSSL = /DUSE_SCHANNEL\r
+CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
+CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+CFLAGS       = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+CFLAGSLIB    = /DCURL_STATICLIB\r
+LNKDLL       = link.exe /DLL\r
+LNKLIB       = link.exe /lib\r
+LFLAGS       = /nologo /machine:$(MACHINE)\r
+SSLLIBS      = libeay32.lib ssleay32.lib\r
+ZLIBLIBSDLL  = zdll.lib\r
+ZLIBLIBS     = zlib.lib\r
+WINLIBS      = ws2_32.lib wldap32.lib advapi32.lib\r
+CFLAGS       = $(CFLAGS)\r
+\r
+CFGSET       = FALSE\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+!IFDEF USE_IPV6\r
+CFLAGS = $(CFLAGS) /DUSE_IPV6\r
+!ENDIF\r
+\r
+!IFDEF USE_IDN\r
+CFLAGS = $(CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES\r
+!ENDIF\r
+\r
+##############################################################\r
+# Runtime library configuration\r
+\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+\r
+######################\r
+# release\r
+\r
+!IF "$(CFG)" == "release"\r
+TARGET = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl\r
+\r
+!IF "$(CFG)" == "release-winssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl-zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-dll\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC     = $(CCNODBG) $(RTLIB)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug\r
+\r
+!IF "$(CFG)" == "debug"\r
+TARGET = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl\r
+\r
+!IF "$(CFG)" == "debug-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib\r
+\r
+!IF "$(CFG)" == "debug-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll\r
+\r
+!IF "$(CFG)" == "debug-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC     = $(CCDEBUG) $(RTLIBD)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+#######################\r
+# Usage\r
+#\r
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""\r
+!MESSAGE Usage: nmake /f makefile.vc12 CFG=<config> <target>\r
+!MESSAGE where <config> is one of:\r
+!MESSAGE   release                      - release static library\r
+!MESSAGE   release-ssl                  - release static library with ssl\r
+!MESSAGE   release-zlib                 - release static library with zlib\r
+!MESSAGE   release-ssl-zlib             - release static library with ssl and zlib\r
+!MESSAGE   release-ssl-ssh2-zlib        - release static library with ssl, ssh2 and zlib\r
+!MESSAGE   release-ssl-dll              - release static library with dynamic ssl\r
+!MESSAGE   release-zlib-dll             - release static library with dynamic zlib\r
+!MESSAGE   release-ssl-dll-zlib-dll     - release static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   release-dll                  - release dynamic library\r
+!MESSAGE   release-dll-ssl-dll          - release dynamic library with dynamic ssl\r
+!MESSAGE   release-dll-zlib-dll         - release dynamic library with dynamic zlib\r
+!MESSAGE   release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug                        - debug static library\r
+!MESSAGE   debug-ssl                    - debug static library with ssl\r
+!MESSAGE   debug-zlib                   - debug static library with zlib\r
+!MESSAGE   debug-ssl-zlib               - debug static library with ssl and zlib\r
+!MESSAGE   debug-ssl-ssh2-zlib          - debug static library with ssl, ssh2 and zlib\r
+!MESSAGE   debug-ssl-dll                - debug static library with dynamic ssl\r
+!MESSAGE   debug-zlib-dll               - debug static library with dynamic zlib\r
+!MESSAGE   debug-ssl-dll-zlib-dll       - debug static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug-dll                    - debug dynamic library\r
+!MESSAGE   debug-dll-ssl-dll            - debug dynamic library with dynamic ssl\r
+!MESSAGE   debug-dll-zlib-dll           - debug dynamic library with dynamic zlib1\r
+!MESSAGE   debug-dll-ssl-dll-zlib-dll   - debug dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE <target> can be left blank in which case all is assumed\r
+!ERROR please choose a valid configuration "$(CFG)"\r
+!ENDIF\r
+\r
+#######################\r
+# Only the clean target can be used if a config was not provided.\r
+#\r
+!IF "$(CFGSET)" == "FALSE"\r
+clean:\r
+       @-erase /s *.dll 2> NUL\r
+       @-erase /s *.exp 2> NUL\r
+       @-erase /s *.idb 2> NUL\r
+       @-erase /s *.lib 2> NUL\r
+       @-erase /s *.obj 2> NUL\r
+       @-erase /s *.pch 2> NUL\r
+       @-erase /s *.pdb 2> NUL\r
+       @-erase /s *.res 2> NUL\r
+!ELSE\r
+# A config was provided, so the library can be built.\r
+#\r
+X_OBJS= \\r
+       $(DIROBJ)\amigaos.obj \\r
+       $(DIROBJ)\asyn-ares.obj \\r
+       $(DIROBJ)\asyn-thread.obj \\r
+       $(DIROBJ)\axtls.obj \\r
+       $(DIROBJ)\base64.obj \\r
+       $(DIROBJ)\conncache.obj \\r
+       $(DIROBJ)\connect.obj \\r
+       $(DIROBJ)\content_encoding.obj \\r
+       $(DIROBJ)\cookie.obj \\r
+       $(DIROBJ)\curl_addrinfo.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
+       $(DIROBJ)\curl_endian.obj \\r
+       $(DIROBJ)\curl_fnmatch.obj \\r
+       $(DIROBJ)\curl_gethostname.obj \\r
+       $(DIROBJ)\curl_gssapi.obj \\r
+       $(DIROBJ)\curl_memrchr.obj \\r
+       $(DIROBJ)\curl_multibyte.obj \\r
+       $(DIROBJ)\curl_ntlm.obj \\r
+       $(DIROBJ)\curl_ntlm_core.obj \\r
+       $(DIROBJ)\curl_ntlm_msgs.obj \\r
+       $(DIROBJ)\curl_ntlm_wb.obj \\r
+       $(DIROBJ)\curl_rtmp.obj \\r
+       $(DIROBJ)\curl_sasl.obj \\r
+       $(DIROBJ)\curl_sasl_gssapi.obj \\r
+       $(DIROBJ)\curl_sasl_sspi.obj \\r
+       $(DIROBJ)\curl_sspi.obj \\r
+       $(DIROBJ)\curl_threads.obj \\r
+       $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
+       $(DIROBJ)\dict.obj \\r
+       $(DIROBJ)\dotdot.obj \\r
+       $(DIROBJ)\easy.obj \\r
+       $(DIROBJ)\escape.obj \\r
+       $(DIROBJ)\file.obj \\r
+       $(DIROBJ)\fileinfo.obj \\r
+       $(DIROBJ)\formdata.obj \\r
+       $(DIROBJ)\ftp.obj \\r
+       $(DIROBJ)\ftplistparser.obj \\r
+       $(DIROBJ)\getenv.obj \\r
+       $(DIROBJ)\getinfo.obj \\r
+       $(DIROBJ)\gopher.obj \\r
+       $(DIROBJ)\gtls.obj \\r
+       $(DIROBJ)\hash.obj \\r
+       $(DIROBJ)\hmac.obj \\r
+       $(DIROBJ)\hostasyn.obj \\r
+       $(DIROBJ)\hostcheck.obj \\r
+       $(DIROBJ)\hostip.obj \\r
+       $(DIROBJ)\hostip4.obj \\r
+       $(DIROBJ)\hostip6.obj \\r
+       $(DIROBJ)\hostsyn.obj \\r
+       $(DIROBJ)\http.obj \\r
+       $(DIROBJ)\http_chunks.obj \\r
+       $(DIROBJ)\http_digest.obj \\r
+       $(DIROBJ)\http_negotiate.obj \\r
+       $(DIROBJ)\http_negotiate_sspi.obj \\r
+       $(DIROBJ)\http_proxy.obj \\r
+       $(DIROBJ)\idn_win32.obj \\r
+       $(DIROBJ)\if2ip.obj \\r
+       $(DIROBJ)\imap.obj \\r
+       $(DIROBJ)\inet_ntop.obj \\r
+       $(DIROBJ)\inet_pton.obj \\r
+       $(DIROBJ)\krb5.obj \\r
+       $(DIROBJ)\ldap.obj \\r
+       $(DIROBJ)\llist.obj \\r
+       $(DIROBJ)\md4.obj \\r
+       $(DIROBJ)\md5.obj \\r
+       $(DIROBJ)\memdebug.obj \\r
+       $(DIROBJ)\mprintf.obj \\r
+       $(DIROBJ)\multi.obj \\r
+       $(DIROBJ)\netrc.obj \\r
+       $(DIROBJ)\non-ascii.obj \\r
+       $(DIROBJ)\nonblock.obj \\r
+       $(DIROBJ)\nss.obj \\r
+       $(DIROBJ)\openldap.obj \\r
+       $(DIROBJ)\parsedate.obj \\r
+       $(DIROBJ)\pingpong.obj \\r
+       $(DIROBJ)\pipeline.obj \\r
+       $(DIROBJ)\polarssl.obj \\r
+       $(DIROBJ)\polarssl_threadlock.obj \\r
+       $(DIROBJ)\pop3.obj \\r
+       $(DIROBJ)\progress.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
+       $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
+       $(DIROBJ)\security.obj \\r
+       $(DIROBJ)\select.obj \\r
+       $(DIROBJ)\sendf.obj \\r
+       $(DIROBJ)\share.obj \\r
+       $(DIROBJ)\slist.obj \\r
+       $(DIROBJ)\smb.obj \\r
+       $(DIROBJ)\smtp.obj \\r
+       $(DIROBJ)\socks.obj \\r
+       $(DIROBJ)\socks_gssapi.obj \\r
+       $(DIROBJ)\socks_sspi.obj \\r
+       $(DIROBJ)\speedcheck.obj \\r
+       $(DIROBJ)\splay.obj \\r
+       $(DIROBJ)\ssh.obj \\r
+       $(DIROBJ)\vtls.obj \\r
+       $(DIROBJ)\openssl.obj \\r
+       $(DIROBJ)\strdup.obj \\r
+       $(DIROBJ)\strequal.obj \\r
+       $(DIROBJ)\strerror.obj \\r
+       $(DIROBJ)\strtok.obj \\r
+       $(DIROBJ)\strtoofft.obj \\r
+       $(DIROBJ)\telnet.obj \\r
+       $(DIROBJ)\tftp.obj \\r
+       $(DIROBJ)\timeval.obj \\r
+       $(DIROBJ)\transfer.obj \\r
+       $(DIROBJ)\url.obj \\r
+       $(DIROBJ)\version.obj \\r
+       $(DIROBJ)\warnless.obj \\r
+       $(DIROBJ)\wildcard.obj \\r
+       $(RESOURCE)\r
+\r
+all : $(TARGET)\r
+\r
+$(TARGET): $(X_OBJS)\r
+       $(LNK) $(LFLAGS) $(X_OBJS)\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\*.exp                  . /y\r
+       -xcopy $(DIROBJ)\*.pdb                  . /y\r
+\r
+$(X_OBJS): $(DIROBJ)\r
+\r
+$(DIROBJ):\r
+       @if not exist "$(DIROBJ)" mkdir $(DIROBJ)\r
+\r
+.SUFFIXES: .c .obj .res\r
+\r
+{.\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+{.\vtls\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+debug-dll\libcurl.res \\r
+debug-dll-ssl-dll\libcurl.res \\r
+debug-dll-zlib-dll\libcurl.res \\r
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc\r
+\r
+release-dll\libcurl.res \\r
+release-dll-ssl-dll\libcurl.res \\r
+release-dll-zlib-dll\libcurl.res \\r
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc\r
+!ENDIF  # End of case where a config was provided.\r
diff --git a/lib/Makefile.vc14 b/lib/Makefile.vc14
new file mode 100644 (file)
index 0000000..0714af3
--- /dev/null
@@ -0,0 +1,677 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-library.\r
+\r
+###########################################################################\r
+#\r
+# Makefile for building libcurl with MSVC14\r
+#\r
+# Usage: see usage message below\r
+#        Should be invoked from \lib directory\r
+#        Edit the paths and desired library name\r
+#        SSL path is only required if you intend compiling\r
+#        with SSL.\r
+#\r
+# This make file leaves the result either a .lib or .dll file\r
+# in the \lib directory. It should be called from the \lib\r
+# directory.\r
+#\r
+# An option would have been to allow the source directory to\r
+# be specified, but I saw no requirement.\r
+#\r
+# Another option would have been to leave the .lib and .dll\r
+# files in the "cfg" directory, but then the make file\r
+# in \src would need to be changed.\r
+#\r
+##############################################################\r
+\r
+# ----------------------------------------------\r
+# Verify that current subdir is libcurl's 'lib'\r
+# ----------------------------------------------\r
+\r
+!IF ! EXIST(.\curl_addrinfo.c)\r
+!  MESSAGE Can not process this makefile from outside of libcurl's 'lib' subdirectory.\r
+!  MESSAGE Change to libcurl's 'lib' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF LIBSSH2_PATH\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH  = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC14 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+#############################################################\r
+## Nothing more to do below this line!\r
+\r
+CCNODBG      = cl.exe /O2 /DNDEBUG\r
+CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSWINSSL = /DUSE_SCHANNEL\r
+CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
+CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+CFLAGS       = /I. /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /DBUILDING_LIBCURL /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+CFLAGSLIB    = /DCURL_STATICLIB\r
+LNKDLL       = link.exe /DLL\r
+LNKLIB       = link.exe /lib\r
+LFLAGS       = /nologo /machine:$(MACHINE)\r
+SSLLIBS      = libeay32.lib ssleay32.lib\r
+ZLIBLIBSDLL  = zdll.lib\r
+ZLIBLIBS     = zlib.lib\r
+WINLIBS      = ws2_32.lib wldap32.lib advapi32.lib\r
+CFLAGS       = $(CFLAGS)\r
+\r
+CFGSET       = FALSE\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+!IFDEF USE_IPV6\r
+CFLAGS = $(CFLAGS) /DUSE_IPV6\r
+!ENDIF\r
+\r
+!IFDEF USE_IDN\r
+CFLAGS = $(CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES\r
+!ENDIF\r
+\r
+##############################################################\r
+# Runtime library configuration\r
+\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+\r
+######################\r
+# release\r
+\r
+!IF "$(CFG)" == "release"\r
+TARGET = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl\r
+\r
+!IF "$(CFG)" == "release-winssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl-zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-dll\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC     = $(CCNODBG) $(RTLIB)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug\r
+\r
+!IF "$(CFG)" == "debug"\r
+TARGET = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl\r
+\r
+!IF "$(CFG)" == "debug-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib\r
+\r
+!IF "$(CFG)" == "debug-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll\r
+\r
+!IF "$(CFG)" == "debug-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC     = $(CCDEBUG) $(RTLIBD)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+#######################\r
+# Usage\r
+#\r
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""\r
+!MESSAGE Usage: nmake /f makefile.vc14 CFG=<config> <target>\r
+!MESSAGE where <config> is one of:\r
+!MESSAGE   release                      - release static library\r
+!MESSAGE   release-ssl                  - release static library with ssl\r
+!MESSAGE   release-zlib                 - release static library with zlib\r
+!MESSAGE   release-ssl-zlib             - release static library with ssl and zlib\r
+!MESSAGE   release-ssl-ssh2-zlib        - release static library with ssl, ssh2 and zlib\r
+!MESSAGE   release-ssl-dll              - release static library with dynamic ssl\r
+!MESSAGE   release-zlib-dll             - release static library with dynamic zlib\r
+!MESSAGE   release-ssl-dll-zlib-dll     - release static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   release-dll                  - release dynamic library\r
+!MESSAGE   release-dll-ssl-dll          - release dynamic library with dynamic ssl\r
+!MESSAGE   release-dll-zlib-dll         - release dynamic library with dynamic zlib\r
+!MESSAGE   release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug                        - debug static library\r
+!MESSAGE   debug-ssl                    - debug static library with ssl\r
+!MESSAGE   debug-zlib                   - debug static library with zlib\r
+!MESSAGE   debug-ssl-zlib               - debug static library with ssl and zlib\r
+!MESSAGE   debug-ssl-ssh2-zlib          - debug static library with ssl, ssh2 and zlib\r
+!MESSAGE   debug-ssl-dll                - debug static library with dynamic ssl\r
+!MESSAGE   debug-zlib-dll               - debug static library with dynamic zlib\r
+!MESSAGE   debug-ssl-dll-zlib-dll       - debug static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug-dll                    - debug dynamic library\r
+!MESSAGE   debug-dll-ssl-dll            - debug dynamic library with dynamic ssl\r
+!MESSAGE   debug-dll-zlib-dll           - debug dynamic library with dynamic zlib1\r
+!MESSAGE   debug-dll-ssl-dll-zlib-dll   - debug dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE <target> can be left blank in which case all is assumed\r
+!ERROR please choose a valid configuration "$(CFG)"\r
+!ENDIF\r
+\r
+#######################\r
+# Only the clean target can be used if a config was not provided.\r
+#\r
+!IF "$(CFGSET)" == "FALSE"\r
+clean:\r
+       @-erase /s *.dll 2> NUL\r
+       @-erase /s *.exp 2> NUL\r
+       @-erase /s *.idb 2> NUL\r
+       @-erase /s *.lib 2> NUL\r
+       @-erase /s *.obj 2> NUL\r
+       @-erase /s *.pch 2> NUL\r
+       @-erase /s *.pdb 2> NUL\r
+       @-erase /s *.res 2> NUL\r
+!ELSE\r
+# A config was provided, so the library can be built.\r
+#\r
+X_OBJS= \\r
+       $(DIROBJ)\amigaos.obj \\r
+       $(DIROBJ)\asyn-ares.obj \\r
+       $(DIROBJ)\asyn-thread.obj \\r
+       $(DIROBJ)\axtls.obj \\r
+       $(DIROBJ)\base64.obj \\r
+       $(DIROBJ)\conncache.obj \\r
+       $(DIROBJ)\connect.obj \\r
+       $(DIROBJ)\content_encoding.obj \\r
+       $(DIROBJ)\cookie.obj \\r
+       $(DIROBJ)\curl_addrinfo.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
+       $(DIROBJ)\curl_endian.obj \\r
+       $(DIROBJ)\curl_fnmatch.obj \\r
+       $(DIROBJ)\curl_gethostname.obj \\r
+       $(DIROBJ)\curl_gssapi.obj \\r
+       $(DIROBJ)\curl_memrchr.obj \\r
+       $(DIROBJ)\curl_multibyte.obj \\r
+       $(DIROBJ)\curl_ntlm.obj \\r
+       $(DIROBJ)\curl_ntlm_core.obj \\r
+       $(DIROBJ)\curl_ntlm_msgs.obj \\r
+       $(DIROBJ)\curl_ntlm_wb.obj \\r
+       $(DIROBJ)\curl_rtmp.obj \\r
+       $(DIROBJ)\curl_sasl.obj \\r
+       $(DIROBJ)\curl_sasl_gssapi.obj \\r
+       $(DIROBJ)\curl_sasl_sspi.obj \\r
+       $(DIROBJ)\curl_sspi.obj \\r
+       $(DIROBJ)\curl_threads.obj \\r
+       $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
+       $(DIROBJ)\dict.obj \\r
+       $(DIROBJ)\dotdot.obj \\r
+       $(DIROBJ)\easy.obj \\r
+       $(DIROBJ)\escape.obj \\r
+       $(DIROBJ)\file.obj \\r
+       $(DIROBJ)\fileinfo.obj \\r
+       $(DIROBJ)\formdata.obj \\r
+       $(DIROBJ)\ftp.obj \\r
+       $(DIROBJ)\ftplistparser.obj \\r
+       $(DIROBJ)\getenv.obj \\r
+       $(DIROBJ)\getinfo.obj \\r
+       $(DIROBJ)\gopher.obj \\r
+       $(DIROBJ)\gtls.obj \\r
+       $(DIROBJ)\hash.obj \\r
+       $(DIROBJ)\hmac.obj \\r
+       $(DIROBJ)\hostasyn.obj \\r
+       $(DIROBJ)\hostcheck.obj \\r
+       $(DIROBJ)\hostip.obj \\r
+       $(DIROBJ)\hostip4.obj \\r
+       $(DIROBJ)\hostip6.obj \\r
+       $(DIROBJ)\hostsyn.obj \\r
+       $(DIROBJ)\http.obj \\r
+       $(DIROBJ)\http_chunks.obj \\r
+       $(DIROBJ)\http_digest.obj \\r
+       $(DIROBJ)\http_negotiate.obj \\r
+       $(DIROBJ)\http_negotiate_sspi.obj \\r
+       $(DIROBJ)\http_proxy.obj \\r
+       $(DIROBJ)\idn_win32.obj \\r
+       $(DIROBJ)\if2ip.obj \\r
+       $(DIROBJ)\imap.obj \\r
+       $(DIROBJ)\inet_ntop.obj \\r
+       $(DIROBJ)\inet_pton.obj \\r
+       $(DIROBJ)\krb5.obj \\r
+       $(DIROBJ)\ldap.obj \\r
+       $(DIROBJ)\llist.obj \\r
+       $(DIROBJ)\md4.obj \\r
+       $(DIROBJ)\md5.obj \\r
+       $(DIROBJ)\memdebug.obj \\r
+       $(DIROBJ)\mprintf.obj \\r
+       $(DIROBJ)\multi.obj \\r
+       $(DIROBJ)\netrc.obj \\r
+       $(DIROBJ)\non-ascii.obj \\r
+       $(DIROBJ)\nonblock.obj \\r
+       $(DIROBJ)\nss.obj \\r
+       $(DIROBJ)\openldap.obj \\r
+       $(DIROBJ)\parsedate.obj \\r
+       $(DIROBJ)\pingpong.obj \\r
+       $(DIROBJ)\pipeline.obj \\r
+       $(DIROBJ)\polarssl.obj \\r
+       $(DIROBJ)\polarssl_threadlock.obj \\r
+       $(DIROBJ)\pop3.obj \\r
+       $(DIROBJ)\progress.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
+       $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
+       $(DIROBJ)\security.obj \\r
+       $(DIROBJ)\select.obj \\r
+       $(DIROBJ)\sendf.obj \\r
+       $(DIROBJ)\share.obj \\r
+       $(DIROBJ)\slist.obj \\r
+       $(DIROBJ)\smb.obj \\r
+       $(DIROBJ)\smtp.obj \\r
+       $(DIROBJ)\socks.obj \\r
+       $(DIROBJ)\socks_gssapi.obj \\r
+       $(DIROBJ)\socks_sspi.obj \\r
+       $(DIROBJ)\speedcheck.obj \\r
+       $(DIROBJ)\splay.obj \\r
+       $(DIROBJ)\ssh.obj \\r
+       $(DIROBJ)\vtls.obj \\r
+       $(DIROBJ)\openssl.obj \\r
+       $(DIROBJ)\strdup.obj \\r
+       $(DIROBJ)\strequal.obj \\r
+       $(DIROBJ)\strerror.obj \\r
+       $(DIROBJ)\strtok.obj \\r
+       $(DIROBJ)\strtoofft.obj \\r
+       $(DIROBJ)\telnet.obj \\r
+       $(DIROBJ)\tftp.obj \\r
+       $(DIROBJ)\timeval.obj \\r
+       $(DIROBJ)\transfer.obj \\r
+       $(DIROBJ)\url.obj \\r
+       $(DIROBJ)\version.obj \\r
+       $(DIROBJ)\warnless.obj \\r
+       $(DIROBJ)\wildcard.obj \\r
+       $(RESOURCE)\r
+\r
+all : $(TARGET)\r
+\r
+$(TARGET): $(X_OBJS)\r
+       $(LNK) $(LFLAGS) $(X_OBJS)\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\*.exp                  . /y\r
+       -xcopy $(DIROBJ)\*.pdb                  . /y\r
+\r
+$(X_OBJS): $(DIROBJ)\r
+\r
+$(DIROBJ):\r
+       @if not exist "$(DIROBJ)" mkdir $(DIROBJ)\r
+\r
+.SUFFIXES: .c .obj .res\r
+\r
+{.\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+{.\vtls\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+debug-dll\libcurl.res \\r
+debug-dll-ssl-dll\libcurl.res \\r
+debug-dll-zlib-dll\libcurl.res \\r
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc\r
+\r
+release-dll\libcurl.res \\r
+release-dll-ssl-dll\libcurl.res \\r
+release-dll-zlib-dll\libcurl.res \\r
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc\r
+!ENDIF  # End of case where a config was provided.\r
index ee20ebe..ba903c9 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
 !INCLUDE ..\winbuild\Makefile.msvc.names\r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH   = ../../openssl-0.9.8zc\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF LIBSSH2_PATH\r
-LIBSSH2_PATH   = ../../libssh2-1.4.3\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -90,7 +90,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -105,7 +105,7 @@ WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
 \r
 CCNODBG      = cl.exe /O2 /DNDEBUG\r
 CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /GZ\r
-CFLAGSSSL    = /DUSE_SSLEAY /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
 CFLAGSWINSSL = /DUSE_SCHANNEL\r
 CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
 CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
@@ -427,7 +427,7 @@ CFGSET   = TRUE
 TARGET = $(LIBCURL_DYN_LIB_DBG)\r
 DIROBJ = $(CFG)\r
 LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
-CC     = $(CCDEBUG) $(RTLIBD) \r
+CC     = $(CCDEBUG) $(RTLIBD)\r
 CFGSET = TRUE\r
 RESOURCE = $(DIROBJ)\libcurl.res\r
 !ENDIF\r
@@ -528,13 +528,12 @@ X_OBJS= \
        $(DIROBJ)\asyn-thread.obj \\r
        $(DIROBJ)\axtls.obj \\r
        $(DIROBJ)\base64.obj \\r
-       $(DIROBJ)\bundles.obj \\r
        $(DIROBJ)\conncache.obj \\r
        $(DIROBJ)\connect.obj \\r
        $(DIROBJ)\content_encoding.obj \\r
        $(DIROBJ)\cookie.obj \\r
        $(DIROBJ)\curl_addrinfo.obj \\r
-       $(DIROBJ)\curl_darwinssl.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
        $(DIROBJ)\curl_endian.obj \\r
        $(DIROBJ)\curl_fnmatch.obj \\r
        $(DIROBJ)\curl_gethostname.obj \\r
@@ -549,10 +548,10 @@ X_OBJS= \
        $(DIROBJ)\curl_sasl.obj \\r
        $(DIROBJ)\curl_sasl_gssapi.obj \\r
        $(DIROBJ)\curl_sasl_sspi.obj \\r
-       $(DIROBJ)\curl_schannel.obj \\r
        $(DIROBJ)\curl_sspi.obj \\r
        $(DIROBJ)\curl_threads.obj \\r
        $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
        $(DIROBJ)\dict.obj \\r
        $(DIROBJ)\dotdot.obj \\r
        $(DIROBJ)\easy.obj \\r
@@ -607,6 +606,7 @@ X_OBJS= \
        $(DIROBJ)\progress.obj \\r
        $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
        $(DIROBJ)\select.obj \\r
        $(DIROBJ)\sendf.obj \\r
diff --git a/lib/Makefile.vc7 b/lib/Makefile.vc7
new file mode 100644 (file)
index 0000000..76daae3
--- /dev/null
@@ -0,0 +1,677 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-library.\r
+\r
+###########################################################################\r
+#\r
+# Makefile for building libcurl with MSVC7\r
+#\r
+# Usage: see usage message below\r
+#        Should be invoked from \lib directory\r
+#        Edit the paths and desired library name\r
+#        SSL path is only required if you intend compiling\r
+#        with SSL.\r
+#\r
+# This make file leaves the result either a .lib or .dll file\r
+# in the \lib directory. It should be called from the \lib\r
+# directory.\r
+#\r
+# An option would have been to allow the source directory to\r
+# be specified, but I saw no requirement.\r
+#\r
+# Another option would have been to leave the .lib and .dll\r
+# files in the "cfg" directory, but then the make file\r
+# in \src would need to be changed.\r
+#\r
+##############################################################\r
+\r
+# ----------------------------------------------\r
+# Verify that current subdir is libcurl's 'lib'\r
+# ----------------------------------------------\r
+\r
+!IF ! EXIST(.\curl_addrinfo.c)\r
+!  MESSAGE Can not process this makefile from outside of libcurl's 'lib' subdirectory.\r
+!  MESSAGE Change to libcurl's 'lib' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF LIBSSH2_PATH\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH  = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC7 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+#############################################################\r
+## Nothing more to do below this line!\r
+\r
+CCNODBG      = cl.exe /O2 /DNDEBUG\r
+CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /GZ\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSWINSSL = /DUSE_SCHANNEL\r
+CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
+CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+CFLAGS       = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+CFLAGSLIB    = /DCURL_STATICLIB\r
+LNKDLL       = link.exe /DLL\r
+LNKLIB       = link.exe /lib\r
+LFLAGS       = /nologo /machine:$(MACHINE)\r
+SSLLIBS      = libeay32.lib ssleay32.lib\r
+ZLIBLIBSDLL  = zdll.lib\r
+ZLIBLIBS     = zlib.lib\r
+WINLIBS      = ws2_32.lib wldap32.lib advapi32.lib\r
+CFLAGS       = $(CFLAGS)\r
+\r
+CFGSET       = FALSE\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+!IFDEF USE_IPV6\r
+CFLAGS = $(CFLAGS) /DUSE_IPV6\r
+!ENDIF\r
+\r
+!IFDEF USE_IDN\r
+CFLAGS = $(CFLAGS) /DUSE_WIN32_IDN /DWANT_IDN_PROTOTYPES\r
+!ENDIF\r
+\r
+##############################################################\r
+# Runtime library configuration\r
+\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+\r
+######################\r
+# release\r
+\r
+!IF "$(CFG)" == "release"\r
+TARGET = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCNODBG) $(RTLIB) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl\r
+\r
+!IF "$(CFG)" == "release-winssl"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-winssl-zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSWINSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# release-dll\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC     = $(CCNODBG) $(RTLIB)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# release-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_REL)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_REL)\r
+CC       = $(CCNODBG) $(RTLIB) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug\r
+\r
+!IF "$(CFG)" == "debug"\r
+TARGET = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC     = $(CCDEBUG) $(RTLIBD) $(CFLAGSLIB)\r
+CFGSET = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl\r
+\r
+!IF "$(CFG)" == "debug-ssl"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib\r
+\r
+!IF "$(CFG)" == "debug-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-ssh2-zlib\r
+\r
+!IF "$(CFG)" == "debug-ssl-ssh2-zlib"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSH2 = "/LIBPATH:$(LIBSSH2_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32"\r
+LNK      = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSSSH2) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSSSH2) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_STA_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB)\r
+CFGSET   = TRUE\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll\r
+\r
+!IF "$(CFG)" == "debug-dll"\r
+TARGET = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ = $(CFG)\r
+LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC     = $(CCDEBUG) $(RTLIBD)\r
+CFGSET = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+######################\r
+# debug-dll-ssl-dll-zlib-dll\r
+\r
+!IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll"\r
+TARGET   = $(LIBCURL_DYN_LIB_DBG)\r
+DIROBJ   = $(CFG)\r
+LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)"\r
+LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll"\r
+LNK      = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
+CC       = $(CCDEBUG) $(RTLIBD) $(CFLAGSSSL) $(CFLAGSZLIB)\r
+CFGSET   = TRUE\r
+RESOURCE = $(DIROBJ)\libcurl.res\r
+!ENDIF\r
+\r
+#######################\r
+# Usage\r
+#\r
+!IF "$(CFGSET)" == "FALSE" && "$(CFG)" != ""\r
+!MESSAGE Usage: nmake /f makefile.vc6 CFG=<config> <target>\r
+!MESSAGE where <config> is one of:\r
+!MESSAGE   release                      - release static library\r
+!MESSAGE   release-ssl                  - release static library with ssl\r
+!MESSAGE   release-zlib                 - release static library with zlib\r
+!MESSAGE   release-ssl-zlib             - release static library with ssl and zlib\r
+!MESSAGE   release-ssl-ssh2-zlib        - release static library with ssl, ssh2 and zlib\r
+!MESSAGE   release-ssl-dll              - release static library with dynamic ssl\r
+!MESSAGE   release-zlib-dll             - release static library with dynamic zlib\r
+!MESSAGE   release-ssl-dll-zlib-dll     - release static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   release-dll                  - release dynamic library\r
+!MESSAGE   release-dll-ssl-dll          - release dynamic library with dynamic ssl\r
+!MESSAGE   release-dll-zlib-dll         - release dynamic library with dynamic zlib\r
+!MESSAGE   release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug                        - debug static library\r
+!MESSAGE   debug-ssl                    - debug static library with ssl\r
+!MESSAGE   debug-zlib                   - debug static library with zlib\r
+!MESSAGE   debug-ssl-zlib               - debug static library with ssl and zlib\r
+!MESSAGE   debug-ssl-ssh2-zlib          - debug static library with ssl, ssh2 and zlib\r
+!MESSAGE   debug-ssl-dll                - debug static library with dynamic ssl\r
+!MESSAGE   debug-zlib-dll               - debug static library with dynamic zlib\r
+!MESSAGE   debug-ssl-dll-zlib-dll       - debug static library with dynamic ssl and dynamic zlib\r
+!MESSAGE   debug-dll                    - debug dynamic library\r
+!MESSAGE   debug-dll-ssl-dll            - debug dynamic library with dynamic ssl\r
+!MESSAGE   debug-dll-zlib-dll           - debug dynamic library with dynamic zlib1\r
+!MESSAGE   debug-dll-ssl-dll-zlib-dll   - debug dynamic library with dynamic ssl and dynamic zlib\r
+!MESSAGE <target> can be left blank in which case all is assumed\r
+!ERROR please choose a valid configuration "$(CFG)"\r
+!ENDIF\r
+\r
+#######################\r
+# Only the clean target can be used if a config was not provided.\r
+#\r
+!IF "$(CFGSET)" == "FALSE"\r
+clean:\r
+       @-erase /s *.dll 2> NUL\r
+       @-erase /s *.exp 2> NUL\r
+       @-erase /s *.idb 2> NUL\r
+       @-erase /s *.lib 2> NUL\r
+       @-erase /s *.obj 2> NUL\r
+       @-erase /s *.pch 2> NUL\r
+       @-erase /s *.pdb 2> NUL\r
+       @-erase /s *.res 2> NUL\r
+!ELSE\r
+# A config was provided, so the library can be built.\r
+#\r
+X_OBJS= \\r
+       $(DIROBJ)\amigaos.obj \\r
+       $(DIROBJ)\asyn-ares.obj \\r
+       $(DIROBJ)\asyn-thread.obj \\r
+       $(DIROBJ)\axtls.obj \\r
+       $(DIROBJ)\base64.obj \\r
+       $(DIROBJ)\conncache.obj \\r
+       $(DIROBJ)\connect.obj \\r
+       $(DIROBJ)\content_encoding.obj \\r
+       $(DIROBJ)\cookie.obj \\r
+       $(DIROBJ)\curl_addrinfo.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
+       $(DIROBJ)\curl_endian.obj \\r
+       $(DIROBJ)\curl_fnmatch.obj \\r
+       $(DIROBJ)\curl_gethostname.obj \\r
+       $(DIROBJ)\curl_gssapi.obj \\r
+       $(DIROBJ)\curl_memrchr.obj \\r
+       $(DIROBJ)\curl_multibyte.obj \\r
+       $(DIROBJ)\curl_ntlm.obj \\r
+       $(DIROBJ)\curl_ntlm_core.obj \\r
+       $(DIROBJ)\curl_ntlm_msgs.obj \\r
+       $(DIROBJ)\curl_ntlm_wb.obj \\r
+       $(DIROBJ)\curl_rtmp.obj \\r
+       $(DIROBJ)\curl_sasl.obj \\r
+       $(DIROBJ)\curl_sasl_gssapi.obj \\r
+       $(DIROBJ)\curl_sasl_sspi.obj \\r
+       $(DIROBJ)\curl_sspi.obj \\r
+       $(DIROBJ)\curl_threads.obj \\r
+       $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
+       $(DIROBJ)\dict.obj \\r
+       $(DIROBJ)\dotdot.obj \\r
+       $(DIROBJ)\easy.obj \\r
+       $(DIROBJ)\escape.obj \\r
+       $(DIROBJ)\file.obj \\r
+       $(DIROBJ)\fileinfo.obj \\r
+       $(DIROBJ)\formdata.obj \\r
+       $(DIROBJ)\ftp.obj \\r
+       $(DIROBJ)\ftplistparser.obj \\r
+       $(DIROBJ)\getenv.obj \\r
+       $(DIROBJ)\getinfo.obj \\r
+       $(DIROBJ)\gopher.obj \\r
+       $(DIROBJ)\gtls.obj \\r
+       $(DIROBJ)\hash.obj \\r
+       $(DIROBJ)\hmac.obj \\r
+       $(DIROBJ)\hostasyn.obj \\r
+       $(DIROBJ)\hostcheck.obj \\r
+       $(DIROBJ)\hostip.obj \\r
+       $(DIROBJ)\hostip4.obj \\r
+       $(DIROBJ)\hostip6.obj \\r
+       $(DIROBJ)\hostsyn.obj \\r
+       $(DIROBJ)\http.obj \\r
+       $(DIROBJ)\http_chunks.obj \\r
+       $(DIROBJ)\http_digest.obj \\r
+       $(DIROBJ)\http_negotiate.obj \\r
+       $(DIROBJ)\http_negotiate_sspi.obj \\r
+       $(DIROBJ)\http_proxy.obj \\r
+       $(DIROBJ)\idn_win32.obj \\r
+       $(DIROBJ)\if2ip.obj \\r
+       $(DIROBJ)\imap.obj \\r
+       $(DIROBJ)\inet_ntop.obj \\r
+       $(DIROBJ)\inet_pton.obj \\r
+       $(DIROBJ)\krb5.obj \\r
+       $(DIROBJ)\ldap.obj \\r
+       $(DIROBJ)\llist.obj \\r
+       $(DIROBJ)\md4.obj \\r
+       $(DIROBJ)\md5.obj \\r
+       $(DIROBJ)\memdebug.obj \\r
+       $(DIROBJ)\mprintf.obj \\r
+       $(DIROBJ)\multi.obj \\r
+       $(DIROBJ)\netrc.obj \\r
+       $(DIROBJ)\non-ascii.obj \\r
+       $(DIROBJ)\nonblock.obj \\r
+       $(DIROBJ)\nss.obj \\r
+       $(DIROBJ)\openldap.obj \\r
+       $(DIROBJ)\parsedate.obj \\r
+       $(DIROBJ)\pingpong.obj \\r
+       $(DIROBJ)\pipeline.obj \\r
+       $(DIROBJ)\polarssl.obj \\r
+       $(DIROBJ)\polarssl_threadlock.obj \\r
+       $(DIROBJ)\pop3.obj \\r
+       $(DIROBJ)\progress.obj \\r
+       $(DIROBJ)\rawstr.obj \\r
+       $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
+       $(DIROBJ)\security.obj \\r
+       $(DIROBJ)\select.obj \\r
+       $(DIROBJ)\sendf.obj \\r
+       $(DIROBJ)\share.obj \\r
+       $(DIROBJ)\slist.obj \\r
+       $(DIROBJ)\smb.obj \\r
+       $(DIROBJ)\smtp.obj \\r
+       $(DIROBJ)\socks.obj \\r
+       $(DIROBJ)\socks_gssapi.obj \\r
+       $(DIROBJ)\socks_sspi.obj \\r
+       $(DIROBJ)\speedcheck.obj \\r
+       $(DIROBJ)\splay.obj \\r
+       $(DIROBJ)\ssh.obj \\r
+       $(DIROBJ)\vtls.obj \\r
+       $(DIROBJ)\openssl.obj \\r
+       $(DIROBJ)\strdup.obj \\r
+       $(DIROBJ)\strequal.obj \\r
+       $(DIROBJ)\strerror.obj \\r
+       $(DIROBJ)\strtok.obj \\r
+       $(DIROBJ)\strtoofft.obj \\r
+       $(DIROBJ)\telnet.obj \\r
+       $(DIROBJ)\tftp.obj \\r
+       $(DIROBJ)\timeval.obj \\r
+       $(DIROBJ)\transfer.obj \\r
+       $(DIROBJ)\url.obj \\r
+       $(DIROBJ)\version.obj \\r
+       $(DIROBJ)\warnless.obj \\r
+       $(DIROBJ)\wildcard.obj \\r
+       $(RESOURCE)\r
+\r
+all : $(TARGET)\r
+\r
+$(TARGET): $(X_OBJS)\r
+       $(LNK) $(LFLAGS) $(X_OBJS)\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_STA_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_DYN_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_REL) . /y\r
+       -xcopy $(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) . /y\r
+       -xcopy $(DIROBJ)\*.exp                  . /y\r
+       -xcopy $(DIROBJ)\*.pdb                  . /y\r
+\r
+$(X_OBJS): $(DIROBJ)\r
+\r
+$(DIROBJ):\r
+       @if not exist "$(DIROBJ)" mkdir $(DIROBJ)\r
+\r
+.SUFFIXES: .c .obj .res\r
+\r
+{.\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+{.\vtls\}.c{$(DIROBJ)\}.obj:\r
+       $(CC) $(CFLAGS) /Fo"$@"  $<\r
+\r
+debug-dll\libcurl.res \\r
+debug-dll-ssl-dll\libcurl.res \\r
+debug-dll-zlib-dll\libcurl.res \\r
+debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=1 /Fo $@ libcurl.rc\r
+\r
+release-dll\libcurl.res \\r
+release-dll-ssl-dll\libcurl.res \\r
+release-dll-zlib-dll\libcurl.res \\r
+release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc\r
+       rc /dDEBUGBUILD=0 /Fo $@ libcurl.rc\r
+!ENDIF  # End of case where a config was provided.\r
index 0d10ac5..a3f8b75 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
 !INCLUDE ..\winbuild\Makefile.msvc.names\r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH   = ../../openssl-0.9.8zc\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF LIBSSH2_PATH\r
-LIBSSH2_PATH   = ../../libssh2-1.4.3\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -90,7 +90,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -105,7 +105,7 @@ WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
 \r
 CCNODBG      = cl.exe /O2 /DNDEBUG\r
 CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1\r
-CFLAGSSSL    = /DUSE_SSLEAY /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
 CFLAGSWINSSL = /DUSE_SCHANNEL\r
 CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
 CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
@@ -427,7 +427,7 @@ CFGSET   = TRUE
 TARGET = $(LIBCURL_DYN_LIB_DBG)\r
 DIROBJ = $(CFG)\r
 LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
-CC     = $(CCDEBUG) $(RTLIBD) \r
+CC     = $(CCDEBUG) $(RTLIBD)\r
 CFGSET = TRUE\r
 RESOURCE = $(DIROBJ)\libcurl.res\r
 !ENDIF\r
@@ -528,13 +528,12 @@ X_OBJS= \
        $(DIROBJ)\asyn-thread.obj \\r
        $(DIROBJ)\axtls.obj \\r
        $(DIROBJ)\base64.obj \\r
-       $(DIROBJ)\bundles.obj \\r
        $(DIROBJ)\conncache.obj \\r
        $(DIROBJ)\connect.obj \\r
        $(DIROBJ)\content_encoding.obj \\r
        $(DIROBJ)\cookie.obj \\r
        $(DIROBJ)\curl_addrinfo.obj \\r
-       $(DIROBJ)\curl_darwinssl.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
        $(DIROBJ)\curl_endian.obj \\r
        $(DIROBJ)\curl_fnmatch.obj \\r
        $(DIROBJ)\curl_gethostname.obj \\r
@@ -549,10 +548,10 @@ X_OBJS= \
        $(DIROBJ)\curl_sasl.obj \\r
        $(DIROBJ)\curl_sasl_gssapi.obj \\r
        $(DIROBJ)\curl_sasl_sspi.obj \\r
-       $(DIROBJ)\curl_schannel.obj \\r
        $(DIROBJ)\curl_sspi.obj \\r
        $(DIROBJ)\curl_threads.obj \\r
        $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
        $(DIROBJ)\dict.obj \\r
        $(DIROBJ)\dotdot.obj \\r
        $(DIROBJ)\easy.obj \\r
@@ -607,6 +606,7 @@ X_OBJS= \
        $(DIROBJ)\progress.obj \\r
        $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
        $(DIROBJ)\select.obj \\r
        $(DIROBJ)\sendf.obj \\r
index 9f1b8d4..c4a8bd6 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
 !INCLUDE ..\winbuild\Makefile.msvc.names\r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH   = ../../openssl-0.9.8zc\r
+OPENSSL_PATH   = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF LIBSSH2_PATH\r
-LIBSSH2_PATH   = ../../libssh2-1.4.3\r
+LIBSSH2_PATH   = ../../libssh2-1.5.0\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -90,7 +90,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -105,7 +105,7 @@ WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"
 \r
 CCNODBG      = cl.exe /O2 /DNDEBUG\r
 CCDEBUG      = cl.exe /Od /Gm /Zi /D_DEBUG /RTC1\r
-CFLAGSSSL    = /DUSE_SSLEAY /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
+CFLAGSSSL    = /DUSE_OPENSSL /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl"\r
 CFLAGSWINSSL = /DUSE_SCHANNEL\r
 CFLAGSSSH2   = /DUSE_LIBSSH2 /DCURL_DISABLE_LDAP /DHAVE_LIBSSH2 /DHAVE_LIBSSH2_H /DLIBSSH2_WIN32 /DLIBSSH2_LIBRARY /I "$(LIBSSH2_PATH)/include"\r
 CFLAGSZLIB   = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
@@ -427,7 +427,7 @@ CFGSET   = TRUE
 TARGET = $(LIBCURL_DYN_LIB_DBG)\r
 DIROBJ = $(CFG)\r
 LNK    = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(LIBCURL_IMP_LIB_DBG) /PDB:$(DIROBJ)\$(LIBCURL_DYN_LIB_PDB)\r
-CC     = $(CCDEBUG) $(RTLIBD) \r
+CC     = $(CCDEBUG) $(RTLIBD)\r
 CFGSET = TRUE\r
 RESOURCE = $(DIROBJ)\libcurl.res\r
 !ENDIF\r
@@ -528,13 +528,12 @@ X_OBJS= \
        $(DIROBJ)\asyn-thread.obj \\r
        $(DIROBJ)\axtls.obj \\r
        $(DIROBJ)\base64.obj \\r
-       $(DIROBJ)\bundles.obj \\r
        $(DIROBJ)\conncache.obj \\r
        $(DIROBJ)\connect.obj \\r
        $(DIROBJ)\content_encoding.obj \\r
        $(DIROBJ)\cookie.obj \\r
        $(DIROBJ)\curl_addrinfo.obj \\r
-       $(DIROBJ)\curl_darwinssl.obj \\r
+       $(DIROBJ)\curl_des.obj \\r
        $(DIROBJ)\curl_endian.obj \\r
        $(DIROBJ)\curl_fnmatch.obj \\r
        $(DIROBJ)\curl_gethostname.obj \\r
@@ -549,10 +548,10 @@ X_OBJS= \
        $(DIROBJ)\curl_sasl.obj \\r
        $(DIROBJ)\curl_sasl_gssapi.obj \\r
        $(DIROBJ)\curl_sasl_sspi.obj \\r
-       $(DIROBJ)\curl_schannel.obj \\r
        $(DIROBJ)\curl_sspi.obj \\r
        $(DIROBJ)\curl_threads.obj \\r
        $(DIROBJ)\cyassl.obj \\r
+       $(DIROBJ)\darwinssl.obj \\r
        $(DIROBJ)\dict.obj \\r
        $(DIROBJ)\dotdot.obj \\r
        $(DIROBJ)\easy.obj \\r
@@ -607,6 +606,7 @@ X_OBJS= \
        $(DIROBJ)\progress.obj \\r
        $(DIROBJ)\rawstr.obj \\r
        $(DIROBJ)\rtsp.obj \\r
+       $(DIROBJ)\schannel.obj \\r
        $(DIROBJ)\security.obj \\r
        $(DIROBJ)\select.obj \\r
        $(DIROBJ)\sendf.obj \\r
diff --git a/lib/README.ares b/lib/README.ares
deleted file mode 100644 (file)
index 8c77937..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
-          How To Build libcurl to Use c-ares For Asynch Name Resolves
-          ===========================================================
-
-c-ares:
-  http://c-ares.haxx.se/
-
-NOTE
-  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.
-
-Build c-ares
-============
-
-1. unpack the c-ares archive
-2. cd c-ares-dir
-3. ./configure
-4. make
-5. make install
-
-Build libcurl to use c-ares in the curl source tree
-===================================================
-
-1. name or symlink the c-ares source directory 'ares' in the curl source
-   directory
-2. ./configure --enable-ares
-
-  Optionally, you can point out the c-ares install tree root with the the
-  --enable-ares option.
-
-3. make
-
-Build libcurl to use an installed c-ares
-========================================
-
-1. ./configure --enable-ares=/path/to/ares/install
-2. make
-
-c-ares on win32
-===============
-(description brought by Dominick Meglio)
-
-First I compiled c-ares. I changed the default C runtime library to be the
-single-threaded rather than the multi-threaded (this seems to be required to
-prevent linking errors later on). Then I simply build the areslib project (the
-other projects adig/ahost seem to fail under MSVC).
-
-Next was libcurl. I opened lib/config-win32.h and I added a:
- #define USE_ARES 1
-
-Next thing I did was I added the path for the ares includes to the include
-path, and the libares.lib to the libraries.
-
-Lastly, I also changed libcurl to be single-threaded rather than
-multi-threaded, again this was to prevent some duplicate symbol errors. I'm
-not sure why I needed to change everything to single-threaded, but when I
-didn't I got redefinition errors for several CRT functions (malloc, stricmp,
-etc.)
-
-I would have modified the MSVC++ project files, but I only have VC.NET and it
-uses a different format than VC6.0 so I didn't want to go and change
-everything and remove VC6.0 support from libcurl.
diff --git a/lib/README.curl_off_t b/lib/README.curl_off_t
deleted file mode 100644 (file)
index 923b277..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-
-   curl_off_t explained
-   ====================
-
-curl_off_t is a data type provided by the external libcurl include headers. It
-is the type meant to be used for the curl_easy_setopt() options that end with
-LARGE. The type is 64bit large on most modern platforms.
-
-Transition from < 7.19.0 to >= 7.19.0
--------------------------------------
-
-Applications that used libcurl before 7.19.0 that are rebuilt with a libcurl
-that is 7.19.0 or later may or may not have to worry about anything of
-this. We have made a significant effort to make the transition really seamless
-and transparent.
-
-You have have to take notice if you are in one of the following situations:
-
-o Your app is using or will after the transition use a libcurl that is built
-  with LFS (large file support) disabled even though your system otherwise
-  supports it.
-
-o Your app is using or will after the transition use a libcurl that doesn't
-  support LFS at all, but your system and compiler support 64bit data types.
-
-In both these cases, the curl_off_t type will now (after the transition) be
-64bit where it previously was 32bit. This will cause a binary incompatibility
-that you MAY need to deal with.
-
-Benefits
---------
-
-This new way has several benefits:
-
-o Platforms without LFS support can still use libcurl to do >32 bit file
-  transfers and range operations etc as long as they have >32 bit data-types
-  supported.
-
-o Applications will no longer easily build with the curl_off_t size
-  mismatched, which has been a very frequent (and annoying) problem with
-  libcurl <= 7.18.2
-
-Historically
-------------
-
-Previously, before 7.19.0, the curl_off_t type would be rather strongly
-connected to the size of the system off_t type, where currently curl_off_t is
-independent of that.
-
-The strong connection to off_t made it troublesome for application authors
-since when they did mistakes, they could get curl_off_t type of different
-sizes in the app vs libcurl, and that caused strange effects that were hard to
-track and detect by users of libcurl.
-
-SONAME
-------
-
-We opted to not bump the soname for the library unconditionally, simply
-because soname bumping is causing a lot of grief and moaning all over the
-community so we try to keep that at minimum. Also, our selected design path
-should be 100% backwards compatible for the vast majority of all libcurl
-users.
-
-Enforce SONAME bump
--------------------
-
-If configure doesn't detect your case where a bump is necessary, re-run it
-with the --enable-soname-bump command line option!
diff --git a/lib/README.curlx b/lib/README.curlx
deleted file mode 100644 (file)
index 5375b0d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
-                     Source Code Functions Apps Might Use
-                     ====================================
-
-The libcurl source code offers a few functions by source only. They are not
-part of the official libcurl API, but the source files might be useful for
-others so apps can optionally compile/build with these sources to gain
-additional functions.
-
-We provide them through a single header file for easy access for apps:
-"curlx.h"
-
- curlx_strtoofft()
-
-   A macro that converts a string containing a number to a curl_off_t number.
-   This might use the curlx_strtoll() function which is provided as source
-   code in strtoofft.c. Note that the function is only provided if no
-   strtoll() (or equivalent) function exist on your platform. If curl_off_t
-   is only a 32 bit number on your platform, this macro uses strtol().
-
- curlx_tvnow()
-
-   returns a struct timeval for the current time.
-
- curlx_tvdiff()
-
-   returns the difference between two timeval structs, in number of
-   milliseconds.
-
- curlx_tvdiff_secs()
-
-   returns the same as curlx_tvdiff but with full usec resolution (as a
-   double)
-
-FUTURE
-======
-
- Several functions will be removed from the public curl_ name space in a
- future libcurl release. They will then only become available as curlx_
- functions instead. To make the transition easier, we already today provide
- these functions with the curlx_ prefix to allow sources to get built properly
- with the new function names. The functions this concerns are:
-
-      curlx_getenv
-      curlx_strequal
-      curlx_strnequal
-      curlx_mvsnprintf
-      curlx_msnprintf
-      curlx_maprintf
-      curlx_mvaprintf
-      curlx_msprintf
-      curlx_mprintf
-      curlx_mfprintf
-      curlx_mvsprintf
-      curlx_mvprintf
-      curlx_mvfprintf
diff --git a/lib/README.encoding b/lib/README.encoding
deleted file mode 100644 (file)
index 1012bb9..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-
-                    Content Encoding Support for libcurl
-
-* About content encodings:
-
-HTTP/1.1 [RFC 2616] specifies that a client may request that a server encode
-its response. This is usually used to compress a response using one of a set
-of commonly available compression techniques. These schemes are `deflate' (the
-zlib algorithm), `gzip' and `compress' [sec 3.5, RFC 2616]. A client requests
-that the sever perform an encoding by including an Accept-Encoding header in
-the request document. The value of the header should be one of the recognized
-tokens `deflate', ... (there's a way to register new schemes/tokens, see sec
-3.5 of the spec). A server MAY honor the client's encoding request. When a
-response is encoded, the server includes a Content-Encoding header in the
-response. The value of the Content-Encoding header indicates which scheme was
-used to encode the data.
-
-A client may tell a server that it can understand several different encoding
-schemes. In this case the server may choose any one of those and use it to
-encode the response (indicating which one using the Content-Encoding header).
-It's also possible for a client to attach priorities to different schemes so
-that the server knows which it prefers. See sec 14.3 of RFC 2616 for more
-information on the Accept-Encoding header.
-
-* Current support for content encoding:
-
-Support for the 'deflate' and 'gzip' content encoding are supported by
-libcurl. Both regular and chunked transfers should work fine.  The library
-zlib is required for this feature. 'deflate' support was added by James
-Gallagher, and support for the 'gzip' encoding was added by Dan Fandrich.
-
-* The libcurl interface:
-
-To cause libcurl to request a content encoding use:
-
-    curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, <string>)
-
-where <string> is the intended value of the Accept-Encoding header.
-
-Currently, libcurl only understands how to process responses that use the
-"deflate" or "gzip" Content-Encoding, so the only values for
-CURLOPT_ACCEPT_ENCODING that will work (besides "identity," which does
-nothing) are "deflate" and "gzip" If a response is encoded using the
-"compress" or methods, libcurl will return an error indicating that the
-response could not be decoded.  If <string> is NULL no Accept-Encoding header
-is generated.  If <string> is a zero-length string, then an Accept-Encoding
-header containing all supported encodings will be generated.
-
-The CURLOPT_ACCEPT_ENCODING must be set to any non-NULL value for content to
-be automatically decoded.  If it is not set and the server still sends encoded
-content (despite not having been asked), the data is returned in its raw form
-and the Content-Encoding type is not checked.
-
-* The curl interface:
-
-Use the --compressed option with curl to cause it to ask servers to compress
-responses using any format supported by curl.
-
-James Gallagher <jgallagher@gso.uri.edu>
-Dan Fandrich <dan@coneharvesters.com>
diff --git a/lib/README.hostip b/lib/README.hostip
deleted file mode 100644 (file)
index d5688ff..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
- hostip.c explained
- ==================
-
- The main COMPILE-TIME DEFINES to keep in mind when reading the host*.c
- source file are these:
-
- CURLRES_IPV6 - this host has getaddrinfo() and family, and thus we use
- that. The host may not be able to resolve IPv6, but we don't really have to
- take that into account. Hosts that aren't IPv6-enabled have CURLRES_IPV4
- defined.
-
- CURLRES_ARES - is defined if libcurl is built to use c-ares for asynchronous
- name resolves. This can be Windows or *nix.
-
- CURLRES_THREADED - is defined if libcurl is built to use threading for
- asynchronous name resolves. The name resolve will be done in a new thread,
- and the supported asynch API will be the same as for ares-builds. This is
- the default under (native) Windows.
-
- If any of the two previous are defined, CURLRES_ASYNCH is defined too. If
- libcurl is not built to use an asynchronous resolver, CURLRES_SYNCH is
- defined.
-
- The host*.c sources files are split up like this:
-
- hostip.c      - method-independent resolver functions and utility functions
- hostasyn.c    - functions for asynchronous name resolves
- hostsyn.c     - functions for synchronous name resolves
- asyn-ares.c   - functions for asynchronous name resolves using c-ares
- asyn-thread.c - functions for asynchronous name resolves using threads
- hostip4.c     - IPv4 specific functions
- hostip6.c     - IPv6 specific functions
-
- The hostip.h is the single united header file for all this. It defines the
- CURLRES_* defines based on the config*.h and curl_setup.h defines.
diff --git a/lib/README.httpauth b/lib/README.httpauth
deleted file mode 100644 (file)
index 9605045..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-
-1. PUT/POST without a known auth to use (possibly no auth required):
-
-   (When explicitly set to use a multi-pass auth when doing a POST/PUT,
-   libcurl should immediately go the Content-Length: 0 bytes route to avoid
-   the first send all data phase, step 2. If told to use a single-pass auth,
-   goto step 3.)
-
-   Issue the proper PUT/POST request immediately, with the correct
-   Content-Length and Expect: headers.
-
-   If a 100 response is received or the wait for one times out, start sending
-   the request-body.
-
-   If a 401 (or 407 when talking through a proxy) is received, then:
-
-   If we have "more than just a little" data left to send, close the
-   connection. Exactly what "more than just a little" means will have to be
-   determined. Possibly the current transfer speed should be taken into
-   account as well.
-
-   NOTE: if the size of the POST data is less than MAX_INITIAL_POST_SIZE (when
-   CURLOPT_POSTFIELDS is used), libcurl will send everything in one single
-   write() (all request-headers and request-body) and thus it will
-   unconditionally send the full post data here.
-
-2. PUT/POST with multi-pass auth but not yet completely negotiated:
-
-   Send a PUT/POST request, we know that it will be rejected and thus we claim
-   Content-Length zero to avoid having to send the request-body. (This seems
-   to be what IE does.)
-
-3. PUT/POST as the last step in the auth negotiation, that is when we have
-   what we believe is a completed negotiation:
-
-   Send a full and proper PUT/POST request (again) with the proper
-   Content-Length and a following request-body.
-
-   NOTE: this may very well be the second (or even third) time the whole or at
-   least parts of the request body is sent to the server. Since the data may
-   be provided to libcurl with a callback, we need a way to tell the app that
-   the upload is to be restarted so that the callback will provide data from
-   the start again.  This requires an API method/mechanism that libcurl
-   doesn't have today. See below.
-
-Data Rewind
-
-   It will be troublesome for some apps to deal with a rewind like this in all
-   circumstances. I'm thinking for example when using 'curl' to upload data
-   from stdin. If libcurl ends up having to rewind the reading for a request
-   to succeed, of course a lack of this callback or if it returns failure, will
-   cause the request to fail completely.
-
-   The new callback is set with CURLOPT_IOCTLFUNCTION (in an attempt to add a
-   more generic function that might be used for other IO-related controls in
-   the future):
-
-     curlioerr curl_ioctl(CURL *handle, curliocmd cmd, void *clientp);
-
-   And in the case where the read is to be rewinded, it would be called with a
-   cmd named CURLIOCMD_RESTARTREAD. The callback would then return CURLIOE_OK,
-   if things are fine, or CURLIOE_FAILRESTART if not.
-
-Backwards Compatibility
-
-   The approach used until now, that issues a HEAD on the given URL to trigger
-   the auth negotiation could still be supported and encouraged, but it would
-   be up to the app to first fetch a URL with GET/HEAD to negotiate on, since
-   then a following PUT/POST wouldn't need to negotiate authentication and
-   thus avoid double-sending data.
-
-   Optionally, we keep the current approach if some option is set
-   (CURLOPT_HEADBEFOREAUTH or similar), since it seems to work fairly well for
-   POST on most servers.
diff --git a/lib/README.memoryleak b/lib/README.memoryleak
deleted file mode 100644 (file)
index 1661777..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-                                  _   _ ____  _
-                              ___| | | |  _ \| |
-                             / __| | | | |_) | |
-                            | (__| |_| |  _ <| |___
-                             \___|\___/|_| \_\_____|
-
-             How To Track Down Suspected Memory Leaks in libcurl
-             ===================================================
-
-Single-threaded
-
-  Please note that this memory leak system is not adjusted to work in more
-  than one thread. If you want/need to use it in a multi-threaded app. Please
-  adjust accordingly.
-
-
-Build
-
-  Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with
-  --enable-debug fixes this). 'make clean' first, then 'make' so that all
-  files actually are rebuilt properly. It will also make sense to build
-  libcurl with the debug option (usually -g to the compiler) so that debugging
-  it will be easier if you actually do find a leak in the library.
-
-  This will create a library that has memory debugging enabled.
-
-Modify Your Application
-
-  Add a line in your application code:
-
-       curl_memdebug("dump");
-
-  This will make the malloc debug system output a full trace of all resource
-  using functions to the given file name. Make sure you rebuild your program
-  and that you link with the same libcurl you built for this purpose as
-  described above.
-
-Run Your Application
-
-  Run your program as usual. Watch the specified memory trace file grow.
-
-  Make your program exit and use the proper libcurl cleanup functions etc. So
-  that all non-leaks are returned/freed properly.
-
-Analyze the Flow
-
-  Use the tests/memanalyze.pl perl script to analyze the dump file:
-
-    tests/memanalyze.pl dump
-
-  This now outputs a report on what resources that were allocated but never
-  freed etc. This report is very fine for posting to the list!
-
-  If this doesn't produce any output, no leak was detected in libcurl. Then
-  the leak is mostly likely to be in your code.
diff --git a/lib/README.multi_socket b/lib/README.multi_socket
deleted file mode 100644 (file)
index d91e1d9..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Implementation of the curl_multi_socket API
-
-  The main ideas of the new API are simply:
-
-   1 - The application can use whatever event system it likes as it gets info
-       from libcurl about what file descriptors libcurl waits for what action
-       on. (The previous API returns fd_sets which is very select()-centric).
-
-   2 - When the application discovers action on a single socket, it calls
-       libcurl and informs that there was action on this particular socket and
-       libcurl can then act on that socket/transfer only and not care about
-       any other transfers. (The previous API always had to scan through all
-       the existing transfers.)
-
-  The idea is that curl_multi_socket_action() calls a given callback with
-  information about what socket to wait for what action on, and the callback
-  only gets called if the status of that socket has changed.
-
-  We also added a timer callback that makes libcurl call the application when
-  the timeout value changes, and you set that with curl_multi_setopt() and the
-  CURLMOPT_TIMERFUNCTION option. To get this to work, Internally, there's an
-  added a struct to each easy handle in which we store an "expire time" (if
-  any). The structs are then "splay sorted" so that we can add and remove
-  times from the linked list and yet somewhat swiftly figure out both how long
-  time there is until the next nearest timer expires and which timer (handle)
-  we should take care of now. Of course, the upside of all this is that we get
-  a curl_multi_timeout() that should also work with old-style applications
-  that use curl_multi_perform().
-
-  We created an internal "socket to easy handles" hash table that given
-  a socket (file descriptor) return the easy handle that waits for action on
-  that socket.  This hash is made using the already existing hash code
-  (previously only used for the DNS cache).
-
-  To make libcurl able to report plain sockets in the socket callback, we had
-  to re-organize the internals of the curl_multi_fdset() etc so that the
-  conversion from sockets to fd_sets for that function is only done in the
-  last step before the data is returned. I also had to extend c-ares to get a
-  function that can return plain sockets, as that library too returned only
-  fd_sets and that is no longer good enough. The changes done to c-ares are
-  available in c-ares 1.3.1 and later.
-
-  We have done a test runs with up to 9000 connections (with a single active
-  one). The curl_multi_socket_action() invoke then takes less than 10
-  microseconds in average (using the read-only-1-byte-at-a-time hack).  We are
-  now below the 60 microseconds "per socket action" goal (the extra 50 is the
-  time libevent needs).
-
-Documentation
-
-    http://curl.haxx.se/libcurl/c/curl_multi_socket_action.html
-    http://curl.haxx.se/libcurl/c/curl_multi_timeout.html
-    http://curl.haxx.se/libcurl/c/curl_multi_setopt.html
diff --git a/lib/README.pingpong b/lib/README.pingpong
deleted file mode 100644 (file)
index 69ba9aa..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-Date: December 5, 2009
-
-Pingpong
-========
-
- Pingpong is just my (Daniel's) jestful collective name on the protocols that
- share a very similar kind of back-and-forth procedure with command and
- responses to and from the server. FTP was previously the only protocol in
- that family that libcurl supported, but when POP3, IMAP and SMTP joined the
- team I moved some of the internals into a separate pingpong module to be
- easier to get used by all these protocols to reduce code duplication and ease
- code re-use between these protocols.
-
-FTP
-
- In 7.20.0 we converted code to use the new pingpong code from previously
- having been all "native" FTP code.
-
-POP3
-
- There's no support in the documented URL format to specify the exact mail to
- get, but we support that as the path specified in the URL.
-
-IMAP
-
-SMTP
-
- There's no official URL syntax defined for SMTP, but we use only the generic
- one and we provide two additional libcurl options to specify receivers and
- sender of the actual mail.
diff --git a/lib/README.pipelining b/lib/README.pipelining
deleted file mode 100644 (file)
index e5bf6ec..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-HTTP Pipelining with libcurl
-============================
-
-Background
-
-Since pipelining implies that one or more requests are sent to a server before
-the previous response(s) have been received, we only support it for multi
-interface use.
-
-Considerations
-
-When using the multi interface, you create one easy handle for each transfer.
-Bascially any number of handles can be created, added and used with the multi
-interface - simultaneously. It is an interface designed to allow many
-simultaneous transfers while still using a single thread. Pipelining does not
-change any of these details.
-
-API
-
-We've added a new option to curl_multi_setopt() called CURLMOPT_PIPELINING
-that enables "attempted pipelining" and then all easy handles used on that
-handle will attempt to use an existing pipeline.
-
-Details
-
-- A pipeline is only created if a previous connection exists to the same IP
-  address that the new request is being made to use.
-
-- Pipelines are only supported for HTTP(S) as no other currently supported
-  protocol has features resemembling this, but we still name this feature
-  plain 'pipelining' to possibly one day support it for other protocols as
-  well.
-
-- HTTP Pipelining is for GET and HEAD requests only.
-
-- When a pipeline is in use, we must take precautions so that when used easy
-  handles (i.e those who still wait for a response) are removed from the multi
-  handle, we must deal with the outstanding response nicely.
-
-- Explicitly asking for pipelining handle X and handle Y won't be supported.
-  It isn't easy for an app to do this association. The lib should probably
-  still resolve the second one properly to make sure that they actually _can_
-  be considered for pipelining. Also, asking for explicit pipelining on handle
-  X may be tricky when handle X get a closed connection.
index 34f95e9..e2fe35d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -71,7 +71,7 @@ bool Curl_amiga_init()
 }
 
 #ifdef __libnix__
-ADD2EXIT(Curl_amiga_cleanup,-50);
+ADD2EXIT(Curl_amiga_cleanup, -50);
 #endif
 
 #endif /* __AMIGA__ && ! __ixemul__ */
index 76578be..02bee16 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 098d9a9..ec23872 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 4404b6c..adb1a23 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -68,9 +68,7 @@
 #include "connect.h"
 #include "select.h"
 #include "progress.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #  if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
      (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
@@ -166,7 +164,7 @@ void Curl_resolver_cleanup(void *resolver)
 int Curl_resolver_duphandle(void **to, void *from)
 {
   /* Clone the ares channel for the new handle */
-  if(ARES_SUCCESS != ares_dup((ares_channel*)to,(ares_channel)from))
+  if(ARES_SUCCESS != ares_dup((ares_channel*)to, (ares_channel)from))
     return CURLE_FAILED_INIT;
   return CURLE_OK;
 }
@@ -188,8 +186,7 @@ void Curl_resolver_cancel(struct connectdata *conn)
  */
 static void destroy_async_data (struct Curl_async *async)
 {
-  if(async->hostname)
-    free(async->hostname);
+  free(async->hostname);
 
   if(async->os_specific) {
     struct ResolverResults *res = (struct ResolverResults *)async->os_specific;
@@ -388,7 +385,7 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
       timeout_ms = 1000;
 
     waitperform(conn, timeout_ms);
-    Curl_resolver_is_resolved(conn,&temp_entry);
+    Curl_resolver_is_resolved(conn, &temp_entry);
 
     if(conn->async.done)
       break;
@@ -536,15 +533,15 @@ Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
   bufp = strdup(hostname);
   if(bufp) {
     struct ResolverResults *res = NULL;
-    Curl_safefree(conn->async.hostname);
+    free(conn->async.hostname);
     conn->async.hostname = bufp;
     conn->async.port = port;
     conn->async.done = FALSE;   /* not done */
     conn->async.status = 0;     /* clear */
     conn->async.dns = NULL;     /* clear */
-    res = calloc(sizeof(struct ResolverResults),1);
+    res = calloc(sizeof(struct ResolverResults), 1);
     if(!res) {
-      Curl_safefree(conn->async.hostname);
+      free(conn->async.hostname);
       conn->async.hostname = NULL;
       return NULL;
     }
index 80b5e78..83ce0ce 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "inet_ntop.h"
 #include "curl_threads.h"
 #include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
+
 /* The last #include file should be: */
 #include "memdebug.h"
 
@@ -192,13 +190,12 @@ void destroy_thread_sync_data(struct thread_sync_data * tsd)
     free(tsd->mtx);
   }
 
-  if(tsd->hostname)
-    free(tsd->hostname);
+  free(tsd->hostname);
 
   if(tsd->res)
     Curl_freeaddrinfo(tsd->res);
 
-  memset(tsd,0,sizeof(*tsd));
+  memset(tsd, 0, sizeof(*tsd));
 }
 
 /* Initialize resolver thread synchronization data */
@@ -366,9 +363,7 @@ static void destroy_async_data (struct Curl_async *async)
   }
   async->os_specific = NULL;
 
-  if(async->hostname)
-    free(async->hostname);
-
+  free(async->hostname);
   async->hostname = NULL;
 }
 
@@ -398,7 +393,7 @@ static bool init_resolve_thread (struct connectdata *conn,
   if(!init_thread_sync_data(td, hostname, port, hints))
     goto err_exit;
 
-  Curl_safefree(conn->async.hostname);
+  free(conn->async.hostname);
   conn->async.hostname = strdup(hostname);
   if(!conn->async.hostname)
     goto err_exit;
index 1b681ea..416510f 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 6b1eb7c..9bb7de4 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 /* Base64 encoding/decoding */
 
 #include "curl_setup.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "urldata.h" /* for the SessionHandle definition */
 #include "warnless.h"
 #include "curl_base64.h"
-#include "curl_memory.h"
 #include "non-ascii.h"
 
-/* include memdebug.h last */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* ---- Base64 Encoding/Decoding Table --- */
@@ -152,7 +149,7 @@ CURLcode Curl_base64_decode(const char *src,
   for(i = 0; i < numQuantums; i++) {
     size_t result = decodeQuantum(pos, src);
     if(!result) {
-      Curl_safefree(newstr);
+      free(newstr);
 
       return CURLE_BAD_CONTENT_ENCODING;
     }
@@ -176,7 +173,7 @@ static CURLcode base64_encode(const char *table64,
                               const char *inputbuff, size_t insize,
                               char **outptr, size_t *outlen)
 {
-  CURLcode error;
+  CURLcode result;
   unsigned char ibuf[3];
   unsigned char obuf[4];
   int i;
@@ -190,11 +187,11 @@ static CURLcode base64_encode(const char *table64,
   *outptr = NULL;
   *outlen = 0;
 
-  if(0 == insize)
+  if(!insize)
     insize = strlen(indata);
 
-  base64data = output = malloc(insize*4/3+4);
-  if(NULL == output)
+  base64data = output = malloc(insize * 4 / 3 + 4);
+  if(!output)
     return CURLE_OUT_OF_MEMORY;
 
   /*
@@ -202,10 +199,10 @@ static CURLcode base64_encode(const char *table64,
    * not the host encoding.  And we can't change the actual input
    * so we copy it to a buffer, translate it, and use that instead.
    */
-  error = Curl_convert_clone(data, indata, insize, &convbuf);
-  if(error) {
+  result = Curl_convert_clone(data, indata, insize, &convbuf);
+  if(result) {
     free(output);
-    return error;
+    return result;
   }
 
   if(convbuf)
@@ -236,12 +233,14 @@ static CURLcode base64_encode(const char *table64,
                table64[obuf[0]],
                table64[obuf[1]]);
       break;
+
     case 2: /* two bytes read */
       snprintf(output, 5, "%c%c%c=",
                table64[obuf[0]],
                table64[obuf[1]],
                table64[obuf[2]]);
       break;
+
     default:
       snprintf(output, 5, "%c%c%c%c",
                table64[obuf[0]],
@@ -252,13 +251,17 @@ static CURLcode base64_encode(const char *table64,
     }
     output += 4;
   }
+
+  /* Zero terminate */
   *output = '\0';
-  *outptr = base64data; /* return pointer to new data, allocated memory */
 
-  if(convbuf)
-    free(convbuf);
+  /* Return the pointer to the new data (allocated memory) */
+  *outptr = base64data;
+
+  free(convbuf);
 
-  *outlen = strlen(base64data); /* return the length of the new data */
+  /* Return the length of the new data */
+  *outlen = strlen(base64data);
 
   return CURLE_OK;
 }
@@ -310,4 +313,3 @@ CURLcode Curl_base64url_encode(struct SessionHandle *data,
 {
   return base64_encode(base64url, data, inputbuff, insize, outptr, outlen);
 }
-/* ---- End of Base64 Encoding ---- */
diff --git a/lib/bundles.c b/lib/bundles.c
deleted file mode 100644 (file)
index aadf026..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/***************************************************************************
- *                                  _   _ ____  _
- *  Project                     ___| | | |  _ \| |
- *                             / __| | | | |_) | |
- *                            | (__| |_| |  _ <| |___
- *                             \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2012, 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_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "url.h"
-#include "progress.h"
-#include "multiif.h"
-#include "bundles.h"
-#include "sendf.h"
-#include "rawstr.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static void conn_llist_dtor(void *user, void *element)
-{
-  struct connectdata *data = element;
-  (void)user;
-
-  data->bundle = NULL;
-}
-
-CURLcode Curl_bundle_create(struct SessionHandle *data,
-                            struct connectbundle **cb_ptr)
-{
-  (void)data;
-  DEBUGASSERT(*cb_ptr == NULL);
-  *cb_ptr = malloc(sizeof(struct connectbundle));
-  if(!*cb_ptr)
-    return CURLE_OUT_OF_MEMORY;
-
-  (*cb_ptr)->num_connections = 0;
-  (*cb_ptr)->server_supports_pipelining = FALSE;
-
-  (*cb_ptr)->conn_list = Curl_llist_alloc((curl_llist_dtor) conn_llist_dtor);
-  if(!(*cb_ptr)->conn_list) {
-    Curl_safefree(*cb_ptr);
-    return CURLE_OUT_OF_MEMORY;
-  }
-  return CURLE_OK;
-}
-
-void Curl_bundle_destroy(struct connectbundle *cb_ptr)
-{
-  if(!cb_ptr)
-    return;
-
-  if(cb_ptr->conn_list) {
-    Curl_llist_destroy(cb_ptr->conn_list, NULL);
-    cb_ptr->conn_list = NULL;
-  }
-  Curl_safefree(cb_ptr);
-}
-
-/* Add a connection to a bundle */
-CURLcode Curl_bundle_add_conn(struct connectbundle *cb_ptr,
-                              struct connectdata *conn)
-{
-  if(!Curl_llist_insert_next(cb_ptr->conn_list, cb_ptr->conn_list->tail, conn))
-    return CURLE_OUT_OF_MEMORY;
-
-  conn->bundle = cb_ptr;
-
-  cb_ptr->num_connections++;
-  return CURLE_OK;
-}
-
-/* Remove a connection from a bundle */
-int Curl_bundle_remove_conn(struct connectbundle *cb_ptr,
-                            struct connectdata *conn)
-{
-  struct curl_llist_element *curr;
-
-  curr = cb_ptr->conn_list->head;
-  while(curr) {
-    if(curr->ptr == conn) {
-      Curl_llist_remove(cb_ptr->conn_list, curr, NULL);
-      cb_ptr->num_connections--;
-      conn->bundle = NULL;
-      return 1; /* we removed a handle */
-    }
-    curr = curr->next;
-  }
-  return 0;
-}
diff --git a/lib/bundles.h b/lib/bundles.h
deleted file mode 100644 (file)
index 3816c40..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef HEADER_CURL_BUNDLES_H
-#define HEADER_CURL_BUNDLES_H
-/***************************************************************************
- *                                  _   _ ____  _
- *  Project                     ___| | | |  _ \| |
- *                             / __| | | | |_) | |
- *                            | (__| |_| |  _ <| |___
- *                             \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012, Linus Nielsen Feltzing, <linus@haxx.se>
- *
- * 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.
- *
- ***************************************************************************/
-
-struct connectbundle {
-  bool server_supports_pipelining; /* TRUE if server supports pipelining,
-                                      set after first response */
-  size_t num_connections;       /* Number of connections in the bundle */
-  struct curl_llist *conn_list; /* The connectdata members of the bundle */
-};
-
-CURLcode Curl_bundle_create(struct SessionHandle *data,
-                            struct connectbundle **cb_ptr);
-
-void Curl_bundle_destroy(struct connectbundle *cb_ptr);
-
-CURLcode Curl_bundle_add_conn(struct connectbundle *cb_ptr,
-                              struct connectdata *conn);
-
-int Curl_bundle_remove_conn(struct connectbundle *cb_ptr,
-                            struct connectdata *conn);
-
-
-#endif /* HEADER_CURL_BUNDLES_H */
-
index f561492..0c16746 100755 (executable)
@@ -6,11 +6,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 2011 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 2011 - 2015, 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.
+# are also available at https://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
@@ -26,13 +26,32 @@ my $indent = 2;
 
 my $warnings;
 my $errors;
+my $supressed; # whitelisted problems
 my $file;
 my $dir=".";
 my $wlist;
+my $windows_os = $^O eq 'MSWin32' || $^O eq 'msys' || $^O eq 'cygwin';
+
+my %whitelist;
+
+sub readwhitelist {
+    open(W, "<$dir/checksrc.whitelist");
+    my @all=<W>;
+    for(@all) {
+        $windows_os ? $_ =~ s/\r?\n$// : chomp;
+        $whitelist{$_}=1;
+    }
+    close(W);
+}
 
 sub checkwarn {
     my ($num, $col, $file, $line, $msg, $error) = @_;
 
+    if($whitelist{$line}) {
+        $supressed++;
+        return;
+    }
+    
     my $w=$error?"error":"warning";
 
     if($w) {
@@ -78,6 +97,8 @@ if(!$file) {
     exit;
 }
 
+readwhitelist();
+
 do {
     if("$wlist" !~ / $file /) {
         my $fullname = $file;
@@ -100,7 +121,7 @@ sub scanfile {
     my $copyright=0;
 
     while(<R>) {
-        chomp;
+        $windows_os ? $_ =~ s/\r?\n$// : chomp;
         my $l = $_;
         my $column = 0;
 
@@ -122,6 +143,11 @@ sub scanfile {
             checkwarn($line, length($1), $file, $l, "Trailing whitespace");
         }
 
+        # crude attempt to detect // comments without too many false
+        # positives
+        if($l =~ /^([^"\*]*)[^:"]\/\//) {
+            checkwarn($line, length($1), $file, $l, "\/\/ comment");
+        }
         # check spaces after for/if/while
         if($l =~ /^(.*)(for|if|while) \(/) {
             if($1 =~ / *\#/) {
@@ -144,6 +170,49 @@ sub scanfile {
             }
         }
 
+        # check for "return(" without space
+        if($l =~ /^(.*)return\(/) {
+            if($1 =~ / *\#/) {
+                # this is a #if, treat it differently
+            }
+            else {
+                checkwarn($line, length($1)+6, $file, $l,
+                          "return without space before paren");
+            }
+        }
+
+        # check for comma without space
+        if($l =~ /^(.*),[^ \n]/) {
+            my $pref=$1;
+            my $ign=0;
+            if($pref =~ / *\#/) {
+                # this is a #if, treat it differently
+                $ign=1;
+            }
+            elsif($pref =~ /\/\*/) {
+                # this is a comment
+                $ign=1;
+            }
+            elsif($pref =~ /[\"\']/) {
+                $ign = 1;
+                # There is a quote here, figure out whether the comma is
+                # within a string or '' or not.
+                if($pref =~ /\"/) {
+                    # withing a string
+                }
+                elsif($pref =~ /\'$/) {
+                    # a single letter
+                }
+                else {
+                    $ign = 0;
+                }
+            }
+            if(!$ign) {
+                checkwarn($line, length($pref)+1, $file, $l,
+                          "comma without following space");
+            }
+        }
+        
         # check for "} else"
         if($l =~ /^(.*)\} *else/) {
             checkwarn($line, length($1), $file, $l, "else after closing brace on same line");
@@ -153,12 +222,26 @@ sub scanfile {
             checkwarn($line, length($1)+1, $file, $l, "missing space after close paren");
         }
 
+        # check for space before the semicolon last in a line
+        if($l =~ /^(.*[^ ].*) ;$/) {
+            checkwarn($line, length($1), $file, $l, "space before last semicolon");
+        }
+
         # scan for use of banned functions
         if($l =~ /^(.*\W)(sprintf|vsprintf|strcat|strncat|gets)\s*\(/) {
             checkwarn($line, length($1), $file, $l,
                       "use of $2 is banned");
         }
 
+        # scan for use of non-binary fopen without the macro
+        if($l =~ /^(.*\W)fopen\s*\([^"]*\"([^"]*)/) {
+            my $mode = $2;
+            if($mode !~ /b/) {
+                checkwarn($line, length($1), $file, $l,
+                          "use of non-binary fopen without FOPEN_* macro");
+            }
+        }
+
         # check for open brace first on line but not first column
         # only alert if previous line ended with a close paren and wasn't a cpp
         # line
diff --git a/lib/checksrc.whitelist b/lib/checksrc.whitelist
new file mode 100644 (file)
index 0000000..9c29cf9
--- /dev/null
@@ -0,0 +1,12 @@
+    227 Entering Passive Mode (a1,a2,a3,a4,p1,p2)
+    228 Entering Long Passive Mode (4,4,a1,a2,a3,a4,2,p1,p2)
+      150 ASCII data connection for /bin/ls (137.167.104.91,37445) (0 bytes).
+      150 Opening ASCII mode data connection for [file] (0.0.0.0,0) (545 bytes)
+   * no_proxy=domain1.dom,host.domain2.dom
+     Default values are (0,0) initialized by calloc.
+  file = fopen(name, "r"); /* VMS */
+    return fopen(file, "r"); /* VMS */
+    return fopen(file, "r", "rfm=stmlf", "ctx=stm");
+    curl_memlog("FILE %s:%d fopen(\"%s\",\"%s\") = %p\n",
+           a URL as file://localhost//foo must be valid as well, to refer to
+  const char atom_specials[] = "(){ %*]";
index 76d8877..74f5f52 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -93,7 +93,6 @@
 
 #define USE_MANUAL 1
 #define USE_OPENSSL 1
-#define USE_SSLEAY 1
 #define CURL_DISABLE_LDAP 1
 
 #define OS "AmigaOS"
index dd5b06d..f2c9ff4 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
   #define HAVE_LIBZ              1
 #endif
 
-/* USE_SSLEAY on cmd-line */
-#ifdef USE_SSLEAY
+/* USE_OPENSSL on cmd-line */
+#ifdef USE_OPENSSL
   #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 HAVE_TERMIOS_H  1
   #define HAVE_VARIADIC_MACROS_GCC 1
 
-  /* Because djgpp <= 2.03 doesn't have snprintf() etc. */
-  #if (DJGPP_MINOR < 4)
-    #define _MPRINTF_REPLACE
-  #endif
-
 #elif defined(__WATCOMC__)
   #define HAVE_STRCASECMP 1
 
index d89c385..3c12bdf 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -70,7 +70,6 @@
 #define HAVE_SIG_ATOMIC_T       1
 
 #ifdef MACOS_SSL_SUPPORT
-#  define USE_SSLEAY            1
 #  define USE_OPENSSL           1
 #endif
 
index 1e62228..fe5b864 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index e400577..0379524 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index f7eaab9..2603a46 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -69,7 +69,7 @@
 /* #undef CURL_EXTERN_SYMBOL */
 
 /* Use Windows LDAP implementation */
-/* #undef CURL_LDAP_WIN */
+/* #undef USE_WIN32_LDAP */
 
 /* your Entropy Gathering Daemon socket pathname */
 /* #undef EGD_SOCKET */
 
 /* 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/"*/
+  "a suitable curl mailing list => https://curl.haxx.se/mail/"*/
 
 /* Define to the full name of this package. */
 /*#define PACKAGE_NAME "curl"*/
 #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
-
 #endif /* HEADER_CURL_CONFIG_SYMBIAN_H */
index 6ff701a..d1714fd 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 /* 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/"
+  "a suitable curl mailing list => https://curl.haxx.se/mail/"
 
 /* Define to the full name of this package. */
 #define PACKAGE_NAME "curl"
 /* #undef USE_OPENSSL */
 
 /* if SSL is enabled */
-/* #undef USE_SSLEAY */
+/* #undef USE_OPENSSL */
 
 /* to enable SSPI support */
 /* #undef USE_WINDOWS_SSPI */
index 05220b5..780a4a2 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -75,7 +75,7 @@
 /* #undef CURL_EXTERN_SYMBOL */
 
 /* Use Windows LDAP implementation */
-/* #undef CURL_LDAP_WIN */
+/* #undef USE_WIN32_LDAP */
 
 /* your Entropy Gathering Daemon socket pathname */
 /* #undef EGD_SOCKET */
 /* 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 */
index 744e022..af7bb1f 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #endif
 
 /* Define if the compiler supports the 'long long' data type. */
-#if defined(__MINGW32__) || defined(__WATCOMC__) || \
-    (defined(_MSC_VER) && (_MSC_VER >= 1310))
+#if defined(__MINGW32__) || defined(__WATCOMC__)      || \
+    (defined(_MSC_VER)     && (_MSC_VER     >= 1310)) || \
+    (defined(__BORLANDC__) && (__BORLANDC__ >= 0x561))
 #define HAVE_LONGLONG 1
 #endif
 
@@ -620,7 +621,8 @@ Vista
 /* Define if struct sockaddr_in6 has the sin6_scope_id member. */
 #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
 
-#if HAVE_WINSOCK2_H && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
+#if defined(HAVE_WINSOCK2_H) && defined(_WIN32_WINNT) && \
+    (_WIN32_WINNT >= 0x0600)
 #define HAVE_STRUCT_POLLFD 1
 #endif
 
@@ -678,30 +680,30 @@ Vista
 /* ---------------------------------------------------------------- */
 
 #if defined(CURL_HAS_NOVELL_LDAPSDK) || defined(CURL_HAS_MOZILLA_LDAPSDK)
-#undef CURL_LDAP_WIN
+#undef USE_WIN32_LDAP
 #define HAVE_LDAP_SSL_H 1
 #define HAVE_LDAP_URL_PARSE 1
 #elif defined(CURL_HAS_OPENLDAP_LDAPSDK)
-#undef CURL_LDAP_WIN
+#undef USE_WIN32_LDAP
 #define HAVE_LDAP_URL_PARSE 1
 #else
 #undef HAVE_LDAP_URL_PARSE
-#define CURL_LDAP_WIN 1
+#define USE_WIN32_LDAP 1
 #endif
 
-#if defined(__WATCOMC__) && defined(CURL_LDAP_WIN)
+#if defined(__WATCOMC__) && defined(USE_WIN32_LDAP)
 #if __WATCOMC__ < 1280
 #define WINBERAPI  __declspec(cdecl)
 #define WINLDAPAPI __declspec(cdecl)
 #endif
 #endif
 
-#if defined(__POCC__) && defined(CURL_LDAP_WIN)
+#if defined(__POCC__) && defined(USE_WIN32_LDAP)
 #  define CURL_DISABLE_LDAP 1
 #endif
 
 /* Define to use the Windows crypto library. */
-#if !defined(USE_SSLEAY) && !defined(USE_NSS)
+#if !defined(USE_OPENSSL) && !defined(USE_NSS)
 #define USE_WIN32_CRYPTO
 #endif
 
@@ -727,7 +729,7 @@ Vista
 /* If you want to build curl with the built-in manual */
 #define USE_MANUAL 1
 
-#if defined(__POCC__) || (USE_IPV6)
+#if defined(__POCC__) || defined(USE_IPV6)
 #  define ENABLE_IPV6 1
 #endif
 
index a8ab0d3..3839485 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 /*                           LDAP SUPPORT                           */
 /* ---------------------------------------------------------------- */
 
-#define CURL_LDAP_WIN 1
+#define USE_WIN32_LDAP 1
 #undef HAVE_LDAP_URL_PARSE
 
 /* ---------------------------------------------------------------- */
 #define ENOMEM 2
 #define EAGAIN 3
 
-extern int stat(const char *path,struct stat *buffer );
+extern int stat(const char *path, struct stat *buffer);
 
 #endif /* HEADER_CURL_CONFIG_WIN32CE_H */
index fcfb150..6e03caf 100644 (file)
@@ -6,11 +6,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, 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.
+ * are also available at https://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
 #include "multiif.h"
 #include "sendf.h"
 #include "rawstr.h"
-#include "bundles.h"
 #include "conncache.h"
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
 
-static void free_bundle_hash_entry(void *freethis)
+static void conn_llist_dtor(void *user, void *element)
 {
-  struct connectbundle *b = (struct connectbundle *) freethis;
+  struct connectdata *data = element;
+  (void)user;
 
-  Curl_bundle_destroy(b);
+  data->bundle = NULL;
 }
 
-struct conncache *Curl_conncache_init(int size)
+static CURLcode bundle_create(struct SessionHandle *data,
+                              struct connectbundle **cb_ptr)
 {
-  struct conncache *connc;
-
-  connc = calloc(1, sizeof(struct conncache));
-  if(!connc)
-    return NULL;
+  (void)data;
+  DEBUGASSERT(*cb_ptr == NULL);
+  *cb_ptr = malloc(sizeof(struct connectbundle));
+  if(!*cb_ptr)
+    return CURLE_OUT_OF_MEMORY;
+
+  (*cb_ptr)->num_connections = 0;
+  (*cb_ptr)->multiuse = BUNDLE_UNKNOWN;
+
+  (*cb_ptr)->conn_list = Curl_llist_alloc((curl_llist_dtor) conn_llist_dtor);
+  if(!(*cb_ptr)->conn_list) {
+    Curl_safefree(*cb_ptr);
+    return CURLE_OUT_OF_MEMORY;
+  }
+  return CURLE_OK;
+}
 
-  connc->hash = Curl_hash_alloc(size, Curl_hash_str,
-                                Curl_str_key_compare, free_bundle_hash_entry);
+static void bundle_destroy(struct connectbundle *cb_ptr)
+{
+  if(!cb_ptr)
+    return;
 
-  if(!connc->hash) {
-    free(connc);
-    return NULL;
+  if(cb_ptr->conn_list) {
+    Curl_llist_destroy(cb_ptr->conn_list, NULL);
+    cb_ptr->conn_list = NULL;
   }
+  free(cb_ptr);
+}
+
+/* Add a connection to a bundle */
+static CURLcode bundle_add_conn(struct connectbundle *cb_ptr,
+                              struct connectdata *conn)
+{
+  if(!Curl_llist_insert_next(cb_ptr->conn_list, cb_ptr->conn_list->tail, conn))
+    return CURLE_OUT_OF_MEMORY;
 
-  return connc;
+  conn->bundle = cb_ptr;
+
+  cb_ptr->num_connections++;
+  return CURLE_OK;
 }
 
-void Curl_conncache_destroy(struct conncache *connc)
+/* Remove a connection from a bundle */
+static int bundle_remove_conn(struct connectbundle *cb_ptr,
+                              struct connectdata *conn)
 {
-  if(connc) {
-    Curl_hash_destroy(connc->hash);
-    connc->hash = NULL;
-    free(connc);
+  struct curl_llist_element *curr;
+
+  curr = cb_ptr->conn_list->head;
+  while(curr) {
+    if(curr->ptr == conn) {
+      Curl_llist_remove(cb_ptr->conn_list, curr, NULL);
+      cb_ptr->num_connections--;
+      conn->bundle = NULL;
+      return 1; /* we removed a handle */
+    }
+    curr = curr->next;
   }
+  return 0;
 }
 
-struct connectbundle *Curl_conncache_find_bundle(struct conncache *connc,
-                                                 char *hostname)
+static void free_bundle_hash_entry(void *freethis)
 {
-  struct connectbundle *bundle = NULL;
+  struct connectbundle *b = (struct connectbundle *) freethis;
+
+  bundle_destroy(b);
+}
 
+int Curl_conncache_init(struct conncache *connc, int size)
+{
+  return Curl_hash_init(&connc->hash, size, Curl_hash_str,
+                        Curl_str_key_compare, free_bundle_hash_entry);
+}
+
+void Curl_conncache_destroy(struct conncache *connc)
+{
   if(connc)
-    bundle = Curl_hash_pick(connc->hash, hostname, strlen(hostname)+1);
+    Curl_hash_destroy(&connc->hash);
+}
+
+/* returns an allocated key to find a bundle for this connection */
+static char *hashkey(struct connectdata *conn)
+{
+  return aprintf("%s:%d",
+                 conn->bits.proxy?conn->proxy.name:conn->host.name,
+                 conn->localport);
+}
+
+/* Look up the bundle with all the connections to the same host this
+   connectdata struct is setup to use. */
+struct connectbundle *Curl_conncache_find_bundle(struct connectdata *conn,
+                                                 struct conncache *connc)
+{
+  struct connectbundle *bundle = NULL;
+  if(connc) {
+    char *key = hashkey(conn);
+    if(key) {
+      bundle = Curl_hash_pick(&connc->hash, key, strlen(key));
+      free(key);
+    }
+  }
 
   return bundle;
 }
 
 static bool conncache_add_bundle(struct conncache *connc,
-                                 char *hostname,
+                                 char *key,
                                  struct connectbundle *bundle)
 {
-  void *p;
-
-  p = Curl_hash_add(connc->hash, hostname, strlen(hostname)+1, bundle);
+  void *p = Curl_hash_add(&connc->hash, key, strlen(key), bundle);
 
   return p?TRUE:FALSE;
 }
@@ -104,14 +172,14 @@ static void conncache_remove_bundle(struct conncache *connc,
   if(!connc)
     return;
 
-  Curl_hash_start_iterate(connc->hash, &iter);
+  Curl_hash_start_iterate(&connc->hash, &iter);
 
   he = Curl_hash_next_element(&iter);
   while(he) {
     if(he->ptr == bundle) {
       /* The bundle is destroyed by the hash destructor function,
          free_bundle_hash_entry() */
-      Curl_hash_delete(connc->hash, he->key, he->key_len);
+      Curl_hash_delete(&connc->hash, he->key, he->key_len);
       return;
     }
 
@@ -127,22 +195,31 @@ CURLcode Curl_conncache_add_conn(struct conncache *connc,
   struct connectbundle *new_bundle = NULL;
   struct SessionHandle *data = conn->data;
 
-  bundle = Curl_conncache_find_bundle(data->state.conn_cache,
-                                      conn->host.name);
+  bundle = Curl_conncache_find_bundle(conn, data->state.conn_cache);
   if(!bundle) {
-    result = Curl_bundle_create(data, &new_bundle);
+    char *key;
+    int rc;
+
+    result = bundle_create(data, &new_bundle);
     if(result)
       return result;
 
-    if(!conncache_add_bundle(data->state.conn_cache,
-                             conn->host.name, new_bundle)) {
-      Curl_bundle_destroy(new_bundle);
+    key = hashkey(conn);
+    if(!key) {
+      bundle_destroy(new_bundle);
+      return CURLE_OUT_OF_MEMORY;
+    }
+
+    rc = conncache_add_bundle(data->state.conn_cache, key, new_bundle);
+    free(key);
+    if(!rc) {
+      bundle_destroy(new_bundle);
       return CURLE_OUT_OF_MEMORY;
     }
     bundle = new_bundle;
   }
 
-  result = Curl_bundle_add_conn(bundle, conn);
+  result = bundle_add_conn(bundle, conn);
   if(result) {
     if(new_bundle)
       conncache_remove_bundle(data->state.conn_cache, new_bundle);
@@ -167,7 +244,7 @@ void Curl_conncache_remove_conn(struct conncache *connc,
   /* The bundle pointer can be NULL, since this function can be called
      due to a failed connection attempt, before being added to a bundle */
   if(bundle) {
-    Curl_bundle_remove_conn(bundle, conn);
+    bundle_remove_conn(bundle, conn);
     if(bundle->num_connections == 0) {
       conncache_remove_bundle(connc, bundle);
     }
@@ -199,7 +276,7 @@ void Curl_conncache_foreach(struct conncache *connc,
   if(!connc)
     return;
 
-  Curl_hash_start_iterate(connc->hash, &iter);
+  Curl_hash_start_iterate(&connc->hash, &iter);
 
   he = Curl_hash_next_element(&iter);
   while(he) {
@@ -230,7 +307,7 @@ Curl_conncache_find_first_connection(struct conncache *connc)
   struct curl_hash_element *he;
   struct connectbundle *bundle;
 
-  Curl_hash_start_iterate(connc->hash, &iter);
+  Curl_hash_start_iterate(&connc->hash, &iter);
 
   he = Curl_hash_next_element(&iter);
   while(he) {
index d793f24..b1dadf9 100644 (file)
@@ -7,11 +7,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2012 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
  *
  * 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.
+ * are also available at https://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
  ***************************************************************************/
 
 struct conncache {
-  struct curl_hash *hash;
+  struct curl_hash hash;
   size_t num_connections;
   long next_connection_id;
   struct timeval last_cleanup;
 };
 
-struct conncache *Curl_conncache_init(int size);
+#define BUNDLE_NO_MULTIUSE -1
+#define BUNDLE_UNKNOWN     0  /* initial value */
+#define BUNDLE_PIPELINING  1
+#define BUNDLE_MULTIPLEX   2
+
+struct connectbundle {
+  int multiuse;                 /* supports multi-use */
+  size_t num_connections;       /* Number of connections in the bundle */
+  struct curl_llist *conn_list; /* The connectdata members of the bundle */
+};
+
+int Curl_conncache_init(struct conncache *, int size);
 
 void Curl_conncache_destroy(struct conncache *connc);
 
-struct connectbundle *Curl_conncache_find_bundle(struct conncache *connc,
-                                                 char *hostname);
+/* return the correct bundle, to a host or a proxy */
+struct connectbundle *Curl_conncache_find_bundle(struct connectdata *conn,
+                                                 struct conncache *connc);
 
 CURLcode Curl_conncache_add_conn(struct conncache *connc,
                                  struct connectdata *conn);
index 5a60d14..567186a 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include <inet.h>
 #endif
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "urldata.h"
 #include "sendf.h"
 #include "if2ip.h"
 #include "strerror.h"
 #include "connect.h"
-#include "curl_memory.h"
 #include "select.h"
 #include "url.h" /* for Curl_safefree() */
 #include "multiif.h"
@@ -77,7 +74,8 @@
 #include "conncache.h"
 #include "multihandle.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #ifdef __SYMBIAN32__
@@ -542,6 +540,7 @@ static CURLcode trynextip(struct connectdata *conn,
                           int sockindex,
                           int tempindex)
 {
+  const int other = tempindex ^ 1;
   CURLcode result = CURLE_COULDNT_CONNECT;
 
   /* First clean up after the failed socket.
@@ -560,20 +559,21 @@ static CURLcode trynextip(struct connectdata *conn,
       family = conn->tempaddr[tempindex]->ai_family;
       ai = conn->tempaddr[tempindex]->ai_next;
     }
+#ifdef ENABLE_IPV6
     else if(conn->tempaddr[0]) {
       /* happy eyeballs - try the other protocol family */
       int firstfamily = conn->tempaddr[0]->ai_family;
-#ifdef ENABLE_IPV6
       family = (firstfamily == AF_INET) ? AF_INET6 : AF_INET;
-#else
-      family = firstfamily;
-#endif
       ai = conn->tempaddr[0]->ai_next;
     }
+#endif
 
     while(ai) {
-      while(ai && ai->ai_family != family)
-        ai = ai->ai_next;
+      if(conn->tempaddr[other]) {
+        /* we can safely skip addresses of the other protocol family */
+        while(ai && ai->ai_family != family)
+          ai = ai->ai_next;
+      }
 
       if(ai) {
         result = singleipconnect(conn, ai, &conn->tempsock[tempindex]);
@@ -619,7 +619,7 @@ static bool getaddressinfo(struct sockaddr* sa, char* addr,
 
   switch (sa->sa_family) {
     case AF_INET:
-      si = (struct sockaddr_in*) sa;
+      si = (struct sockaddr_in*)(void*) sa;
       if(Curl_inet_ntop(sa->sa_family, &si->sin_addr,
                         addr, MAX_IPADR_LEN)) {
         us_port = ntohs(si->sin_port);
@@ -629,7 +629,7 @@ static bool getaddressinfo(struct sockaddr* sa, char* addr,
       break;
 #ifdef ENABLE_IPV6
     case AF_INET6:
-      si6 = (struct sockaddr_in6*)sa;
+      si6 = (struct sockaddr_in6*)(void*) sa;
       if(Curl_inet_ntop(sa->sa_family, &si6->sin6_addr,
                         addr, MAX_IPADR_LEN)) {
         us_port = ntohs(si6->sin6_port);
@@ -749,6 +749,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
   }
 
   for(i=0; i<2; i++) {
+    const int other = i ^ 1;
     if(conn->tempsock[i] == CURL_SOCKET_BAD)
       continue;
 
@@ -778,7 +779,6 @@ CURLcode Curl_is_connected(struct connectdata *conn,
     else if(rc == CURL_CSELECT_OUT) {
       if(verifyconnect(conn->tempsock[i], &error)) {
         /* we are connected with TCP, awesome! */
-        int other = i ^ 1;
 
         /* use this socket from now on */
         conn->sock[sockindex] = conn->tempsock[i];
@@ -820,6 +820,7 @@ CURLcode Curl_is_connected(struct connectdata *conn,
       data->state.os_errno = error;
       SET_SOCKERRNO(error);
       if(conn->tempaddr[i]) {
+        CURLcode status;
         char ipaddress[MAX_IPADR_LEN];
         Curl_printable_address(conn->tempaddr[i], ipaddress, MAX_IPADR_LEN);
         infof(data, "connect to %s port %ld failed: %s\n",
@@ -828,7 +829,11 @@ CURLcode Curl_is_connected(struct connectdata *conn,
         conn->timeoutms_per_addr = conn->tempaddr[i]->ai_next == NULL ?
                                    allow : allow / 2;
 
-        result = trynextip(conn, sockindex, i);
+        status = trynextip(conn, sockindex, i);
+        if(status != CURLE_COULDNT_CONNECT
+            || conn->tempsock[other] == CURL_SOCKET_BAD)
+          /* the last attempt failed and no other sockets remain open */
+          result = status;
       }
     }
   }
@@ -852,12 +857,13 @@ CURLcode Curl_is_connected(struct connectdata *conn,
   return result;
 }
 
-static void tcpnodelay(struct connectdata *conn,
-                       curl_socket_t sockfd)
+void Curl_tcpnodelay(struct connectdata *conn, curl_socket_t sockfd)
 {
-#ifdef TCP_NODELAY
-  struct SessionHandle *data= conn->data;
-  curl_socklen_t onoff = (curl_socklen_t) data->set.tcp_nodelay;
+#if defined(TCP_NODELAY)
+#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
+  struct SessionHandle *data = conn->data;
+#endif
+  curl_socklen_t onoff = (curl_socklen_t) 1;
   int level = IPPROTO_TCP;
 
 #if 0
@@ -873,12 +879,16 @@ static void tcpnodelay(struct connectdata *conn,
     level = pe->p_proto;
 #endif
 
+#if defined(CURL_DISABLE_VERBOSE_STRINGS)
+  (void) conn;
+#endif
+
   if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff,
                 sizeof(onoff)) < 0)
     infof(data, "Could not set TCP_NODELAY: %s\n",
           Curl_strerror(conn, SOCKERRNO));
   else
-    infof(data,"TCP_NODELAY set\n");
+    infof(data, "TCP_NODELAY set\n");
 #else
   (void)conn;
   (void)sockfd;
@@ -908,7 +918,7 @@ static void nosigpipe(struct connectdata *conn,
 /* When you run a program that uses the Windows Sockets API, you may
    experience slow performance when you copy data to a TCP server.
 
-   http://support.microsoft.com/kb/823764
+   https://support.microsoft.com/kb/823764
 
    Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
    Buffer Size
@@ -944,16 +954,21 @@ void Curl_sndbufset(curl_socket_t sockfd)
         detectOsState = DETECT_OS_VISTA_OR_LATER;
     }
 #else
-    ULONGLONG majorVersionMask;
+    ULONGLONG cm;
     OSVERSIONINFOEX osver;
 
     memset(&osver, 0, sizeof(osver));
     osver.dwOSVersionInfoSize = sizeof(osver);
     osver.dwMajorVersion = majorVersion;
-    majorVersionMask = VerSetConditionMask(0, VER_MAJORVERSION,
-                                           VER_GREATER_EQUAL);
 
-    if(VerifyVersionInfo(&osver, VER_MAJORVERSION, majorVersionMask))
+    cm = VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_MINORVERSION, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL);
+
+    if(VerifyVersionInfo(&osver, (VER_MAJORVERSION | VER_MINORVERSION |
+                                  VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR),
+                         cm))
       detectOsState = DETECT_OS_VISTA_OR_LATER;
     else
       detectOsState = DETECT_OS_PREVISTA;
@@ -1016,10 +1031,14 @@ static CURLcode singleipconnect(struct connectdata *conn,
   }
   infof(data, "  Trying %s...\n", ipaddress);
 
+#ifdef ENABLE_IPV6
   is_tcp = (addr.family == AF_INET || addr.family == AF_INET6) &&
-           addr.socktype == SOCK_STREAM;
+    addr.socktype == SOCK_STREAM;
+#else
+  is_tcp = (addr.family == AF_INET) && addr.socktype == SOCK_STREAM;
+#endif
   if(is_tcp && data->set.tcp_nodelay)
-    tcpnodelay(conn, sockfd);
+    Curl_tcpnodelay(conn, sockfd);
 
   nosigpipe(conn, sockfd);
 
@@ -1043,7 +1062,11 @@ static CURLcode singleipconnect(struct connectdata *conn,
   }
 
   /* possibly bind the local end to an IP, interface or port */
-  if(addr.family == AF_INET || addr.family == AF_INET6) {
+  if(addr.family == AF_INET
+#ifdef ENABLE_IPV6
+     || addr.family == AF_INET6
+#endif
+    ) {
     result = bindlocal(conn, sockfd, addr.family,
                        Curl_ipv6_scope((struct sockaddr*)&addr.sa_addr));
     if(result) {
@@ -1098,7 +1121,7 @@ static CURLcode singleipconnect(struct connectdata *conn,
     default:
       /* unknown error, fallthrough and try another address! */
       infof(data, "Immediate connect fail for %s: %s\n",
-            ipaddress, Curl_strerror(conn,error));
+            ipaddress, Curl_strerror(conn, error));
       data->state.os_errno = error;
 
       /* connect failed */
@@ -1153,8 +1176,11 @@ CURLcode Curl_connecthost(struct connectdata *conn,  /* context */
     conn->tempaddr[0] = conn->tempaddr[0]->ai_next;
   }
 
-  if(conn->tempsock[0] == CURL_SOCKET_BAD)
+  if(conn->tempsock[0] == CURL_SOCKET_BAD) {
+    if(!result)
+      result = CURLE_COULDNT_CONNECT;
     return result;
+  }
 
   data->info.numconnects++; /* to track the number of connections made */
 
@@ -1189,15 +1215,20 @@ curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
 
   DEBUGASSERT(data);
 
-  /* this only works for an easy handle that has been used for
-     curl_easy_perform()! */
-  if(data->state.lastconnect && data->multi_easy) {
+  /* this works for an easy handle:
+   * - that has been used for curl_easy_perform()
+   * - that is associated with a multi handle, and whose connection
+   *   was detached with CURLOPT_CONNECT_ONLY
+   */
+  if(data->state.lastconnect && (data->multi_easy || data->multi)) {
     struct connectdata *c = data->state.lastconnect;
     struct connfind find;
     find.tofind = data->state.lastconnect;
     find.found = FALSE;
 
-    Curl_conncache_foreach(data->multi_easy->conn_cache, &find, conn_is_conn);
+    Curl_conncache_foreach(data->multi_easy?
+                           &data->multi_easy->conn_cache:
+                           &data->multi->conn_cache, &find, conn_is_conn);
 
     if(!find.found) {
       data->state.lastconnect = NULL;
@@ -1217,10 +1248,10 @@ curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
     }
 /* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
 #ifdef MSG_PEEK
-    else {
+    else if(sockfd != CURL_SOCKET_BAD) {
       /* use the socket */
       char buf;
-      if(recv((RECV_TYPE_ARG1)c->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf,
+      if(recv((RECV_TYPE_ARG1)sockfd, (RECV_TYPE_ARG2)&buf,
               (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) {
         return CURL_SOCKET_BAD;   /* FIN received */
       }
@@ -1248,8 +1279,10 @@ int Curl_closesocket(struct connectdata *conn,
          accept, then we MUST NOT call the callback but clear the accepted
          status */
       conn->sock_accepted[SECONDARYSOCKET] = FALSE;
-    else
+    else {
+      Curl_multi_closed(conn, sock);
       return conn->fclosesocket(conn->closesocket_client, sock);
+    }
   }
 
   if(conn)
@@ -1344,11 +1377,12 @@ void Curl_conncontrol(struct connectdata *conn, bool closeit,
 #if defined(CURL_DISABLE_VERBOSE_STRINGS)
   (void) reason;
 #endif
+  if(closeit != conn->bits.close) {
+    infof(conn->data, "Marked for [%s]: %s\n", closeit?"closure":"keep alive",
+          reason);
 
-  infof(conn->data, "Marked for [%s]: %s\n", closeit?"closure":"keep alive",
-        reason);
-
-  conn->bits.close = closeit; /* the only place in the source code that should
-                                 assign this bit */
+    conn->bits.close = closeit; /* the only place in the source code that
+                                   should assign this bit */
+  }
 }
 #endif
index 91646c7..f3d4ac7 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -56,7 +56,7 @@ curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
 /* When you run a program that uses the Windows Sockets API, you may
    experience slow performance when you copy data to a TCP server.
 
-   http://support.microsoft.com/kb/823764
+   https://support.microsoft.com/kb/823764
 
    Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
    Buffer Size
@@ -102,6 +102,8 @@ CURLcode Curl_socket(struct connectdata *conn,
                      struct Curl_sockaddr_ex *addr,
                      curl_socket_t *sockfd);
 
+void Curl_tcpnodelay(struct connectdata *conn, curl_socket_t sockfd);
+
 #ifdef CURLDEBUG
 /*
  * Curl_connclose() sets the bit.close bit to TRUE with an explanation.
index c68e6e5..2d30816 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 501f6c8..3fadd28 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 0b9c8d3..1f22392 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -84,44 +84,37 @@ Example set of cookies:
 
 #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
 
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
+#ifdef USE_LIBPSL
+# include <libpsl.h>
+#endif
 
+#include "curl_printf.h"
 #include "urldata.h"
 #include "cookie.h"
 #include "strequal.h"
 #include "strtok.h"
 #include "sendf.h"
 #include "slist.h"
-#include "curl_memory.h"
 #include "share.h"
 #include "strtoofft.h"
 #include "rawstr.h"
 #include "curl_memrchr.h"
 #include "inet_pton.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 static void freecookie(struct Cookie *co)
 {
-  if(co->expirestr)
-    free(co->expirestr);
-  if(co->domain)
-    free(co->domain);
-  if(co->path)
-    free(co->path);
-  if(co->spath)
-    free(co->spath);
-  if(co->name)
-    free(co->name);
-  if(co->value)
-    free(co->value);
-  if(co->maxage)
-    free(co->maxage);
-  if(co->version)
-    free(co->version);
-
+  free(co->expirestr);
+  free(co->domain);
+  free(co->path);
+  free(co->spath);
+  free(co->name);
+  free(co->value);
+  free(co->maxage);
+  free(co->version);
   free(co);
 }
 
@@ -236,11 +229,14 @@ static char *sanitize_cookie_path(const char *cookie_path)
     return NULL;
 
   /* some stupid site sends path attribute with '"'. */
+  len = strlen(new_path);
   if(new_path[0] == '\"') {
-    memmove((void *)new_path, (const void *)(new_path + 1), strlen(new_path));
+    memmove((void *)new_path, (const void *)(new_path + 1), len);
+    len--;
   }
-  if(new_path[strlen(new_path) - 1] == '\"') {
-    new_path[strlen(new_path) - 1] = 0x0;
+  if(len && (new_path[len - 1] == '\"')) {
+    new_path[len - 1] = 0x0;
+    len--;
   }
 
   /* RFC6265 5.2.4 The Path Attribute */
@@ -252,8 +248,7 @@ static char *sanitize_cookie_path(const char *cookie_path)
   }
 
   /* convert /hoge/ to /hoge */
-  len = strlen(new_path);
-  if(1 < len && new_path[len - 1] == '/') {
+  if(len && new_path[len - 1] == '/') {
     new_path[len - 1] = 0x0;
   }
 
@@ -298,8 +293,7 @@ void Curl_cookie_loadfiles(struct SessionHandle *data)
  */
 static void strstore(char **str, const char *newstr)
 {
-  if(*str)
-    free(*str);
+  free(*str);
   *str = strdup(newstr);
 }
 
@@ -315,7 +309,7 @@ static void remove_expired(struct CookieInfo *cookies)
   pv = NULL;
   while(co) {
     nx = co->next;
-    if((co->expirestr || co->maxage) && co->expires < now) {
+    if(co->expires && co->expires < now) {
       if(co == cookies->cookies) {
         cookies->cookies = co->next;
       }
@@ -389,6 +383,10 @@ Curl_cookie_add(struct SessionHandle *data,
   bool replace_old = FALSE;
   bool badcookie = FALSE; /* cookies are good by default. mmmmm yummy */
 
+#ifdef USE_LIBPSL
+  const psl_ctx_t *psl;
+#endif
+
 #ifdef CURL_DISABLE_VERBOSE_STRINGS
   (void)data;
 #endif
@@ -419,7 +417,7 @@ Curl_cookie_add(struct SessionHandle *data,
     do {
       /* we have a <what>=<this> pair or a stand-alone word here */
       name[0]=what[0]=0; /* init the buffers */
-      if(1 <= sscanf(ptr, "%" MAX_NAME_TXT "[^;\r\n =]=%"
+      if(1 <= sscanf(ptr, "%" MAX_NAME_TXT "[^;\r\n=] =%"
                      MAX_COOKIE_LINE_TXT "[^;\r\n]",
                      name, what)) {
         /* Use strstore() below to properly deal with received cookie
@@ -429,15 +427,24 @@ Curl_cookie_add(struct SessionHandle *data,
         bool done = FALSE;
         bool sep;
         size_t len=strlen(what);
-        const char *endofn = &ptr[ strlen(name) ];
-
-        /* skip trailing spaces in name */
-        while(*endofn && ISBLANK(*endofn))
-          endofn++;
+        size_t nlen = strlen(name);
+        const char *endofn = &ptr[ nlen ];
 
         /* name ends with a '=' ? */
         sep = (*endofn == '=')?TRUE:FALSE;
 
+        if(nlen) {
+          endofn--; /* move to the last character */
+          if(ISBLANK(*endofn)) {
+            /* skip trailing spaces in name */
+            while(*endofn && ISBLANK(*endofn) && nlen) {
+              endofn--;
+              nlen--;
+            }
+            name[nlen]=0; /* new end of name */
+          }
+        }
+
         /* Strip off trailing whitespace from the 'what' */
         while(len && ISBLANK(what[len-1])) {
           what[len-1]=0;
@@ -449,7 +456,16 @@ Curl_cookie_add(struct SessionHandle *data,
         while(*whatptr && ISBLANK(*whatptr))
           whatptr++;
 
-        if(!len) {
+        if(!co->name && sep) {
+          /* The very first name/value pair is the actual cookie name */
+          co->name = strdup(name);
+          co->value = strdup(whatptr);
+          if(!co->name || !co->value) {
+            badcookie = TRUE;
+            break;
+          }
+        }
+        else if(!len) {
           /* this was a "<name>=" with no content, and we must allow
              'secure' and 'httponly' specified this weirdly */
           done = TRUE;
@@ -543,14 +559,6 @@ Curl_cookie_add(struct SessionHandle *data,
             break;
           }
         }
-        else if(!co->name) {
-          co->name = strdup(name);
-          co->value = strdup(whatptr);
-          if(!co->name || !co->value) {
-            badcookie = TRUE;
-            break;
-          }
-        }
         /*
           else this is the second (or more) name we don't know
           about! */
@@ -787,6 +795,21 @@ Curl_cookie_add(struct SessionHandle *data,
   /* at first, remove expired cookies */
   remove_expired(c);
 
+#ifdef USE_LIBPSL
+  /* Check if the domain is a Public Suffix and if yes, ignore the cookie.
+     This needs a libpsl compiled with builtin data. */
+  if(domain && co->domain && !isip(co->domain)) {
+    if(((psl = psl_builtin()) != NULL)
+        && !psl_is_cookie_domain_acceptable(psl, domain, co->domain)) {
+      infof(data,
+            "cookie '%s' dropped, domain '%s' must not set cookies for '%s'\n",
+            co->name, domain, co->domain);
+      freecookie(co);
+      return NULL;
+    }
+  }
+#endif
+
   clist = c->cookies;
   replace_old = FALSE;
   while(clist) {
@@ -834,21 +857,13 @@ Curl_cookie_add(struct SessionHandle *data,
 
         /* then free all the old pointers */
         free(clist->name);
-        if(clist->value)
-          free(clist->value);
-        if(clist->domain)
-          free(clist->domain);
-        if(clist->path)
-          free(clist->path);
-        if(clist->spath)
-          free(clist->spath);
-        if(clist->expirestr)
-          free(clist->expirestr);
-
-        if(clist->version)
-          free(clist->version);
-        if(clist->maxage)
-          free(clist->maxage);
+        free(clist->value);
+        free(clist->domain);
+        free(clist->path);
+        free(clist->spath);
+        free(clist->expirestr);
+        free(clist->version);
+        free(clist->maxage);
 
         *clist = *co;  /* then store all the new data */
 
@@ -932,7 +947,7 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data,
     fp = NULL;
   }
   else
-    fp = file?fopen(file, "r"):NULL;
+    fp = file?fopen(file, FOPEN_READTEXT):NULL;
 
   c->newsession = newsession; /* new session? */
 
@@ -969,7 +984,7 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data,
   return c;
 
 fail:
-  Curl_safefree(line);
+  free(line);
   if(!inc)
     /* Only clean up if we allocated it here, as the original could still be in
      * use by a share handle */
@@ -1216,8 +1231,7 @@ void Curl_cookie_clearsess(struct CookieInfo *cookies)
 void Curl_cookie_cleanup(struct CookieInfo *c)
 {
   if(c) {
-    if(c->filename)
-      free(c->filename);
+    free(c->filename);
     Curl_cookie_freelist(c->cookies, TRUE);
     free(c); /* free the base struct as well */
   }
@@ -1266,6 +1280,7 @@ static int cookie_output(struct CookieInfo *c, const char *dumphere)
   struct Cookie *co;
   FILE *out;
   bool use_stdout=FALSE;
+  char *format_ptr;
 
   if((NULL == c) || (0 == c->numcookies))
     /* If there are no known cookies, we don't write or even create any
@@ -1281,32 +1296,28 @@ static int cookie_output(struct CookieInfo *c, const char *dumphere)
     use_stdout=TRUE;
   }
   else {
-    out = fopen(dumphere, "w");
+    out = fopen(dumphere, FOPEN_WRITETEXT);
     if(!out)
       return 1; /* failure */
   }
 
-  if(c) {
-    char *format_ptr;
-
-    fputs("# Netscape HTTP Cookie File\n"
-          "# http://curl.haxx.se/docs/http-cookies.html\n"
-          "# This file was generated by libcurl! Edit at your own risk.\n\n",
-          out);
-    co = c->cookies;
-
-    while(co) {
-      format_ptr = get_netscape_format(co);
-      if(format_ptr == NULL) {
-        fprintf(out, "#\n# Fatal libcurl error\n");
-        if(!use_stdout)
-          fclose(out);
+  fputs("# Netscape HTTP Cookie File\n"
+        "# https://curl.haxx.se/docs/http-cookies.html\n"
+        "# This file was generated by libcurl! Edit at your own risk.\n\n",
+        out);
+
+  for(co = c->cookies; co; co = co->next) {
+    if(!co->domain)
+      continue;
+    format_ptr = get_netscape_format(co);
+    if(format_ptr == NULL) {
+      fprintf(out, "#\n# Fatal libcurl error\n");
+      if(!use_stdout)
+        fclose(out);
         return 1;
-      }
-      fprintf(out, "%s\n", format_ptr);
-      free(format_ptr);
-      co=co->next;
     }
+    fprintf(out, "%s\n", format_ptr);
+    free(format_ptr);
   }
 
   if(!use_stdout)
@@ -1326,10 +1337,9 @@ struct curl_slist *Curl_cookie_list(struct SessionHandle *data)
       (data->cookies->numcookies == 0))
     return NULL;
 
-  c = data->cookies->cookies;
-
-  while(c) {
-    /* fill the list with _all_ the cookies we know */
+  for(c = data->cookies->cookies; c; c = c->next) {
+    if(!c->domain)
+      continue;
     line = get_netscape_format(c);
     if(!line) {
       curl_slist_free_all(list);
@@ -1342,7 +1352,6 @@ struct curl_slist *Curl_cookie_list(struct SessionHandle *data)
       return NULL;
     }
     list = beg;
-    c = c->next;
   }
 
   return list;
index bd89082..74a9224 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 1e359d5..cc60ddb 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
 #include "curl_addrinfo.h"
 #include "inet_pton.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
+
 /* The last #include file should be: */
 #include "memdebug.h"
 
-
 /*
  * Curl_freeaddrinfo()
  *
@@ -83,13 +80,8 @@ Curl_freeaddrinfo(Curl_addrinfo *cahead)
   Curl_addrinfo *ca;
 
   for(ca = cahead; ca != NULL; ca = canext) {
-
-    if(ca->ai_addr)
-      free(ca->ai_addr);
-
-    if(ca->ai_canonname)
-      free(ca->ai_canonname);
-
+    free(ca->ai_addr);
+    free(ca->ai_canonname);
     canext = ca->ai_next;
 
     free(ca);
@@ -529,7 +521,11 @@ void
 curl_dofreeaddrinfo(struct addrinfo *freethis,
                     int line, const char *source)
 {
+#ifdef USE_LWIPSOCK
+  lwip_freeaddrinfo(freethis);
+#else
   (freeaddrinfo)(freethis);
+#endif
   curl_memlog("ADDR %s:%d freeaddrinfo(%p)\n",
               source, line, (void *)freethis);
 }
@@ -552,7 +548,11 @@ curl_dogetaddrinfo(const char *hostname,
                    struct addrinfo **result,
                    int line, const char *source)
 {
+#ifdef USE_LWIPSOCK
+  int res=lwip_getaddrinfo(hostname, service, hints, result);
+#else
   int res=(getaddrinfo)(hostname, service, hints, result);
+#endif
   if(0 == res)
     /* success */
     curl_memlog("ADDR %s:%d getaddrinfo() = %p\n",
index 4ef8827..01f2864 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -83,7 +83,8 @@ Curl_addrinfo *Curl_str2addr(char *dotted, int port);
 Curl_addrinfo *Curl_unix2addr(const char *path);
 #endif
 
-#if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO)
+#if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) && \
+    defined(HAVE_FREEADDRINFO)
 void
 curl_dofreeaddrinfo(struct addrinfo *freethis,
                     int line, const char *source);
index 92896fe..c262417 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 87be9c7..6b5070a 100644 (file)
 /* to disable FTP */
 #cmakedefine CURL_DISABLE_FTP 1
 
+/* to disable GOPHER */
+#cmakedefine CURL_DISABLE_GOPHER 1
+
+/* to disable IMAP */
+#cmakedefine CURL_DISABLE_IMAP 1
+
 /* to disable HTTP */
 #cmakedefine CURL_DISABLE_HTTP 1
 
 /* to disable LDAPS */
 #cmakedefine CURL_DISABLE_LDAPS 1
 
+/* to disable POP3 */
+#cmakedefine CURL_DISABLE_POP3 1
+
 /* to disable proxies */
 #cmakedefine CURL_DISABLE_PROXY 1
 
+/* to disable RTSP */
+#cmakedefine CURL_DISABLE_RTSP 1
+
+/* to disable RTMP */
+#cmakedefine CURL_DISABLE_RTMP 1
+
+/* to disable SMB */
+#cmakedefine CURL_DISABLE_SMB 1
+
+/* to disable SMTP */
+#cmakedefine CURL_DISABLE_SMTP 1
+
 /* to disable TELNET */
 #cmakedefine CURL_DISABLE_TELNET 1
 
@@ -53,7 +74,7 @@
 #endif
 
 /* Use Windows LDAP implementation */
-#cmakedefine CURL_LDAP_WIN 1
+#cmakedefine USE_WIN32_LDAP 1
 
 /* when not building a shared library */
 #cmakedefine CURL_STATICLIB 1
 /* if OpenSSL is in use */
 #cmakedefine USE_OPENSSL 1
 
-/* if SSL is enabled */
-#cmakedefine USE_SSLEAY 1
-
 /* if Unix domain sockets are enabled  */
 #cmakedefine USE_UNIX_SOCKETS
 
 /* to enable SSPI support */
 #cmakedefine USE_WINDOWS_SSPI 1
 
+/* to enable Windows SSL  */
+#cmakedefine USE_SCHANNEL 1
+
 /* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
 #cmakedefine USE_YASSLEMUL 1
 
index 1318afc..561aa6e 100644 (file)
@@ -3,6 +3,9 @@
 /* Location of default ca bundle */
 #undef CURL_CA_BUNDLE
 
+/* define "1" to use built in CA store of SSL library */
+#undef CURL_CA_FALLBACK
+
 /* Location of default ca path */
 #undef CURL_CA_PATH
 
@@ -69,9 +72,6 @@
 /* Definition to make a library symbol externally visible. */
 #undef CURL_EXTERN_SYMBOL
 
-/* Use Windows LDAP implementation */
-#undef CURL_LDAP_WIN
-
 /* your Entropy Gathering Daemon socket pathname */
 #undef EGD_SOCKET
 
 /* Define to 1 if bool is an available type. */
 #undef HAVE_BOOL_T
 
+/* Define to 1 if using BoringSSL. */
+#undef HAVE_BORINGSSL
+
 /* Define to 1 if you have the clock_gettime function and monotonic timer. */
 #undef HAVE_CLOCK_GETTIME_MONOTONIC
 
 /* Define to 1 if you have the <cyassl/error-ssl.h> header file. */
 #undef HAVE_CYASSL_ERROR_SSL_H
 
+/* Define to 1 if you have the `CyaSSL_get_peer_certificate' function. */
+#undef HAVE_CYASSL_GET_PEER_CERTIFICATE
+
+/* Define to 1 if you have the <cyassl/options.h> header file. */
+#undef HAVE_CYASSL_OPTIONS_H
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
 /* Define to 1 if you have a working gmtime_r function. */
 #undef HAVE_GMTIME_R
 
+/* Define to 1 if you have the `gnutls_certificate_set_x509_key_file2'
+   function. */
+#undef HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+
 /* if you have the function gnutls_srp_verifier */
 #undef HAVE_GNUTLS_SRP
 
 /* Define to 1 if you have the `resolve' library (-lresolve). */
 #undef HAVE_LIBRESOLVE
 
+/* Define to 1 if using libressl. */
+#undef HAVE_LIBRESSL
+
 /* Define to 1 if you have the <librtmp/rtmp.h> header file. */
 #undef HAVE_LIBRTMP_RTMP_H
 
 /* Define to 1 if you have the <openssl/rsa.h> header file. */
 #undef HAVE_OPENSSL_RSA_H
 
+/* if you have the function SRP_Calc_client_key */
+#undef HAVE_OPENSSL_SRP
+
 /* Define to 1 if you have the <openssl/ssl.h> header file. */
 #undef HAVE_OPENSSL_SSL_H
 
 /* Define to 1 if you have the <socket.h> header file. */
 #undef HAVE_SOCKET_H
 
-/* if you have the function SRP_Calc_client_key */
-#undef HAVE_SSLEAY_SRP
-
 /* Define to 1 if you have the `SSLv2_client_method' function. */
 #undef HAVE_SSLV2_CLIENT_METHOD
 
 /* Define to 1 if you have the winsock.h header file. */
 #undef HAVE_WINSOCK_H
 
+/* Define to 1 if you have the `wolfSSLv3_client_method' function. */
+#undef HAVE_WOLFSSLV3_CLIENT_METHOD
+
+/* Define to 1 if you have the `wolfSSL_get_peer_certificate' function. */
+#undef HAVE_WOLFSSL_GET_PEER_CERTIFICATE
+
 /* Define this symbol if your OS supports changing the contents of argv */
 #undef HAVE_WRITABLE_ARGV
 
 /* if you have the zlib.h header file */
 #undef HAVE_ZLIB_H
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
 /* Define to 1 if you need the lber.h header file even with ldap.h */
 /* if axTLS is enabled */
 #undef USE_AXTLS
 
-/* if CyaSSL is enabled */
+/* if CyaSSL/WolfSSL is enabled */
 #undef USE_CYASSL
 
 /* to enable iOS/Mac OS X native SSL/TLS support */
 /* if GnuTLS uses nettle as crypto backend */
 #undef USE_GNUTLS_NETTLE
 
+/* PSL support enabled */
+#undef USE_LIBPSL
+
 /* if librtmp is in use */
 #undef USE_LIBRTMP
 
 /* If you want to build curl with the built-in manual */
 #undef USE_MANUAL
 
+/* if mbedTLS is enabled */
+#undef USE_MBEDTLS
+
 /* Define to enable metalink support */
 #undef USE_METALINK
 
 /* to enable Windows native SSL/TLS support */
 #undef USE_SCHANNEL
 
-/* if SSL is enabled */
-#undef USE_SSLEAY
-
 /* if you want POSIX threaded DNS lookup */
 #undef USE_THREADS_POSIX
 
    */
 #undef USE_WIN32_LARGE_FILES
 
+/* Use Windows LDAP implementation */
+#undef USE_WIN32_LDAP
+
 /* Define to 1 if you are building a Windows target without large file
    support. */
 #undef USE_WIN32_SMALL_FILES
 /* to enable SSPI support */
 #undef USE_WINDOWS_SSPI
 
-/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
-#undef USE_YASSLEMUL
-
 /* Version number of package */
 #undef VERSION
 
diff --git a/lib/curl_des.c b/lib/curl_des.c
new file mode 100644 (file)
index 0000000..421c9f7
--- /dev/null
@@ -0,0 +1,63 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2015, Steve Holme, <steve_holme@hotmail.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 https://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_setup.h"
+
+#if defined(USE_NTLM) && !defined(USE_OPENSSL)
+
+#include "curl_des.h"
+
+/*
+ * Curl_des_set_odd_parity()
+ *
+ * This is used to apply odd parity to the given byte array. It is typically
+ * used by when a cryptography engines doesn't have it's own version.
+ *
+ * The function is a port of the Java based oddParity() function over at:
+ *
+ * http://davenport.sourceforge.net/ntlm.html
+ *
+ * Parameters:
+ *
+ * bytes       [in/out] - The data whose parity bits are to be adjusted for
+ *                        odd parity.
+ * len         [out]    - The length of the data.
+ */
+void Curl_des_set_odd_parity(unsigned char *bytes, size_t len)
+{
+  size_t i;
+
+  for(i = 0; i < len; i++) {
+    unsigned char b = bytes[i];
+
+    bool needs_parity = (((b >> 7) ^ (b >> 6) ^ (b >> 5) ^
+                          (b >> 4) ^ (b >> 3) ^ (b >> 2) ^
+                          (b >> 1)) & 0x01) == 0;
+
+    if(needs_parity)
+      bytes[i] |= 0x01;
+    else
+      bytes[i] &= 0xfe;
+  }
+}
+
+#endif /* USE_NTLM && !USE_OPENSSL */
diff --git a/lib/curl_des.h b/lib/curl_des.h
new file mode 100644 (file)
index 0000000..129060f
--- /dev/null
@@ -0,0 +1,34 @@
+#ifndef HEADER_CURL_DES_H
+#define HEADER_CURL_DES_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2015, Steve Holme, <steve_holme@hotmail.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 https://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_setup.h"
+
+#if defined(USE_NTLM) && !defined(USE_OPENSSL)
+
+/* Applies odd parity to the given byte array */
+void Curl_des_set_odd_parity(unsigned char *bytes, size_t length);
+
+#endif /* USE_NTLM && !USE_OPENSSL */
+
+#endif /* HEADER_CURL_DES_H */
index 14a2883..76deca6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -62,6 +62,7 @@ unsigned int Curl_read32_le(unsigned char *buf)
          ((unsigned int)buf[2] << 16) | ((unsigned int)buf[3] << 24);
 }
 
+#if (CURL_SIZEOF_CURL_OFF_T > 4)
 /*
  * Curl_read64_le()
  *
@@ -97,6 +98,8 @@ unsigned __int64 Curl_read64_le(unsigned char *buf)
 }
 #endif
 
+#endif /* CURL_SIZEOF_CURL_OFF_T > 4 */
+
 /*
  * Curl_read16_be()
  *
@@ -135,6 +138,7 @@ unsigned int Curl_read32_be(unsigned char *buf)
          ((unsigned int)buf[2] << 8) | ((unsigned int)buf[3]);
 }
 
+#if (CURL_SIZEOF_CURL_OFF_T > 4)
 /*
  * Curl_read64_be()
  *
@@ -170,6 +174,8 @@ unsigned __int64 Curl_read64_be(unsigned char *buf)
 }
 #endif
 
+#endif /* CURL_SIZEOF_CURL_OFF_T > 4 */
+
 /*
  * Curl_write16_le()
  *
@@ -227,4 +233,4 @@ void Curl_write64_le(const __int64 value, unsigned char *buffer)
   Curl_write32_le((int)value, buffer);
   Curl_write32_le((int)(value >> 32), buffer + 4);
 }
-#endif
+#endif /* CURL_SIZEOF_CURL_OFF_T > 4 */
index e384279..df8398c 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 63f67b9..5324007 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "curl_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"
 
index 6335d03..69ffe39 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index ded1e6f..2591fd8 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 48740f6..07517c5 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2cd14ff..75af670 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2011 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2011 - 2015, 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.
+ * are also available at https://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
@@ -27,9 +27,9 @@
 #include "curl_gssapi.h"
 #include "sendf.h"
 
-static const char spnego_oid_bytes[] = "\x2b\x06\x01\x05\x05\x02";
+static char spnego_oid_bytes[] = "\x2b\x06\x01\x05\x05\x02";
 gss_OID_desc Curl_spnego_mech_oid = { 6, &spnego_oid_bytes };
-static const char krb5_oid_bytes[] = "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02";
+static char krb5_oid_bytes[] = "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02";
 gss_OID_desc Curl_krb5_mech_oid = { 9, &krb5_oid_bytes };
 
 OM_uint32 Curl_gss_init_sec_context(
index 35e4b24..c1642a8 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2011 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2011 - 2015, 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.
+ * are also available at https://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
@@ -59,6 +59,17 @@ OM_uint32 Curl_gss_init_sec_context(
 void Curl_gss_log_error(struct SessionHandle *data, OM_uint32 status,
                         const char *prefix);
 
+/* Provide some definitions missing in old headers */
+#ifdef HAVE_OLD_GSSMIT
+#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
+#define NCOMPAT 1
+#endif
+
+/* Define our privacy and integrity protection values */
+#define GSSAUTH_P_NONE      1
+#define GSSAUTH_P_INTEGRITY 2
+#define GSSAUTH_P_PRIVACY   4
+
 #endif /* HAVE_GSSAPI */
 
 #endif /* HEADER_CURL_GSSAPI_H */
index 9b65c8c..41703b4 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 93fb4b0..27d0381 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 13c7903..8c26d12 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 9c0e0b5..5f70c96 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index e3cdc72..fcd177c 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -28,6 +28,9 @@
  * File curl_memory.h must be included by _all_ *.c source files
  * that use memory related functions strdup, malloc, calloc, realloc
  * or free, and given source file is used to build libcurl library.
+ * It should be included immediately before memdebug.h as the last files
+ * included to avoid undesired interaction with other memory function
+ * headers in dependent libraries.
  *
  * There is nearly no exception to above rule. All libcurl source
  * files in 'lib' subdirectory as well as those living deep inside
index a71c2bb..1be27e5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  ***************************************************************************/
 
 #include "curl_setup.h"
-
 #include "curl_memrchr.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"
 
index 324c73a..747509c 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 6e65722..e2078e0 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
 #include "curl_setup.h"
 
 #if defined(USE_WIN32_IDN) || ((defined(USE_WINDOWS_SSPI) || \
-                                defined(CURL_LDAP_WIN)) && defined(UNICODE))
+                                defined(USE_WIN32_LDAP)) && defined(UNICODE))
 
  /*
   * MultiByte conversions using Windows kernel32 library.
   */
 
 #include "curl_multibyte.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"
 
@@ -50,7 +47,8 @@ wchar_t *Curl_convert_UTF8_to_wchar(const char *str_utf8)
       if(str_w) {
         if(MultiByteToWideChar(CP_UTF8, 0, str_utf8, -1, str_w,
                                str_w_len) == 0) {
-          Curl_safefree(str_w);
+          free(str_w);
+          return NULL;
         }
       }
     }
@@ -71,7 +69,8 @@ char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w)
       if(str_utf8) {
         if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, str_utf8_len,
                                NULL, FALSE) == 0) {
-          Curl_safefree(str_utf8);
+          free(str_utf8);
+          return NULL;
         }
       }
     }
@@ -80,4 +79,4 @@ char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w)
   return str_utf8;
 }
 
-#endif /* USE_WIN32_IDN || ((USE_WINDOWS_SSPI || CURL_LDAP_WIN) && UNICODE) */
+#endif /* USE_WIN32_IDN || ((USE_WINDOWS_SSPI || USE_WIN32_LDAP) && UNICODE) */
index d024755..615f5c0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -24,7 +24,7 @@
 #include "curl_setup.h"
 
 #if defined(USE_WIN32_IDN) || ((defined(USE_WINDOWS_SSPI) || \
-                                defined(CURL_LDAP_WIN)) && defined(UNICODE))
+                                defined(USE_WIN32_LDAP)) && defined(UNICODE))
 
  /*
   * MultiByte conversions using Windows kernel32 library.
 wchar_t *Curl_convert_UTF8_to_wchar(const char *str_utf8);
 char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w);
 
-#endif /* USE_WIN32_IDN || ((USE_WINDOWS_SSPI || CURL_LDAP_WIN) && UNICODE) */
+#endif /* USE_WIN32_IDN || ((USE_WINDOWS_SSPI || USE_WIN32_LDAP) && UNICODE) */
 
 
 #if defined(USE_WIN32_IDN) || defined(USE_WINDOWS_SSPI) || \
-    defined(CURL_LDAP_WIN)
+    defined(USE_WIN32_LDAP)
 
 /*
  * Macros Curl_convert_UTF8_to_tchar(), Curl_convert_tchar_to_UTF8()
@@ -87,6 +87,6 @@ typedef union {
 
 #endif /* UNICODE */
 
-#endif /* USE_WIN32_IDN || USE_WINDOWS_SSPI || CURL_LDAP_WIN */
+#endif /* USE_WIN32_IDN || USE_WINDOWS_SSPI || USE_WIN32_LDAP */
 
 #endif /* HEADER_CURL_MULTIBYTE_H */
index c77f055..d4842e4 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "curl_ntlm_wb.h"
 #include "curl_sasl.h"
 #include "url.h"
-#include "curl_memory.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #if defined(USE_NSS)
 #include "vtls/nssg.h"
@@ -52,7 +49,8 @@
 #include "curl_sspi.h"
 #endif
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #if DEBUG_ME
@@ -86,7 +84,11 @@ CURLcode Curl_input_ntlm(struct connectdata *conn,
       ntlm->state = NTLMSTATE_TYPE2; /* We got a type-2 message */
     }
     else {
-      if(ntlm->state == NTLMSTATE_TYPE3) {
+      if(ntlm->state == NTLMSTATE_LAST) {
+        infof(conn->data, "NTLM auth restarted\n");
+        Curl_http_ntlm_cleanup(conn);
+      }
+      else if(ntlm->state == NTLMSTATE_TYPE3) {
         infof(conn->data, "NTLM handshake rejected\n");
         Curl_http_ntlm_cleanup(conn);
         ntlm->state = NTLMSTATE_NONE;
@@ -175,7 +177,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy)
       return result;
 
     if(base64) {
-      Curl_safefree(*allocuserpwd);
+      free(*allocuserpwd);
       *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
                               proxy ? "Proxy-" : "",
                               base64);
@@ -195,7 +197,7 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy)
       return result;
 
     if(base64) {
-      Curl_safefree(*allocuserpwd);
+      free(*allocuserpwd);
       *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
                               proxy ? "Proxy-" : "",
                               base64);
@@ -213,6 +215,9 @@ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy)
   case NTLMSTATE_TYPE3:
     /* connection is already authenticated,
      * don't send a header in future requests */
+    ntlm->state = NTLMSTATE_LAST;
+    /* fall-through */
+  case NTLMSTATE_LAST:
     Curl_safefree(*allocuserpwd);
     authp->done = TRUE;
     break;
index 947eac2..d186bbe 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2aaea4d..e79d1f6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -33,7 +33,7 @@
 
 #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)
 
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
 
 #  ifdef USE_OPENSSL
 #    include <openssl/des.h>
 #include "urldata.h"
 #include "non-ascii.h"
 #include "rawstr.h"
-#include "curl_memory.h"
 #include "curl_ntlm_core.h"
 #include "curl_md5.h"
 #include "curl_hmac.h"
 #include "warnless.h"
 #include "curl_endian.h"
+#include "curl_des.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #define NTLM_HMAC_MD5_LEN     (16)
@@ -133,7 +132,7 @@ static void extend_key_56_to_64(const unsigned char *key_56, char *key)
   key[7] = (unsigned char) ((key_56[6] << 1) & 0xFF);
 }
 
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
 /*
  * Turns a 56 bit key into the 64 bit, odd parity key and sets the key.  The
  * key schedule ks is also set.
@@ -143,8 +142,13 @@ static void setup_des_key(const unsigned char *key_56,
 {
   DES_cblock key;
 
-  extend_key_56_to_64(key_56, (char *) key);
+  /* Expand the 56-bit key to 64-bits */
+  extend_key_56_to_64(key_56, (char *) &key);
+
+  /* Set the key parity to odd */
   DES_set_odd_parity(&key);
+
+  /* Set the key */
   DES_set_key(&key, ks);
 }
 
@@ -154,8 +158,15 @@ static void setup_des_key(const unsigned char *key_56,
                           struct des_ctx *des)
 {
   char key[8];
+
+  /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
-  des_set_key(des, (const uint8_t*)key);
+
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
+  /* Set the key */
+  des_set_key(des, (const uint8_t *) key);
 }
 
 #elif defined(USE_GNUTLS)
@@ -167,8 +178,15 @@ static void setup_des_key(const unsigned char *key_56,
                           gcry_cipher_hd_t *des)
 {
   char key[8];
+
+  /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
-  gcry_cipher_setkey(*des, key, 8);
+
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
+  /* Set the key */
+  gcry_cipher_setkey(*des, key, sizeof(key));
 }
 
 #elif defined(USE_NSS)
@@ -196,16 +214,21 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   if(!slot)
     return FALSE;
 
-  /* expand the 56 bit key to 64 bit and wrap by NSS */
+  /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
+
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
+  /* Import the key */
   key_item.data = (unsigned char *)key;
-  key_item.len = /* hard-wired */ 8;
+  key_item.len = sizeof(key);
   symkey = PK11_ImportSymKey(slot, mech, PK11_OriginUnwrap, CKA_ENCRYPT,
                              &key_item, NULL);
   if(!symkey)
     goto fail;
 
-  /* create DES encryption context */
+  /* Create the DES encryption context */
   param = PK11_ParamFromIV(mech, /* no IV in ECB mode */ NULL);
   if(!param)
     goto fail;
@@ -213,7 +236,7 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   if(!ctx)
     goto fail;
 
-  /* perform the encryption */
+  /* Perform the encryption */
   if(SECSuccess == PK11_CipherOp(ctx, out, &out_len, /* outbuflen */ 8,
                                  (unsigned char *)in, /* inbuflen */ 8)
       && SECSuccess == PK11_Finalize(ctx))
@@ -240,10 +263,17 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   size_t out_len;
   CCCryptorStatus err;
 
+  /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, key);
+
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) key, sizeof(key));
+
+  /* Perform the encryption */
   err = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionECBMode, key,
                 kCCKeySizeDES, NULL, in, 8 /* inbuflen */, out,
                 8 /* outbuflen */, &out_len);
+
   return err == kCCSuccess;
 }
 
@@ -255,10 +285,19 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
   char key[8];
   _CIPHER_Control_T ctl;
 
+  /* Setup the cipher control structure */
   ctl.Func_ID = ENCRYPT_ONLY;
-  ctl.Data_Len = 8;
+  ctl.Data_Len = sizeof(key);
+
+  /* Expand the 56-bit key to 64-bits */
   extend_key_56_to_64(key_56, ctl.Crypto_Key);
+
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) ctl.Crypto_Key, ctl.Data_Len);
+
+  /* Perform the encryption */
   _CIPHER((_SPCPTR *) &out, &ctl, (_SPCPTR *) &in);
+
   return TRUE;
 }
 
@@ -281,13 +320,19 @@ static bool encrypt_des(const unsigned char *in, unsigned char *out,
                           CRYPT_VERIFYCONTEXT))
     return FALSE;
 
+  /* Setup the key blob structure */
   memset(&blob, 0, sizeof(blob));
-  extend_key_56_to_64(key_56, blob.key);
   blob.hdr.bType = PLAINTEXTKEYBLOB;
   blob.hdr.bVersion = 2;
   blob.hdr.aiKeyAlg = CALG_DES;
   blob.len = sizeof(blob.key);
 
+  /* Expand the 56-bit key to 64-bits */
+  extend_key_56_to_64(key_56, blob.key);
+
+  /* Set the key parity to odd */
+  Curl_des_set_odd_parity((unsigned char *) blob.key, sizeof(blob.key));
+
   /* Import the key */
   if(!CryptImportKey(hprov, (BYTE *) &blob, sizeof(blob), 0, 0, &hkey)) {
     CryptReleaseContext(hprov, 0);
@@ -317,7 +362,7 @@ void Curl_ntlm_core_lm_resp(const unsigned char *keys,
                             const unsigned char *plaintext,
                             unsigned char *results)
 {
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
   DES_key_schedule ks;
 
   setup_des_key(keys, DESKEY(ks));
@@ -392,7 +437,7 @@ CURLcode Curl_ntlm_core_mk_lm_hash(struct SessionHandle *data,
   {
     /* Create LanManager hashed password. */
 
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
     DES_key_schedule ks;
 
     setup_des_key(pw, DESKEY(ks));
@@ -459,6 +504,7 @@ static void ascii_uppercase_to_unicode_le(unsigned char *dest,
 
 /*
  * Set up nt hashed passwords
+ * @unittest: 1600
  */
 CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data,
                                    const char *password,
@@ -482,7 +528,7 @@ CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data,
 
   {
     /* Create NT hashed password. */
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
     MD4_CTX MD4pw;
     MD4_Init(&MD4pw);
     MD4_Update(&MD4pw, pw, 2 * len);
@@ -568,7 +614,7 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_hash(const char *user, size_t userlen,
   result = Curl_hmac_md5(ntlmhash, 16, identity, curlx_uztoui(identity_len),
                          ntlmv2hash);
 
-  Curl_safefree(identity);
+  free(identity);
 
   return result;
 }
@@ -614,21 +660,22 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
   unsigned int len = 0;
   unsigned char *ptr = NULL;
   unsigned char hmac_output[NTLM_HMAC_MD5_LEN];
-#if defined(HAVE_LONGLONG)
-  long long tw;
-#else
-  __int64 tw;
-#endif
+  curl_off_t tw;
+
   CURLcode result = CURLE_OK;
 
+#if CURL_SIZEOF_CURL_OFF_T < 8
+#error "this section needs 64bit support to work"
+#endif
+
   /* Calculate the timestamp */
 #ifdef DEBUGBUILD
   char *force_timestamp = getenv("CURL_FORCETIME");
   if(force_timestamp)
-    tw = 11644473600ULL * 10000000ULL;
+    tw = CURL_OFF_T_C(11644473600) * 10000000;
   else
 #endif
-  tw = ((long long)time(NULL) + 11644473600ULL) * 10000000ULL;
+    tw = ((curl_off_t)time(NULL) + CURL_OFF_T_C(11644473600)) * 10000000;
 
   /* Calculate the response len */
   len = NTLM_HMAC_MD5_LEN + NTLMv2_BLOB_LEN;
@@ -655,8 +702,7 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
   result = Curl_hmac_md5(ntlmv2hash, NTLM_HMAC_MD5_LEN, ptr + 8,
                          NTLMv2_BLOB_LEN + 8, hmac_output);
   if(result) {
-    Curl_safefree(ptr);
-
+    free(ptr);
     return result;
   }
 
index c168966..cf37dc8 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -28,7 +28,7 @@
 
 #if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)
 
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
 #  if !defined(OPENSSL_VERSION_NUMBER) && \
       !defined(HEADER_SSL_H) && !defined(HEADER_MD5_H)
 #    error "curl_ntlm_core.h shall not be included before OpenSSL headers."
index 865954d..fc95472 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -41,7 +41,6 @@
 #include "curl_gethostname.h"
 #include "curl_multibyte.h"
 #include "warnless.h"
-#include "curl_memory.h"
 
 #include "vtls/vtls.h"
 
 #include "curl_ntlm_msgs.h"
 #include "curl_sasl.h"
 #include "curl_endian.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* "NTLMSSP" signature is always in ASCII regardless of the platform */
@@ -152,7 +150,7 @@ static void ntlm_print_hex(FILE *handle, const char *buf, size_t len)
 /*
  * ntlm_decode_type2_target()
  *
- * This is used to decode the "target info" in the ntlm type-2 message
+ * This is used to decode the "target info" in the NTLM type-2 message
  * received.
  *
  * Parameters:
@@ -160,7 +158,7 @@ static void ntlm_print_hex(FILE *handle, const char *buf, size_t len)
  * data      [in]     - The session handle.
  * buffer    [in]     - The decoded type-2 message.
  * size      [in]     - The input buffer size, at least 32 bytes.
- * ntlm      [in/out] - The ntlm data struct being used and modified.
+ * ntlm      [in/out] - The NTLM data struct being used and modified.
  *
  * Returns CURLE_OK on success.
  */
@@ -172,6 +170,10 @@ static CURLcode ntlm_decode_type2_target(struct SessionHandle *data,
   unsigned short target_info_len = 0;
   unsigned int target_info_offset = 0;
 
+#if defined(CURL_DISABLE_VERBOSE_STRINGS)
+  (void) data;
+#endif
+
   if(size >= 48) {
     target_info_len = Curl_read16_le(&buffer[40]);
     target_info_offset = Curl_read32_le(&buffer[44]);
@@ -224,7 +226,7 @@ static CURLcode ntlm_decode_type2_target(struct SessionHandle *data,
  *
  * data     [in]     - The session handle.
  * type2msg [in]     - The base64 encoded type-2 message.
- * ntlm     [in/out] - The ntlm data struct being used and modified.
+ * ntlm     [in/out] - The NTLM data struct being used and modified.
  *
  * Returns CURLE_OK on success.
  */
@@ -334,7 +336,7 @@ static void unicodecpy(unsigned char *dest, const char *src, size_t length)
  *
  * userp   [in]     - The user name in the format User or Domain\User.
  * passdwp [in]     - The user's password.
- * ntlm    [in/out] - The ntlm data struct being used and modified.
+ * ntlm    [in/out] - The NTLM data struct being used and modified.
  * outptr  [in/out] - The address where a pointer to newly allocated memory
  *                    holding the result will be stored upon completion.
  * outlen  [out]    - The length of the output message.
@@ -454,7 +456,7 @@ CURLcode Curl_sasl_create_ntlm_type1_message(const char *userp,
  * data    [in]     - The session handle.
  * userp   [in]     - The user name in the format User or Domain\User.
  * passdwp [in]     - The user's password.
- * ntlm    [in/out] - The ntlm data struct being used and modified.
+ * ntlm    [in/out] - The NTLM data struct being used and modified.
  * outptr  [in/out] - The address where a pointer to newly allocated memory
  *                    holding the result will be stored upon completion.
  * outlen  [out]    - The length of the output message.
@@ -593,11 +595,11 @@ CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
     memcpy(tmp, &ntlm->nonce[0], 8);
     memcpy(tmp + 8, entropy, 8);
 
-    Curl_ssl_md5sum(tmp, 16, md5sum, MD5_DIGEST_LENGTH);
-
-    /* We shall only use the first 8 bytes of md5sum, but the des
-       code in Curl_ntlm_core_lm_resp only encrypt the first 8 bytes */
-    result = Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer);
+    result = Curl_ssl_md5sum(tmp, 16, md5sum, MD5_DIGEST_LENGTH);
+    if(!result)
+      /* We shall only use the first 8 bytes of md5sum, but the des code in
+         Curl_ntlm_core_lm_resp only encrypt the first 8 bytes */
+      result = Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer);
     if(result)
       return result;
 
@@ -760,7 +762,7 @@ CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
     ntlm_print_hex(stderr, (char *)&ntlmbuf[ntrespoff], ntresplen);
   });
 
-  Curl_safefree(ntlmv2resp);/* Free the dynamic buffer allocated for NTLMv2 */
+  free(ntlmv2resp);/* Free the dynamic buffer allocated for NTLMv2 */
 
 #endif
 
index 2a71431..b9026f8 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 5e2d79c..06f6670 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "curl_ntlm_wb.h"
 #include "url.h"
 #include "strerror.h"
-#include "curl_memory.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #if DEBUG_ME
@@ -107,9 +105,9 @@ void Curl_ntlm_wb_cleanup(struct connectdata *conn)
     conn->ntlm_auth_hlpr_pid = 0;
   }
 
-  Curl_safefree(conn->challenge_header);
+  free(conn->challenge_header);
   conn->challenge_header = NULL;
-  Curl_safefree(conn->response_header);
+  free(conn->response_header);
   conn->response_header = NULL;
 }
 
@@ -246,13 +244,13 @@ static CURLcode ntlm_wb_init(struct connectdata *conn, const char *userp)
   sclose(sockfds[1]);
   conn->ntlm_auth_hlpr_socket = sockfds[0];
   conn->ntlm_auth_hlpr_pid = child_pid;
-  Curl_safefree(domain);
-  Curl_safefree(ntlm_auth_alloc);
+  free(domain);
+  free(ntlm_auth_alloc);
   return CURLE_OK;
 
 done:
-  Curl_safefree(domain);
-  Curl_safefree(ntlm_auth_alloc);
+  free(domain);
+  free(ntlm_auth_alloc);
   return CURLE_REMOTE_ACCESS_DENIED;
 }
 
@@ -308,7 +306,7 @@ static CURLcode ntlm_wb_response(struct connectdata *conn,
   if(state == NTLMSTATE_TYPE1 &&
      len_out == 3 &&
      buf[0] == 'P' && buf[1] == 'W')
-    return CURLE_REMOTE_ACCESS_DENIED;
+    goto done;
   /* invalid response */
   if(len_out < 4)
     goto done;
@@ -375,8 +373,8 @@ CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
      * by delegating the NTLM challenge/response protocal to a helper
      * in ntlm_auth.
      * http://devel.squid-cache.org/ntlm/squid_helper_protocol.html
-     * http://www.samba.org/samba/docs/man/manpages-3/winbindd.8.html
-     * http://www.samba.org/samba/docs/man/manpages-3/ntlm_auth.1.html
+     * https://www.samba.org/samba/docs/man/manpages-3/winbindd.8.html
+     * https://www.samba.org/samba/docs/man/manpages-3/ntlm_auth.1.html
      * Preprocessor symbol 'NTLM_WB_ENABLED' is defined when this
      * feature is enabled and 'NTLM_WB_FILE' symbol holds absolute
      * filename of ntlm_auth helper.
@@ -391,12 +389,12 @@ CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
     if(res)
       return res;
 
-    Curl_safefree(*allocuserpwd);
+    free(*allocuserpwd);
     *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
                             proxy ? "Proxy-" : "",
                             conn->response_header);
     DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
-    Curl_safefree(conn->response_header);
+    free(conn->response_header);
     conn->response_header = NULL;
     break;
   case NTLMSTATE_TYPE2:
@@ -409,7 +407,7 @@ CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
     if(res)
       return res;
 
-    Curl_safefree(*allocuserpwd);
+    free(*allocuserpwd);
     *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
                             proxy ? "Proxy-" : "",
                             conn->response_header);
@@ -421,10 +419,8 @@ CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
   case NTLMSTATE_TYPE3:
     /* connection is already authenticated,
      * don't send a header in future requests */
-    if(*allocuserpwd) {
-      free(*allocuserpwd);
-      *allocuserpwd=NULL;
-    }
+    free(*allocuserpwd);
+    *allocuserpwd=NULL;
     authp->done = TRUE;
     break;
   }
index 828bb57..aba3d46 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
diff --git a/lib/curl_printf.h b/lib/curl_printf.h
new file mode 100644 (file)
index 0000000..49857cd
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef HEADER_CURL_PRINTF_H
+#define HEADER_CURL_PRINTF_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 header should be included by ALL code in libcurl that uses any
+ * *rintf() functions.
+ */
+
+#include <curl/mprintf.h>
+
+# undef printf
+# undef fprintf
+# undef snprintf
+# undef vprintf
+# undef vfprintf
+# undef vsnprintf
+# undef aprintf
+# undef vaprintf
+# define printf curl_mprintf
+# define fprintf curl_mfprintf
+# define snprintf curl_msnprintf
+# define vprintf curl_mvprintf
+# define vfprintf curl_mvfprintf
+# define vsnprintf curl_mvsnprintf
+# define aprintf curl_maprintf
+# define vaprintf curl_mvaprintf
+
+/* We define away the sprintf functions unconditonally since we don't want
+   internal code to be using them, intentionally or by mistake!*/
+# undef sprintf
+# undef vsprintf
+# define sprintf sprintf_was_used
+# define vsprintf vsprintf_was_used
+
+#endif /* HEADER_CURL_PRINTF_H */
index d1d79c3..06dd047 100644 (file)
@@ -5,12 +5,12 @@
  *                | (__| |_| |  _ <| |___
  *                 \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * 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.
+ * are also available at https://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
 #include "warnless.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"
@@ -59,7 +55,7 @@ static Curl_recv rtmp_recv;
 static Curl_send rtmp_send;
 
 /*
- * RTMP protocol handler.h, based on http://rtmpdump.mplayerhq.hu
+ * RTMP protocol handler.h, based on https://rtmpdump.mplayerhq.hu
  */
 
 const struct Curl_handler Curl_handler_rtmp = {
@@ -201,7 +197,7 @@ static CURLcode rtmp_setup_connection(struct connectdata *conn)
 static CURLcode rtmp_connect(struct connectdata *conn, bool *done)
 {
   RTMP *r = conn->proto.generic;
-  SET_RCVTIMEO(tv,10);
+  SET_RCVTIMEO(tv, 10);
 
   r->m_sb.sb_socket = conn->sock[FIRSTSOCKET];
 
index 4a9e9e6..3306e22 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index b944aa2..945d752 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2016, 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.
+ * are also available at https://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
@@ -24,6 +24,7 @@
  * RFC4422 Simple Authentication and Security Layer (SASL)
  * RFC4616 PLAIN authentication
  * RFC6749 OAuth 2.0 Authorization Framework
+ * RFC7628 A Set of SASL Mechanisms for OAuth
  * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
  *
  ***************************************************************************/
 #include "curl_hmac.h"
 #include "curl_sasl.h"
 #include "warnless.h"
-#include "curl_memory.h"
 #include "strtok.h"
+#include "strequal.h"
 #include "rawstr.h"
+#include "sendf.h"
 #include "non-ascii.h" /* included for Curl_convert_... prototypes */
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
+/* Supported mechanisms */
+const struct {
+  const char   *name;  /* Name */
+  size_t        len;   /* Name length */
+  unsigned int  bit;   /* Flag bit */
+} mechtable[] = {
+  { "LOGIN",        5,  SASL_MECH_LOGIN },
+  { "PLAIN",        5,  SASL_MECH_PLAIN },
+  { "CRAM-MD5",     8,  SASL_MECH_CRAM_MD5 },
+  { "DIGEST-MD5",   10, SASL_MECH_DIGEST_MD5 },
+  { "GSSAPI",       6,  SASL_MECH_GSSAPI },
+  { "EXTERNAL",     8,  SASL_MECH_EXTERNAL },
+  { "NTLM",         4,  SASL_MECH_NTLM },
+  { "XOAUTH2",      7,  SASL_MECH_XOAUTH2 },
+  { "OAUTHBEARER",  11, SASL_MECH_OAUTHBEARER },
+  { ZERO_NULL,      0,  0 }
+};
+
 #if !defined(CURL_DISABLE_CRYPTO_AUTH) && !defined(USE_WINDOWS_SSPI)
 #define DIGEST_QOP_VALUE_AUTH             (1 << 0)
 #define DIGEST_QOP_VALUE_AUTH_INT         (1 << 1)
@@ -59,9 +78,6 @@
 #define DIGEST_QOP_VALUE_STRING_AUTH_INT  "auth-int"
 #define DIGEST_QOP_VALUE_STRING_AUTH_CONF "auth-conf"
 
-#define DIGEST_MAX_VALUE_LENGTH           256
-#define DIGEST_MAX_CONTENT_LENGTH         1024
-
 /* The CURL_OUTPUT_DIGEST_CONV macro below is for non-ASCII machines.
    It converts digest text to ASCII so the MD5 will be correct for
    what ultimately goes over the network.
     return result; \
   }
 
-/*
- * Return 0 on success and then the buffers are filled in fine.
- *
- * Non-zero means failure to parse.
- */
-static int sasl_digest_get_pair(const char *str, char *value, char *content,
-                                const char **endptr)
+#endif
+
+#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+bool Curl_sasl_digest_get_pair(const char *str, char *value, char *content,
+                               const char **endptr)
 {
   int c;
   bool starts_with_quote = FALSE;
@@ -91,7 +105,7 @@ static int sasl_digest_get_pair(const char *str, char *value, char *content,
 
   if('=' != *str++)
     /* eek, no match */
-    return 1;
+    return FALSE;
 
   if('\"' == *str) {
     /* this starts with a quote so it must end with one as well! */
@@ -110,6 +124,7 @@ static int sasl_digest_get_pair(const char *str, char *value, char *content,
         continue;
       }
       break;
+
     case ',':
       if(!starts_with_quote) {
         /* this signals the end of the content if we didn't get a starting
@@ -118,11 +133,13 @@ static int sasl_digest_get_pair(const char *str, char *value, char *content,
         continue;
       }
       break;
+
     case '\r':
     case '\n':
       /* end of string */
       c = 0;
       continue;
+
     case '\"':
       if(!escape && starts_with_quote) {
         /* end of string */
@@ -131,16 +148,19 @@ static int sasl_digest_get_pair(const char *str, char *value, char *content,
       }
       break;
     }
+
     escape = FALSE;
     *content++ = *str;
   }
-  *content = 0;
 
+  *content = 0;
   *endptr = str;
 
-  return 0; /* all is fine! */
+  return TRUE;
 }
+#endif
 
+#if !defined(CURL_DISABLE_CRYPTO_AUTH) && !defined(USE_WINDOWS_SSPI)
 /* Convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string*/
 static void sasl_digest_md5_to_ascii(unsigned char *source, /* 16 bytes */
                                      unsigned char *dest) /* 33 bytes */
@@ -234,7 +254,7 @@ static CURLcode sasl_digest_get_qop_values(const char *options, int *value)
     token = strtok_r(NULL, ",", &tok_buf);
   }
 
-  Curl_safefree(tmp);
+  free(tmp);
 
   return CURLE_OK;
 }
@@ -244,24 +264,24 @@ static CURLcode sasl_digest_get_qop_values(const char *options, int *value)
 /*
  * Curl_sasl_build_spn()
  *
- * This is used to build a SPN string in the format service/host.
+ * This is used to build a SPN string in the format service/instance.
  *
  * Parameters:
  *
- * serivce  [in] - The service type such as www, smtp, pop or imap.
- * host     [in] - The host name or realm.
+ * service  [in] - The service type such as www, smtp, pop or imap.
+ * instance [in] - The host name or realm.
  *
  * Returns a pointer to the newly allocated SPN.
  */
-char *Curl_sasl_build_spn(const char *service, const char *host)
+char *Curl_sasl_build_spn(const char *service, const char *instance)
 {
   /* Generate and return our SPN */
-  return aprintf("%s/%s", service, host);
+  return aprintf("%s/%s", service, instance);
 }
 #endif
 
 /*
- * Curl_sasl_create_plain_message()
+ * sasl_create_plain_message()
  *
  * This is used to generate an already encoded PLAIN message ready
  * for sending to the recipient.
@@ -277,10 +297,10 @@ char *Curl_sasl_build_spn(const char *service, const char *host)
  *
  * Returns CURLE_OK on success.
  */
-CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
-                                        const char *userp,
-                                        const char *passwdp,
-                                        char **outptr, size_t *outlen)
+static CURLcode sasl_create_plain_message(struct SessionHandle *data,
+                                          const char *userp,
+                                          const char *passwdp,
+                                          char **outptr, size_t *outlen)
 {
   CURLcode result;
   char *plainauth;
@@ -307,12 +327,12 @@ CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
   /* Base64 encode the reply */
   result = Curl_base64_encode(data, plainauth, 2 * ulen + plen + 2, outptr,
                               outlen);
-  Curl_safefree(plainauth);
+  free(plainauth);
   return result;
 }
 
 /*
- * Curl_sasl_create_login_message()
+ * sasl_create_login_message()
  *
  * This is used to generate an already encoded LOGIN message containing the
  * user name or password ready for sending to the recipient.
@@ -327,9 +347,9 @@ CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
  *
  * Returns CURLE_OK on success.
  */
-CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
-                                        const char *valuep, char **outptr,
-                                        size_t *outlen)
+static CURLcode sasl_create_login_message(struct SessionHandle *data,
+                                          const char *valuep, char **outptr,
+                                          size_t *outlen)
 {
   size_t vlen = strlen(valuep);
 
@@ -349,9 +369,33 @@ CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
   return Curl_base64_encode(data, valuep, vlen, outptr, outlen);
 }
 
+/*
+ * sasl_create_external_message()
+ *
+ * This is used to generate an already encoded EXTERNAL message containing
+ * the user name ready for sending to the recipient.
+ *
+ * Parameters:
+ *
+ * data    [in]     - The session handle.
+ * user    [in]     - The user name.
+ * outptr  [in/out] - The address where a pointer to newly allocated memory
+ *                    holding the result will be stored upon completion.
+ * outlen  [out]    - The length of the output message.
+ *
+ * Returns CURLE_OK on success.
+ */
+static CURLcode sasl_create_external_message(struct SessionHandle *data,
+                                             const char *user, char **outptr,
+                                             size_t *outlen)
+{
+  /* This is the same formatting as the login message. */
+  return sasl_create_login_message(data, user, outptr, outlen);
+}
+
 #ifndef CURL_DISABLE_CRYPTO_AUTH
- /*
- * Curl_sasl_decode_cram_md5_message()
+/*
+ * sasl_decode_cram_md5_message()
  *
  * This is used to decode an already encoded CRAM-MD5 challenge message.
  *
@@ -364,8 +408,8 @@ CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
  *
  * Returns CURLE_OK on success.
  */
-CURLcode Curl_sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
-                                           size_t *outlen)
+static CURLcode sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
+                                             size_t *outlen)
 {
   CURLcode result = CURLE_OK;
   size_t chlg64len = strlen(chlg64);
@@ -377,11 +421,11 @@ CURLcode Curl_sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
   if(chlg64len && *chlg64 != '=')
     result = Curl_base64_decode(chlg64, (unsigned char **) outptr, outlen);
 
-    return result;
- }
+  return result;
+}
 
- /*
- * Curl_sasl_create_cram_md5_message()
+/*
+ * sasl_create_cram_md5_message()
  *
  * This is used to generate an already encoded CRAM-MD5 response message ready
  * for sending to the recipient.
@@ -398,11 +442,11 @@ CURLcode Curl_sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
  *
  * Returns CURLE_OK on success.
  */
-CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
-                                           const char *chlg,
-                                           const char *userp,
-                                           const char *passwdp,
-                                           char **outptr, size_t *outlen)
+static CURLcode sasl_create_cram_md5_message(struct SessionHandle *data,
+                                             const char *chlg,
+                                             const char *userp,
+                                             const char *passwdp,
+                                             char **outptr, size_t *outlen)
 {
   CURLcode result = CURLE_OK;
   size_t chlglen = 0;
@@ -430,17 +474,17 @@ CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
 
   /* Generate the response */
   response = aprintf(
-      "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
-           userp, 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]);
+    "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
+    userp, 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]);
   if(!response)
     return CURLE_OUT_OF_MEMORY;
 
   /* Base64 encode the response */
   result = Curl_base64_encode(data, response, 0, outptr, outlen);
 
-  Curl_safefree(response);
+  free(response);
 
   return result;
 }
@@ -490,7 +534,7 @@ static CURLcode sasl_decode_digest_md5_message(const char *chlg64,
 
   /* Retrieve nonce string from the challenge */
   if(!sasl_digest_get_key_value((char *)chlg, "nonce=\"", nonce, nlen, '\"')) {
-    Curl_safefree(chlg);
+    free(chlg);
     return CURLE_BAD_CONTENT_ENCODING;
   }
 
@@ -502,17 +546,17 @@ static CURLcode sasl_decode_digest_md5_message(const char *chlg64,
 
   /* Retrieve algorithm string from the challenge */
   if(!sasl_digest_get_key_value((char *)chlg, "algorithm=", alg, alen, ',')) {
-    Curl_safefree(chlg);
+    free(chlg);
     return CURLE_BAD_CONTENT_ENCODING;
   }
 
   /* Retrieve qop-options string from the challenge */
   if(!sasl_digest_get_key_value((char *)chlg, "qop=\"", qop, qlen, '\"')) {
-    Curl_safefree(chlg);
+    free(chlg);
     return CURLE_BAD_CONTENT_ENCODING;
   }
 
-  Curl_safefree(chlg);
+  free(chlg);
 
   return CURLE_OK;
 }
@@ -634,7 +678,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   /* Calculate H(A2) */
   ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
   if(!ctxt) {
-    Curl_safefree(spn);
+    free(spn);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -652,7 +696,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   /* Now calculate the response hash */
   ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
   if(!ctxt) {
-    Curl_safefree(spn);
+    free(spn);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -685,14 +729,14 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
                      "qop=%s",
                      userp, realm, nonce,
                      cnonce, nonceCount, spn, resp_hash_hex, qop);
-  Curl_safefree(spn);
+  free(spn);
   if(!response)
     return CURLE_OUT_OF_MEMORY;
 
   /* Base64 encode the response */
   result = Curl_base64_encode(data, response, 0, outptr, outlen);
 
-  Curl_safefree(response);
+  free(response);
 
   return result;
 }
@@ -735,8 +779,9 @@ CURLcode Curl_sasl_decode_digest_http_message(const char *chlg,
       chlg++;
 
     /* Extract a value=content pair */
-    if(!sasl_digest_get_pair(chlg, value, content, &chlg)) {
+    if(Curl_sasl_digest_get_pair(chlg, value, content, &chlg)) {
       if(Curl_raw_equal(value, "nonce")) {
+        free(digest->nonce);
         digest->nonce = strdup(content);
         if(!digest->nonce)
           return CURLE_OUT_OF_MEMORY;
@@ -748,11 +793,13 @@ CURLcode Curl_sasl_decode_digest_http_message(const char *chlg,
         }
       }
       else if(Curl_raw_equal(value, "realm")) {
+        free(digest->realm);
         digest->realm = strdup(content);
         if(!digest->realm)
           return CURLE_OUT_OF_MEMORY;
       }
       else if(Curl_raw_equal(value, "opaque")) {
+        free(digest->opaque);
         digest->opaque = strdup(content);
         if(!digest->opaque)
           return CURLE_OUT_OF_MEMORY;
@@ -760,7 +807,7 @@ CURLcode Curl_sasl_decode_digest_http_message(const char *chlg,
       else if(Curl_raw_equal(value, "qop")) {
         char *tok_buf;
         /* Tokenize the list and choose auth if possible, use a temporary
-            clone of the buffer since strtok_r() ruins it */
+           clone of the buffer since strtok_r() ruins it */
         tmp = strdup(content);
         if(!tmp)
           return CURLE_OUT_OF_MEMORY;
@@ -780,17 +827,20 @@ CURLcode Curl_sasl_decode_digest_http_message(const char *chlg,
 
         /* Select only auth or auth-int. Otherwise, ignore */
         if(foundAuth) {
+          free(digest->qop);
           digest->qop = strdup(DIGEST_QOP_VALUE_STRING_AUTH);
           if(!digest->qop)
             return CURLE_OUT_OF_MEMORY;
         }
         else if(foundAuthInt) {
+          free(digest->qop);
           digest->qop = strdup(DIGEST_QOP_VALUE_STRING_AUTH_INT);
           if(!digest->qop)
             return CURLE_OUT_OF_MEMORY;
         }
       }
       else if(Curl_raw_equal(value, "algorithm")) {
+        free(digest->algorithm);
         digest->algorithm = strdup(content);
         if(!digest->algorithm)
           return CURLE_OUT_OF_MEMORY;
@@ -889,14 +939,14 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
   }
 
   /*
-    if the algorithm is "MD5" or unspecified (which then defaults to MD5):
+    If the algorithm is "MD5" or unspecified (which then defaults to MD5):
 
-    A1 = unq(username-value) ":" unq(realm-value) ":" passwd
+      A1 = unq(username-value) ":" unq(realm-value) ":" passwd
 
-    if the algorithm is "MD5-sess" then:
+    If the algorithm is "MD5-sess" then:
 
-    A1 = H( unq(username-value) ":" unq(realm-value) ":" passwd )
-         ":" unq(nonce-value) ":" unq(cnonce-value)
+      A1 = H( unq(username-value) ":" unq(realm-value) ":" passwd ) ":"
+            unq(nonce-value) ":" unq(cnonce-value)
   */
 
   md5this = (unsigned char *)
@@ -906,7 +956,7 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
 
   CURL_OUTPUT_DIGEST_CONV(data, md5this); /* convert on non-ASCII machines */
   Curl_md5it(md5buf, md5this);
-  Curl_safefree(md5this);
+  free(md5this);
   sasl_digest_md5_to_ascii(md5buf, ha1);
 
   if(digest->algo == CURLDIGESTALGO_MD5SESS) {
@@ -917,18 +967,18 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
 
     CURL_OUTPUT_DIGEST_CONV(data, tmp); /* convert on non-ASCII machines */
     Curl_md5it(md5buf, (unsigned char *)tmp);
-    Curl_safefree(tmp);
+    free(tmp);
     sasl_digest_md5_to_ascii(md5buf, ha1);
   }
 
   /*
     If the "qop" directive's value is "auth" or is unspecified, then A2 is:
 
-      A2       = Method ":" digest-uri-value
+      A2 = Method ":" digest-uri-value
 
-          If the "qop" value is "auth-int", then A2 is:
+    If the "qop" value is "auth-int", then A2 is:
 
-      A2       = Method ":" digest-uri-value ":" H(entity-body)
+      A2 = Method ":" digest-uri-value ":" H(entity-body)
 
     (The "Method" value is the HTTP request method as specified in section
     5.1.1 of RFC 2616)
@@ -941,7 +991,7 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
        TODO: replace md5 of empty string with entity-body for PUT/POST */
     unsigned char *md5this2 = (unsigned char *)
       aprintf("%s:%s", md5this, "d41d8cd98f00b204e9800998ecf8427e");
-    Curl_safefree(md5this);
+    free(md5this);
     md5this = md5this2;
   }
 
@@ -950,7 +1000,7 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
 
   CURL_OUTPUT_DIGEST_CONV(data, md5this); /* convert on non-ASCII machines */
   Curl_md5it(md5buf, md5this);
-  Curl_safefree(md5this);
+  free(md5this);
   sasl_digest_md5_to_ascii(md5buf, ha2);
 
   if(digest->qop) {
@@ -974,21 +1024,21 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
 
   CURL_OUTPUT_DIGEST_CONV(data, md5this); /* convert on non-ASCII machines */
   Curl_md5it(md5buf, md5this);
-  Curl_safefree(md5this);
+  free(md5this);
   sasl_digest_md5_to_ascii(md5buf, request_digest);
 
   /* for test case 64 (snooped from a Mozilla 1.3a request)
 
-    Authorization: Digest username="testuser", realm="testrealm", \
-    nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"
+     Authorization: Digest username="testuser", realm="testrealm",      \
+     nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"
 
-    Digest parameters are all quoted strings.  Username which is provided by
-    the user will need double quotes and backslashes within it escaped.  For
-    the other fields, this shouldn't be an issue.  realm, nonce, and opaque
-    are copied as is from the server, escapes and all.  cnonce is generated
-    with web-safe characters.  uri is already percent encoded.  nc is 8 hex
-    characters.  algorithm and qop with standard values only contain web-safe
-    chracters.
+     Digest parameters are all quoted strings.  Username which is provided by
+     the user will need double quotes and backslashes within it escaped.  For
+     the other fields, this shouldn't be an issue.  realm, nonce, and opaque
+     are copied as is from the server, escapes and all.  cnonce is generated
+     with web-safe characters.  uri is already percent encoded.  nc is 8 hex
+     characters.  algorithm and qop with standard values only contain web-safe
+     characters.
   */
   userp_quoted = sasl_digest_string_quoted(userp);
   if(!userp_quoted)
@@ -1029,7 +1079,7 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
                        uripath,
                        request_digest);
   }
-  Curl_safefree(userp_quoted);
+  free(userp_quoted);
   if(!response)
     return CURLE_OUT_OF_MEMORY;
 
@@ -1092,11 +1142,11 @@ void Curl_sasl_digest_cleanup(struct digestdata *digest)
 /*
  * Curl_sasl_ntlm_cleanup()
  *
- * This is used to clean up the ntlm specific data.
+ * This is used to clean up the NTLM specific data.
  *
  * Parameters:
  *
- * ntlm    [in/out] - The ntlm data struct being cleaned up.
+ * ntlm    [in/out] - The NTLM data struct being cleaned up.
  *
  */
 void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
@@ -1110,7 +1160,7 @@ void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
 #endif /* USE_NTLM && !USE_WINDOWS_SSPI*/
 
 /*
- * Curl_sasl_create_xoauth2_message()
+ * sasl_create_oauth_bearer_message()
  *
  * This is used to generate an already encoded OAuth 2.0 message ready for
  * sending to the recipient.
@@ -1119,6 +1169,8 @@ void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
  *
  * data    [in]     - The session handle.
  * user    [in]     - The user name.
+ * host    [in]     - The host name (for OAUTHBEARER).
+ * port    [in]     - The port (for OAUTHBEARER when not Port 80).
  * bearer  [in]     - The bearer token.
  * outptr  [in/out] - The address where a pointer to newly allocated memory
  *                    holding the result will be stored upon completion.
@@ -1126,23 +1178,32 @@ void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
  *
  * Returns CURLE_OK on success.
  */
-CURLcode Curl_sasl_create_xoauth2_message(struct SessionHandle *data,
-                                          const char *user,
-                                          const char *bearer,
-                                          char **outptr, size_t *outlen)
+static CURLcode sasl_create_oauth_bearer_message(struct SessionHandle *data,
+                                                 const char *user,
+                                                 const char *host,
+                                                 const long port,
+                                                 const char *bearer,
+                                                 char **outptr, size_t *outlen)
 {
   CURLcode result = CURLE_OK;
-  char *xoauth = NULL;
+  char *oauth = NULL;
 
   /* Generate the message */
-  xoauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
-  if(!xoauth)
+  if(host == NULL && (port == 0 || port == 80))
+    oauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
+  else if(port == 0 || port == 80)
+    oauth = aprintf("user=%s\1host=%s\1auth=Bearer %s\1\1", user, host,
+                    bearer);
+  else
+    oauth = aprintf("user=%s\1host=%s\1port=%ld\1auth=Bearer %s\1\1", user,
+                    host, port, bearer);
+  if(!oauth)
     return CURLE_OUT_OF_MEMORY;
 
   /* Base64 encode the reply */
-  result = Curl_base64_encode(data, xoauth, strlen(xoauth), outptr, outlen);
+  result = Curl_base64_encode(data, oauth, strlen(oauth), outptr, outlen);
 
-  Curl_safefree(xoauth);
+  free(oauth);
 
   return result;
 }
@@ -1168,7 +1229,7 @@ void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused)
 #endif
 
 #if defined(USE_NTLM)
-  /* Cleanup the ntlm structure */
+  /* Cleanup the NTLM structure */
   if(authused == SASL_MECH_NTLM) {
     Curl_sasl_ntlm_cleanup(&conn->ntlm);
   }
@@ -1180,3 +1241,502 @@ void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused)
   (void)authused;
 #endif
 }
+
+/*
+ * Curl_sasl_decode_mech()
+ *
+ * Convert a SASL mechanism name into a token.
+ *
+ * Parameters:
+ *
+ * ptr    [in]     - The mechanism string.
+ * maxlen [in]     - Maximum mechanism string length.
+ * len    [out]    - If not NULL, effective name length.
+ *
+ * Returns the SASL mechanism token or 0 if no match.
+ */
+unsigned int Curl_sasl_decode_mech(const char *ptr, size_t maxlen, size_t *len)
+{
+  unsigned int i;
+  char c;
+
+  for(i = 0; mechtable[i].name; i++) {
+    if(maxlen >= mechtable[i].len &&
+       !memcmp(ptr, mechtable[i].name, mechtable[i].len)) {
+      if(len)
+        *len = mechtable[i].len;
+
+      if(maxlen == mechtable[i].len)
+        return mechtable[i].bit;
+
+      c = ptr[mechtable[i].len];
+      if(!ISUPPER(c) && !ISDIGIT(c) && c != '-' && c != '_')
+        return mechtable[i].bit;
+    }
+  }
+
+  return 0;
+}
+
+/*
+ * Curl_sasl_parse_url_auth_option()
+ *
+ * Parse the URL login options.
+ */
+CURLcode Curl_sasl_parse_url_auth_option(struct SASL *sasl,
+                                         const char *value, size_t len)
+{
+  CURLcode result = CURLE_OK;
+  unsigned int mechbit;
+  size_t mechlen;
+
+  if(!len)
+    return CURLE_URL_MALFORMAT;
+
+  if(sasl->resetprefs) {
+    sasl->resetprefs = FALSE;
+    sasl->prefmech = SASL_AUTH_NONE;
+  }
+
+  if(strnequal(value, "*", len))
+    sasl->prefmech = SASL_AUTH_DEFAULT;
+  else {
+    mechbit = Curl_sasl_decode_mech(value, len, &mechlen);
+    if(mechbit && mechlen == len)
+      sasl->prefmech |= mechbit;
+    else
+      result = CURLE_URL_MALFORMAT;
+  }
+
+  return result;
+}
+
+/*
+ * Curl_sasl_init()
+ *
+ * Initializes the SASL structure.
+ */
+void Curl_sasl_init(struct SASL *sasl, const struct SASLproto *params)
+{
+  sasl->params = params;           /* Set protocol dependent parameters */
+  sasl->state = SASL_STOP;         /* Not yet running */
+  sasl->authmechs = SASL_AUTH_NONE; /* No known authentication mechanism yet */
+  sasl->prefmech = SASL_AUTH_DEFAULT; /* Prefer all mechanisms */
+  sasl->authused = SASL_AUTH_NONE; /* No the authentication mechanism used */
+  sasl->resetprefs = TRUE;         /* Reset prefmech upon AUTH parsing. */
+  sasl->mutual_auth = FALSE;       /* No mutual authentication (GSSAPI only) */
+  sasl->force_ir = FALSE;          /* Respect external option */
+}
+
+/*
+ * state()
+ *
+ * This is the ONLY way to change SASL state!
+ */
+static void state(struct SASL *sasl, struct connectdata *conn,
+                  saslstate newstate)
+{
+#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
+  /* for debug purposes */
+  static const char * const names[]={
+    "STOP",
+    "PLAIN",
+    "LOGIN",
+    "LOGIN_PASSWD",
+    "EXTERNAL",
+    "CRAMMD5",
+    "DIGESTMD5",
+    "DIGESTMD5_RESP",
+    "NTLM",
+    "NTLM_TYPE2MSG",
+    "GSSAPI",
+    "GSSAPI_TOKEN",
+    "GSSAPI_NO_DATA",
+    "OAUTH2",
+    "OAUTH2_RESP",
+    "CANCEL",
+    "FINAL",
+    /* LAST */
+  };
+
+  if(sasl->state != newstate)
+    infof(conn->data, "SASL %p state change from %s to %s\n",
+          (void *)sasl, names[sasl->state], names[newstate]);
+#else
+  (void) conn;
+#endif
+
+  sasl->state = newstate;
+}
+
+/*
+ * Curl_sasl_can_authenticate()
+ *
+ * Check if we have enough auth data and capabilities to authenticate.
+ */
+bool Curl_sasl_can_authenticate(struct SASL *sasl, struct connectdata *conn)
+{
+  /* Have credentials been provided? */
+  if(conn->bits.user_passwd)
+    return TRUE;
+
+  /* EXTERNAL can authenticate without a user name and/or password */
+  if(sasl->authmechs & sasl->prefmech & SASL_MECH_EXTERNAL)
+    return TRUE;
+
+  return FALSE;
+}
+
+/*
+ * Curl_sasl_start()
+ *
+ * Calculate the required login details for SASL authentication.
+ */
+CURLcode Curl_sasl_start(struct SASL *sasl, struct connectdata *conn,
+                         bool force_ir, saslprogress *progress)
+{
+  CURLcode result = CURLE_OK;
+  struct SessionHandle *data = conn->data;
+  unsigned int enabledmechs;
+  const char *mech = NULL;
+  char *resp = NULL;
+  size_t len = 0;
+  saslstate state1 = SASL_STOP;
+  saslstate state2 = SASL_FINAL;
+
+  sasl->force_ir = force_ir;    /* Latch for future use */
+  sasl->authused = 0;           /* No mechanism used yet */
+  enabledmechs = sasl->authmechs & sasl->prefmech;
+  *progress = SASL_IDLE;
+
+  /* Calculate the supported authentication mechanism, by decreasing order of
+     security, as well as the initial response where appropriate */
+  if((enabledmechs & SASL_MECH_EXTERNAL) && !conn->passwd[0]) {
+    mech = SASL_MECH_STRING_EXTERNAL;
+    state1 = SASL_EXTERNAL;
+    sasl->authused = SASL_MECH_EXTERNAL;
+
+    if(force_ir || data->set.sasl_ir)
+      result = sasl_create_external_message(data, conn->user, &resp, &len);
+  }
+  else if(conn->bits.user_passwd) {
+#if defined(USE_KERBEROS5)
+    if(enabledmechs & SASL_MECH_GSSAPI) {
+      sasl->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
+      mech = SASL_MECH_STRING_GSSAPI;
+      state1 = SASL_GSSAPI;
+      state2 = SASL_GSSAPI_TOKEN;
+      sasl->authused = SASL_MECH_GSSAPI;
+
+      if(force_ir || data->set.sasl_ir)
+        result = Curl_sasl_create_gssapi_user_message(data, conn->user,
+                                                      conn->passwd,
+                                                      sasl->params->service,
+                                                      sasl->mutual_auth,
+                                                      NULL, &conn->krb5,
+                                                      &resp, &len);
+    }
+    else
+#endif
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+    if(enabledmechs & SASL_MECH_DIGEST_MD5) {
+      mech = SASL_MECH_STRING_DIGEST_MD5;
+      state1 = SASL_DIGESTMD5;
+      sasl->authused = SASL_MECH_DIGEST_MD5;
+    }
+    else if(enabledmechs & SASL_MECH_CRAM_MD5) {
+      mech = SASL_MECH_STRING_CRAM_MD5;
+      state1 = SASL_CRAMMD5;
+      sasl->authused = SASL_MECH_CRAM_MD5;
+    }
+    else
+#endif
+#ifdef USE_NTLM
+    if(enabledmechs & SASL_MECH_NTLM) {
+      mech = SASL_MECH_STRING_NTLM;
+      state1 = SASL_NTLM;
+      state2 = SASL_NTLM_TYPE2MSG;
+      sasl->authused = SASL_MECH_NTLM;
+
+      if(force_ir || data->set.sasl_ir)
+        result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
+                                                     &conn->ntlm, &resp, &len);
+      }
+    else
+#endif
+    if((enabledmechs & SASL_MECH_OAUTHBEARER) && conn->oauth_bearer) {
+      mech = SASL_MECH_STRING_OAUTHBEARER;
+      state1 = SASL_OAUTH2;
+      state2 = SASL_OAUTH2_RESP;
+      sasl->authused = SASL_MECH_OAUTHBEARER;
+
+      if(force_ir || data->set.sasl_ir)
+        result = sasl_create_oauth_bearer_message(data, conn->user,
+                                                  conn->host.name,
+                                                  conn->port,
+                                                  conn->oauth_bearer,
+                                                  &resp, &len);
+    }
+    else if((enabledmechs & SASL_MECH_XOAUTH2) && conn->oauth_bearer) {
+      mech = SASL_MECH_STRING_XOAUTH2;
+      state1 = SASL_OAUTH2;
+      sasl->authused = SASL_MECH_XOAUTH2;
+
+      if(force_ir || data->set.sasl_ir)
+        result = sasl_create_oauth_bearer_message(data, conn->user,
+                                                  NULL, 0,
+                                                  conn->oauth_bearer,
+                                                  &resp, &len);
+    }
+    else if(enabledmechs & SASL_MECH_LOGIN) {
+      mech = SASL_MECH_STRING_LOGIN;
+      state1 = SASL_LOGIN;
+      state2 = SASL_LOGIN_PASSWD;
+      sasl->authused = SASL_MECH_LOGIN;
+
+      if(force_ir || data->set.sasl_ir)
+        result = sasl_create_login_message(data, conn->user, &resp, &len);
+    }
+    else if(enabledmechs & SASL_MECH_PLAIN) {
+      mech = SASL_MECH_STRING_PLAIN;
+      state1 = SASL_PLAIN;
+      sasl->authused = SASL_MECH_PLAIN;
+
+      if(force_ir || data->set.sasl_ir)
+        result = sasl_create_plain_message(data, conn->user, conn->passwd,
+                                           &resp, &len);
+    }
+  }
+
+  if(!result) {
+    if(resp && sasl->params->maxirlen &&
+       strlen(mech) + len > sasl->params->maxirlen) {
+      free(resp);
+      resp = NULL;
+    }
+
+    if(mech) {
+      result = sasl->params->sendauth(conn, mech, resp);
+      if(!result) {
+        *progress = SASL_INPROGRESS;
+        state(sasl, conn, resp? state2: state1);
+      }
+    }
+  }
+
+  free(resp);
+
+  return result;
+}
+
+/*
+ * Curl_sasl_continue()
+ *
+ * Continue the authentication.
+ */
+CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
+                            int code, saslprogress *progress)
+{
+  CURLcode result = CURLE_OK;
+  struct SessionHandle *data = conn->data;
+  saslstate newstate = SASL_FINAL;
+  char *resp = NULL;
+#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+  char *serverdata;
+  char *chlg = NULL;
+  size_t chlglen = 0;
+#endif
+  size_t len = 0;
+
+  *progress = SASL_INPROGRESS;
+
+  if(sasl->state == SASL_FINAL) {
+    if(code != sasl->params->finalcode)
+      result = CURLE_LOGIN_DENIED;
+    *progress = SASL_DONE;
+    state(sasl, conn, SASL_STOP);
+    return result;
+  }
+
+  if(sasl->state != SASL_CANCEL && sasl->state != SASL_OAUTH2_RESP &&
+     code != sasl->params->contcode) {
+    *progress = SASL_DONE;
+    state(sasl, conn, SASL_STOP);
+    return CURLE_LOGIN_DENIED;
+  }
+
+  switch(sasl->state) {
+  case SASL_STOP:
+    *progress = SASL_DONE;
+    return result;
+  case SASL_PLAIN:
+    result = sasl_create_plain_message(data, conn->user, conn->passwd, &resp,
+                                       &len);
+    break;
+  case SASL_LOGIN:
+    result = sasl_create_login_message(data, conn->user, &resp, &len);
+    newstate = SASL_LOGIN_PASSWD;
+    break;
+  case SASL_LOGIN_PASSWD:
+    result = sasl_create_login_message(data, conn->passwd, &resp, &len);
+    break;
+  case SASL_EXTERNAL:
+    result = sasl_create_external_message(data, conn->user, &resp, &len);
+    break;
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+  case SASL_CRAMMD5:
+    sasl->params->getmessage(data->state.buffer, &serverdata);
+    result = sasl_decode_cram_md5_message(serverdata, &chlg, &chlglen);
+    if(!result)
+      result = sasl_create_cram_md5_message(data, chlg, conn->user,
+                                            conn->passwd, &resp, &len);
+    free(chlg);
+    break;
+  case SASL_DIGESTMD5:
+    sasl->params->getmessage(data->state.buffer, &serverdata);
+    result = Curl_sasl_create_digest_md5_message(data, serverdata,
+                                                 conn->user, conn->passwd,
+                                                 sasl->params->service,
+                                                 &resp, &len);
+    newstate = SASL_DIGESTMD5_RESP;
+    break;
+  case SASL_DIGESTMD5_RESP:
+    resp = strdup("");
+    if(!resp)
+      result = CURLE_OUT_OF_MEMORY;
+    break;
+#endif
+
+#ifdef USE_NTLM
+  case SASL_NTLM:
+    /* Create the type-1 message */
+    result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
+                                                 &conn->ntlm, &resp, &len);
+    newstate = SASL_NTLM_TYPE2MSG;
+    break;
+  case SASL_NTLM_TYPE2MSG:
+    /* Decode the type-2 message */
+    sasl->params->getmessage(data->state.buffer, &serverdata);
+    result = Curl_sasl_decode_ntlm_type2_message(data, serverdata,
+                                                 &conn->ntlm);
+    if(!result)
+      result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
+                                                   conn->passwd, &conn->ntlm,
+                                                   &resp, &len);
+    break;
+#endif
+
+#if defined(USE_KERBEROS5)
+  case SASL_GSSAPI:
+    result = Curl_sasl_create_gssapi_user_message(data, conn->user,
+                                                  conn->passwd,
+                                                  sasl->params->service,
+                                                  sasl->mutual_auth, NULL,
+                                                  &conn->krb5,
+                                                  &resp, &len);
+    newstate = SASL_GSSAPI_TOKEN;
+    break;
+  case SASL_GSSAPI_TOKEN:
+    sasl->params->getmessage(data->state.buffer, &serverdata);
+    if(sasl->mutual_auth) {
+      /* Decode the user token challenge and create the optional response
+         message */
+      result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
+                                                    sasl->mutual_auth,
+                                                    serverdata, &conn->krb5,
+                                                    &resp, &len);
+      newstate = SASL_GSSAPI_NO_DATA;
+    }
+    else
+      /* Decode the security challenge and create the response message */
+      result = Curl_sasl_create_gssapi_security_message(data, serverdata,
+                                                        &conn->krb5,
+                                                        &resp, &len);
+    break;
+  case SASL_GSSAPI_NO_DATA:
+    sasl->params->getmessage(data->state.buffer, &serverdata);
+    /* Decode the security challenge and create the response message */
+    result = Curl_sasl_create_gssapi_security_message(data, serverdata,
+                                                      &conn->krb5,
+                                                      &resp, &len);
+    break;
+#endif
+
+  case SASL_OAUTH2:
+    /* Create the authorisation message */
+    if(sasl->authused == SASL_MECH_OAUTHBEARER) {
+      result = sasl_create_oauth_bearer_message(data, conn->user,
+                                                conn->host.name,
+                                                conn->port,
+                                                conn->oauth_bearer,
+                                                &resp, &len);
+
+      /* Failures maybe sent by the server as continuations for OAUTHBEARER */
+      newstate = SASL_OAUTH2_RESP;
+    }
+    else
+      result = sasl_create_oauth_bearer_message(data, conn->user,
+                                                NULL, 0,
+                                                conn->oauth_bearer,
+                                                &resp, &len);
+    break;
+
+  case SASL_OAUTH2_RESP:
+    /* The continuation is optional so check the response code */
+    if(code == sasl->params->finalcode) {
+      /* Final response was received so we are done */
+      *progress = SASL_DONE;
+      state(sasl, conn, SASL_STOP);
+      return result;
+    }
+    else if(code == sasl->params->contcode) {
+      /* Acknowledge the continuation by sending a 0x01 response base64
+         encoded */
+      resp = strdup("AQ==");
+      if(!resp)
+        result = CURLE_OUT_OF_MEMORY;
+      break;
+    }
+    else {
+      *progress = SASL_DONE;
+      state(sasl, conn, SASL_STOP);
+      return CURLE_LOGIN_DENIED;
+    }
+
+  case SASL_CANCEL:
+    /* Remove the offending mechanism from the supported list */
+    sasl->authmechs ^= sasl->authused;
+
+    /* Start an alternative SASL authentication */
+    result = Curl_sasl_start(sasl, conn, sasl->force_ir, progress);
+    newstate = sasl->state;   /* Use state from Curl_sasl_start() */
+    break;
+  default:
+    failf(data, "Unsupported SASL authentication mechanism");
+    result = CURLE_UNSUPPORTED_PROTOCOL;  /* Should not happen */
+    break;
+  }
+
+  switch(result) {
+  case CURLE_BAD_CONTENT_ENCODING:
+    /* Cancel dialog */
+    result = sasl->params->sendcont(conn, "*");
+    newstate = SASL_CANCEL;
+    break;
+  case CURLE_OK:
+    if(resp)
+      result = sasl->params->sendcont(conn, resp);
+    break;
+  default:
+    newstate = SASL_STOP;    /* Stop on error */
+    *progress = SASL_DONE;
+    break;
+  }
+
+  free(resp);
+
+  state(sasl, conn, newstate);
+
+  return result;
+}
index 41ef859..2175e03 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2016, 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.
+ * are also available at https://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
@@ -39,10 +39,6 @@ struct ntlmdata;
 struct kerberos5data;
 #endif
 
-/* Authentication mechanism values */
-#define SASL_AUTH_NONE          0
-#define SASL_AUTH_ANY           ~0U
-
 /* Authentication mechanism flags */
 #define SASL_MECH_LOGIN             (1 << 0)
 #define SASL_MECH_PLAIN             (1 << 1)
@@ -52,22 +48,89 @@ struct kerberos5data;
 #define SASL_MECH_EXTERNAL          (1 << 5)
 #define SASL_MECH_NTLM              (1 << 6)
 #define SASL_MECH_XOAUTH2           (1 << 7)
+#define SASL_MECH_OAUTHBEARER       (1 << 8)
+
+/* Authentication mechanism values */
+#define SASL_AUTH_NONE          0
+#define SASL_AUTH_ANY           ~0U
+#define SASL_AUTH_DEFAULT       (SASL_AUTH_ANY & ~SASL_MECH_EXTERNAL)
 
 /* Authentication mechanism strings */
-#define SASL_MECH_STRING_LOGIN      "LOGIN"
-#define SASL_MECH_STRING_PLAIN      "PLAIN"
-#define SASL_MECH_STRING_CRAM_MD5   "CRAM-MD5"
-#define SASL_MECH_STRING_DIGEST_MD5 "DIGEST-MD5"
-#define SASL_MECH_STRING_GSSAPI     "GSSAPI"
-#define SASL_MECH_STRING_EXTERNAL   "EXTERNAL"
-#define SASL_MECH_STRING_NTLM       "NTLM"
-#define SASL_MECH_STRING_XOAUTH2    "XOAUTH2"
+#define SASL_MECH_STRING_LOGIN        "LOGIN"
+#define SASL_MECH_STRING_PLAIN        "PLAIN"
+#define SASL_MECH_STRING_CRAM_MD5     "CRAM-MD5"
+#define SASL_MECH_STRING_DIGEST_MD5   "DIGEST-MD5"
+#define SASL_MECH_STRING_GSSAPI       "GSSAPI"
+#define SASL_MECH_STRING_EXTERNAL     "EXTERNAL"
+#define SASL_MECH_STRING_NTLM         "NTLM"
+#define SASL_MECH_STRING_XOAUTH2      "XOAUTH2"
+#define SASL_MECH_STRING_OAUTHBEARER  "OAUTHBEARER"
+
+#if !defined(CURL_DISABLE_CRYPTO_AUTH)
+#define DIGEST_MAX_VALUE_LENGTH           256
+#define DIGEST_MAX_CONTENT_LENGTH         1024
+#endif
 
 enum {
   CURLDIGESTALGO_MD5,
   CURLDIGESTALGO_MD5SESS
 };
 
+/* SASL machine states */
+typedef enum {
+  SASL_STOP,
+  SASL_PLAIN,
+  SASL_LOGIN,
+  SASL_LOGIN_PASSWD,
+  SASL_EXTERNAL,
+  SASL_CRAMMD5,
+  SASL_DIGESTMD5,
+  SASL_DIGESTMD5_RESP,
+  SASL_NTLM,
+  SASL_NTLM_TYPE2MSG,
+  SASL_GSSAPI,
+  SASL_GSSAPI_TOKEN,
+  SASL_GSSAPI_NO_DATA,
+  SASL_OAUTH2,
+  SASL_OAUTH2_RESP,
+  SASL_CANCEL,
+  SASL_FINAL
+} saslstate;
+
+/* Progress indicator */
+typedef enum {
+  SASL_IDLE,
+  SASL_INPROGRESS,
+  SASL_DONE
+} saslprogress;
+
+/* Protocol dependent SASL parameters */
+struct SASLproto {
+  const char *service;     /* The service name */
+  int contcode;            /* Code to receive when continuation is expected */
+  int finalcode;           /* Code to receive upon authentication success */
+  size_t maxirlen;         /* Maximum initial response length */
+  CURLcode (*sendauth)(struct connectdata *conn,
+                       const char *mech, const char *ir);
+                           /* Send authentication command */
+  CURLcode (*sendcont)(struct connectdata *conn, const char *contauth);
+                           /* Send authentication continuation */
+  void (*getmessage)(char *buffer, char **outptr);
+                           /* Get SASL response message */
+};
+
+/* Per-connection parameters */
+struct SASL {
+  const struct SASLproto *params; /* Protocol dependent parameters */
+  saslstate state;         /* Current machine state */
+  unsigned int authmechs;  /* Accepted authentication mechanisms */
+  unsigned int prefmech;   /* Preferred authentication mechanism */
+  unsigned int authused;   /* Auth mechanism used for the connection */
+  bool resetprefs;         /* For URL auth option parsing. */
+  bool mutual_auth;        /* Mutual authentication enabled (GSSAPI only) */
+  bool force_ir;           /* Protocol always supports initial response */
+};
+
 /* This is used to test whether the line starts with the given mechanism */
 #define sasl_mech_equal(line, wordlen, mech) \
   (wordlen == (sizeof(mech) - 1) / sizeof(char) && \
@@ -80,29 +143,14 @@ char *Curl_sasl_build_spn(const char *service, const char *instance);
 TCHAR *Curl_sasl_build_spn(const char *service, const char *instance);
 #endif
 
-/* This is used to generate a base64 encoded PLAIN authentication message */
-CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
-                                        const char *userp,
-                                        const char *passwdp,
-                                        char **outptr, size_t *outlen);
-
-/* This is used to generate a base64 encoded LOGIN authentication message
-   containing either the user name or password details */
-CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
-                                        const char *valuep, char **outptr,
-                                        size_t *outlen);
+#if defined(HAVE_GSSAPI)
+char *Curl_sasl_build_gssapi_spn(const char *service, const char *instance);
+#endif
 
 #ifndef CURL_DISABLE_CRYPTO_AUTH
-/* This is used to decode a base64 encoded CRAM-MD5 challange message */
-CURLcode Curl_sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
-                                           size_t *outlen);
-
-/* This is used to generate a base64 encoded CRAM-MD5 response message */
-CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
-                                           const char *chlg,
-                                           const char *user,
-                                           const char *passwdp,
-                                           char **outptr, size_t *outlen);
+/* This is used to extract the realm from a challenge message */
+bool Curl_sasl_digest_get_pair(const char *str, char *value, char *content,
+                               const char **endptr);
 
 /* This is used to generate a base64 encoded DIGEST-MD5 response message */
 CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
@@ -178,15 +226,30 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
 void Curl_sasl_gssapi_cleanup(struct kerberos5data *krb5);
 #endif /* USE_KERBEROS5 */
 
-/* This is used to generate a base64 encoded XOAUTH2 authentication message
-   containing the user name and bearer token */
-CURLcode Curl_sasl_create_xoauth2_message(struct SessionHandle *data,
-                                          const char *user,
-                                          const char *bearer,
-                                          char **outptr, size_t *outlen);
-
 /* This is used to cleanup any libraries or curl modules used by the sasl
    functions */
 void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused);
 
+/* Convert a mechanism name to a token */
+unsigned int Curl_sasl_decode_mech(const char *ptr,
+                                   size_t maxlen, size_t *len);
+
+/* Parse the URL login options */
+CURLcode Curl_sasl_parse_url_auth_option(struct SASL *sasl,
+                                         const char *value, size_t len);
+
+/* Initializes an SASL structure */
+void Curl_sasl_init(struct SASL *sasl, const struct SASLproto *params);
+
+/* Check if we have enough auth data and capabilities to authenticate */
+bool Curl_sasl_can_authenticate(struct SASL *sasl, struct connectdata *conn);
+
+/* Calculate the required login details for SASL authentication  */
+CURLcode Curl_sasl_start(struct SASL *sasl, struct connectdata *conn,
+                         bool force_ir, saslprogress *progress);
+
+/* Continue an SASL authentication  */
+CURLcode Curl_sasl_continue(struct SASL *sasl, struct connectdata *conn,
+                            int code, saslprogress *progress);
+
 #endif /* HEADER_CURL_SASL_H */
index 6dda0e9..dcc0498 100644 (file)
@@ -5,11 +5,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2014, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.com>.
+ * Copyright (C) 2015, 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.
+ * are also available at https://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
 
 #if defined(HAVE_GSSAPI) && defined(USE_KERBEROS5)
 
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
-
-#define GSSAUTH_P_NONE      1
-#define GSSAUTH_P_INTEGRITY 2
-#define GSSAUTH_P_PRIVACY   4
-
 #include <curl/curl.h>
 
 #include "curl_sasl.h"
 #include "urldata.h"
 #include "curl_base64.h"
 #include "curl_gssapi.h"
-#include "curl_memory.h"
 #include "sendf.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
 * Curl_sasl_build_gssapi_spn()
 *
-* This is used to build a SPN string in the format service@host.
+* This is used to build a SPN string in the format service@instance.
 *
 * Parameters:
 *
-* serivce  [in] - The service type such as www, smtp, pop or imap.
-* host     [in] - The host name or realm.
+* service  [in] - The service type such as www, smtp, pop or imap.
+* instance [in] - The host name or realm.
 *
 * Returns a pointer to the newly allocated SPN.
 */
-static char *Curl_sasl_build_gssapi_spn(const char *service, const char *host)
+char *Curl_sasl_build_gssapi_spn(const char *service, const char *instance)
 {
   /* Generate and return our SPN */
-  return aprintf("%s@%s", service, host);
+  return aprintf("%s@%s", service, instance);
 }
 
 /*
@@ -84,7 +74,7 @@ static char *Curl_sasl_build_gssapi_spn(const char *service, const char *host)
  *                        is enabled.
  * chlg64      [in]     - Pointer to the optional base64 encoded challenge
  *                        message.
- * krb5        [in/out] - The gssapi data struct being used and modified.
+ * krb5        [in/out] - The Kerberos 5 data struct being used and modified.
  * outptr      [in/out] - The address where a pointer to newly allocated memory
  *                        holding the result will be stored upon completion.
  * outlen      [out]    - The length of the output message.
@@ -126,12 +116,16 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
 
     /* Import the SPN */
     gss_major_status = gss_import_name(&gss_minor_status, &spn_token,
-                                       gss_nt_service_name, &krb5->spn);
+                                       GSS_C_NT_HOSTBASED_SERVICE, &krb5->spn);
     if(GSS_ERROR(gss_major_status)) {
       Curl_gss_log_error(data, gss_minor_status, "gss_import_name() failed: ");
 
+      free(spn);
+
       return CURLE_OUT_OF_MEMORY;
     }
+
+    free(spn);
   }
   else {
     /* Decode the base-64 encoded challenge message */
@@ -164,7 +158,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
                                                mutual_auth,
                                                NULL);
 
-  Curl_safefree(input_token.value);
+  free(input_token.value);
 
   if(GSS_ERROR(gss_major_status)) {
     if(output_token.value)
@@ -197,7 +191,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
  *
  * data    [in]     - The session handle.
  * chlg64  [in]     - Pointer to the optional base64 encoded challenge message.
- * krb5    [in/out] - The gssapi data struct being used and modified.
+ * krb5    [in/out] - The Kerberos 5 data struct being used and modified.
  * outptr  [in/out] - The address where a pointer to newly allocated memory
  *                    holding the result will be stored upon completion.
  * outlen  [out]    - The length of the output message.
@@ -250,7 +244,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
     Curl_gss_log_error(data, gss_minor_status,
                        "gss_inquire_context() failed: ");
 
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -261,7 +255,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   if(GSS_ERROR(gss_major_status)) {
     Curl_gss_log_error(data, gss_minor_status, "gss_display_name() failed: ");
 
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -277,7 +271,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
     Curl_gss_log_error(data, gss_minor_status, "gss_unwrap() failed: ");
 
     gss_release_buffer(&gss_status, &username_token);
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_BAD_CONTENT_ENCODING;
   }
@@ -287,7 +281,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
     infof(data, "GSSAPI handshake failure (invalid security data)\n");
 
     gss_release_buffer(&gss_status, &username_token);
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_BAD_CONTENT_ENCODING;
   }
@@ -295,7 +289,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   /* Copy the data out and free the challenge as it is not required anymore */
   memcpy(&indata, output_token.value, 4);
   gss_release_buffer(&gss_status, &output_token);
-  Curl_safefree(chlg);
+  free(chlg);
 
   /* Extract the security layer */
   sec_layer = indata & 0x000000FF;
@@ -350,7 +344,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   if(GSS_ERROR(gss_major_status)) {
     Curl_gss_log_error(data, gss_minor_status, "gss_wrap() failed: ");
 
-    Curl_safefree(message);
+    free(message);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -363,7 +357,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   gss_release_buffer(&gss_status, &output_token);
 
   /* Free the message buffer */
-  Curl_safefree(message);
+  free(message);
 
   return result;
 }
@@ -371,11 +365,11 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
 /*
  * Curl_sasl_gssapi_cleanup()
  *
- * This is used to clean up the gssapi specific data.
+ * This is used to clean up the GSSAPI (Kerberos V5) specific data.
  *
  * Parameters:
  *
- * krb5     [in/out] - The kerberos 5 data struct being cleaned up.
+ * krb5     [in/out] - The Kerberos 5 data struct being cleaned up.
  *
  */
 void Curl_sasl_gssapi_cleanup(struct kerberos5data *krb5)
index 0509b75..f46376c 100644 (file)
@@ -5,12 +5,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2014, Steve Holme, <steve_holme@hotmail.com>.
- * Copyright (C) 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2014 - 2016 Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.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.
+ * are also available at https://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
 #include "urldata.h"
 #include "curl_base64.h"
 #include "warnless.h"
-#include "curl_memory.h"
 #include "curl_multibyte.h"
 #include "sendf.h"
 #include "strdup.h"
+#include "curl_printf.h"
+#include "rawstr.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
  * Curl_sasl_build_spn()
  *
- * This is used to build a SPN string in the format service/host.
+ * This is used to build a SPN string in the format service/instance.
  *
  * Parameters:
  *
  * serivce  [in] - The service type such as www, smtp, pop or imap.
- * host     [in] - The host name or realm.
+ * instance [in] - The host name or realm.
  *
  * Returns a pointer to the newly allocated SPN.
  */
-TCHAR *Curl_sasl_build_spn(const char *service, const char *host)
+TCHAR *Curl_sasl_build_spn(const char *service, const char *instance)
 {
   char *utf8_spn = NULL;
   TCHAR *tchar_spn = NULL;
@@ -72,7 +71,7 @@ TCHAR *Curl_sasl_build_spn(const char *service, const char *host)
      formulate the SPN instead. */
 
   /* Allocate our UTF8 based SPN */
-  utf8_spn = aprintf("%s/%s", service, host);
+  utf8_spn = aprintf("%s/%s", service, instance);
   if(!utf8_spn) {
     return NULL;
   }
@@ -80,7 +79,7 @@ TCHAR *Curl_sasl_build_spn(const char *service, const char *host)
   /* Allocate our TCHAR based SPN */
   tchar_spn = Curl_convert_UTF8_to_tchar(utf8_spn);
   if(!tchar_spn) {
-    Curl_safefree(utf8_spn);
+    free(utf8_spn);
 
     return NULL;
   }
@@ -156,7 +155,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_DIGEST),
                                               &SecurityPackage);
   if(status != SEC_E_OK) {
-    Curl_safefree(input_token);
+    free(input_token);
 
     return CURLE_NOT_BUILT_IN;
   }
@@ -169,7 +168,7 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   /* Allocate our response buffer */
   output_token = malloc(token_max);
   if(!output_token) {
-    Curl_safefree(input_token);
+    free(input_token);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -177,8 +176,8 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   /* Generate our SPN */
   spn = Curl_sasl_build_spn(service, data->easy_conn->host.name);
   if(!spn) {
-    Curl_safefree(output_token);
-    Curl_safefree(input_token);
+    free(output_token);
+    free(input_token);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -187,9 +186,9 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
     /* Populate our identity structure */
     result = Curl_create_sspi_identity(userp, passwdp, &identity);
     if(result) {
-      Curl_safefree(spn);
-      Curl_safefree(output_token);
-      Curl_safefree(input_token);
+      free(spn);
+      free(output_token);
+      free(input_token);
 
       return result;
     }
@@ -210,9 +209,9 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
 
   if(status != SEC_E_OK) {
     Curl_sspi_free_identity(p_identity);
-    Curl_safefree(spn);
-    Curl_safefree(output_token);
-    Curl_safefree(input_token);
+    free(spn);
+    free(output_token);
+    free(input_token);
 
     return CURLE_LOGIN_DENIED;
   }
@@ -245,9 +244,9 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
     s_pSecFn->FreeCredentialsHandle(&credentials);
     Curl_sspi_free_identity(p_identity);
-    Curl_safefree(spn);
-    Curl_safefree(output_token);
-    Curl_safefree(input_token);
+    free(spn);
+    free(output_token);
+    free(input_token);
 
     return CURLE_RECV_ERROR;
   }
@@ -264,18 +263,87 @@ CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
   Curl_sspi_free_identity(p_identity);
 
   /* Free the SPN */
-  Curl_safefree(spn);
+  free(spn);
 
   /* Free the response buffer */
-  Curl_safefree(output_token);
+  free(output_token);
 
   /* Free the decoded challenge message */
-  Curl_safefree(input_token);
+  free(input_token);
 
   return result;
 }
 
 /*
+ * Curl_override_sspi_http_realm()
+ *
+ * This is used to populate the domain in a SSPI identity structure
+ * The realm is extracted from the challenge message and used as the
+ * domain if it is not already explicitly set.
+ *
+ * Parameters:
+ *
+ * chlg     [in]     - The challenge message.
+ * identity [in/out] - The identity structure.
+ *
+ * Returns CURLE_OK on success.
+ */
+CURLcode Curl_override_sspi_http_realm(const char *chlg,
+                                       SEC_WINNT_AUTH_IDENTITY *identity)
+{
+  xcharp_u domain, dup_domain;
+
+  /* If domain is blank or unset, check challenge message for realm */
+  if(!identity->Domain || !identity->DomainLength) {
+    for(;;) {
+      char value[DIGEST_MAX_VALUE_LENGTH];
+      char content[DIGEST_MAX_CONTENT_LENGTH];
+
+      /* Pass all additional spaces here */
+      while(*chlg && ISSPACE(*chlg))
+        chlg++;
+
+      /* Extract a value=content pair */
+      if(Curl_sasl_digest_get_pair(chlg, value, content, &chlg)) {
+        if(Curl_raw_equal(value, "realm")) {
+
+          /* Setup identity's domain and length */
+          domain.tchar_ptr = Curl_convert_UTF8_to_tchar((char *)content);
+          if(!domain.tchar_ptr)
+            return CURLE_OUT_OF_MEMORY;
+          dup_domain.tchar_ptr = _tcsdup(domain.tchar_ptr);
+          if(!dup_domain.tchar_ptr) {
+            Curl_unicodefree(domain.tchar_ptr);
+            return CURLE_OUT_OF_MEMORY;
+          }
+          free(identity->Domain);
+          identity->Domain = dup_domain.tbyte_ptr;
+          identity->DomainLength = curlx_uztoul(_tcslen(dup_domain.tchar_ptr));
+          dup_domain.tchar_ptr = NULL;
+
+          Curl_unicodefree(domain.tchar_ptr);
+        }
+        else {
+          /* unknown specifier, ignore it! */
+        }
+      }
+      else
+        break; /* we're done here */
+
+      /* Pass all additional spaces here */
+      while(*chlg && ISSPACE(*chlg))
+        chlg++;
+
+      /* Allow the list to be comma-separated */
+      if(',' == *chlg)
+        chlg++;
+    }
+  }
+
+  return CURLE_OK;
+}
+
+/*
  * Curl_sasl_decode_digest_http_message()
  *
  * This is used to decode a HTTP DIGEST challenge message into the seperate
@@ -351,6 +419,7 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
   SECURITY_STATUS status;
   unsigned long attrs;
   TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */
+  TCHAR *spn;
 
   (void) data;
 
@@ -376,6 +445,11 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
     if(Curl_create_sspi_identity(userp, passwdp, &identity))
       return CURLE_OUT_OF_MEMORY;
 
+    /* Populate our identity domain */
+    if(Curl_override_sspi_http_realm((const char*)digest->input_token,
+                                     &identity))
+      return CURLE_OUT_OF_MEMORY;
+
     /* Allow proper cleanup of the identity structure */
     p_identity = &identity;
   }
@@ -390,7 +464,8 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
                                               p_identity, NULL, NULL,
                                               &credentials, &expiry);
   if(status != SEC_E_OK) {
-    Curl_safefree(output_token);
+    Curl_sspi_free_identity(p_identity);
+    free(output_token);
 
     return CURLE_LOGIN_DENIED;
   }
@@ -417,12 +492,21 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
   resp_buf.pvBuffer   = output_token;
   resp_buf.cbBuffer   = curlx_uztoul(token_max);
 
+  spn = Curl_convert_UTF8_to_tchar((char *) uripath);
+  if(!spn) {
+    Curl_sspi_free_identity(p_identity);
+    free(output_token);
+
+    return CURLE_OUT_OF_MEMORY;
+  }
+
   /* Generate our reponse message */
   status = s_pSecFn->InitializeSecurityContext(&credentials, NULL,
-                                               (TCHAR *) uripath,
+                                               spn,
                                                ISC_REQ_USE_HTTP_STYLE, 0, 0,
                                                &chlg_desc, 0, &context,
                                                &resp_desc, &attrs, &expiry);
+  Curl_unicodefree(spn);
 
   if(status == SEC_I_COMPLETE_NEEDED ||
      status == SEC_I_COMPLETE_AND_CONTINUE)
@@ -430,7 +514,8 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
   else if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
     s_pSecFn->FreeCredentialsHandle(&credentials);
 
-    Curl_safefree(output_token);
+    Curl_sspi_free_identity(p_identity);
+    free(output_token);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -440,7 +525,8 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
     s_pSecFn->DeleteSecurityContext(&context);
     s_pSecFn->FreeCredentialsHandle(&credentials);
 
-    Curl_safefree(output_token);
+    Curl_sspi_free_identity(p_identity);
+    free(output_token);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -461,7 +547,7 @@ CURLcode Curl_sasl_create_digest_http_message(struct SessionHandle *data,
   Curl_sspi_free_identity(p_identity);
 
   /* Free the response buffer */
-  Curl_safefree(output_token);
+  free(output_token);
 
   return CURLE_OK;
 }
@@ -488,22 +574,22 @@ void Curl_sasl_digest_cleanup(struct digestdata *digest)
 
 #if defined USE_NTLM
 /*
-* Curl_sasl_create_ntlm_type1_message()
-*
-* This is used to generate an already encoded NTLM type-1 message ready for
-* sending to the recipient.
-*
-* Parameters:
-*
-* userp   [in]     - The user name in the format User or Domain\User.
-* passdwp [in]     - The user's password.
-* ntlm    [in/out] - The ntlm data struct being used and modified.
-* outptr  [in/out] - The address where a pointer to newly allocated memory
-*                    holding the result will be stored upon completion.
-* outlen  [out]    - The length of the output message.
-*
-* Returns CURLE_OK on success.
-*/
+ * Curl_sasl_create_ntlm_type1_message()
+ *
+ * This is used to generate an already encoded NTLM type-1 message ready for
+ * sending to the recipient.
+ *
+ * Parameters:
+ *
+ * userp   [in]     - The user name in the format User or Domain\User.
+ * passdwp [in]     - The user's password.
+ * ntlm    [in/out] - The NTLM data struct being used and modified.
+ * outptr  [in/out] - The address where a pointer to newly allocated memory
+ *                    holding the result will be stored upon completion.
+ * outlen  [out]    - The length of the output message.
+ *
+ * Returns CURLE_OK on success.
+ */
 CURLcode Curl_sasl_create_ntlm_type1_message(const char *userp,
                                              const char *passwdp,
                                              struct ntlmdata *ntlm,
@@ -600,18 +686,18 @@ CURLcode Curl_sasl_create_ntlm_type1_message(const char *userp,
 }
 
 /*
-* Curl_sasl_decode_ntlm_type2_message()
-*
-* This is used to decode an already encoded NTLM type-2 message.
-*
-* Parameters:
-*
-* data     [in]     - The session handle.
-* type2msg [in]     - The base64 encoded type-2 message.
-* ntlm     [in/out] - The ntlm data struct being used and modified.
-*
-* Returns CURLE_OK on success.
-*/
+ * Curl_sasl_decode_ntlm_type2_message()
+ *
+ * This is used to decode an already encoded NTLM type-2 message.
+ *
+ * Parameters:
+ *
+ * data     [in]     - The session handle.
+ * type2msg [in]     - The base64 encoded type-2 message.
+ * ntlm     [in/out] - The NTLM data struct being used and modified.
+ *
+ * Returns CURLE_OK on success.
+ */
 CURLcode Curl_sasl_decode_ntlm_type2_message(struct SessionHandle *data,
                                              const char *type2msg,
                                              struct ntlmdata *ntlm)
@@ -646,23 +732,23 @@ CURLcode Curl_sasl_decode_ntlm_type2_message(struct SessionHandle *data,
 }
 
 /*
-* Curl_sasl_create_ntlm_type3_message()
-*
-* This is used to generate an already encoded NTLM type-3 message ready for
-* sending to the recipient.
-*
-* Parameters:
-*
-* data    [in]     - The session handle.
-* userp   [in]     - The user name in the format User or Domain\User.
-* passdwp [in]     - The user's password.
-* ntlm    [in/out] - The ntlm data struct being used and modified.
-* outptr  [in/out] - The address where a pointer to newly allocated memory
-*                    holding the result will be stored upon completion.
-* outlen  [out]    - The length of the output message.
-*
-* Returns CURLE_OK on success.
-*/
+ * Curl_sasl_create_ntlm_type3_message()
+ *
+ * This is used to generate an already encoded NTLM type-3 message ready for
+ * sending to the recipient.
+ *
+ * Parameters:
+ *
+ * data    [in]     - The session handle.
+ * userp   [in]     - The user name in the format User or Domain\User.
+ * passdwp [in]     - The user's password.
+ * ntlm    [in/out] - The NTLM data struct being used and modified.
+ * outptr  [in/out] - The address where a pointer to newly allocated memory
+ *                    holding the result will be stored upon completion.
+ * outlen  [out]    - The length of the output message.
+ *
+ * Returns CURLE_OK on success.
+ */
 CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
                                              const char *userp,
                                              const char *passwdp,
@@ -725,11 +811,11 @@ CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
 /*
  * Curl_sasl_ntlm_cleanup()
  *
- * This is used to clean up the ntlm specific data.
+ * This is used to clean up the NTLM specific data.
  *
  * Parameters:
  *
- * ntlm    [in/out] - The ntlm data struct being cleaned up.
+ * ntlm    [in/out] - The NTLM data struct being cleaned up.
  *
  */
 void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
@@ -777,7 +863,7 @@ void Curl_sasl_ntlm_cleanup(struct ntlmdata *ntlm)
  * mutual_auth [in]     - Flag specifing whether or not mutual authentication
  *                        is enabled.
  * chlg64      [in]     - The optional base64 encoded challenge message.
- * krb5        [in/out] - The gssapi data struct being used and modified.
+ * krb5        [in/out] - The Kerberos 5 data struct being used and modified.
  * outptr      [in/out] - The address where a pointer to newly allocated memory
  *                        holding the result will be stored upon completion.
  * outlen      [out]    - The length of the output message.
@@ -912,7 +998,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
                                                &expiry);
 
   if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_RECV_ERROR;
   }
@@ -930,7 +1016,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
   }
 
   /* Free the decoded challenge */
-  Curl_safefree(chlg);
+  free(chlg);
 
   return result;
 }
@@ -945,7 +1031,7 @@ CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
  *
  * data    [in]     - The session handle.
  * chlg64  [in]     - The optional base64 encoded challenge message.
- * krb5    [in/out] - The gssapi data struct being used and modified.
+ * krb5    [in/out] - The Kerberos 5 data struct being used and modified.
  * outptr  [in/out] - The address where a pointer to newly allocated memory
  *                    holding the result will be stored upon completion.
  * outlen  [out]    - The length of the output message.
@@ -1001,7 +1087,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
                                             SECPKG_ATTR_SIZES,
                                             &sizes);
   if(status != SEC_E_OK) {
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -1011,7 +1097,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
                                                 SECPKG_CRED_ATTR_NAMES,
                                                 &names);
   if(status != SEC_E_OK) {
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_RECV_ERROR;
   }
@@ -1032,7 +1118,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   if(status != SEC_E_OK) {
     infof(data, "GSSAPI handshake failure (empty security message)\n");
 
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_BAD_CONTENT_ENCODING;
   }
@@ -1041,7 +1127,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   if(input_buf[1].cbBuffer != 4) {
     infof(data, "GSSAPI handshake failure (invalid security data)\n");
 
-    Curl_safefree(chlg);
+    free(chlg);
 
     return CURLE_BAD_CONTENT_ENCODING;
   }
@@ -1049,7 +1135,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   /* Copy the data out and free the challenge as it is not required anymore */
   memcpy(&indata, input_buf[1].pvBuffer, 4);
   s_pSecFn->FreeContextBuffer(input_buf[1].pvBuffer);
-  Curl_safefree(chlg);
+  free(chlg);
 
   /* Extract the security layer */
   sec_layer = indata & 0x000000FF;
@@ -1076,7 +1162,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   /* Convert the user name to UTF8 when operating with Unicode */
   user_name = Curl_convert_tchar_to_UTF8(names.sUserName);
   if(!user_name) {
-    Curl_safefree(trailer);
+    free(trailer);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -1085,7 +1171,7 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   messagelen = sizeof(outdata) + strlen(user_name) + 1;
   message = malloc(messagelen);
   if(!message) {
-    Curl_safefree(trailer);
+    free(trailer);
     Curl_unicodefree(user_name);
 
     return CURLE_OUT_OF_MEMORY;
@@ -1104,8 +1190,8 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   /* Allocate the padding */
   padding = malloc(sizes.cbBlockSize);
   if(!padding) {
-    Curl_safefree(message);
-    Curl_safefree(trailer);
+    free(message);
+    free(trailer);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -1128,9 +1214,9 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
   status = s_pSecFn->EncryptMessage(krb5->context, KERB_WRAP_NO_ENCRYPT,
                                     &wrap_desc, 0);
   if(status != SEC_E_OK) {
-    Curl_safefree(padding);
-    Curl_safefree(message);
-    Curl_safefree(trailer);
+    free(padding);
+    free(message);
+    free(trailer);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -1140,9 +1226,9 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
                wrap_buf[2].cbBuffer;
   appdata = malloc(appdatalen);
   if(!appdata) {
-    Curl_safefree(padding);
-    Curl_safefree(message);
-    Curl_safefree(trailer);
+    free(padding);
+    free(message);
+    free(trailer);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -1159,10 +1245,10 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
                               outlen);
 
   /* Free all of our local buffers */
-  Curl_safefree(appdata);
-  Curl_safefree(padding);
-  Curl_safefree(message);
-  Curl_safefree(trailer);
+  free(appdata);
+  free(padding);
+  free(message);
+  free(trailer);
 
   return result;
 }
@@ -1170,11 +1256,11 @@ CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
 /*
  * Curl_sasl_gssapi_cleanup()
  *
- * This is used to clean up the gssapi specific data.
+ * This is used to clean up the GSSAPI (Kerberos V5) specific data.
  *
  * Parameters:
  *
- * krb5     [in/out] - The kerberos 5 data struct being cleaned up.
+ * krb5     [in/out] - The Kerberos 5 data struct being cleaned up.
  *
  */
 void Curl_sasl_gssapi_cleanup(struct kerberos5data *krb5)
index 6c48da2..3f94e14 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index b046b77..5163273 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #  ifndef CURL_DISABLE_SMTP
 #    define CURL_DISABLE_SMTP
 #  endif
-#  ifndef CURL_DISABLE_RTSP
-#    define CURL_DISABLE_RTSP
-#  endif
 #  ifndef CURL_DISABLE_RTMP
 #    define CURL_DISABLE_RTMP
 #  endif
 #  ifndef CURL_DISABLE_GOPHER
 #    define CURL_DISABLE_GOPHER
 #  endif
+#  ifndef CURL_DISABLE_SMB
+#    define CURL_DISABLE_SMB
+#  endif
 #endif
 
 /*
 #  ifdef HAVE_WINSOCK2_H
 #    include <winsock2.h>
 #    ifdef HAVE_WS2TCPIP_H
-#       include <ws2tcpip.h>
+#      include <ws2tcpip.h>
 #    endif
 #  else
 #    ifdef HAVE_WINSOCK_H
 /*
  * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN
  * defined in ws2tcpip.h as well as to provide IPv6 support.
+ * Does not apply if lwIP is used.
  */
 
-#if defined(_MSC_VER) && !defined(__POCC__)
+#if defined(_MSC_VER) && !defined(__POCC__) && !defined(USE_LWIPSOCK)
 #  if !defined(HAVE_WS2TCPIP_H) || \
      ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN))
 #    undef HAVE_GETADDRINFO_THREADSAFE
 #  define CURLRES_ARES
 /* now undef the stock libc functions just to avoid them being used */
 #  undef HAVE_GETADDRINFO
+#  undef HAVE_FREEADDRINFO
 #  undef HAVE_GETHOSTBYNAME
 #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
 #  define CURLRES_ASYNCH
@@ -601,8 +603,8 @@ int netware_init(void);
 
 #define LIBIDN_REQUIRED_VERSION "0.4.1"
 
-#if defined(USE_GNUTLS) || defined(USE_SSLEAY) || defined(USE_NSS) || \
-    defined(USE_POLARSSL) || defined(USE_AXTLS) || \
+#if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_NSS) || \
+    defined(USE_POLARSSL) || defined(USE_AXTLS) || defined(USE_MBEDTLS) || \
     defined(USE_CYASSL) || defined(USE_SCHANNEL) || \
     defined(USE_DARWINSSL) || defined(USE_GSKIT)
 #define USE_SSL    /* SSL support has been enabled */
@@ -622,9 +624,10 @@ int netware_init(void);
 
 /* Single point where USE_NTLM definition might be defined */
 #if !defined(CURL_DISABLE_NTLM) && !defined(CURL_DISABLE_CRYPTO_AUTH)
-#if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI) || \
+#if defined(USE_OPENSSL) || defined(USE_WINDOWS_SSPI) || \
     defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_DARWINSSL) || \
     defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO)
+
 #define USE_NTLM
 #endif
 #endif
@@ -669,7 +672,7 @@ int netware_init(void);
  * Ensure that Winsock and lwIP TCP/IP stacks are not mixed.
  */
 
-#if defined(__LWIP_OPT_H__)
+#if defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H)
 #  if defined(SOCKET) || \
      defined(USE_WINSOCK) || \
      defined(HAVE_WINSOCK_H) || \
@@ -699,4 +702,24 @@ int netware_init(void);
 #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
 #endif
 
+/* In Windows the default file mode is text but an application can override it.
+Therefore we specify it explicitly. https://github.com/curl/curl/pull/258
+*/
+#if defined(WIN32) || defined(MSDOS)
+#define FOPEN_READTEXT "rt"
+#define FOPEN_WRITETEXT "wt"
+#elif defined(__CYGWIN__)
+/* Cygwin has specific behavior we need to address when WIN32 is not defined.
+https://cygwin.com/cygwin-ug-net/using-textbinary.html
+For write we want our output to have line endings of LF and be compatible with
+other Cygwin utilities. For read we want to handle input that may have line
+endings either CRLF or LF so 't' is appropriate.
+*/
+#define FOPEN_READTEXT "rt"
+#define FOPEN_WRITETEXT "w"
+#else
+#define FOPEN_READTEXT "r"
+#define FOPEN_WRITETEXT "w"
+#endif
+
 #endif /* HEADER_CURL_SETUP_H */
index 69d6d47..4da8349 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index f09d288..04eac48 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #ifdef USE_WINDOWS_SSPI
 
 #include <curl/curl.h>
-
 #include "curl_sspi.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
 #include "curl_multibyte.h"
 #include "warnless.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* We use our own typedef here since some headers might lack these */
@@ -98,20 +93,25 @@ CURLcode Curl_sspi_global_init(void)
        osver.dwPlatformId == platformId)
       securityDll = TRUE;
 #else
-    ULONGLONG majorVersionMask;
-    ULONGLONG platformIdMask;
+    ULONGLONG cm;
     OSVERSIONINFOEX osver;
 
     memset(&osver, 0, sizeof(osver));
     osver.dwOSVersionInfoSize = sizeof(osver);
     osver.dwMajorVersion = majorVersion;
     osver.dwPlatformId = platformId;
-    majorVersionMask = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
-    platformIdMask = VerSetConditionMask(0, VER_PLATFORMID, VER_EQUAL);
+
+    cm = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_MINORVERSION, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_PLATFORMID, VER_EQUAL);
 
     /* Verify the major version number == 4 and platform id == WIN_NT */
-    if(VerifyVersionInfo(&osver, VER_MAJORVERSION, majorVersionMask) &&
-       VerifyVersionInfo(&osver, VER_PLATFORMID, platformIdMask))
+    if(VerifyVersionInfo(&osver, (VER_MAJORVERSION | VER_MINORVERSION |
+                                  VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR |
+                                  VER_PLATFORMID),
+                         cm))
       securityDll = TRUE;
 #endif
 
@@ -224,7 +224,7 @@ CURLcode Curl_create_sspi_identity(const char *userp, const char *passwdp,
 
   Curl_unicodefree(useranddomain.tchar_ptr);
 
-  /* Setup ntlm identity's password and length */
+  /* Setup the identity's password and length */
   passwd.tchar_ptr = Curl_convert_UTF8_to_tchar((char *)passwdp);
   if(!passwd.tchar_ptr)
     return CURLE_OUT_OF_MEMORY;
index 7fa308c..2bbf947 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
 CURLcode Curl_sspi_global_init(void);
 void Curl_sspi_global_cleanup(void);
 
+/* This is used to populate the domain in a SSPI identity structure */
+CURLcode Curl_override_sspi_http_realm(const char *chlg,
+                                       SEC_WINNT_AUTH_IDENTITY *identity);
+
 /* This is used to generate an SSPI identity structure */
 CURLcode Curl_create_sspi_identity(const char *userp, const char *passwdp,
                                    SEC_WINNT_AUTH_IDENTITY *identity);
@@ -323,6 +327,10 @@ extern PSecurityFunctionTable s_pSecFn;
 # define SEC_I_SIGNATURE_NEEDED               ((HRESULT)0x0009035CL)
 #endif
 
+#ifndef CRYPT_E_REVOKED
+# define CRYPT_E_REVOKED                      ((HRESULT)0x80092010L)
+#endif
+
 #ifdef UNICODE
 #  define SECFLAG_WINNT_AUTH_IDENTITY \
      (unsigned long)SEC_WINNT_AUTH_IDENTITY_UNICODE
index 5b70139..59d8811 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #endif
 
 #include "curl_threads.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"
@@ -77,8 +73,8 @@ curl_thread_t Curl_thread_create(unsigned int (*func) (void*), void *arg)
   return t;
 
 err:
-  Curl_safefree(t);
-  Curl_safefree(ac);
+  free(t);
+  free(ac);
   return curl_thread_t_null;
 }
 
index 0f3191a..8cbac63 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 9dc90a0..448a34f 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -90,8 +90,7 @@
 #ifdef ENABLE_CURLX_PRINTF
 /* If this define is set, we define all "standard" printf() functions to use
    the curlx_* version instead. It makes the source code transparent and
-   easier to understand/patch. Undefine them first in case _MPRINTF_REPLACE
-   is set. */
+   easier to understand/patch. Undefine them first. */
 # undef printf
 # undef fprintf
 # undef sprintf
index 86ddfb9..2e7cb47 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "strequal.h"
 #include "dict.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"
@@ -101,7 +97,7 @@ static char *unescape_word(struct SessionHandle *data, const char *inputbuff)
   char *dictp;
   char *ptr;
   int len;
-  char byte;
+  char ch;
   int olen=0;
 
   newp = curl_easy_unescape(data, inputbuff, 0, &len);
@@ -113,13 +109,13 @@ static char *unescape_word(struct SessionHandle *data, const char *inputbuff)
     /* According to RFC2229 section 2.2, these letters need to be escaped with
        \[letter] */
     for(ptr = newp;
-        (byte = *ptr) != 0;
+        (ch = *ptr) != 0;
         ptr++) {
-      if((byte <= 32) || (byte == 127) ||
-          (byte == '\'') || (byte == '\"') || (byte == '\\')) {
+      if((ch <= 32) || (ch == 127) ||
+          (ch == '\'') || (ch == '\"') || (ch == '\\')) {
         dictp[olen++] = '\\';
       }
-      dictp[olen++] = byte;
+      dictp[olen++] = ch;
     }
     dictp[olen]=0;
   }
index 44fd9d4..12c0f33 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index ae16941..99fac7f 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 
 /*
  * "Remove Dot Segments"
- * http://tools.ietf.org/html/rfc3986#section-5.2.4
+ * https://tools.ietf.org/html/rfc3986#section-5.2.4
  */
 
 /*
  * Curl_dedotdotify()
+ * @unittest: 1395
  *
  * This function gets a zero-terminated path with dot and dotdot sequences
  * passed in and strips them off according to the rules in RFC 3986 section
@@ -68,6 +69,12 @@ char *Curl_dedotdotify(const char *input)
   orgclone = clone;
   outptr = out;
 
+  if(!*clone) {
+    /* zero length string, return that */
+    free(out);
+    return clone;
+  }
+
   /*
    * To handle query-parts properly, we must find it and remove it during the
    * dotdot-operation and then append it again at the end to the output
index cd57822..fac8e6f 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 619312b..2bddbb2 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "hostip.h"
 #include "share.h"
 #include "strdup.h"
-#include "curl_memory.h"
 #include "progress.h"
 #include "easyif.h"
 #include "select.h"
 #include "sendf.h" /* for failf function prototype */
-#include "curl_ntlm.h"
 #include "connect.h" /* for Curl_getconnectinfo */
 #include "slist.h"
 #include "amigaos.h"
 #include "multiif.h"
 #include "sigpipe.h"
 #include "ssh.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
+void Curl_version_init(void);
+
 /* win32_cleanup() is for win32 socket cleanup functionality, the opposite
    of win32_init() */
 static void win32_cleanup(void)
@@ -222,20 +221,22 @@ curl_calloc_callback Curl_ccalloc;
  * curl_global_init() globally initializes cURL given a bitwise set of the
  * different features of what to initialize.
  */
-CURLcode curl_global_init(long flags)
+static CURLcode global_init(long flags, bool memoryfuncs)
 {
   if(initialized++)
     return CURLE_OK;
 
-  /* Setup the default memory functions here (again) */
-  Curl_cmalloc = (curl_malloc_callback)malloc;
-  Curl_cfree = (curl_free_callback)free;
-  Curl_crealloc = (curl_realloc_callback)realloc;
-  Curl_cstrdup = (curl_strdup_callback)system_strdup;
-  Curl_ccalloc = (curl_calloc_callback)calloc;
+  if(memoryfuncs) {
+    /* Setup the default memory functions here (again) */
+    Curl_cmalloc = (curl_malloc_callback)malloc;
+    Curl_cfree = (curl_free_callback)free;
+    Curl_crealloc = (curl_realloc_callback)realloc;
+    Curl_cstrdup = (curl_strdup_callback)system_strdup;
+    Curl_ccalloc = (curl_calloc_callback)calloc;
 #if defined(WIN32) && defined(UNICODE)
-  Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup;
+    Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup;
 #endif
+  }
 
   if(flags & CURL_GLOBAL_SSL)
     if(!Curl_ssl_init()) {
@@ -281,11 +282,23 @@ CURLcode curl_global_init(long flags)
   if(flags & CURL_GLOBAL_ACK_EINTR)
     Curl_ack_eintr = 1;
 
-  init_flags  = flags;
+  init_flags = flags;
+
+  Curl_version_init();
 
   return CURLE_OK;
 }
 
+
+/**
+ * curl_global_init() globally initializes cURL given a bitwise set of the
+ * different features of what to initialize.
+ */
+CURLcode curl_global_init(long flags)
+{
+  return global_init(flags, TRUE);
+}
+
 /*
  * curl_global_init_mem() globally initializes cURL and also registers the
  * user provided callback routines.
@@ -294,8 +307,6 @@ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m,
                               curl_free_callback f, curl_realloc_callback r,
                               curl_strdup_callback s, curl_calloc_callback c)
 {
-  CURLcode result = CURLE_OK;
-
   /* Invalid input, return immediately */
   if(!m || !f || !r || !s || !c)
     return CURLE_FAILED_INIT;
@@ -308,17 +319,16 @@ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m,
     return CURLE_OK;
   }
 
-  /* Call the actual init function first */
-  result = curl_global_init(flags);
-  if(!result) {
-    Curl_cmalloc = m;
-    Curl_cfree = f;
-    Curl_cstrdup = s;
-    Curl_crealloc = r;
-    Curl_ccalloc = c;
-  }
+  /* set memory functions before global_init() in case it wants memory
+     functions */
+  Curl_cmalloc = m;
+  Curl_cfree = f;
+  Curl_cstrdup = s;
+  Curl_crealloc = r;
+  Curl_ccalloc = c;
 
-  return result;
+  /* Call the actual init function, but without setting */
+  return global_init(flags, FALSE);
 }
 
 /**
@@ -534,14 +544,18 @@ static int events_socket(CURL *easy,      /* easy handle */
     }
     else {
       m = malloc(sizeof(struct socketmonitor));
-      m->next = ev->list;
-      m->socket.fd = s;
-      m->socket.events = socketcb2poll(what);
-      m->socket.revents = 0;
-      ev->list = m;
-      infof(easy, "socket cb: socket %d ADDED as %s%s\n", s,
-            what&CURL_POLL_IN?"IN":"",
-            what&CURL_POLL_OUT?"OUT":"");
+      if(m) {
+        m->next = ev->list;
+        m->socket.fd = s;
+        m->socket.events = socketcb2poll(what);
+        m->socket.revents = 0;
+        ev->list = m;
+        infof(easy, "socket cb: socket %d ADDED as %s%s\n", s,
+              what&CURL_POLL_IN?"IN":"",
+              what&CURL_POLL_OUT?"OUT":"");
+      }
+      else
+        return CURLE_OUT_OF_MEMORY;
     }
   }
 
@@ -683,26 +697,22 @@ static CURLcode easy_transfer(CURLM *multi)
 
   while(!done && !mcode) {
     int still_running = 0;
-    int ret;
+    int rc;
 
     before = curlx_tvnow();
-    mcode = curl_multi_wait(multi, NULL, 0, 1000, &ret);
+    mcode = curl_multi_wait(multi, NULL, 0, 1000, &rc);
 
-    if(mcode == CURLM_OK) {
-      if(ret == -1) {
-        /* poll() failed not on EINTR, indicate a network problem */
-        result = CURLE_RECV_ERROR;
-        break;
-      }
-      else if(ret == 0) {
+    if(!mcode) {
+      if(!rc) {
         struct timeval after = curlx_tvnow();
+
         /* If it returns without any filedescriptor instantly, we need to
            avoid busy-looping during periods where it has nothing particular
            to wait for */
         if(curlx_tvdiff(after, before) <= 10) {
           without_fds++;
           if(without_fds > 2) {
-            int sleep_ms = without_fds < 10 ? (1 << (without_fds-1)): 1000;
+            int sleep_ms = without_fds < 10 ? (1 << (without_fds - 1)) : 1000;
             Curl_wait_ms(sleep_ms);
           }
         }
@@ -718,8 +728,7 @@ static CURLcode easy_transfer(CURLM *multi)
     }
 
     /* only read 'still_running' if curl_multi_perform() return OK */
-    if((mcode == CURLM_OK) && !still_running) {
-      int rc;
+    if(!mcode && !still_running) {
       CURLMsg *msg = curl_multi_info_read(multi, &rc);
       if(msg) {
         result = msg->data.result;
@@ -730,10 +739,10 @@ static CURLcode easy_transfer(CURLM *multi)
 
   /* Make sure to return some kind of error if there was a multi problem */
   if(mcode) {
-    return (mcode == CURLM_OUT_OF_MEMORY) ? CURLE_OUT_OF_MEMORY :
-            /* The other multi errors should never happen, so return
-               something suitably generic */
-            CURLE_BAD_FUNCTION_ARGUMENT;
+    result = (mcode == CURLM_OUT_OF_MEMORY) ? CURLE_OUT_OF_MEMORY :
+              /* The other multi errors should never happen, so return
+                 something suitably generic */
+              CURLE_BAD_FUNCTION_ARGUMENT;
   }
 
   return result;
index 043ff43..6533349 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 9923e64..40338a9 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include <curl/curl.h>
 
-#include "curl_memory.h"
 #include "urldata.h"
 #include "warnless.h"
 #include "non-ascii.h"
 #include "escape.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* Portable character check (remember EBCDIC). Do not use isalnum() because
    its behavior is altered by the current locale.
-   See http://tools.ietf.org/html/rfc3986#section-2.3
+   See https://tools.ietf.org/html/rfc3986#section-2.3
 */
 static bool Curl_isunreserved(unsigned char in)
 {
@@ -229,6 +227,5 @@ char *curl_easy_unescape(CURL *handle, const char *string, int length,
    the library's memory system */
 void curl_free(void *p)
 {
-  if(p)
-    free(p);
+  free(p);
 }
index 731b136..a6e2967 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index dd2c564..5c31fc4 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "getinfo.h"
 #include "transfer.h"
 #include "url.h"
-#include "curl_memory.h"
 #include "parsedate.h" /* for the week day and month names */
 #include "warnless.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #if defined(WIN32) || defined(MSDOS) || defined(__EMX__) || \
@@ -317,8 +315,6 @@ static CURLcode file_upload(struct connectdata *conn)
    * Since FILE: doesn't do the full init, we need to provide some extra
    * assignments here.
    */
-  conn->fread_func = data->set.fread_func;
-  conn->fread_in = data->set.in;
   conn->data->req.upload_fromhere = buf;
 
   if(!dir)
@@ -430,6 +426,7 @@ static CURLcode file_do(struct connectdata *conn, bool *done)
                           Windows version to have a different struct without
                           having to redefine the simple word 'stat' */
   curl_off_t expected_size=0;
+  bool size_known;
   bool fstated=FALSE;
   ssize_t nread;
   struct SessionHandle *data = conn->data;
@@ -535,8 +532,10 @@ static CURLcode file_do(struct connectdata *conn, bool *done)
   if(data->req.maxdownload > 0)
     expected_size = data->req.maxdownload;
 
-  if(fstated && (expected_size == 0))
-    return CURLE_OK;
+  if(!fstated || (expected_size == 0))
+    size_known = FALSE;
+  else
+    size_known = TRUE;
 
   /* The following is a shortcut implementation of file reading
      this is both more efficient than the former call to download() and
@@ -555,20 +554,27 @@ static CURLcode file_do(struct connectdata *conn, bool *done)
 
   while(!result) {
     /* Don't fill a whole buffer if we want less than all data */
-    size_t bytestoread =
-      (expected_size < CURL_OFF_T_C(BUFSIZE) - CURL_OFF_T_C(1)) ?
-      curlx_sotouz(expected_size) : BUFSIZE - 1;
+    size_t bytestoread;
+
+    if(size_known) {
+      bytestoread =
+        (expected_size < CURL_OFF_T_C(BUFSIZE) - CURL_OFF_T_C(1)) ?
+        curlx_sotouz(expected_size) : BUFSIZE - 1;
+    }
+    else
+      bytestoread = BUFSIZE-1;
 
     nread = read(fd, buf, bytestoread);
 
     if(nread > 0)
       buf[nread] = 0;
 
-    if(nread <= 0 || expected_size == 0)
+    if(nread <= 0 || (size_known && (expected_size == 0)))
       break;
 
     bytecount += nread;
-    expected_size -= nread;
+    if(size_known)
+      expected_size -= nread;
 
     result = Curl_client_write(conn, CLIENTWRITE_BODY, buf, nread);
     if(result)
index 997474b..c12ae0e 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 8c8ee98..144c65b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2010-2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2010 - 2015, 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.
+ * are also available at https://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
 
 #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"
index b0e5e59..5324f1a 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 14ac576..7d691ff 100644 (file)
@@ -6,11 +6,11 @@
 # *                            | (__| |_| |  _ <| |___
 # *                             \___|\___/|_| \_\_____|
 # *
-# * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+# * Copyright (C) 1998 - 2015, 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.
+# * are also available at https://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
@@ -24,7 +24,7 @@
 # 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`
+db=`ls -1d $HOME/.mozilla/firefox/*default*`
 out=$1
 
 if test -z "$out"; then
index 73d3b6d..c241e6e 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "formdata.h"
 #include "vtls/vtls.h"
 #include "strequal.h"
-#include "curl_memory.h"
 #include "sendf.h"
 #include "strdup.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #ifndef HAVE_BASENAME
@@ -59,6 +57,14 @@ static char *formboundary(struct SessionHandle *data);
 #define FORM_FILE_SEPARATOR ','
 #define FORM_TYPE_SEPARATOR ';'
 
+#define HTTPPOST_PTRNAME CURL_HTTPPOST_PTRNAME
+#define HTTPPOST_FILENAME CURL_HTTPPOST_FILENAME
+#define HTTPPOST_PTRCONTENTS CURL_HTTPPOST_PTRCONTENTS
+#define HTTPPOST_READFILE CURL_HTTPPOST_READFILE
+#define HTTPPOST_PTRBUFFER CURL_HTTPPOST_PTRBUFFER
+#define HTTPPOST_CALLBACK CURL_HTTPPOST_CALLBACK
+#define HTTPPOST_BUFFER CURL_HTTPPOST_BUFFER
+
 /***************************************************************************
  *
  * AddHttpPost()
@@ -71,7 +77,7 @@ static char *formboundary(struct SessionHandle *data);
  ***************************************************************************/
 static struct curl_httppost *
 AddHttpPost(char *name, size_t namelength,
-            char *value, size_t contentslength,
+            char *value, curl_off_t contentslength,
             char *buffer, size_t bufferlength,
             char *contenttype,
             long flags,
@@ -87,14 +93,14 @@ AddHttpPost(char *name, size_t namelength,
     post->name = name;
     post->namelength = (long)(name?(namelength?namelength:strlen(name)):0);
     post->contents = value;
-    post->contentslength = (long)contentslength;
+    post->contentlen = contentslength;
     post->buffer = buffer;
     post->bufferlength = (long)bufferlength;
     post->contenttype = contenttype;
     post->contentheader = contentHeader;
     post->showfilename = showfilename;
     post->userp = userp,
-    post->flags = flags;
+    post->flags = flags | CURL_HTTPPOST_LARGE;
   }
   else
     return NULL;
@@ -374,11 +380,14 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
       }
       break;
     case CURLFORM_CONTENTSLENGTH:
-      if(current_form->contentslength)
-        return_value = CURL_FORMADD_OPTION_TWICE;
-      else
-        current_form->contentslength =
-          array_state?(size_t)array_value:(size_t)va_arg(params, long);
+      current_form->contentslength =
+        array_state?(size_t)array_value:(size_t)va_arg(params, long);
+      break;
+
+    case CURLFORM_CONTENTLEN:
+      current_form->flags |= CURL_HTTPPOST_LARGE;
+      current_form->contentslength =
+        array_state?(curl_off_t)(size_t)array_value:va_arg(params, curl_off_t);
       break;
 
       /* Get contents from a given file name */
@@ -417,7 +426,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
               else {
                 form = AddFormInfo(fname, NULL, current_form);
                 if(!form) {
-                  Curl_safefree(fname);
+                  free(fname);
                   return_value = CURL_FORMADD_MEMORY;
                 }
                 else {
@@ -506,7 +515,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
               else {
                 form = AddFormInfo(NULL, type, current_form);
                 if(!form) {
-                  Curl_safefree(type);
+                  free(type);
                   return_value = CURL_FORMADD_MEMORY;
                 }
                 else {
@@ -540,7 +549,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
         /* this "cast increases required alignment of target type" but
            we consider it OK anyway */
         struct curl_slist* list = array_state?
-          (struct curl_slist*)array_value:
+          (struct curl_slist*)(void*)array_value:
           va_arg(params, struct curl_slist*);
 
         if(current_form->contentheader)
@@ -655,9 +664,12 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
                             HTTPPOST_PTRCONTENTS | HTTPPOST_PTRBUFFER |
                             HTTPPOST_CALLBACK)) && form->value) {
           /* copy value (without strdup; possibly contains null characters) */
-          form->value = Curl_memdup(form->value, form->contentslength?
-                                    form->contentslength:
-                                    strlen(form->value)+1);
+          size_t clen  = (size_t) form->contentslength;
+          if(!clen)
+            clen = strlen(form->value)+1;
+
+          form->value = Curl_memdup(form->value, clen);
+
           if(!form->value) {
             return_value = CURL_FORMADD_MEMORY;
             break;
@@ -713,7 +725,7 @@ CURLFORMcode FormAdd(struct curl_httppost **httppost,
      now by the httppost linked list */
   while(first_form) {
     FormInfo *ptr = first_form->more;
-    Curl_safefree(first_form);
+    free(first_form);
     first_form = ptr;
   }
 
@@ -758,7 +770,7 @@ curl_off_t VmsRealFileSize(const char * name,
   int ret_stat;
   FILE * file;
 
-  file = fopen(name, "r");
+  file = fopen(name, "r"); /* VMS */
   if(file == NULL)
     return 0;
 
@@ -810,10 +822,16 @@ static curl_off_t VmsSpecialSize(const char * name,
 static CURLcode AddFormData(struct FormData **formp,
                             enum formtype type,
                             const void *line,
-                            size_t length,
+                            curl_off_t length,
                             curl_off_t *size)
 {
-  struct FormData *newform = malloc(sizeof(struct FormData));
+  struct FormData *newform;
+  char *alloc2 = NULL;
+  CURLcode result = CURLE_OK;
+  if(length < 0 || (size && *size < 0))
+    return CURLE_BAD_FUNCTION_ARGUMENT;
+
+  newform = malloc(sizeof(struct FormData));
   if(!newform)
     return CURLE_OUT_OF_MEMORY;
   newform->next = NULL;
@@ -822,15 +840,22 @@ static CURLcode AddFormData(struct FormData **formp,
     /* we make it easier for plain strings: */
     if(!length)
       length = strlen((char *)line);
+#if (SIZEOF_SIZE_T < CURL_SIZEOF_CURL_OFF_T)
+    else if(length >= (curl_off_t)(size_t)-1) {
+      result = CURLE_BAD_FUNCTION_ARGUMENT;
+      goto error;
+    }
+#endif
 
-    newform->line = malloc(length+1);
+    newform->line = malloc((size_t)length+1);
     if(!newform->line) {
-      free(newform);
-      return CURLE_OUT_OF_MEMORY;
+      result = CURLE_OUT_OF_MEMORY;
+      goto error;
     }
-    memcpy(newform->line, line, length);
-    newform->length = length;
-    newform->line[length]=0; /* zero terminate for easier debugging */
+    alloc2 = newform->line;
+    memcpy(newform->line, line, (size_t)length);
+    newform->length = (size_t)length;
+    newform->line[(size_t)length]=0; /* zero terminate for easier debugging */
   }
   else
     /* For callbacks and files we don't have any actual data so we just keep a
@@ -858,12 +883,20 @@ static CURLcode AddFormData(struct FormData **formp,
         struct_stat file;
         if(!stat(newform->line, &file) && !S_ISDIR(file.st_mode))
           *size += filesize(newform->line, file);
-        else
-          return CURLE_BAD_FUNCTION_ARGUMENT;
+        else {
+          result = CURLE_BAD_FUNCTION_ARGUMENT;
+          goto error;
+        }
       }
     }
   }
   return CURLE_OK;
+  error:
+  if(newform)
+    free(newform);
+  if(alloc2)
+    free(alloc2);
+  return result;
 }
 
 /*
@@ -971,19 +1004,16 @@ void curl_formfree(struct curl_httppost *form)
     next=form->next;  /* the following form line */
 
     /* recurse to sub-contents */
-    if(form->more)
-      curl_formfree(form->more);
+    curl_formfree(form->more);
 
-    if(!(form->flags & HTTPPOST_PTRNAME) && form->name)
+    if(!(form->flags & HTTPPOST_PTRNAME))
       free(form->name); /* free the name */
     if(!(form->flags &
-         (HTTPPOST_PTRCONTENTS|HTTPPOST_BUFFER|HTTPPOST_CALLBACK)) &&
-       form->contents)
+         (HTTPPOST_PTRCONTENTS|HTTPPOST_BUFFER|HTTPPOST_CALLBACK))
+      )
       free(form->contents); /* free the contents */
-    if(form->contenttype)
-      free(form->contenttype); /* free the content type */
-    if(form->showfilename)
-      free(form->showfilename); /* free the faked file name */
+    free(form->contenttype); /* free the content type */
+    free(form->showfilename); /* free the faked file name */
     free(form);       /* free the struct */
 
   } while((form = next) != NULL); /* continue */
@@ -1073,7 +1103,7 @@ static CURLcode formdata_add_filename(const struct curl_httppost *file,
     /* filename need be escaped */
     filename_escaped = malloc(strlen(filename)*2+1);
     if(!filename_escaped) {
-      Curl_safefree(filebasename);
+      free(filebasename);
       return CURLE_OUT_OF_MEMORY;
     }
     p0 = filename_escaped;
@@ -1089,8 +1119,8 @@ static CURLcode formdata_add_filename(const struct curl_httppost *file,
   result = AddFormDataf(form, size,
                         "; filename=\"%s\"",
                         filename);
-  Curl_safefree(filename_escaped);
-  Curl_safefree(filebasename);
+  free(filename_escaped);
+  free(filebasename);
   return result;
 }
 
@@ -1140,7 +1170,7 @@ CURLcode Curl_getformdata(struct SessionHandle *data,
                         boundary);
 
   if(result) {
-    Curl_safefree(boundary);
+    free(boundary);
     return result;
   }
   /* we DO NOT include that line in the total size of the POST, since it'll be
@@ -1183,7 +1213,7 @@ CURLcode Curl_getformdata(struct SessionHandle *data,
       /* If used, this is a link to more file names, we must then do
          the magic to include several files with the same field name */
 
-      Curl_safefree(fileboundary);
+      free(fileboundary);
       fileboundary = formboundary(data);
       if(!fileboundary) {
         result = CURLE_OUT_OF_MEMORY;
@@ -1303,15 +1333,16 @@ CURLcode Curl_getformdata(struct SessionHandle *data,
         result = AddFormData(&form, FORM_CONTENT, post->buffer,
                              post->bufferlength, &size);
       else if(post->flags & HTTPPOST_CALLBACK)
-        /* the contents should be read with the callback and the size
-           is set with the contentslength */
+        /* the contents should be read with the callback and the size is set
+           with the contentslength */
         result = AddFormData(&form, FORM_CALLBACK, post->userp,
-                             post->contentslength, &size);
+                             post->flags&CURL_HTTPPOST_LARGE?
+                             post->contentlen:post->contentslength, &size);
       else
         /* include the contents we got */
         result = AddFormData(&form, FORM_CONTENT, post->contents,
-                             post->contentslength, &size);
-
+                             post->flags&CURL_HTTPPOST_LARGE?
+                             post->contentlen:post->contentslength, &size);
       file = file->more;
     } while(file && !result); /* for each specified file for this field */
 
@@ -1336,15 +1367,15 @@ CURLcode Curl_getformdata(struct SessionHandle *data,
 
   if(result) {
     Curl_formclean(&firstform);
-    Curl_safefree(fileboundary);
-    Curl_safefree(boundary);
+    free(fileboundary);
+    free(boundary);
     return result;
   }
 
   *sizep = size;
 
-  Curl_safefree(fileboundary);
-  Curl_safefree(boundary);
+  free(fileboundary);
+  free(boundary);
 
   *finalform = firstform;
 
@@ -1390,7 +1421,7 @@ static FILE * vmsfopenread(const char *file, const char *mode) {
   case FAB$C_VAR:
   case FAB$C_VFC:
   case FAB$C_STMCR:
-    return fopen(file, "r");
+    return fopen(file, "r"); /* VMS */
     break;
   default:
     return fopen(file, "r", "rfm=stmlf", "ctx=stm");
index 22f504b..3fe1e83 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -54,7 +54,7 @@ typedef struct FormInfo {
   size_t namelength;
   char *value;
   bool value_alloc;
-  size_t contentslength;
+  curl_off_t contentslength;
   char *contenttype;
   bool contenttype_alloc;
   long flags;
index 2f4351e..9b728cc 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -77,9 +77,7 @@
 #include "warnless.h"
 #include "http_proxy.h"
 #include "non-ascii.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -157,8 +155,9 @@ static CURLcode ftp_dophase_done(struct connectdata *conn,
                                  bool connected);
 
 /* easy-to-use macro: */
-#define PPSENDF(x,y,z)  if((result = Curl_pp_sendf(x,y,z)))     \
-                              return result
+#define PPSENDF(x,y,z)  result = Curl_pp_sendf(x,y,z); \
+                        if(result)                     \
+                          return result
 
 
 /*
@@ -267,6 +266,15 @@ static const struct Curl_handler Curl_handler_ftps_proxy = {
 #endif
 #endif
 
+static void close_secondarysocket(struct connectdata *conn)
+{
+  if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) {
+    Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
+    conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
+  }
+  conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
+  conn->tunnel_state[SECONDARYSOCKET] = TUNNEL_INIT;
+}
 
 /*
  * NOTE: back in the old days, we added code in the FTP code that made NOBODY
@@ -285,19 +293,17 @@ static void freedirs(struct ftp_conn *ftpc)
   int i;
   if(ftpc->dirs) {
     for(i=0; i < ftpc->dirdepth; i++) {
-      if(ftpc->dirs[i]) {
-        free(ftpc->dirs[i]);
-        ftpc->dirs[i]=NULL;
-      }
+      free(ftpc->dirs[i]);
+      ftpc->dirs[i]=NULL;
     }
     free(ftpc->dirs);
     ftpc->dirs = NULL;
     ftpc->dirdepth = 0;
   }
-  if(ftpc->file) {
-    free(ftpc->file);
-    ftpc->file = NULL;
-  }
+  Curl_safefree(ftpc->file);
+
+  /* no longer of any use */
+  Curl_safefree(ftpc->newhost);
 }
 
 /* Returns non-zero if the given string contains CR (\r) or LF (\n),
@@ -344,6 +350,9 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
     return CURLE_FTP_PORT_FAILED;
   }
   infof(data, "Connection accepted from server\n");
+  /* when this happens within the DO state it is important that we mark us as
+     not needing DO_MORE anymore */
+  conn->bits.do_more = FALSE;
 
   conn->sock[SECONDARYSOCKET] = s;
   (void)curlx_nonblock(s, TRUE); /* enable non-blocking */
@@ -358,8 +367,7 @@ static CURLcode AcceptServerConnect(struct connectdata *conn)
                                CURLSOCKTYPE_ACCEPT);
 
     if(error) {
-      Curl_closesocket(conn, s); /* close the socket and bail out */
-      conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
+      close_secondarysocket(conn);
       return CURLE_ABORTED_BY_CALLBACK;
     }
   }
@@ -1105,7 +1113,7 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
     if(getsockname(conn->sock[FIRSTSOCKET], sa, &sslen)) {
       failf(data, "getsockname() failed: %s",
           Curl_strerror(conn, SOCKERRNO) );
-      Curl_safefree(addr);
+      free(addr);
       return CURLE_FTP_PORT_FAILED;
     }
     switch(sa->sa_family) {
@@ -1137,11 +1145,11 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
 
   if(res == NULL) {
     failf(data, "failed to resolve the address provided to PORT: %s", host);
-    Curl_safefree(addr);
+    free(addr);
     return CURLE_FTP_PORT_FAILED;
   }
 
-  Curl_safefree(addr);
+  free(addr);
   host = NULL;
 
   /* step 2, create a socket for the requested address */
@@ -1326,11 +1334,11 @@ static CURLcode ftp_state_use_port(struct connectdata *conn,
   /* store which command was sent */
   ftpc->count1 = fcmd;
 
+  close_secondarysocket(conn);
+
   /* we set the secondary socket variable to this for now, it is only so that
      the cleanup function will close it in case we fail before the true
      secondary stuff is made */
-  if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
-    Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
   conn->sock[SECONDARYSOCKET] = portsock;
 
   /* this tcpconnect assignment below is a hackish work-around to make the
@@ -1495,13 +1503,13 @@ static CURLcode ftp_state_list(struct connectdata *conn)
      The other ftp_filemethods will CWD into dir/dir/ first and
      then just do LIST (in that case: nothing to do here)
   */
-  char *cmd,*lstArg,*slashPos;
+  char *cmd, *lstArg, *slashPos;
 
   lstArg = NULL;
   if((data->set.ftp_filemethod == FTPFILE_NOCWD) &&
      data->state.path &&
      data->state.path[0] &&
-     strchr(data->state.path,'/')) {
+     strchr(data->state.path, '/')) {
 
     lstArg = strdup(data->state.path);
     if(!lstArg)
@@ -1511,7 +1519,7 @@ static CURLcode ftp_state_list(struct connectdata *conn)
     if(lstArg[strlen(lstArg) - 1] != '/')  {
 
       /* chop off the file part if format is dir/dir/file */
-      slashPos = strrchr(lstArg,'/');
+      slashPos = strrchr(lstArg, '/');
       if(slashPos)
         *(slashPos+1) = '\0';
     }
@@ -1525,16 +1533,13 @@ static CURLcode ftp_state_list(struct connectdata *conn)
                  lstArg? lstArg: "" );
 
   if(!cmd) {
-    if(lstArg)
-      free(lstArg);
+    free(lstArg);
     return CURLE_OUT_OF_MEMORY;
   }
 
   result = Curl_pp_sendf(&conn->proto.ftpc.pp, "%s", cmd);
 
-  if(lstArg)
-    free(lstArg);
-
+  free(lstArg);
   free(cmd);
 
   if(result)
@@ -1677,8 +1682,8 @@ static CURLcode ftp_state_ul_setup(struct connectdata *conn,
             BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
 
           size_t actuallyread =
-            conn->fread_func(data->state.buffer, 1, readthisamountnow,
-                             conn->fread_in);
+            data->state.fread_func(data->state.buffer, 1, readthisamountnow,
+                                   data->state.in);
 
           passed += actuallyread;
           if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
@@ -1794,8 +1799,20 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
           result = ftp_state_retr(conn, ftpc->known_filesize);
         }
         else {
-          PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
-          state(conn, FTP_RETR_SIZE);
+          if(data->set.ignorecl) {
+            /* This code is to support download of growing files.  It prevents
+               the state machine from requesting the file size from the
+               server.  With an unknown file size the download continues until
+               the server terminates it, otherwise the client stops if the
+               received byte count exceeds the reported file size.  Set option
+               CURLOPT_IGNORE_CONTENT_LENGTH to 1 to enable this behavior.*/
+            PPSENDF(&ftpc->pp, "RETR %s", ftpc->file);
+            state(conn, FTP_RETR);
+          }
+          else {
+            PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
+            state(conn, FTP_RETR_SIZE);
+          }
         }
       }
       break;
@@ -1815,6 +1832,13 @@ static CURLcode ftp_state_quote(struct connectdata *conn,
 static CURLcode ftp_epsv_disable(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
+
+  if(conn->bits.ipv6) {
+    /* We can't disable EPSV when doing IPv6, so this is instead a fail */
+    failf(conn->data, "Failed EPSV attempt, exiting\n");
+    return CURLE_FTP_WEIRD_SERVER_REPLY;
+  }
+
   infof(conn->data, "Failed EPSV attempt. Disabling EPSV\n");
   /* disable it for next transfer */
   conn->bits.ftp_use_epsv = FALSE;
@@ -1887,7 +1911,7 @@ static CURLcode proxy_magic(struct connectdata *conn,
     memset(&http_proxy, 0, sizeof(http_proxy));
     data->req.protop = &http_proxy;
 
-    result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, newhost, newport);
+    result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, newhost, newport, TRUE);
 
     data->req.protop = ftp_save;
 
@@ -1906,6 +1930,22 @@ static CURLcode proxy_magic(struct connectdata *conn,
   return result;
 }
 
+static char *control_address(struct connectdata *conn)
+{
+  /* Returns the control connection IP address.
+     If a proxy tunnel is used, returns the original host name instead, because
+     the effective control connection address is the proxy address,
+     not the ftp host. */
+  if(conn->bits.tunnel_proxy ||
+     conn->proxytype == CURLPROXY_SOCKS5 ||
+     conn->proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
+     conn->proxytype == CURLPROXY_SOCKS4 ||
+     conn->proxytype == CURLPROXY_SOCKS4A)
+    return conn->host.name;
+
+  return conn->ip_addr_str;
+}
+
 static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
                                     int ftpcode)
 {
@@ -1917,6 +1957,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
   unsigned short connectport; /* the local port connect() should use! */
   char *str=&data->state.buffer[4];  /* start on the first letter */
 
+  /* if we come here again, make sure the former name is cleared */
+  Curl_safefree(ftpc->newhost);
+
   if((ftpc->count1 == 0) &&
      (ftpcode == 229)) {
     /* positive EPSV response */
@@ -1925,12 +1968,12 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
       unsigned int num;
       char separator[4];
       ptr++;
-      if(5  == sscanf(ptr, "%c%c%c%u%c",
-                      &separator[0],
-                      &separator[1],
-                      &separator[2],
-                      &num,
-                      &separator[3])) {
+      if(5 == sscanf(ptr, "%c%c%c%u%c",
+                     &separator[0],
+                     &separator[1],
+                     &separator[2],
+                     &num,
+                     &separator[3])) {
         const char sep1 = separator[0];
         int i;
 
@@ -1948,19 +1991,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
         }
         if(ptr) {
           ftpc->newport = (unsigned short)(num & 0xffff);
-
-          if(conn->bits.tunnel_proxy ||
-             conn->proxytype == CURLPROXY_SOCKS5 ||
-             conn->proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
-             conn->proxytype == CURLPROXY_SOCKS4 ||
-             conn->proxytype == CURLPROXY_SOCKS4A)
-            /* proxy tunnel -> use other host info because ip_addr_str is the
-               proxy address not the ftp host */
-            snprintf(ftpc->newhost, sizeof(ftpc->newhost), "%s",
-                     conn->host.name);
-          else
-            /* use the same IP we are already connected to */
-            snprintf(ftpc->newhost, NEWHOST_BUFSIZE, "%s", conn->ip_addr_str);
+          ftpc->newhost = strdup(control_address(conn));
+          if(!ftpc->newhost)
+            return CURLE_OUT_OF_MEMORY;
         }
       }
       else
@@ -1988,8 +2021,8 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
      */
     while(*str) {
       if(6 == sscanf(str, "%d,%d,%d,%d,%d,%d",
-                      &ip[0], &ip[1], &ip[2], &ip[3],
-                      &port[0], &port[1]))
+                     &ip[0], &ip[1], &ip[2], &ip[3],
+                     &port[0], &port[1]))
         break;
       str++;
     }
@@ -2001,26 +2034,19 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
 
     /* we got OK from server */
     if(data->set.ftp_skip_ip) {
-      /* told to ignore the remotely given IP but instead use the one we used
+      /* told to ignore the remotely given IP but instead use the host we used
          for the control connection */
-      infof(data, "Skips %d.%d.%d.%d for data connection, uses %s instead\n",
+      infof(data, "Skip %d.%d.%d.%d for data connection, re-use %s instead\n",
             ip[0], ip[1], ip[2], ip[3],
-            conn->ip_addr_str);
-      if(conn->bits.tunnel_proxy ||
-         conn->proxytype == CURLPROXY_SOCKS5 ||
-         conn->proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
-         conn->proxytype == CURLPROXY_SOCKS4 ||
-         conn->proxytype == CURLPROXY_SOCKS4A)
-        /* proxy tunnel -> use other host info because ip_addr_str is the
-           proxy address not the ftp host */
-        snprintf(ftpc->newhost, sizeof(ftpc->newhost), "%s", conn->host.name);
-      else
-        snprintf(ftpc->newhost, sizeof(ftpc->newhost), "%s",
-                 conn->ip_addr_str);
+            conn->host.name);
+      ftpc->newhost = strdup(control_address(conn));
     }
     else
-      snprintf(ftpc->newhost, sizeof(ftpc->newhost),
-               "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
+      ftpc->newhost = aprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
+
+    if(!ftpc->newhost)
+      return CURLE_OUT_OF_MEMORY;
+
     ftpc->newport = (unsigned short)(((port[0]<<8) + port[1]) & 0xffff);
   }
   else if(ftpc->count1 == 0) {
@@ -2071,9 +2097,8 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
   conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
   result = Curl_connecthost(conn, addr);
 
-  Curl_resolv_unlock(data, addr); /* we're done using this address */
-
   if(result) {
+    Curl_resolv_unlock(data, addr); /* we're done using this address */
     if(ftpc->count1 == 0 && ftpcode == 229)
       return ftp_epsv_disable(conn);
 
@@ -2089,8 +2114,9 @@ static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
 
   if(data->set.verbose)
     /* this just dumps information about this second connection */
-    ftp_pasv_verbose(conn, conn->ip_addr, ftpc->newhost, connectport);
+    ftp_pasv_verbose(conn, addr->addr, ftpc->newhost, connectport);
 
+  Curl_resolv_unlock(data, addr); /* we're done using this address */
   conn->bits.do_more = TRUE;
   state(conn, FTP_STOP); /* this phase is completed */
 
@@ -2105,7 +2131,9 @@ static CURLcode ftp_state_port_resp(struct connectdata *conn,
   ftpport fcmd = (ftpport)ftpc->count1;
   CURLcode result = CURLE_OK;
 
-  if(ftpcode != 200) {
+  /* The FTP spec tells a positive response should have code 200.
+     Be more permissive here to tolerate deviant servers. */
+  if(ftpcode / 100 != 2) {
     /* the command failed */
 
     if(EPRT == fcmd) {
@@ -3269,8 +3297,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
   }
 
   /* now store a copy of the directory we are in */
-  if(ftpc->prevpath)
-    free(ftpc->prevpath);
+  free(ftpc->prevpath);
 
   if(data->set.wildcardmatch) {
     if(data->set.chunk_end && ftpc->file) {
@@ -3319,7 +3346,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
   /* shut down the socket to inform the server we're done */
 
 #ifdef _WIN32_WCE
-  shutdown(conn->sock[SECONDARYSOCKET],2);  /* SD_BOTH */
+  shutdown(conn->sock[SECONDARYSOCKET], 2);  /* SD_BOTH */
 #endif
 
   if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) {
@@ -3342,11 +3369,7 @@ static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
       /* Note that we keep "use" set to TRUE since that (next) connection is
          still requested to use SSL */
     }
-    if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) {
-      Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
-      conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
-      conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
-    }
+    close_secondarysocket(conn);
   }
 
   if(!result && (ftp->transfer == FTPTRANSFER_BODY) && ftpc->ctl_valid &&
@@ -3642,7 +3665,7 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
     if(conn->tunnel_state[SECONDARYSOCKET] == TUNNEL_CONNECT) {
       /* As we're in TUNNEL_CONNECT state now, we know the proxy name and port
          aren't used so we blank their arguments. TODO: make this nicer */
-      result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0);
+      result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0, FALSE);
 
       return result;
     }
@@ -3717,7 +3740,13 @@ static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
         return result;
 
       result = ftp_multi_statemach(conn, &complete);
-      *completep = (int)complete;
+      if(ftpc->wait_data_conn)
+        /* if we reach the end of the FTP state machine here, *complete will be
+           TRUE but so is ftpc->wait_data_conn, which says we need to wait for
+           the data connection and therefore we're not actually complete */
+        *completep = 0;
+      else
+        *completep = (int)complete;
     }
     else {
       /* download */
@@ -3816,7 +3845,7 @@ 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);
+  free(tmp);
 }
 
 static CURLcode init_wc_data(struct connectdata *conn)
@@ -3870,7 +3899,7 @@ static CURLcode init_wc_data(struct connectdata *conn)
   ftp_tmp->parser = Curl_ftp_parselist_data_alloc();
   if(!ftp_tmp->parser) {
     Curl_safefree(wildcard->pattern);
-    Curl_safefree(ftp_tmp);
+    free(ftp_tmp);
     return CURLE_OUT_OF_MEMORY;
   }
 
@@ -4096,7 +4125,7 @@ CURLcode Curl_ftpsendf(struct connectdata *conn,
   result = Curl_convert_to_network(conn->data, s, write_len);
   /* Curl_convert_to_network calls failf if unsuccessful */
   if(result)
-    return(result);
+    return result;
 
   for(;;) {
 #ifdef HAVE_GSSAPI
@@ -4195,14 +4224,10 @@ static CURLcode ftp_disconnect(struct connectdata *conn, bool dead_connection)
   }
 
   freedirs(ftpc);
-  if(ftpc->prevpath) {
-    free(ftpc->prevpath);
-    ftpc->prevpath = NULL;
-  }
-  if(ftpc->server_os) {
-    free(ftpc->server_os);
-    ftpc->server_os = NULL;
-  }
+  free(ftpc->prevpath);
+  ftpc->prevpath = NULL;
+  free(ftpc->server_os);
+  ftpc->server_os = NULL;
 
   Curl_pp_disconnect(pp);
 
@@ -4249,16 +4274,17 @@ CURLcode ftp_parse_url_path(struct connectdata *conn)
       the first condition in the if() right here, is there just in case
       someone decides to set path to NULL one day
    */
-    if(data->state.path &&
-       data->state.path[0] &&
-       (data->state.path[strlen(data->state.path) - 1] != '/') )
-      filename = data->state.path;  /* this is a full file path */
-      /*
+    if(path_to_use[0] &&
+       (path_to_use[strlen(path_to_use) - 1] != '/') )
+      filename = path_to_use;  /* this is a full file path */
+    /*
+      else {
         ftpc->file is not used anywhere other than for operations on a file.
         In other words, never for directory operations.
         So we can safely leave filename as NULL here and use it as a
         argument in dir/file decisions.
-      */
+      }
+    */
     break;
 
   case FTPFILE_SINGLECWD:
@@ -4423,11 +4449,7 @@ static CURLcode ftp_dophase_done(struct connectdata *conn,
     CURLcode result = ftp_do_more(conn, &completed);
 
     if(result) {
-      if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) {
-        /* close the second socket if it was created already */
-        Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
-        conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
-      }
+      close_secondarysocket(conn);
       return result;
     }
   }
index b6bfc02..7495e3e 100644 (file)
--- a/lib/ftp.h
+++ b/lib/ftp.h
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -147,11 +147,10 @@ struct ftp_conn {
   curl_off_t known_filesize; /* file size is different from -1, if wildcard
                                 LIST parsing was done and wc_statemach set
                                 it */
-  /* newhost must be able to hold a full IP-style address in ASCII, which
-     in the IPv6 case means 5*8-1 = 39 letters */
-#define NEWHOST_BUFSIZE 48
-  char newhost[NEWHOST_BUFSIZE]; /* this is the pair to connect the DATA... */
-  unsigned short newport;        /* connection to */
+  /* newhost is the (allocated) IP addr or host name to connect the data
+     connection to */
+  char *newhost;          /* this is the pair to connect the DATA... */
+  unsigned short newport; /* connection to */
 
 };
 
index 9aacad9..abbf76e 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "ftp.h"
 #include "ftplistparser.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"
@@ -191,8 +187,7 @@ struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void)
 
 void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data)
 {
-  if(*pl_data)
-    free(*pl_data);
+  free(*pl_data);
   *pl_data = NULL;
 }
 
@@ -280,26 +275,6 @@ static void PL_ERROR(struct connectdata *conn, CURLcode err)
   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)
 {
@@ -720,9 +695,11 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
           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(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;
@@ -751,7 +728,6 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
         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') {
@@ -767,7 +743,7 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
           break;
         case PL_UNIX_FILENAME_WINDOWSEOL:
           if(c == '\n') {
-            finfo->b_data[parser->item_offset + parser->item_length] = 0;
+            finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
             parser->offsets.filename = parser->item_offset;
             parser->state.UNIX.main = PL_UNIX_FILETYPE;
             result = ftp_pl_insert_finfo(conn, finfo);
@@ -858,9 +834,8 @@ size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
           }
           break;
         case PL_UNIX_SYMLINK_TARGET:
-          parser->item_length ++;
+          parser->item_length++;
           if(c == '\r') {
-            parser->item_length --;
             parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_WINDOWSEOL;
           }
           else if(c == '\n') {
index 96764e2..8128887 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 36215aa..50bb79f 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 0ffdd74..39189cb 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "urldata.h"
 #include "getinfo.h"
 
-#include "curl_memory.h"
 #include "vtls/vtls.h"
 #include "connect.h" /* Curl_getconnectinfo() */
 #include "progress.h"
 
-/* Make this the last #include */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
@@ -58,8 +58,7 @@ CURLcode Curl_initinfo(struct SessionHandle *data)
   info->filetime = -1; /* -1 is an illegal time and thus means unknown */
   info->timecond = FALSE;
 
-  if(info->contenttype)
-    free(info->contenttype);
+  free(info->contenttype);
   info->contenttype = NULL;
 
   info->header_size = 0;
@@ -114,7 +113,7 @@ static CURLcode getinfo_char(struct SessionHandle *data, CURLINFO info,
     break;
 
   default:
-    return CURLE_BAD_FUNCTION_ARGUMENT;
+    return CURLE_UNKNOWN_OPTION;
   }
 
   return CURLE_OK;
@@ -201,7 +200,7 @@ static CURLcode getinfo_long(struct SessionHandle *data, CURLINFO info,
     break;
 
   default:
-    return CURLE_BAD_FUNCTION_ARGUMENT;
+    return CURLE_UNKNOWN_OPTION;
   }
 
   return CURLE_OK;
@@ -254,7 +253,7 @@ static CURLcode getinfo_double(struct SessionHandle *data, CURLINFO info,
     break;
 
   default:
-    return CURLE_BAD_FUNCTION_ARGUMENT;
+    return CURLE_UNKNOWN_OPTION;
   }
 
   return CURLE_OK;
@@ -282,54 +281,69 @@ static CURLcode getinfo_slist(struct SessionHandle *data, CURLINFO info,
     *param_slistp = ptr.to_slist;
     break;
   case CURLINFO_TLS_SESSION:
+  case CURLINFO_TLS_SSL_PTR:
     {
       struct curl_tlssessioninfo **tsip = (struct curl_tlssessioninfo **)
                                           param_slistp;
       struct curl_tlssessioninfo *tsi = &data->tsi;
       struct connectdata *conn = data->easy_conn;
-      unsigned int sockindex = 0;
-      void *internals = NULL;
 
       *tsip = tsi;
-      tsi->backend = CURLSSLBACKEND_NONE;
+      tsi->backend = Curl_ssl_backend();
       tsi->internals = NULL;
 
-      if(!conn)
-        break;
-
-      /* Find the active ("in use") SSL connection, if any */
-      while((sockindex < sizeof(conn->ssl) / sizeof(conn->ssl[0])) &&
-            (!conn->ssl[sockindex].use))
-        sockindex++;
-
-      if(sockindex == sizeof(conn->ssl) / sizeof(conn->ssl[0]))
-        break; /* no SSL session found */
-
-      /* Return the TLS session information from the relevant backend */
-#ifdef USE_SSLEAY
-      internals = conn->ssl[sockindex].ctx;
+      if(conn && tsi->backend != CURLSSLBACKEND_NONE) {
+        unsigned int i;
+        for(i = 0; i < (sizeof(conn->ssl) / sizeof(conn->ssl[0])); ++i) {
+          if(conn->ssl[i].use) {
+#if defined(USE_AXTLS)
+            tsi->internals = (void *)conn->ssl[i].ssl;
+#elif defined(USE_CYASSL)
+            tsi->internals = (void *)conn->ssl[i].handle;
+#elif defined(USE_DARWINSSL)
+            tsi->internals = (void *)conn->ssl[i].ssl_ctx;
+#elif defined(USE_GNUTLS)
+            tsi->internals = (void *)conn->ssl[i].session;
+#elif defined(USE_GSKIT)
+            tsi->internals = (void *)conn->ssl[i].handle;
+#elif defined(USE_MBEDTLS)
+            tsi->internals = (void *)&conn->ssl[i].ssn;
+#elif defined(USE_NSS)
+            tsi->internals = (void *)conn->ssl[i].handle;
+#elif defined(USE_OPENSSL)
+            /* Legacy: CURLINFO_TLS_SESSION must return an SSL_CTX pointer. */
+            tsi->internals = ((info == CURLINFO_TLS_SESSION) ?
+                              (void *)conn->ssl[i].ctx :
+                              (void *)conn->ssl[i].handle);
+#elif defined(USE_POLARSSL)
+            tsi->internals = (void *)&conn->ssl[i].ssn;
+#elif defined(USE_SCHANNEL)
+            tsi->internals = (void *)&conn->ssl[i].ctxt->ctxt_handle;
+#elif defined(USE_SSL)
+#error "SSL backend specific information missing for CURLINFO_TLS_SSL_PTR"
 #endif
-#ifdef USE_GNUTLS
-      internals = conn->ssl[sockindex].session;
-#endif
-#ifdef USE_NSS
-      internals = conn->ssl[sockindex].handle;
-#endif
-#ifdef USE_GSKIT
-      internals = conn->ssl[sockindex].handle;
-#endif
-      if(internals) {
-        tsi->backend = Curl_ssl_backend();
-        tsi->internals = internals;
+            break;
+          }
+        }
       }
-      /* NOTE: For other SSL backends, it is not immediately clear what data
-         to return from 'struct ssl_connect_data'; thus, for now we keep the
-         backend as CURLSSLBACKEND_NONE in those cases, which should be
-         interpreted as "not supported" */
     }
     break;
   default:
-    return CURLE_BAD_FUNCTION_ARGUMENT;
+    return CURLE_UNKNOWN_OPTION;
+  }
+
+  return CURLE_OK;
+}
+
+static CURLcode getinfo_socket(struct SessionHandle *data, CURLINFO info,
+                               curl_socket_t *param_socketp)
+{
+  switch(info) {
+  case CURLINFO_ACTIVESOCKET:
+    *param_socketp = Curl_getconnectinfo(data, NULL);
+    break;
+  default:
+    return CURLE_UNKNOWN_OPTION;
   }
 
   return CURLE_OK;
@@ -342,9 +356,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
   double *param_doublep = NULL;
   char **param_charp = NULL;
   struct curl_slist **param_slistp = NULL;
+  curl_socket_t *param_socketp = NULL;
   int type;
-  /* default return code is to error out! */
-  CURLcode result = CURLE_BAD_FUNCTION_ARGUMENT;
+  CURLcode result = CURLE_UNKNOWN_OPTION;
 
   if(!data)
     return result;
@@ -373,6 +387,11 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
     if(param_slistp)
       result = getinfo_slist(data, info, param_slistp);
     break;
+  case CURLINFO_SOCKET:
+    param_socketp = va_arg(arg, curl_socket_t *);
+    if(param_socketp)
+      result = getinfo_socket(data, info, param_socketp);
+    break;
   default:
     break;
   }
index 3879ff7..4c2c168 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index f3fd065..19f2f5a 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "select.h"
 #include "url.h"
 #include "warnless.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"
@@ -87,16 +83,18 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
   char *sel;
   char *sel_org = NULL;
   ssize_t amount, k;
+  int len;
 
   *done = TRUE; /* unconditionally */
 
   /* Create selector. Degenerate cases: / and /1 => convert to "" */
-  if(strlen(path) <= 2)
+  if(strlen(path) <= 2) {
     sel = (char *)"";
+    len = (int)strlen(sel);
+  }
   else {
     char *newp;
     size_t j, i;
-    int len;
 
     /* Otherwise, drop / and the first character (i.e., item type) ... */
     newp = path;
@@ -117,14 +115,14 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
 
   /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is
      sent, which could be sizeable with long selectors. */
-  k = curlx_uztosz(strlen(sel));
+  k = curlx_uztosz(len);
 
   for(;;) {
     result = Curl_write(conn, sockfd, sel, k, &amount);
     if(!result) { /* Which may not have written it all! */
       result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount);
       if(result) {
-        Curl_safefree(sel_org);
+        free(sel_org);
         return result;
       }
       k -= amount;
@@ -134,7 +132,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
     }
     else {
       failf(data, "Failed sending Gopher request");
-      Curl_safefree(sel_org);
+      free(sel_org);
       return result;
     }
     /* Don't busyloop. The entire loop thing is a work-around as it causes a
@@ -149,7 +147,7 @@ static CURLcode gopher_do(struct connectdata *conn, bool *done)
     Curl_socket_ready(CURL_SOCKET_BAD, sockfd, 100);
   }
 
-  Curl_safefree(sel_org);
+  free(sel_org);
 
   /* We can use Curl_sendf to send the terminal \r\n relatively safely and
      save allocing another string/doing another _write loop. */
index 38bbc4b..501c990 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 4a12e1a..a088978 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include "hash.h"
 #include "llist.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"
@@ -50,7 +46,12 @@ hash_element_dtor(void *user, void *element)
   free(e);
 }
 
-/* return 1 on error, 0 is fine */
+/* Initializes a hash structure.
+ * Return 1 on error, 0 is fine.
+ *
+ * @unittest: 1602
+ * @unittest: 1603
+ */
 int
 Curl_hash_init(struct curl_hash *h,
                int slots,
@@ -93,32 +94,6 @@ Curl_hash_init(struct curl_hash *h,
   }
 }
 
-struct curl_hash *
-Curl_hash_alloc(int slots,
-                hash_function hfunc,
-                comp_function comparator,
-                curl_hash_dtor dtor)
-{
-  struct curl_hash *h;
-
-  if(!slots || !hfunc || !comparator ||!dtor) {
-    return NULL; /* failure */
-  }
-
-  h = malloc(sizeof(struct curl_hash));
-  if(h) {
-    if(Curl_hash_init(h, slots, hfunc, comparator, dtor)) {
-      /* failure */
-      free(h);
-      h = NULL;
-    }
-  }
-
-  return h;
-}
-
-
-
 static struct curl_hash_element *
 mk_hash_element(const void *key, size_t key_len, const void *p)
 {
@@ -149,6 +124,8 @@ mk_hash_element(const void *key, size_t key_len, const void *p)
  * that data is replaced.
  *
  * @unittest: 1305
+ * @unittest: 1602
+ * @unittest: 1603
  */
 void *
 Curl_hash_add(struct curl_hash *h, void *key, size_t key_len, void *p)
@@ -185,7 +162,11 @@ Curl_hash_add(struct curl_hash *h, void *key, size_t key_len, void *p)
   return NULL; /* failure */
 }
 
-/* remove the identified hash entry, returns non-zero on failure */
+/* Remove the identified hash entry.
+ * Returns non-zero on failure.
+ *
+ * @unittest: 1603
+ */
 int Curl_hash_delete(struct curl_hash *h, void *key, size_t key_len)
 {
   struct curl_llist_element *le;
@@ -203,6 +184,10 @@ int Curl_hash_delete(struct curl_hash *h, void *key, size_t key_len)
   return 1;
 }
 
+/* Retrieves a hash element.
+ *
+ * @unittest: 1603
+ */
 void *
 Curl_hash_pick(struct curl_hash *h, void *key, size_t key_len)
 {
@@ -242,8 +227,15 @@ Curl_hash_apply(curl_hash *h, void *user,
 }
 #endif
 
+/* Destroys all the entries in the given hash and resets its attributes,
+ * prepping the given hash for [static|dynamic] deallocation.
+ *
+ * @unittest: 1305
+ * @unittest: 1602
+ * @unittest: 1603
+ */
 void
-Curl_hash_clean(struct curl_hash *h)
+Curl_hash_destroy(struct curl_hash *h)
 {
   int i;
 
@@ -257,6 +249,17 @@ Curl_hash_clean(struct curl_hash *h)
   h->slots = 0;
 }
 
+/* Removes all the entries in the given hash.
+ *
+ * @unittest: 1602
+ */
+void
+Curl_hash_clean(struct curl_hash *h)
+{
+  Curl_hash_clean_with_criterium(h, NULL, NULL);
+}
+
+/* Cleans all entries that pass the comp function criteria. */
 void
 Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
                                int (*comp)(void *, void *))
@@ -276,7 +279,7 @@ Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
       struct curl_hash_element *he = le->ptr;
       lnext = le->next;
       /* ask the callback function if we shall remove this entry or not */
-      if(comp(user, he->ptr)) {
+      if(comp == NULL || comp(user, he->ptr)) {
         Curl_llist_remove(list, le, (void *) h);
         --h->size; /* one less entry in the hash now */
       }
@@ -285,17 +288,6 @@ Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
   }
 }
 
-void
-Curl_hash_destroy(struct curl_hash *h)
-{
-  if(!h)
-    return;
-
-  Curl_hash_clean(h);
-
-  free(h);
-}
-
 size_t Curl_hash_str(void* key, size_t key_length, size_t slots_num)
 {
   const char* key_str = (const char *) key;
@@ -310,16 +302,11 @@ size_t Curl_hash_str(void* key, size_t key_length, size_t slots_num)
   return (h % slots_num);
 }
 
-size_t Curl_str_key_compare(void*k1, size_t key1_len, void*k2, size_t key2_len)
+size_t Curl_str_key_compare(void *k1, size_t key1_len,
+                            void *k2, size_t key2_len)
 {
-  char *key1 = (char *)k1;
-  char *key2 = (char *)k2;
-
-  if(key1_len == key2_len &&
-      *key1 == *key2 &&
-      memcmp(key1, key2, key1_len) == 0) {
+  if((key1_len == key2_len) && !memcmp(k1, k2, key1_len))
     return 1;
-  }
 
   return 0;
 }
index aa935d4..57a17f0 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -74,22 +74,16 @@ int Curl_hash_init(struct curl_hash *h,
                    comp_function comparator,
                    curl_hash_dtor dtor);
 
-struct curl_hash *Curl_hash_alloc(int slots,
-                                  hash_function hfunc,
-                                  comp_function comparator,
-                                  curl_hash_dtor dtor);
-
 void *Curl_hash_add(struct curl_hash *h, void *key, size_t key_len, void *p);
 int Curl_hash_delete(struct curl_hash *h, void *key, size_t key_len);
 void *Curl_hash_pick(struct curl_hash *, void * key, size_t key_len);
 void Curl_hash_apply(struct curl_hash *h, void *user,
                      void (*cb)(void *user, void *ptr));
 int Curl_hash_count(struct curl_hash *h);
+void Curl_hash_destroy(struct curl_hash *h);
 void Curl_hash_clean(struct curl_hash *h);
 void Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
                                     int (*comp)(void *, void *));
-void Curl_hash_destroy(struct curl_hash *h);
-
 size_t Curl_hash_str(void* key, size_t key_length, size_t slots_num);
 size_t Curl_str_key_compare(void*k1, size_t key1_len, void*k2,
                             size_t key2_len);
index dace820..664c774 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #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"
index 3cf8004..c96734a 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "share.h"
 #include "strerror.h"
 #include "url.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"
@@ -123,21 +119,21 @@ CURLcode Curl_addrinfo_callback(struct connectdata *conn,
 CURLcode Curl_async_resolved(struct connectdata *conn,
                              bool *protocol_done)
 {
-  CURLcode code;
+  CURLcode result;
 
   if(conn->async.dns) {
     conn->dns_entry = conn->async.dns;
     conn->async.dns = NULL;
   }
 
-  code = Curl_setup_conn(conn, protocol_done);
+  result = Curl_setup_conn(conn, protocol_done);
 
-  if(code)
+  if(result)
     /* We're not allowed to return failure with memory left allocated
        in the connectdata struct, free those here */
     Curl_disconnect(conn, FALSE); /* close the connection */
 
-  return code;
+  return result;
 }
 
 /*
index 21af8fa..4db9e6b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -22,7 +22,7 @@
 
 #include "curl_setup.h"
 
-#if defined(USE_SSLEAY) || defined(USE_AXTLS) || defined(USE_GSKIT)
+#if defined(USE_OPENSSL) || defined(USE_AXTLS) || defined(USE_GSKIT)
 /* these backends use functions from this file */
 
 #ifdef HAVE_NETINET_IN_H
@@ -43,7 +43,7 @@
  *  "foo.host.com" matches "*.host.com".
  *
  * We use the matching rule described in RFC6125, section 6.4.3.
- * http://tools.ietf.org/html/rfc6125#section-6.4.3
+ * https://tools.ietf.org/html/rfc6125#section-6.4.3
  *
  * In addition: ignore trailing dots in the host names and wildcards, so that
  * the names are used normalized. This is what the browsers do.
@@ -144,4 +144,4 @@ int Curl_cert_hostcheck(const char *match_pattern, const char *hostname)
   return res;
 }
 
-#endif /* SSLEAY or AXTLS or GSKIT */
+#endif /* OPENSSL or AXTLS or GSKIT */
index f4a517a..86e3b96 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2ea0ab6..a4bde56 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
 #include "url.h"
 #include "inet_ntop.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -140,11 +137,7 @@ struct curl_hash *Curl_global_host_cache_init(void)
 void Curl_global_host_cache_dtor(void)
 {
   if(host_cache_initialized) {
-    /* first make sure that any custom "CURLOPT_RESOLVE" names are
-       cleared off */
-    Curl_hostcache_clean(NULL, &hostname_cache);
-    /* then free the remaining hash completely */
-    Curl_hash_clean(&hostname_cache);
+    Curl_hash_destroy(&hostname_cache);
     host_cache_initialized = 0;
   }
 }
@@ -237,7 +230,8 @@ hostcache_timestamp_remove(void *datap, void *hc)
     (struct hostcache_prune_data *) datap;
   struct Curl_dns_entry *c = (struct Curl_dns_entry *) hc;
 
-  return !c->inuse && (data->now - c->timestamp >= data->cache_timeout);
+  return (0 != c->timestamp)
+    && (data->now - c->timestamp >= data->cache_timeout);
 }
 
 /*
@@ -283,40 +277,54 @@ void Curl_hostcache_prune(struct SessionHandle *data)
     Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
 }
 
-/*
- * Check if the entry should be pruned. Assumes a locked cache.
- */
-static int
-remove_entry_if_stale(struct SessionHandle *data, struct Curl_dns_entry *dns)
+#ifdef HAVE_SIGSETJMP
+/* Beware this is a global and unique instance. This is used to store the
+   return address that we can jump back to from inside a signal handler. This
+   is not thread-safe stuff. */
+sigjmp_buf curl_jmpenv;
+#endif
+
+/* lookup address, returns entry if found and not stale */
+static struct Curl_dns_entry *
+fetch_addr(struct connectdata *conn,
+                const char *hostname,
+                int port)
 {
-  struct hostcache_prune_data user;
+  char *entry_id = NULL;
+  struct Curl_dns_entry *dns = NULL;
+  size_t entry_len;
+  struct SessionHandle *data = conn->data;
 
-  if(!dns || (data->set.dns_cache_timeout == -1) || !data->dns.hostcache ||
-     dns->inuse)
-    /* cache forever means never prune, and NULL hostcache means we can't do
-       it, if it still is in use then we leave it */
-    return 0;
+  /* Create an entry id, based upon the hostname and port */
+  entry_id = create_hostcache_id(hostname, port);
+  /* If we can't create the entry id, fail */
+  if(!entry_id)
+    return dns;
 
-  time(&user.now);
-  user.cache_timeout = data->set.dns_cache_timeout;
+  entry_len = strlen(entry_id);
 
-  if(!hostcache_timestamp_remove(&user,dns) )
-    return 0;
+  /* See if its already in our dns cache */
+  dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len+1);
 
-  Curl_hash_clean_with_criterium(data->dns.hostcache,
-                                 (void *) &user,
-                                 hostcache_timestamp_remove);
+  if(dns && (data->set.dns_cache_timeout != -1))  {
+    /* See whether the returned entry is stale. Done before we release lock */
+    struct hostcache_prune_data user;
 
-  return 1;
-}
+    time(&user.now);
+    user.cache_timeout = data->set.dns_cache_timeout;
 
+    if(hostcache_timestamp_remove(&user, dns)) {
+      infof(data, "Hostname in DNS cache was stale, zapped\n");
+      dns = NULL; /* the memory deallocation is being handled by the hash */
+      Curl_hash_delete(data->dns.hostcache, entry_id, entry_len+1);
+    }
+  }
 
-#ifdef HAVE_SIGSETJMP
-/* Beware this is a global and unique instance. This is used to store the
-   return address that we can jump back to from inside a signal handler. This
-   is not thread-safe stuff. */
-sigjmp_buf curl_jmpenv;
-#endif
+  /* free the allocated entry_id again */
+  free(entry_id);
+
+  return dns;
+}
 
 /*
  * Curl_fetch_addr() fetches a 'Curl_dns_entry' already in the DNS cache.
@@ -328,38 +336,27 @@ sigjmp_buf curl_jmpenv;
  * lookups for the same hostname requested by different handles.
  *
  * Returns the Curl_dns_entry entry pointer or NULL if not in the cache.
+ *
+ * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after
+ * use, or we'll leak memory!
  */
 struct Curl_dns_entry *
 Curl_fetch_addr(struct connectdata *conn,
                 const char *hostname,
                 int port)
 {
-  char *entry_id = NULL;
-  struct Curl_dns_entry *dns = NULL;
-  size_t entry_len;
   struct SessionHandle *data = conn->data;
-  int stale;
-
-  /* Create an entry id, based upon the hostname and port */
-  entry_id = create_hostcache_id(hostname, port);
-  /* If we can't create the entry id, fail */
-  if(!entry_id)
-    return dns;
+  struct Curl_dns_entry *dns = NULL;
 
-  entry_len = strlen(entry_id);
+  if(data->share)
+    Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
 
-  /* See if its already in our dns cache */
-  dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len+1);
+  dns = fetch_addr(conn, hostname, port);
 
-  /* free the allocated entry_id again */
-  free(entry_id);
+  if(dns) dns->inuse++; /* we use it! */
 
-  /* See whether the returned entry is stale. Done before we release lock */
-  stale = remove_entry_if_stale(data, dns);
-  if(stale) {
-    infof(data, "Hostname in DNS cache was stale, zapped\n");
-    dns = NULL; /* the memory deallocation is being handled by the hash */
-  }
+  if(data->share)
+    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
 
   return dns;
 }
@@ -398,11 +395,11 @@ Curl_cache_addr(struct SessionHandle *data,
     return NULL;
   }
 
-  dns->inuse = 0;   /* init to not used */
+  dns->inuse = 1;   /* the cache has the first reference */
   dns->addr = addr; /* this is the address(es) */
   time(&dns->timestamp);
   if(dns->timestamp == 0)
-    dns->timestamp = 1;   /* zero indicates that entry isn't in hash table */
+    dns->timestamp = 1;   /* zero indicates CURLOPT_RESOLVE entry */
 
   /* Store the resolved data in our DNS cache. */
   dns2 = Curl_hash_add(data->dns.hostcache, entry_id, entry_len+1,
@@ -458,7 +455,7 @@ int Curl_resolv(struct connectdata *conn,
   if(data->share)
     Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
 
-  dns = Curl_fetch_addr(conn, hostname, port);
+  dns = fetch_addr(conn, hostname, port);
 
   if(dns) {
     infof(data, "Hostname %s was found in DNS cache\n", hostname);
@@ -610,32 +607,6 @@ int Curl_resolv_timeout(struct connectdata *conn,
        we want to wait less than one second we must bail out already now. */
     return CURLRESOLV_TIMEDOUT;
 
-  /*************************************************************
-   * Set signal handler to catch SIGALRM
-   * Store the old value to be able to set it back later!
-   *************************************************************/
-#ifdef HAVE_SIGACTION
-  sigaction(SIGALRM, NULL, &sigact);
-  keep_sigact = sigact;
-  keep_copysig = TRUE; /* yes, we have a copy */
-  sigact.sa_handler = alarmfunc;
-#ifdef SA_RESTART
-  /* HPUX doesn't have SA_RESTART but defaults to that behaviour! */
-  sigact.sa_flags &= ~SA_RESTART;
-#endif
-  /* now set the new struct */
-  sigaction(SIGALRM, &sigact, NULL);
-#else /* HAVE_SIGACTION */
-  /* no sigaction(), revert to the much lamer signal() */
-#ifdef HAVE_SIGNAL
-  keep_sigact = signal(SIGALRM, alarmfunc);
-#endif
-#endif /* HAVE_SIGACTION */
-
-  /* alarm() makes a signal get sent when the timeout fires off, and that
-     will abort system calls */
-  prev_alarm = alarm(curlx_sltoui(timeout/1000L));
-
   /* This allows us to time-out from the name resolver, as the timeout
      will generate a signal and we will siglongjmp() from that here.
      This technique has problems (see alarmfunc).
@@ -648,6 +619,33 @@ int Curl_resolv_timeout(struct connectdata *conn,
     rc = CURLRESOLV_ERROR;
     goto clean_up;
   }
+  else {
+    /*************************************************************
+     * Set signal handler to catch SIGALRM
+     * Store the old value to be able to set it back later!
+     *************************************************************/
+#ifdef HAVE_SIGACTION
+    sigaction(SIGALRM, NULL, &sigact);
+    keep_sigact = sigact;
+    keep_copysig = TRUE; /* yes, we have a copy */
+    sigact.sa_handler = alarmfunc;
+#ifdef SA_RESTART
+    /* HPUX doesn't have SA_RESTART but defaults to that behaviour! */
+    sigact.sa_flags &= ~SA_RESTART;
+#endif
+    /* now set the new struct */
+    sigaction(SIGALRM, &sigact, NULL);
+#else /* HAVE_SIGACTION */
+    /* no sigaction(), revert to the much lamer signal() */
+#ifdef HAVE_SIGNAL
+    keep_sigact = signal(SIGALRM, alarmfunc);
+#endif
+#endif /* HAVE_SIGACTION */
+
+    /* alarm() makes a signal get sent when the timeout fires off, and that
+       will abort system calls */
+    prev_alarm = alarm(curlx_sltoui(timeout/1000L));
+  }
 
 #else
 #ifndef CURLRES_ASYNCH
@@ -719,54 +717,37 @@ clean_up:
  */
 void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns)
 {
-  DEBUGASSERT(dns && (dns->inuse>0));
-
   if(data && data->share)
     Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
 
-  dns->inuse--;
-  /* only free if nobody is using AND it is not in hostcache (timestamp ==
-     0) */
-  if(dns->inuse == 0 && dns->timestamp == 0) {
-    Curl_freeaddrinfo(dns->addr);
-    free(dns);
-  }
+  freednsentry(dns);
 
   if(data && data->share)
     Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
 }
 
 /*
- * File-internal: free a cache dns entry.
+ * File-internal: release cache dns entry reference, free if inuse drops to 0
  */
 static void freednsentry(void *freethis)
 {
-  struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis;
+  struct Curl_dns_entry *dns = (struct Curl_dns_entry *) freethis;
+  DEBUGASSERT(dns && (dns->inuse>0));
 
-  /* mark the entry as not in hostcache */
-  p->timestamp = 0;
-  if(p->inuse == 0) {
-    Curl_freeaddrinfo(p->addr);
-    free(p);
+  dns->inuse--;
+  if(dns->inuse == 0) {
+    Curl_freeaddrinfo(dns->addr);
+    free(dns);
   }
 }
 
 /*
- * Curl_mk_dnscache() creates a new DNS cache and returns the handle for it.
+ * Curl_mk_dnscache() inits a new DNS cache and returns success/failure.
  */
-struct curl_hash *Curl_mk_dnscache(void)
+int Curl_mk_dnscache(struct curl_hash *hash)
 {
-  return Curl_hash_alloc(7, Curl_hash_str, Curl_str_key_compare, freednsentry);
-}
-
-static int hostcache_inuse(void *data, void *hc)
-{
-  struct Curl_dns_entry *c = (struct Curl_dns_entry *) hc;
-
-  if(c->inuse == 1)
-    Curl_resolv_unlock(data, c);
-
-  return 1; /* free all entries */
+  return Curl_hash_init(hash, 7, Curl_hash_str, Curl_str_key_compare,
+                        freednsentry);
 }
 
 /*
@@ -779,11 +760,13 @@ static int hostcache_inuse(void *data, void *hc)
 void Curl_hostcache_clean(struct SessionHandle *data,
                           struct curl_hash *hash)
 {
-  /* Entries added to the hostcache with the CURLOPT_RESOLVE function are
-   * still present in the cache with the inuse counter set to 1. Detect them
-   * and cleanup!
-   */
-  Curl_hash_clean_with_criterium(hash, data, hostcache_inuse);
+  if(data && data->share)
+    Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
+
+  Curl_hash_clean(hash);
+
+  if(data && data->share)
+    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
 }
 
 
@@ -798,18 +781,52 @@ CURLcode Curl_loadhostpairs(struct SessionHandle *data)
     if(!hostp->data)
       continue;
     if(hostp->data[0] == '-') {
-      /* TODO: mark an entry for removal */
+      char *entry_id;
+      size_t entry_len;
+
+      if(2 != sscanf(hostp->data + 1, "%255[^:]:%d", hostname, &port)) {
+        infof(data, "Couldn't parse CURLOPT_RESOLVE removal entry '%s'!\n",
+              hostp->data);
+        continue;
+      }
+
+      /* Create an entry id, based upon the hostname and port */
+      entry_id = create_hostcache_id(hostname, port);
+      /* If we can't create the entry id, fail */
+      if(!entry_id) {
+        return CURLE_OUT_OF_MEMORY;
+      }
+
+      entry_len = strlen(entry_id);
+
+      if(data->share)
+        Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
+
+      /* delete entry, ignore if it didn't exist */
+      Curl_hash_delete(data->dns.hostcache, entry_id, entry_len+1);
+
+      if(data->share)
+        Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
+
+      /* free the allocated entry_id again */
+      free(entry_id);
     }
-    else if(3 == sscanf(hostp->data, "%255[^:]:%d:%255s", hostname, &port,
-                        address)) {
+    else {
       struct Curl_dns_entry *dns;
       Curl_addrinfo *addr;
       char *entry_id;
       size_t entry_len;
 
+      if(3 != sscanf(hostp->data, "%255[^:]:%d:%255s", hostname, &port,
+                     address)) {
+        infof(data, "Couldn't parse CURLOPT_RESOLVE entry '%s'!\n",
+              hostp->data);
+        continue;
+      }
+
       addr = Curl_str2addr(address, port);
       if(!addr) {
-        infof(data, "Resolve %s found illegal!\n", hostp->data);
+        infof(data, "Address in '%s' found illegal!\n", hostp->data);
         continue;
       }
 
@@ -832,9 +849,16 @@ CURLcode Curl_loadhostpairs(struct SessionHandle *data)
       /* free the allocated entry_id again */
       free(entry_id);
 
-      if(!dns)
+      if(!dns) {
         /* if not in the cache already, put this host in the cache */
         dns = Curl_cache_addr(data, addr, hostname, port);
+        if(dns) {
+          dns->timestamp = 0; /* mark as added by CURLOPT_RESOLVE */
+          /* release the returned reference; the cache itself will keep the
+           * entry alive: */
+          dns->inuse--;
+        }
+      }
       else
         /* this is a duplicate, free it again */
         Curl_freeaddrinfo(addr);
index e1e880e..37ccd96 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -65,11 +65,10 @@ void Curl_global_host_cache_dtor(void);
 
 struct Curl_dns_entry {
   Curl_addrinfo *addr;
-  /* timestamp == 0 -- entry not in hostcache
-     timestamp != 0 -- entry is in hostcache */
+  /* timestamp == 0 -- CURLOPT_RESOLVE entry, doesn't timeout */
   time_t timestamp;
-  long inuse;      /* use-counter, make very sure you decrease this
-                      when you're done using the address you received */
+  /* use-counter, use Curl_resolv_unlock to release reference */
+  long inuse;
 };
 
 /*
@@ -125,8 +124,8 @@ void Curl_resolv_unlock(struct SessionHandle *data,
 /* for debugging purposes only: */
 void Curl_scan_cache_used(void *user, void *ptr);
 
-/* make a new dns cache and return the handle */
-struct curl_hash *Curl_mk_dnscache(void);
+/* init a new dns cache and return success */
+int Curl_mk_dnscache(struct curl_hash *hash);
 
 /* prune old entries from the DNS cache */
 void Curl_hostcache_prune(struct SessionHandle *data);
@@ -175,6 +174,9 @@ const char *Curl_printable_address(const Curl_addrinfo *ip,
  * Curl_fetch_addr() fetches a 'Curl_dns_entry' already in the DNS cache.
  *
  * Returns the Curl_dns_entry entry pointer or NULL if not in the cache.
+ *
+ * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after
+ * use, or we'll leak memory!
  */
 struct Curl_dns_entry *
 Curl_fetch_addr(struct connectdata *conn,
index 3a05d10..25c4529 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "strerror.h"
 #include "url.h"
 #include "inet_pton.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
index bb72391..2f58376 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "url.h"
 #include "inet_pton.h"
 #include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
+
 /* The last #include file should be: */
 #include "memdebug.h"
 
@@ -62,7 +60,6 @@
  **********************************************************************/
 #ifdef CURLRES_IPV6
 
-
 #if defined(CURLDEBUG) && defined(HAVE_GETNAMEINFO)
 /* These are strictly for memory tracing and are using the same style as the
  * family otherwise present in memdebug.c. I put these ones here since they
@@ -127,6 +124,7 @@ bool Curl_ipvalid(struct connectdata *conn)
 {
   if(conn->ip_version == CURL_IPRESOLVE_V6)
     return Curl_ipv6works();
+
   return TRUE;
 }
 
@@ -172,13 +170,13 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
   char *sbufptr = NULL;
   char addrbuf[128];
   int pf;
+#if !defined(CURL_DISABLE_VERBOSE_STRINGS)
   struct SessionHandle *data = conn->data;
+#endif
 
   *waitp = 0; /* synchronous response only */
 
-  /*
-   * Check if a limited name resolve has been requested.
-   */
+  /* Check if a limited name resolve has been requested */
   switch(conn->ip_version) {
   case CURL_IPRESOLVE_V4:
     pf = PF_INET;
@@ -209,6 +207,7 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
     snprintf(sbuf, sizeof(sbuf), "%d", port);
     sbufptr=sbuf;
   }
+
   error = Curl_getaddrinfo_ex(hostname, sbufptr, &hints, &res);
   if(error) {
     infof(data, "getaddrinfo(3) failed for %s:%d\n", hostname, port);
@@ -220,5 +219,5 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
   return res;
 }
 #endif /* CURLRES_SYNCH */
-#endif /* CURLRES_IPV6 */
 
+#endif /* CURLRES_IPV6 */
index 4ad3c63..db4c82f 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "share.h"
 #include "strerror.h"
 #include "url.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"
index ee0a9a4..b85ff0d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -63,7 +63,6 @@
 #include "share.h"
 #include "hostip.h"
 #include "http.h"
-#include "curl_memory.h"
 #include "select.h"
 #include "parsedate.h" /* for the week day and month names */
 #include "strtoofft.h"
 #include "http_proxy.h"
 #include "warnless.h"
 #include "non-ascii.h"
-#include "bundles.h"
+#include "conncache.h"
 #include "pipeline.h"
 #include "http2.h"
 #include "connect.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
@@ -155,12 +153,18 @@ CURLcode Curl_http_setup_conn(struct connectdata *conn)
 {
   /* allocate the HTTP-specific struct for the SessionHandle, only to survive
      during this request */
+  struct HTTP *http;
   DEBUGASSERT(conn->data->req.protop == NULL);
 
-  conn->data->req.protop = calloc(1, sizeof(struct HTTP));
-  if(!conn->data->req.protop)
+  http = calloc(1, sizeof(struct HTTP));
+  if(!http)
     return CURLE_OUT_OF_MEMORY;
 
+  conn->data->req.protop = http;
+
+  Curl_http2_setup_conn(conn);
+  Curl_http2_setup_req(conn->data);
+
   return CURLE_OK;
 }
 
@@ -303,7 +307,7 @@ static CURLcode http_output_basic(struct connectdata *conn, bool proxy)
   if(!authorization)
     return CURLE_REMOTE_ACCESS_DENIED;
 
-  Curl_safefree(*userp);
+  free(*userp);
   *userp = aprintf("%sAuthorization: Basic %s\r\n",
                    proxy?"Proxy-":"",
                    authorization);
@@ -347,82 +351,6 @@ static bool pickoneauth(struct auth *pick)
   return picked;
 }
 
-/* whether to complete request (for authentication) in current connection */
-static bool complete_request(struct connectdata *conn,
-                             curl_off_t remaining_bytes)
-{
-#if defined(USE_NTLM) || defined(USE_SPNEGO)
-  struct SessionHandle *data = conn->data;
-  bool have_ntlm_or_negotiate = FALSE;
-  bool auth_started = FALSE;
-
-  /* don't reset connection when we're in NTLM or Negotiate authentication;
-   * those authenticate the connection - creating a new connection breaks the
-   * authentication.
-   */
-
-#if defined(USE_NTLM)
-  /* proxy NTLM authentication */
-  if((data->state.authproxy.picked == CURLAUTH_NTLM) ||
-      (data->state.authproxy.picked == CURLAUTH_NTLM_WB)) {
-    have_ntlm_or_negotiate = TRUE;
-    auth_started = auth_started
-                 || (conn->proxyntlm.state != NTLMSTATE_NONE);
-  }
-
-  /* normal NTLM authentication */
-  if((data->state.authhost.picked == CURLAUTH_NTLM) ||
-      (data->state.authhost.picked == CURLAUTH_NTLM_WB)) {
-    have_ntlm_or_negotiate = TRUE;
-    auth_started = auth_started
-                 || (conn->ntlm.state != NTLMSTATE_NONE);
-  }
-#endif
-
-#if defined(USE_SPNEGO)
-  /* proxy Negotiate authentication */
-  if(data->state.authproxy.picked == CURLAUTH_NEGOTIATE) {
-    have_ntlm_or_negotiate = TRUE;
-    auth_started = auth_started
-                 || (data->state.proxyneg.state != GSS_AUTHNONE);
-  }
-
-  /* normal Negotiate authentication */
-  if(data->state.authhost.picked == CURLAUTH_NEGOTIATE) {
-    have_ntlm_or_negotiate = TRUE;
-    auth_started = auth_started
-                 || (data->state.negotiate.state != GSS_AUTHNONE);
-  }
-#endif
-
-  if(have_ntlm_or_negotiate) {
-    if(remaining_bytes < 2000 || auth_started) {
-      /* NTLM/Negotiation has started *OR* there is just a little (<2K)
-       * data left to send, keep on sending.
-       */
-
-      /* rewind data when completely done sending! */
-      if(!conn->bits.authneg) {
-        conn->bits.rewindaftersend = TRUE;
-        infof(data, "Rewind stream after send\n");
-      }
-
-      return TRUE;
-    }
-
-    infof(data, "NTLM/Negotiate send, close instead of sending %"
-          CURL_FORMAT_CURL_OFF_T " bytes\n",
-          remaining_bytes);
-  }
-#else
-  /* unused parameters: */
-  (void)conn;
-  (void)remaining_bytes;
-#endif
-
-  return FALSE;
-}
-
 /*
  * Curl_http_perhapsrewind()
  *
@@ -481,8 +409,8 @@ static CURLcode http_perhapsrewind(struct connectdata *conn)
     /* figure out how much data we are expected to send */
     switch(data->set.httpreq) {
     case HTTPREQ_POST:
-      if(data->set.postfieldsize != -1)
-        expectsend = data->set.postfieldsize;
+      if(data->state.infilesize != -1)
+        expectsend = data->state.infilesize;
       else if(data->set.postfields)
         expectsend = (curl_off_t)strlen(data->set.postfields);
       break;
@@ -501,12 +429,36 @@ static CURLcode http_perhapsrewind(struct connectdata *conn)
   conn->bits.rewindaftersend = FALSE; /* default */
 
   if((expectsend == -1) || (expectsend > bytessent)) {
-    if(conn->bits.close)
-      /* this is already marked to get closed */
-      return CURLE_OK;
+#if defined(USE_NTLM)
+    /* There is still data left to send */
+    if((data->state.authproxy.picked == CURLAUTH_NTLM) ||
+       (data->state.authhost.picked == CURLAUTH_NTLM) ||
+       (data->state.authproxy.picked == CURLAUTH_NTLM_WB) ||
+       (data->state.authhost.picked == CURLAUTH_NTLM_WB)) {
+      if(((expectsend - bytessent) < 2000) ||
+         (conn->ntlm.state != NTLMSTATE_NONE) ||
+         (conn->proxyntlm.state != NTLMSTATE_NONE)) {
+        /* The NTLM-negotiation has started *OR* there is just a little (<2K)
+           data left to send, keep on sending. */
+
+        /* rewind data when completely done sending! */
+        if(!conn->bits.authneg) {
+          conn->bits.rewindaftersend = TRUE;
+          infof(data, "Rewind stream after send\n");
+        }
 
-    if(complete_request(conn, (curl_off_t)(expectsend - bytessent)))
-      return CURLE_OK;
+        return CURLE_OK;
+      }
+
+      if(conn->bits.close)
+        /* this is already marked to get closed */
+        return CURLE_OK;
+
+      infof(data, "NTLM send, close instead of sending %"
+            CURL_FORMAT_CURL_OFF_T " bytes\n",
+            (curl_off_t)(expectsend - bytessent));
+    }
+#endif
 
     /* This is not NTLM or many bytes left to send: close */
     connclose(conn, "Mid-auth HTTP and much data left to send");
@@ -517,7 +469,7 @@ static CURLcode http_perhapsrewind(struct connectdata *conn)
   }
 
   if(bytessent)
-    /* we rewind now at once since we already sent something */
+    /* we rewind now at once since if we already sent something */
     return Curl_readrewind(conn);
 
   return CURLE_OK;
@@ -615,12 +567,12 @@ output_auth_headers(struct connectdata *conn,
 {
   const char *auth = NULL;
   CURLcode result = CURLE_OK;
-#if defined(USE_SPNEGO) || !defined(CURL_DISABLE_VERBOSE_STRINGS)
+#if !defined(CURL_DISABLE_VERBOSE_STRINGS) || defined(USE_SPNEGO)
   struct SessionHandle *data = conn->data;
 #endif
 #ifdef USE_SPNEGO
-  struct negotiatedata *negdata = proxy?
-    &data->state.proxyneg:&data->state.negotiate;
+  struct negotiatedata *negdata = proxy ?
+    &data->state.proxyneg : &data->state.negotiate;
 #endif
 
 #ifdef CURL_DISABLE_CRYPTO_AUTH
@@ -733,7 +685,7 @@ Curl_http_output_auth(struct connectdata *conn,
 
   if((conn->bits.httpproxy && conn->bits.proxy_user_passwd) ||
      conn->bits.user_passwd)
-    /* continue please */ ;
+    /* continue please */;
   else {
     authhost->done = TRUE;
     authproxy->done = TRUE;
@@ -834,14 +786,13 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
   while(*auth) {
 #ifdef USE_SPNEGO
     if(checkprefix("Negotiate", auth)) {
-      int neg;
       *availp |= CURLAUTH_NEGOTIATE;
       authp->avail |= CURLAUTH_NEGOTIATE;
 
       if(authp->picked == CURLAUTH_NEGOTIATE) {
         if(negdata->state == GSS_AUTHSENT || negdata->state == GSS_AUTHNONE) {
-          neg = Curl_input_negotiate(conn, proxy, auth);
-          if(neg == 0) {
+          CURLcode result = Curl_input_negotiate(conn, proxy, auth);
+          if(!result) {
             DEBUGASSERT(!data->req.newurl);
             data->req.newurl = strdup(data->change.url);
             if(!data->req.newurl)
@@ -1050,8 +1001,8 @@ static size_t readmoredata(char *buffer,
       /* move backup data into focus and continue on that */
       http->postdata = http->backup.postdata;
       http->postsize = http->backup.postsize;
-      conn->fread_func = http->backup.fread_func;
-      conn->fread_in = http->backup.fread_in;
+      conn->data->state.fread_func = http->backup.fread_func;
+      conn->data->state.in = http->backup.fread_in;
 
       http->sending++; /* move one step up */
 
@@ -1082,6 +1033,16 @@ Curl_send_buffer *Curl_add_buffer_init(void)
 }
 
 /*
+ * Curl_add_buffer_free() frees all associated resources.
+ */
+void Curl_add_buffer_free(Curl_send_buffer *buff)
+{
+  if(buff) /* deal with NULL input */
+    free(buff->buffer);
+  free(buff);
+}
+
+/*
  * Curl_add_buffer_send() sends a header buffer and frees all associated
  * memory.  Body data may be appended to the header data if desired.
  *
@@ -1127,14 +1088,12 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
   /* Curl_convert_to_network calls failf if unsuccessful */
   if(result) {
     /* conversion failed, free memory and return to the caller */
-    if(in->buffer)
-      free(in->buffer);
-    free(in);
+    Curl_add_buffer_free(in);
     return result;
   }
 
 
-  if(conn->handler->flags & PROTOPT_SSL) {
+  if((conn->handler->flags & PROTOPT_SSL) && conn->httpversion != 20) {
     /* We never send more than CURL_MAX_WRITE_SIZE bytes in one single chunk
        when we speak HTTPS, as if only a fraction of it is sent now, this data
        needs to fit into the normal read-callback buffer later on and that
@@ -1198,14 +1157,14 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
         ptr = in->buffer + amount;
 
         /* backup the currently set pointers */
-        http->backup.fread_func = conn->fread_func;
-        http->backup.fread_in = conn->fread_in;
+        http->backup.fread_func = conn->data->state.fread_func;
+        http->backup.fread_in = conn->data->state.in;
         http->backup.postdata = http->postdata;
         http->backup.postsize = http->postsize;
 
         /* set the new pointers for the request-sending */
-        conn->fread_func = (curl_read_callback)readmoredata;
-        conn->fread_in = (void *)conn;
+        conn->data->state.fread_func = (curl_read_callback)readmoredata;
+        conn->data->state.in = (void *)conn;
         http->postdata = ptr;
         http->postsize = (curl_off_t)size;
 
@@ -1228,12 +1187,10 @@ CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
         */
         return CURLE_SEND_ERROR;
       else
-        conn->writechannel_inuse = FALSE;
+        Curl_pipeline_leave_write(conn);
     }
   }
-  if(in->buffer)
-    free(in->buffer);
-  free(in);
+  Curl_add_buffer_free(in);
 
   return result;
 }
@@ -1256,8 +1213,7 @@ CURLcode Curl_add_bufferf(Curl_send_buffer *in, const char *fmt, ...)
     return result;
   }
   /* If we failed, we cleanup the whole buffer and return error */
-  if(in->buffer)
-    free(in->buffer);
+  free(in->buffer);
   free(in);
   return CURLE_OUT_OF_MEMORY;
 }
@@ -1437,8 +1393,9 @@ static CURLcode https_connecting(struct connectdata *conn, bool *done)
 }
 #endif
 
-#if defined(USE_SSLEAY) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
-    defined(USE_DARWINSSL) || defined(USE_POLARSSL) || defined(USE_NSS)
+#if defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
+    defined(USE_DARWINSSL) || defined(USE_POLARSSL) || defined(USE_NSS) || \
+    defined(USE_MBEDTLS)
 /* This function is for OpenSSL, GnuTLS, darwinssl, schannel and polarssl only.
    It should be made to query the generic SSL layer instead. */
 static int https_getsock(struct connectdata *conn,
@@ -1476,7 +1433,7 @@ static int https_getsock(struct connectdata *conn,
   return GETSOCK_BLANK;
 }
 #endif /* USE_SSL */
-#endif /* USE_SSLEAY || USE_GNUTLS || USE_SCHANNEL */
+#endif /* USE_OPENSSL || USE_GNUTLS || USE_SCHANNEL */
 
 /*
  * Curl_http_done() gets called from Curl_done() after a single HTTP request
@@ -1487,19 +1444,26 @@ CURLcode Curl_http_done(struct connectdata *conn,
                         CURLcode status, bool premature)
 {
   struct SessionHandle *data = conn->data;
-  struct HTTP *http =data->req.protop;
+  struct HTTP *http = data->req.protop;
+#ifdef USE_NGHTTP2
+  struct http_conn *httpc = &conn->proto.httpc;
+#endif
 
   Curl_unencode_cleanup(conn);
 
 #ifdef USE_SPNEGO
   if(data->state.proxyneg.state == GSS_AUTHSENT ||
-      data->state.negotiate.state == GSS_AUTHSENT)
+     data->state.negotiate.state == GSS_AUTHSENT) {
+    /* add forbid re-use if http-code != 401/407 as a WA only needed for
+     * 401/407 that signal auth failure (empty) otherwise state will be RECV
+     * with current code */
+    if((data->req.httpcode != 401) && (data->req.httpcode != 407))
+      connclose(conn, "Negotiate transfer completed");
     Curl_cleanup_negotiate(data);
+  }
 #endif
 
   /* set the proper values (possibly modified on POST) */
-  conn->fread_func = data->set.fread_func; /* restore */
-  conn->fread_in = data->set.in; /* restore */
   conn->seek_func = data->set.seek_func; /* restore */
   conn->seek_client = data->set.seek_client; /* restore */
 
@@ -1507,13 +1471,32 @@ CURLcode Curl_http_done(struct connectdata *conn,
     return CURLE_OK;
 
   if(http->send_buffer) {
-    Curl_send_buffer *buff = http->send_buffer;
-
-    free(buff->buffer);
-    free(buff);
+    Curl_add_buffer_free(http->send_buffer);
     http->send_buffer = NULL; /* clear the pointer */
   }
 
+#ifdef USE_NGHTTP2
+  if(http->header_recvbuf) {
+    DEBUGF(infof(data, "free header_recvbuf!!\n"));
+    Curl_add_buffer_free(http->header_recvbuf);
+    http->header_recvbuf = NULL; /* clear the pointer */
+    Curl_add_buffer_free(http->trailer_recvbuf);
+    http->trailer_recvbuf = NULL; /* clear the pointer */
+    if(http->push_headers) {
+      /* if they weren't used and then freed before */
+      for(; http->push_headers_used > 0; --http->push_headers_used) {
+        free(http->push_headers[http->push_headers_used - 1]);
+      }
+      free(http->push_headers);
+      http->push_headers = NULL;
+    }
+  }
+  if(http->stream_id) {
+    nghttp2_session_set_stream_user_data(httpc->h2, http->stream_id, 0);
+    http->stream_id = 0;
+  }
+#endif
+
   if(HTTPREQ_POST_FORM == data->set.httpreq) {
     data->req.bytecount = http->readbytecount + http->writebytecount;
 
@@ -1560,11 +1543,13 @@ CURLcode Curl_http_done(struct connectdata *conn,
 static bool use_http_1_1plus(const struct SessionHandle *data,
                              const struct connectdata *conn)
 {
-  return ((data->set.httpversion >= CURL_HTTP_VERSION_1_1) ||
-         ((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
-          ((conn->httpversion == 11) ||
-           ((conn->httpversion != 10) &&
-            (data->state.httpversion != 10))))) ? TRUE : FALSE;
+  if((data->state.httpversion == 10) || (conn->httpversion == 10))
+    return FALSE;
+  if((data->set.httpversion == CURL_HTTP_VERSION_1_0) &&
+     (conn->httpversion <= 10))
+    return FALSE;
+  return ((data->set.httpversion == CURL_HTTP_VERSION_NONE) ||
+          (data->set.httpversion >= CURL_HTTP_VERSION_1_1));
 }
 
 /* check and possibly add an Expect: header */
@@ -1576,10 +1561,11 @@ static CURLcode expect100(struct SessionHandle *data,
   const char *ptr;
   data->state.expect100header = FALSE; /* default to false unless it is set
                                           to TRUE below */
-  if(use_http_1_1plus(data, conn)) {
-    /* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
-       100-continue to the headers which actually speeds up post operations
-       (as there is one packet coming back from the web server) */
+  if(use_http_1_1plus(data, conn) &&
+     (conn->httpversion != 20)) {
+    /* if not doing HTTP 1.0 or version 2, or disabled explicitly, we add an
+       Expect: 100-continue to the headers which actually speeds up post
+       operations (as there is one packet coming back from the web server) */
     ptr = Curl_checkheaders(conn, "Expect:");
     if(ptr) {
       data->state.expect100header =
@@ -1719,7 +1705,13 @@ CURLcode Curl_add_timecondition(struct SessionHandle *data,
   const struct tm *tm;
   char *buf = data->state.buffer;
   struct tm keeptime;
-  CURLcode result = Curl_gmtime(data->set.timevalue, &keeptime);
+  CURLcode result;
+
+  if(data->set.timecondition == CURL_TIMECOND_NONE)
+    /* no condition was asked for */
+    return CURLE_OK;
+
+  result = Curl_gmtime(data->set.timevalue, &keeptime);
   if(result) {
     failf(data, "Invalid TIMEVALUE");
     return result;
@@ -1745,8 +1737,9 @@ CURLcode Curl_add_timecondition(struct SessionHandle *data,
            tm->tm_sec);
 
   switch(data->set.timecondition) {
-  case CURL_TIMECOND_IFMODSINCE:
   default:
+    break;
+  case CURL_TIMECOND_IFMODSINCE:
     result = Curl_add_bufferf(req_buffer,
                               "If-Modified-Since: %s\r\n", buf);
     break;
@@ -1798,7 +1791,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
   if(conn->httpversion < 20) { /* unless the connection is re-used and already
                                   http2 */
     switch(conn->negnpn) {
-    case NPN_HTTP2:
+    case CURL_HTTP_VERSION_2:
+      conn->httpversion = 20; /* we know we're on HTTP/2 now */
       result = Curl_http2_init(conn);
       if(result)
         return result;
@@ -1811,7 +1805,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
       if(result)
         return result;
       break;
-    case NPN_HTTP1_1:
+    case CURL_HTTP_VERSION_1_1:
       /* continue with HTTP/1.1 when explicitly requested */
       break;
     default:
@@ -1829,10 +1823,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
   http = data->req.protop;
 
   if(!data->state.this_is_a_follow) {
-    /* this is not a followed location, get the original host name */
-    if(data->state.first_host)
-      /* Free to avoid leaking memory on multiple requests*/
-      free(data->state.first_host);
+    /* Free to avoid leaking memory on multiple requests*/
+    free(data->state.first_host);
 
     data->state.first_host = strdup(conn->host.name);
     if(!data->state.first_host)
@@ -1876,7 +1868,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
      it might have been used in the proxy connect, but if we have got a header
      with the user-agent string specified, we erase the previously made string
      here. */
-  if(Curl_checkheaders(conn, "User-Agent:") && conn->allocptr.uagent) {
+  if(Curl_checkheaders(conn, "User-Agent:")) {
     free(conn->allocptr.uagent);
     conn->allocptr.uagent=NULL;
   }
@@ -2019,7 +2011,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
     }
 #endif
 
-    conn->allocptr.host = NULL;
+    if(strcmp("Host:", ptr)) {
+      conn->allocptr.host = aprintf("%s\r\n", ptr);
+      if(!conn->allocptr.host)
+        return CURLE_OUT_OF_MEMORY;
+    }
+    else
+      /* when clearing the header */
+      conn->allocptr.host = NULL;
   }
   else {
     /* When building Host: headers, we must put the host name within
@@ -2178,8 +2177,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
               BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
 
             size_t actuallyread =
-              data->set.fread_func(data->state.buffer, 1, readthisamountnow,
-                                   data->set.in);
+              data->state.fread_func(data->state.buffer, 1, readthisamountnow,
+                                     data->state.in);
 
             passed += actuallyread;
             if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
@@ -2214,8 +2213,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
     if(((httpreq == HTTPREQ_GET) || (httpreq == HTTPREQ_HEAD)) &&
        !Curl_checkheaders(conn, "Range:")) {
       /* if a line like this was already allocated, free the previous one */
-      if(conn->allocptr.rangeline)
-        free(conn->allocptr.rangeline);
+      free(conn->allocptr.rangeline);
       conn->allocptr.rangeline = aprintf("Range: bytes=%s\r\n",
                                          data->state.range);
     }
@@ -2223,8 +2221,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
             !Curl_checkheaders(conn, "Content-Range:")) {
 
       /* if a line like this was already allocated, free the previous one */
-      if(conn->allocptr.rangeline)
-        free(conn->allocptr.rangeline);
+      free(conn->allocptr.rangeline);
 
       if(data->set.set_resume_from < 0) {
         /* Upload resume was asked for, but we don't know the size of the
@@ -2288,20 +2285,20 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
     Curl_add_bufferf(req_buffer,
                      "%s" /* ftp typecode (;type=x) */
                      " HTTP/%s\r\n" /* HTTP version */
+                     "%s" /* host */
                      "%s" /* proxyuserpwd */
                      "%s" /* userpwd */
                      "%s" /* range */
                      "%s" /* user agent */
-                     "%s" /* host */
                      "%s" /* accept */
                      "%s" /* TE: */
                      "%s" /* accept-encoding */
                      "%s" /* referer */
-                     "%s" /* Proxy-Connection */
                      "%s",/* transfer-encoding */
 
                      ftp_typecode,
                      httpstring,
+                     (conn->allocptr.host?conn->allocptr.host:""),
                      conn->allocptr.proxyuserpwd?
                      conn->allocptr.proxyuserpwd:"",
                      conn->allocptr.userpwd?conn->allocptr.userpwd:"",
@@ -2311,7 +2308,6 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
                       *data->set.str[STRING_USERAGENT] &&
                       conn->allocptr.uagent)?
                      conn->allocptr.uagent:"",
-                     (conn->allocptr.host?conn->allocptr.host:""),
                      http->p_accept?http->p_accept:"",
                      conn->allocptr.te?conn->allocptr.te:"",
                      (data->set.str[STRING_ENCODING] &&
@@ -2320,27 +2316,15 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
                      conn->allocptr.accept_encoding:"",
                      (data->change.referer && conn->allocptr.ref)?
                      conn->allocptr.ref:"" /* Referer: <data> */,
-                     (conn->bits.httpproxy &&
-                      !conn->bits.tunnel_proxy &&
-                      !Curl_checkProxyheaders(conn, "Proxy-Connection:"))?
-                     "Proxy-Connection: Keep-Alive\r\n":"",
                      te
       );
 
-  /*
-   * Free userpwd for Negotiate/NTLM. Cannot reuse as it is associated with
-   * the connection and shouldn't be repeated over it either.
-   */
-  switch (data->state.authhost.picked) {
-  case CURLAUTH_NEGOTIATE:
-  case CURLAUTH_NTLM:
-  case CURLAUTH_NTLM_WB:
-    Curl_safefree(conn->allocptr.userpwd);
-    break;
-  }
+  /* clear userpwd to avoid re-using credentials from re-used connections */
+  Curl_safefree(conn->allocptr.userpwd);
 
   /*
-   * Same for proxyuserpwd
+   * Free proxyuserpwd for Negotiate/NTLM. Cannot reuse as it is associated
+   * with the connection and shouldn't be repeated over it either.
    */
   switch (data->state.authproxy.picked) {
   case CURLAUTH_NEGOTIATE:
@@ -2355,7 +2339,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
 
   if(!(conn->handler->flags&PROTOPT_SSL) &&
      conn->httpversion != 20 &&
-     (data->set.httpversion == CURL_HTTP_VERSION_2_0)) {
+     (data->set.httpversion == CURL_HTTP_VERSION_2)) {
     /* append HTTP2 upgrade magic stuff to the HTTP request if it isn't done
        over SSL */
     result = Curl_http2_request_upgrade(req_buffer, conn);
@@ -2416,11 +2400,9 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
   }
 #endif
 
-  if(data->set.timecondition) {
-    result = Curl_add_timecondition(data, req_buffer);
-    if(result)
-      return result;
-  }
+  result = Curl_add_timecondition(data, req_buffer);
+  if(result)
+    return result;
 
   result = Curl_add_custom_headers(conn, FALSE, req_buffer);
   if(result)
@@ -2460,14 +2442,14 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
 
     /* Get the currently set callback function pointer and store that in the
        form struct since we might want the actual user-provided callback later
-       on. The conn->fread_func pointer itself will be changed for the
+       on. The data->set.fread_func pointer itself will be changed for the
        multipart case to the function that returns a multipart formatted
        stream. */
-    http->form.fread_func = conn->fread_func;
+    http->form.fread_func = data->state.fread_func;
 
     /* Set the read function to read from the generated form data */
-    conn->fread_func = (curl_read_callback)Curl_FormReader;
-    conn->fread_in = &http->form;
+    data->state.fread_func = (curl_read_callback)Curl_FormReader;
+    data->state.in = &http->form;
 
     http->sending = HTTPSEND_BODY;
 
@@ -2587,8 +2569,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
       postsize = 0;
     else {
       /* figure out the size of the postfields */
-      postsize = (data->set.postfieldsize != -1)?
-        data->set.postfieldsize:
+      postsize = (data->state.infilesize != -1)?
+        data->state.infilesize:
         (data->set.postfields? (curl_off_t)strlen(data->set.postfields):-1);
     }
 
@@ -2685,8 +2667,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
 
         http->sending = HTTPSEND_BODY;
 
-        conn->fread_func = (curl_read_callback)readmoredata;
-        conn->fread_in = (void *)conn;
+        data->state.fread_func = (curl_read_callback)readmoredata;
+        data->state.in = (void *)conn;
 
         /* set the upload size to the progress meter */
         Curl_pgrsSetUploadSize(data, http->postsize);
@@ -2711,7 +2693,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
           return result;
       }
 
-      else if(data->set.postfieldsize) {
+      else if(data->state.infilesize) {
         /* set the upload size to the progress meter */
         Curl_pgrsSetUploadSize(data, postsize?postsize:-1);
 
@@ -3102,6 +3084,19 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
         }
       }
 
+      /* At this point we have some idea about the fate of the connection.
+         If we are closing the connection it may result auth failure. */
+#if defined(USE_NTLM)
+      if(conn->bits.close &&
+         (((data->req.httpcode == 401) &&
+           (conn->ntlm.state == NTLMSTATE_TYPE2)) ||
+          ((data->req.httpcode == 407) &&
+           (conn->proxyntlm.state == NTLMSTATE_TYPE2)))) {
+        infof(data, "Connection closure while negotiating auth (HTTP 1.0?)\n");
+        data->state.authproblem = TRUE;
+      }
+#endif
+
       /*
        * When all the headers have been parsed, see if we should give
        * up and return an error.
@@ -3198,6 +3193,16 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
          */
         if(data->set.opt_no_body)
           *stop_reading = TRUE;
+#ifndef CURL_DISABLE_RTSP
+        else if((conn->handler->protocol & CURLPROTO_RTSP) &&
+                (data->set.rtspreq == RTSPREQ_DESCRIBE) &&
+                (k->size <= -1))
+          /* Respect section 4.4 of rfc2326: If the Content-Length header is
+             absent, a length 0 must be assumed.  It will prevent libcurl from
+             hanging on DECRIBE request that got refused for whatever
+             reason */
+          *stop_reading = TRUE;
+#endif
         else {
           /* If we know the expected size of this document, we set the
              maximum download size to the size of the expected
@@ -3379,28 +3384,23 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
         }
         else if(conn->httpversion == 20 ||
                 (k->upgr101 == UPGR101_REQUESTED && k->httpcode == 101)) {
-          /* Don't enable pipelining for HTTP/2 or upgraded connection. For
-             HTTP/2, we do not support multiplexing. In general, requests
-             cannot be pipelined in upgraded connection, since it is now
-             different protocol. */
-          DEBUGF(infof(data,
-                       "HTTP 2 or upgraded connection do not support "
-                       "pipelining for now\n"));
+          DEBUGF(infof(data, "HTTP/2 found, allow multiplexing\n"));
+
+          /* HTTP/2 cannot blacklist multiplexing since it is a core
+             functionality of the protocol */
+          conn->bundle->multiuse = BUNDLE_MULTIPLEX;
         }
         else if(conn->httpversion >= 11 &&
                 !conn->bits.close) {
-          struct connectbundle *cb_ptr;
-
           /* If HTTP version is >= 1.1 and connection is persistent
              server supports pipelining. */
           DEBUGF(infof(data,
                        "HTTP 1.1 or later with persistent connection, "
                        "pipelining supported\n"));
           /* Activate pipelining if needed */
-          cb_ptr = conn->bundle;
-          if(cb_ptr) {
+          if(conn->bundle) {
             if(!Curl_pipeline_site_blacklisted(data, conn))
-              cb_ptr->server_supports_pipelining = TRUE;
+              conn->bundle->multiuse = BUNDLE_PIPELINING;
           }
         }
 
@@ -3479,14 +3479,17 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
       }
     }
     else if(checkprefix("Server:", k->p)) {
-      char *server_name = Curl_copy_header_value(k->p);
-
-      /* Turn off pipelining if the server version is blacklisted */
-      if(conn->bundle && conn->bundle->server_supports_pipelining) {
-        if(Curl_pipeline_server_blacklisted(data, server_name))
-          conn->bundle->server_supports_pipelining = FALSE;
+      if(conn->httpversion < 20) {
+        /* only do this for non-h2 servers */
+        char *server_name = Curl_copy_header_value(k->p);
+
+        /* Turn off pipelining if the server version is blacklisted  */
+        if(conn->bundle && (conn->bundle->multiuse == BUNDLE_PIPELINING)) {
+          if(Curl_pipeline_server_blacklisted(data, server_name))
+            conn->bundle->multiuse = BUNDLE_NO_MULTIUSE;
+        }
+        free(server_name);
       }
-      Curl_safefree(server_name);
     }
     else if((conn->httpversion == 10) &&
             conn->bits.httpproxy &&
@@ -3583,14 +3586,6 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
           k->auto_decoding = GZIP;
           start += 6;
         }
-        else if(checkprefix("compress", start)) {
-          k->auto_decoding = COMPRESS;
-          start += 8;
-        }
-        else if(checkprefix("x-compress", start)) {
-          k->auto_decoding = COMPRESS;
-          start += 10;
-        }
         else
           /* unknown! */
           break;
@@ -3599,8 +3594,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
 
     }
     else if(checkprefix("Content-Encoding:", k->p) &&
-            (data->set.str[STRING_ENCODING] ||
-             conn->httpversion == 20)) {
+            data->set.str[STRING_ENCODING]) {
       /*
        * Process Content-Encoding. Look for the values: identity,
        * gzip, deflate, compress, x-gzip and x-compress. x-gzip and
@@ -3623,9 +3617,6 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
       else if(checkprefix("gzip", start)
               || checkprefix("x-gzip", start))
         k->auto_decoding = GZIP;
-      else if(checkprefix("compress", start)
-              || checkprefix("x-compress", start))
-        k->auto_decoding = COMPRESS;
     }
     else if(checkprefix("Content-Range:", k->p)) {
       /* Content-Range: bytes [num]-
@@ -3691,7 +3682,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
 
       result = Curl_http_input_auth(conn, proxy, auth);
 
-      Curl_safefree(auth);
+      free(auth);
 
       if(result)
         return result;
index 907755a..5000df4 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -60,6 +60,7 @@ struct Curl_send_buffer {
 typedef struct Curl_send_buffer Curl_send_buffer;
 
 Curl_send_buffer *Curl_add_buffer_init(void);
+void Curl_add_buffer_free(Curl_send_buffer *buff);
 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,
@@ -152,42 +153,70 @@ struct HTTP {
 
   void *send_buffer; /* used if the request couldn't be sent in one chunk,
                         points to an allocated send_buffer struct */
+
+#ifdef USE_NGHTTP2
+  /*********** for HTTP/2 we store stream-local data here *************/
+  int32_t stream_id; /* stream we are interested in */
+
+  bool bodystarted;
+  /* We store non-final and final response headers here, per-stream */
+  Curl_send_buffer *header_recvbuf;
+  size_t nread_header_recvbuf; /* number of bytes in header_recvbuf fed into
+                                  upper layer */
+  Curl_send_buffer *trailer_recvbuf;
+  int status_code; /* HTTP status code */
+  const uint8_t *pausedata; /* pointer to data received in on_data_chunk */
+  size_t pauselen; /* the number of bytes left in data */
+  bool closed; /* TRUE on HTTP2 stream close */
+  uint32_t error_code; /* HTTP/2 error code */
+
+  char *mem;     /* points to a buffer in memory to store received data */
+  size_t len;    /* size of the buffer 'mem' points to */
+  size_t memlen; /* size of data copied to mem */
+
+  const uint8_t *upload_mem; /* points to a buffer to read from */
+  size_t upload_len; /* size of the buffer 'upload_mem' points to */
+  curl_off_t upload_left; /* number of bytes left to upload */
+
+  char **push_headers;       /* allocated array */
+  size_t push_headers_used;  /* number of entries filled in */
+  size_t push_headers_alloc; /* number of entries allocated */
+#endif
 };
 
 typedef int (*sending)(void); /* Curl_send */
 typedef int (*recving)(void); /* Curl_recv */
 
+#ifdef USE_NGHTTP2
+/* h2 settings for this connection */
+struct h2settings {
+  uint32_t max_concurrent_streams;
+  bool enable_push;
+};
+#endif
+
+
 struct http_conn {
 #ifdef USE_NGHTTP2
 #define H2_BINSETTINGS_LEN 80
   nghttp2_session *h2;
   uint8_t binsettings[H2_BINSETTINGS_LEN];
   size_t  binlen; /* length of the binsettings data */
-  char *mem;     /* points to a buffer in memory to store */
-  size_t len;    /* size of the buffer 'mem' points to */
-  bool bodystarted;
   sending send_underlying; /* underlying send Curl_send callback */
   recving recv_underlying; /* underlying recv Curl_recv callback */
-  bool closed; /* TRUE on HTTP2 stream close */
-  Curl_send_buffer *header_recvbuf; /* store response headers.  We
-                                       store non-final and final
-                                       response headers into it. */
-  size_t nread_header_recvbuf; /* number of bytes in header_recvbuf
-                                  fed into upper layer */
-  int32_t stream_id; /* stream we are interested in */
-  const uint8_t *data; /* pointer to data chunk, received in
-                          on_data_chunk */
-  size_t datalen; /* the number of bytes left in data */
   char *inbuf; /* buffer to receive data from underlying socket */
+  size_t inbuflen; /* number of bytes filled in inbuf */
+  size_t nread_inbuf; /* number of bytes read from in inbuf */
   /* We need separate buffer for transmission and reception because we
      may call nghttp2_session_send() after the
      nghttp2_session_mem_recv() but mem buffer is still not full. In
      this case, we wrongly sends the content of mem buffer if we share
      them for both cases. */
-  const uint8_t *upload_mem; /* points to a buffer to read from */
-  size_t upload_len; /* size of the buffer 'upload_mem' points to */
-  size_t upload_left; /* number of bytes left to upload */
-  int status_code; /* HTTP status code */
+  int32_t pause_stream_id; /* stream ID which paused
+                              nghttp2_session_mem_recv */
+
+  /* this is a hash of all individual streams (SessionHandle structs) */
+  struct h2settings settings;
 #else
   int unused; /* prevent a compiler warning */
 #endif
index dac9ab4..91abbf0 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "curl_setup.h"
 
 #ifdef USE_NGHTTP2
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include <nghttp2/nghttp2.h>
 #include "urldata.h"
 #include "http2.h"
 #include "http.h"
 #include "sendf.h"
 #include "curl_base64.h"
-#include "curl_memory.h"
 #include "rawstr.h"
 #include "multiif.h"
+#include "conncache.h"
+#include "url.h"
+#include "connect.h"
 
-/* include memdebug.h last */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
-#if (NGHTTP2_VERSION_NUM < 0x000600)
+#define MIN(x,y) ((x)<(y)?(x):(y))
+
+#if (NGHTTP2_VERSION_NUM < 0x010000)
 #error too old nghttp2 version, upgrade!
 #endif
 
+/*
+ * Curl_http2_init_state() is called when the easy handle is created and
+ * allows for HTTP/2 specific init of state.
+ */
+void Curl_http2_init_state(struct UrlState *state)
+{
+  state->stream_weight = NGHTTP2_DEFAULT_WEIGHT;
+}
+
+/*
+ * Curl_http2_init_userset() is called when the easy handle is created and
+ * allows for HTTP/2 specific user-set fields.
+ */
+void Curl_http2_init_userset(struct UserDefined *set)
+{
+  set->stream_weight = NGHTTP2_DEFAULT_WEIGHT;
+}
+
 static int http2_perform_getsock(const struct connectdata *conn,
                                  curl_socket_t *sock, /* points to
                                                          numsocks
@@ -50,7 +71,7 @@ static int http2_perform_getsock(const struct connectdata *conn,
                                                          sockets */
                                  int numsocks)
 {
-  const struct http_conn *httpc = &conn->proto.httpc;
+  const struct http_conn *c = &conn->proto.httpc;
   int bitmap = GETSOCK_BLANK;
   (void)numsocks;
 
@@ -58,10 +79,10 @@ static int http2_perform_getsock(const struct connectdata *conn,
      because of renegotiation. */
   sock[0] = conn->sock[FIRSTSOCKET];
 
-  if(nghttp2_session_want_read(httpc->h2))
+  if(nghttp2_session_want_read(c->h2))
     bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
 
-  if(nghttp2_session_want_write(httpc->h2))
+  if(nghttp2_session_want_write(c->h2))
     bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);
 
   return bitmap;
@@ -78,23 +99,56 @@ static int http2_getsock(struct connectdata *conn,
 static CURLcode http2_disconnect(struct connectdata *conn,
                                  bool dead_connection)
 {
-  struct http_conn *httpc = &conn->proto.httpc;
+  struct HTTP *http = conn->data->req.protop;
+  struct http_conn *c = &conn->proto.httpc;
   (void)dead_connection;
 
-  infof(conn->data, "HTTP/2 DISCONNECT starts now\n");
-
-  nghttp2_session_del(httpc->h2);
+  DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT starts now\n"));
 
-  Curl_safefree(httpc->header_recvbuf->buffer);
-  Curl_safefree(httpc->header_recvbuf);
+  nghttp2_session_del(c->h2);
+  Curl_safefree(c->inbuf);
 
-  Curl_safefree(httpc->inbuf);
+  if(http) {
+    Curl_add_buffer_free(http->header_recvbuf);
+    http->header_recvbuf = NULL; /* clear the pointer */
+    Curl_add_buffer_free(http->trailer_recvbuf);
+    http->trailer_recvbuf = NULL; /* clear the pointer */
+    for(; http->push_headers_used > 0; --http->push_headers_used) {
+      free(http->push_headers[http->push_headers_used - 1]);
+    }
+    free(http->push_headers);
+    http->push_headers = NULL;
+  }
 
-  infof(conn->data, "HTTP/2 DISCONNECT done\n");
+  DEBUGF(infof(conn->data, "HTTP/2 DISCONNECT done\n"));
 
   return CURLE_OK;
 }
 
+/* called from Curl_http_setup_conn */
+void Curl_http2_setup_req(struct SessionHandle *data)
+{
+  struct HTTP *http = data->req.protop;
+
+  http->nread_header_recvbuf = 0;
+  http->bodystarted = FALSE;
+  http->status_code = -1;
+  http->pausedata = NULL;
+  http->pauselen = 0;
+  http->error_code = NGHTTP2_NO_ERROR;
+  http->closed = FALSE;
+  http->mem = data->state.buffer;
+  http->len = BUFSIZE;
+  http->memlen = 0;
+}
+
+/* called from Curl_http_setup_conn */
+void Curl_http2_setup_conn(struct connectdata *conn)
+{
+  conn->proto.httpc.settings.max_concurrent_streams =
+    DEFAULT_MAX_CONCURRENT_STREAMS;
+}
+
 /*
  * HTTP2 handler interface. This isn't added to the general list of protocols
  * but will be used at run-time when the protocol is dynamically switched from
@@ -104,7 +158,7 @@ const struct Curl_handler Curl_handler_http2 = {
   "HTTP2",                              /* scheme */
   ZERO_NULL,                            /* setup_connection */
   Curl_http,                            /* do_it */
-  ZERO_NULL,                            /* done */
+  Curl_http_done,                       /* done */
   ZERO_NULL,                            /* do_more */
   ZERO_NULL,                            /* connect_it */
   ZERO_NULL,                            /* connecting */
@@ -124,7 +178,7 @@ const struct Curl_handler Curl_handler_http2_ssl = {
   "HTTP2",                              /* scheme */
   ZERO_NULL,                            /* setup_connection */
   Curl_http,                            /* do_it */
-  ZERO_NULL,                            /* done */
+  Curl_http_done,                       /* done */
   ZERO_NULL,                            /* do_more */
   ZERO_NULL,                            /* connect_it */
   ZERO_NULL,                            /* connecting */
@@ -160,15 +214,15 @@ static ssize_t send_callback(nghttp2_session *h2,
                              void *userp)
 {
   struct connectdata *conn = (struct connectdata *)userp;
-  struct http_conn *httpc = &conn->proto.httpc;
+  struct http_conn *c = &conn->proto.httpc;
   ssize_t written;
   CURLcode result = CURLE_OK;
 
   (void)h2;
   (void)flags;
 
-  written = ((Curl_send*)httpc->send_underlying)(conn, FIRSTSOCKET,
-                                                 data, length, &result);
+  written = ((Curl_send*)c->send_underlying)(conn, FIRSTSOCKET,
+                                             data, length, &result);
 
   if(result == CURLE_AGAIN) {
     return NGHTTP2_ERR_WOULDBLOCK;
@@ -185,25 +239,226 @@ static ssize_t send_callback(nghttp2_session *h2,
   return written;
 }
 
+
+/* We pass a pointer to this struct in the push callback, but the contents of
+   the struct are hidden from the user. */
+struct curl_pushheaders {
+  struct SessionHandle *data;
+  const nghttp2_push_promise *frame;
+};
+
+/*
+ * push header access function. Only to be used from within the push callback
+ */
+char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num)
+{
+  /* Verify that we got a good easy handle in the push header struct, mostly to
+     detect rubbish input fast(er). */
+  if(!h || !GOOD_EASY_HANDLE(h->data))
+    return NULL;
+  else {
+    struct HTTP *stream = h->data->req.protop;
+    if(num < stream->push_headers_used)
+      return stream->push_headers[num];
+  }
+  return NULL;
+}
+
+/*
+ * push header access function. Only to be used from within the push callback
+ */
+char *curl_pushheader_byname(struct curl_pushheaders *h, const char *header)
+{
+  /* Verify that we got a good easy handle in the push header struct,
+     mostly to detect rubbish input fast(er). Also empty header name
+     is just a rubbish too. We have to allow ":" at the beginning of
+     the header, but header == ":" must be rejected. If we have ':' in
+     the middle of header, it could be matched in middle of the value,
+     this is because we do prefix match.*/
+  if(!h || !GOOD_EASY_HANDLE(h->data) || !header || !header[0] ||
+     Curl_raw_equal(header, ":") || strchr(header + 1, ':'))
+    return NULL;
+  else {
+    struct HTTP *stream = h->data->req.protop;
+    size_t len = strlen(header);
+    size_t i;
+    for(i=0; i<stream->push_headers_used; i++) {
+      if(!strncmp(header, stream->push_headers[i], len)) {
+        /* sub-match, make sure that it is followed by a colon */
+        if(stream->push_headers[i][len] != ':')
+          continue;
+        return &stream->push_headers[i][len+1];
+      }
+    }
+  }
+  return NULL;
+}
+
+static CURL *duphandle(struct SessionHandle *data)
+{
+  struct SessionHandle *second = curl_easy_duphandle(data);
+  if(second) {
+    /* setup the request struct */
+    struct HTTP *http = calloc(1, sizeof(struct HTTP));
+    if(!http) {
+      (void)Curl_close(second);
+      second = NULL;
+    }
+    else {
+      second->req.protop = http;
+      http->header_recvbuf = Curl_add_buffer_init();
+      if(!http->header_recvbuf) {
+        free(http);
+        (void)Curl_close(second);
+        second = NULL;
+      }
+      else {
+        Curl_http2_setup_req(second);
+        second->state.stream_weight = data->state.stream_weight;
+      }
+    }
+  }
+  return second;
+}
+
+
+static int push_promise(struct SessionHandle *data,
+                        struct connectdata *conn,
+                        const nghttp2_push_promise *frame)
+{
+  int rv;
+  DEBUGF(infof(data, "PUSH_PROMISE received, stream %u!\n",
+               frame->promised_stream_id));
+  if(data->multi->push_cb) {
+    struct HTTP *stream;
+    struct HTTP *newstream;
+    struct curl_pushheaders heads;
+    CURLMcode rc;
+    struct http_conn *httpc;
+    size_t i;
+    /* clone the parent */
+    struct SessionHandle *newhandle = duphandle(data);
+    if(!newhandle) {
+      infof(data, "failed to duplicate handle\n");
+      rv = 1; /* FAIL HARD */
+      goto fail;
+    }
+
+    heads.data = data;
+    heads.frame = frame;
+    /* ask the application */
+    DEBUGF(infof(data, "Got PUSH_PROMISE, ask application!\n"));
+
+    stream = data->req.protop;
+    if(!stream) {
+      failf(data, "Internal NULL stream!\n");
+      rv = 1;
+      goto fail;
+    }
+
+    rv = data->multi->push_cb(data, newhandle,
+                              stream->push_headers_used, &heads,
+                              data->multi->push_userp);
+
+    /* free the headers again */
+    for(i=0; i<stream->push_headers_used; i++)
+      free(stream->push_headers[i]);
+    free(stream->push_headers);
+    stream->push_headers = NULL;
+
+    if(rv) {
+      /* denied, kill off the new handle again */
+      (void)Curl_close(newhandle);
+      goto fail;
+    }
+
+    newstream = newhandle->req.protop;
+    newstream->stream_id = frame->promised_stream_id;
+    newhandle->req.maxdownload = -1;
+    newhandle->req.size = -1;
+
+    /* approved, add to the multi handle and immediately switch to PERFORM
+       state with the given connection !*/
+    rc = Curl_multi_add_perform(data->multi, newhandle, conn);
+    if(rc) {
+      infof(data, "failed to add handle to multi\n");
+      Curl_close(newhandle);
+      rv = 1;
+      goto fail;
+    }
+
+    httpc = &conn->proto.httpc;
+    nghttp2_session_set_stream_user_data(httpc->h2,
+                                         frame->promised_stream_id, newhandle);
+  }
+  else {
+    DEBUGF(infof(data, "Got PUSH_PROMISE, ignore it!\n"));
+    rv = 1;
+  }
+  fail:
+  return rv;
+}
+
 static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
                          void *userp)
 {
   struct connectdata *conn = (struct connectdata *)userp;
-  struct http_conn *c = &conn->proto.httpc;
+  struct http_conn *httpc = &conn->proto.httpc;
+  struct SessionHandle *data_s = NULL;
+  struct HTTP *stream = NULL;
+  static int lastStream = -1;
   int rv;
   size_t left, ncopy;
+  int32_t stream_id = frame->hd.stream_id;
+
+  if(!stream_id) {
+    /* stream ID zero is for connection-oriented stuff */
+    if(frame->hd.type == NGHTTP2_SETTINGS) {
+      uint32_t max_conn = httpc->settings.max_concurrent_streams;
+      DEBUGF(infof(conn->data, "Got SETTINGS\n"));
+      httpc->settings.max_concurrent_streams =
+        nghttp2_session_get_remote_settings(
+          session, NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS);
+      httpc->settings.enable_push =
+        nghttp2_session_get_remote_settings(
+          session, NGHTTP2_SETTINGS_ENABLE_PUSH);
+      DEBUGF(infof(conn->data, "MAX_CONCURRENT_STREAMS == %d\n",
+                   httpc->settings.max_concurrent_streams));
+      DEBUGF(infof(conn->data, "ENABLE_PUSH == %s\n",
+                   httpc->settings.enable_push?"TRUE":"false"));
+      if(max_conn != httpc->settings.max_concurrent_streams) {
+        /* only signal change if the value actually changed */
+        infof(conn->data,
+              "Connection state changed (MAX_CONCURRENT_STREAMS updated)!\n");
+        Curl_multi_connchanged(conn->data->multi);
+      }
+    }
+    return 0;
+  }
+  data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+  if(lastStream != stream_id) {
+    lastStream = stream_id;
+  }
+  if(!data_s) {
+    DEBUGF(infof(conn->data,
+                 "No SessionHandle associated with stream: %x\n",
+                 stream_id));
+    return 0;
+  }
+
+  stream = data_s->req.protop;
+  if(!stream)
+    return NGHTTP2_ERR_CALLBACK_FAILURE;
+
+  DEBUGF(infof(data_s, "on_frame_recv() header %x stream %x\n",
+               frame->hd.type, stream_id));
 
-  (void)session;
-  (void)frame;
-  infof(conn->data, "on_frame_recv() was called with header %x\n",
-        frame->hd.type);
   switch(frame->hd.type) {
   case NGHTTP2_DATA:
-    /* If body started, then receiving DATA is illegal. */
-    if(!c->bodystarted) {
+    /* If body started on this stream, then receiving DATA is illegal. */
+    if(!stream->bodystarted) {
       rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                     frame->hd.stream_id,
-                                     NGHTTP2_PROTOCOL_ERROR);
+                                     stream_id, NGHTTP2_PROTOCOL_ERROR);
 
       if(nghttp2_is_fatal(rv)) {
         return NGHTTP2_ERR_CALLBACK_FAILURE;
@@ -211,77 +466,80 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
     }
     break;
   case NGHTTP2_HEADERS:
-    if(frame->headers.cat == NGHTTP2_HCAT_REQUEST)
-      break;
-
-    if(c->bodystarted) {
-      /* Only valid HEADERS after body started is trailer header,
-         which is not fully supported in this code.  If HEADERS is not
-         trailer, then it is a PROTOCOL_ERROR. */
-      if((frame->hd.flags & NGHTTP2_FLAG_END_STREAM) == 0) {
-        rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                       frame->hd.stream_id,
-                                       NGHTTP2_PROTOCOL_ERROR);
-
-        if(nghttp2_is_fatal(rv)) {
-          return NGHTTP2_ERR_CALLBACK_FAILURE;
-        }
-      }
+    if(stream->bodystarted) {
+      /* Only valid HEADERS after body started is trailer HEADERS.  We
+         buffer them in on_header callback. */
       break;
     }
 
-    if(c->status_code == -1) {
-      /* No :status header field means PROTOCOL_ERROR. */
-      rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                     frame->hd.stream_id,
-                                     NGHTTP2_PROTOCOL_ERROR);
-
-      if(nghttp2_is_fatal(rv)) {
-        return NGHTTP2_ERR_CALLBACK_FAILURE;
-      }
-
-      break;
-    }
+    /* nghttp2 guarantees that :status is received, and we store it to
+       stream->status_code */
+    DEBUGASSERT(stream->status_code != -1);
 
     /* Only final status code signals the end of header */
-    if(c->status_code / 100 != 1) {
-      c->bodystarted = TRUE;
+    if(stream->status_code / 100 != 1) {
+      stream->bodystarted = TRUE;
+      stream->status_code = -1;
     }
 
-    c->status_code = -1;
+    Curl_add_buffer(stream->header_recvbuf, "\r\n", 2);
 
-    Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
+    left = stream->header_recvbuf->size_used - stream->nread_header_recvbuf;
+    ncopy = MIN(stream->len, left);
 
-    left = c->header_recvbuf->size_used - c->nread_header_recvbuf;
-    ncopy = c->len < left ? c->len : left;
+    memcpy(&stream->mem[stream->memlen],
+           stream->header_recvbuf->buffer + stream->nread_header_recvbuf,
+           ncopy);
+    stream->nread_header_recvbuf += ncopy;
 
-    memcpy(c->mem, c->header_recvbuf->buffer + c->nread_header_recvbuf, ncopy);
-    c->nread_header_recvbuf += ncopy;
+    DEBUGF(infof(data_s, "Store %zu bytes headers from stream %u at %p\n",
+                 ncopy, stream_id, stream->mem));
 
-    c->mem += ncopy;
-    c->len -= ncopy;
+    stream->len -= ncopy;
+    stream->memlen += ncopy;
+
+    data_s->state.drain++;
+    {
+      /* get the pointer from userp again since it was re-assigned above */
+      struct connectdata *conn_s = (struct connectdata *)userp;
+
+      /* if we receive data for another handle, wake that up */
+      if(conn_s->data != data_s)
+        Curl_expire(data_s, 1);
+    }
     break;
   case NGHTTP2_PUSH_PROMISE:
-    rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                   frame->push_promise.promised_stream_id,
-                                   NGHTTP2_CANCEL);
-    if(nghttp2_is_fatal(rv)) {
-      return rv;
+    rv = push_promise(data_s, conn, &frame->push_promise);
+    if(rv) { /* deny! */
+      rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
+                                     frame->push_promise.promised_stream_id,
+                                     NGHTTP2_CANCEL);
+      if(nghttp2_is_fatal(rv)) {
+        return rv;
+      }
     }
     break;
+  default:
+    DEBUGF(infof(conn->data, "Got frame type %x for stream %u!\n",
+                 frame->hd.type, stream_id));
+    break;
   }
   return 0;
 }
 
 static int on_invalid_frame_recv(nghttp2_session *session,
                                  const nghttp2_frame *frame,
-                                 uint32_t error_code, void *userp)
+                                 int lib_error_code, void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  (void)session;
-  (void)frame;
-  infof(conn->data, "on_invalid_frame_recv() was called, error_code = %d\n",
-        error_code);
+  struct SessionHandle *data_s = NULL;
+  (void)userp;
+
+  data_s = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id);
+  if(data_s) {
+    DEBUGF(infof(data_s,
+                 "on_invalid_frame_recv() was called, error=%d:%s\n",
+                 lib_error_code, nghttp2_strerror(lib_error_code)));
+  }
   return 0;
 }
 
@@ -289,30 +547,53 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
                               int32_t stream_id,
                               const uint8_t *data, size_t len, void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  struct http_conn *c = &conn->proto.httpc;
+  struct HTTP *stream;
+  struct SessionHandle *data_s;
   size_t nread;
+  struct connectdata *conn = (struct connectdata *)userp;
   (void)session;
   (void)flags;
   (void)data;
-  infof(conn->data, "on_data_chunk_recv() "
-        "len = %u, stream = %x\n", len, stream_id);
 
-  if(stream_id != c->stream_id) {
-    return 0;
-  }
+  DEBUGASSERT(stream_id); /* should never be a zero stream ID here */
+
+  /* get the stream from the hash based on Stream ID */
+  data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+  if(!data_s)
+    /* Receiving a Stream ID not in the hash should not happen, this is an
+       internal error more than anything else! */
+    return NGHTTP2_ERR_CALLBACK_FAILURE;
+
+  stream = data_s->req.protop;
+  if(!stream)
+    return NGHTTP2_ERR_CALLBACK_FAILURE;
 
-  nread = c->len < len ? c->len : len;
-  memcpy(c->mem, data, nread);
+  nread = MIN(stream->len, len);
+  memcpy(&stream->mem[stream->memlen], data, nread);
 
-  c->mem += nread;
-  c->len -= nread;
+  stream->len -= nread;
+  stream->memlen += nread;
 
-  infof(conn->data, "%zu data written\n", nread);
+  data_s->state.drain++;
+
+  /* if we receive data for another handle, wake that up */
+  if(conn->data != data_s)
+    Curl_expire(data_s, 1); /* TODO: fix so that this can be set to 0 for
+                               immediately? */
+
+  DEBUGF(infof(data_s, "%zu data received for stream %u "
+               "(%zu left in buffer %p, total %zu)\n",
+               nread, stream_id,
+               stream->len, stream->mem,
+               stream->memlen));
 
   if(nread < len) {
-    c->data = data + nread;
-    c->datalen = len - nread;
+    stream->pausedata = data + nread;
+    stream->pauselen = len - nread;
+    DEBUGF(infof(data_s, "NGHTTP2_ERR_PAUSE - %zu bytes out of buffer"
+                 ", stream %u\n",
+                 len - nread, stream_id));
+    data_s->easy_conn->proto.httpc.pause_stream_id = stream_id;
     return NGHTTP2_ERR_PAUSE;
   }
   return 0;
@@ -322,59 +603,112 @@ static int before_frame_send(nghttp2_session *session,
                              const nghttp2_frame *frame,
                              void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  (void)session;
-  (void)frame;
-  infof(conn->data, "before_frame_send() was called\n");
+  struct SessionHandle *data_s;
+  (void)userp;
+
+  data_s = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id);
+  if(data_s) {
+    DEBUGF(infof(data_s, "before_frame_send() was called\n"));
+  }
+
   return 0;
 }
 static int on_frame_send(nghttp2_session *session,
                          const nghttp2_frame *frame,
                          void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  (void)session;
-  (void)frame;
-  infof(conn->data, "on_frame_send() was called\n");
+  struct SessionHandle *data_s;
+  (void)userp;
+
+  data_s = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id);
+  if(data_s) {
+    DEBUGF(infof(data_s, "on_frame_send() was called, length = %zd\n",
+                 frame->hd.length));
+  }
   return 0;
 }
 static int on_frame_not_send(nghttp2_session *session,
                              const nghttp2_frame *frame,
                              int lib_error_code, void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  (void)session;
-  (void)frame;
-  infof(conn->data, "on_frame_not_send() was called, lib_error_code = %d\n",
-        lib_error_code);
+  struct SessionHandle *data_s;
+  (void)userp;
+
+  data_s = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id);
+  if(data_s) {
+    DEBUGF(infof(data_s,
+                 "on_frame_not_send() was called, lib_error_code = %d\n",
+                 lib_error_code));
+  }
   return 0;
 }
 static int on_stream_close(nghttp2_session *session, int32_t stream_id,
                            uint32_t error_code, void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  struct http_conn *c = &conn->proto.httpc;
+  struct SessionHandle *data_s;
+  struct HTTP *stream;
   (void)session;
   (void)stream_id;
-  infof(conn->data, "on_stream_close() was called, error_code = %d\n",
-        error_code);
-
-  if(stream_id != c->stream_id) {
-    return 0;
-  }
+  (void)userp;
+
+  if(stream_id) {
+    /* get the stream from the hash based on Stream ID, stream ID zero is for
+       connection-oriented stuff */
+    data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+    if(!data_s) {
+      /* We could get stream ID not in the hash.  For example, if we
+         decided to reject stream (e.g., PUSH_PROMISE). */
+      return 0;
+    }
+    DEBUGF(infof(data_s, "on_stream_close(), error_code = %d, stream %u\n",
+                 error_code, stream_id));
+    stream = data_s->req.protop;
+    if(!stream)
+      return NGHTTP2_ERR_CALLBACK_FAILURE;
 
-  c->closed = TRUE;
+    stream->error_code = error_code;
+    stream->closed = TRUE;
 
+    /* remove the entry from the hash as the stream is now gone */
+    nghttp2_session_set_stream_user_data(session, stream_id, 0);
+    DEBUGF(infof(data_s, "Removed stream %u hash!\n", stream_id));
+  }
   return 0;
 }
 
 static int on_begin_headers(nghttp2_session *session,
                             const nghttp2_frame *frame, void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  (void)session;
-  (void)frame;
-  infof(conn->data, "on_begin_headers() was called\n");
+  struct HTTP *stream;
+  struct SessionHandle *data_s = NULL;
+  (void)userp;
+
+  data_s = nghttp2_session_get_stream_user_data(session, frame->hd.stream_id);
+  if(!data_s) {
+    return 0;
+  }
+
+  DEBUGF(infof(data_s, "on_begin_headers() was called\n"));
+
+  if(frame->hd.type != NGHTTP2_HEADERS) {
+    return 0;
+  }
+
+  stream = data_s->req.protop;
+  if(!stream || !stream->bodystarted) {
+    return 0;
+  }
+
+  /* This is trailer HEADERS started.  Allocate buffer for them. */
+  DEBUGF(infof(data_s, "trailer field started\n"));
+
+  assert(stream->trailer_recvbuf == NULL);
+
+  stream->trailer_recvbuf = Curl_add_buffer_init();
+  if(!stream->trailer_recvbuf) {
+    return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
+  }
+
   return 0;
 }
 
@@ -405,8 +739,6 @@ static int decode_status_code(const uint8_t *value, size_t len)
   return res;
 }
 
-static const char STATUS[] = ":status";
-
 /* frame->hd.type is either NGHTTP2_HEADERS or NGHTTP2_PUSH_PROMISE */
 static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
                      const uint8_t *name, size_t namelen,
@@ -414,94 +746,110 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
                      uint8_t flags,
                      void *userp)
 {
+  struct HTTP *stream;
+  struct SessionHandle *data_s;
+  int32_t stream_id = frame->hd.stream_id;
   struct connectdata *conn = (struct connectdata *)userp;
-  struct http_conn *c = &conn->proto.httpc;
-  int rv;
-  int goodname;
-  int goodheader;
-
-  (void)session;
-  (void)frame;
   (void)flags;
 
-  if(frame->hd.stream_id != c->stream_id) {
-    return 0;
-  }
-
-  if(c->bodystarted) {
-    /* Ignore trailer or HEADERS not mapped to HTTP semantics.  The
-       consequence is handled in on_frame_recv(). */
-    return 0;
-  }
-
-  goodname = nghttp2_check_header_name(name, namelen);
-  goodheader = nghttp2_check_header_value(value, valuelen);
+  DEBUGASSERT(stream_id); /* should never be a zero stream ID here */
 
-  if(!goodname || !goodheader) {
+  /* get the stream from the hash based on Stream ID */
+  data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+  if(!data_s)
+    /* Receiving a Stream ID not in the hash should not happen, this is an
+       internal error more than anything else! */
+    return NGHTTP2_ERR_CALLBACK_FAILURE;
 
-    infof(conn->data, "Detected bad incoming header %s%s, reset stream!\n",
-          goodname?"":"name",
-          goodheader?"":"value");
+  stream = data_s->req.protop;
+  if(!stream) {
+    failf(data_s, "Internal NULL stream! 5\n");
+    return NGHTTP2_ERR_CALLBACK_FAILURE;
+  }
 
-    rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                   frame->hd.stream_id,
-                                   NGHTTP2_PROTOCOL_ERROR);
+  /* Store received PUSH_PROMISE headers to be used when the subsequent
+     PUSH_PROMISE callback comes */
+  if(frame->hd.type == NGHTTP2_PUSH_PROMISE) {
+    char *h;
 
-    if(nghttp2_is_fatal(rv)) {
-      return NGHTTP2_ERR_CALLBACK_FAILURE;
+    if(!stream->push_headers) {
+      stream->push_headers_alloc = 10;
+      stream->push_headers = malloc(stream->push_headers_alloc *
+                                    sizeof(char *));
+      stream->push_headers_used = 0;
     }
-
-    return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
+    else if(stream->push_headers_used ==
+            stream->push_headers_alloc) {
+      char **headp;
+      stream->push_headers_alloc *= 2;
+      headp = realloc(stream->push_headers,
+                      stream->push_headers_alloc * sizeof(char *));
+      if(!headp) {
+        free(stream->push_headers);
+        stream->push_headers = NULL;
+        return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
+      }
+      stream->push_headers = headp;
+    }
+    h = aprintf("%s:%s", name, value);
+    if(h)
+      stream->push_headers[stream->push_headers_used++] = h;
+    return 0;
   }
 
-  if(namelen == sizeof(":status") - 1 &&
-     memcmp(STATUS, name, namelen) == 0) {
-
-    /* :status must appear exactly once. */
-    if(c->status_code != -1 ||
-       (c->status_code = decode_status_code(value, valuelen)) == -1) {
+  if(stream->bodystarted) {
+    /* This is trailer fields. */
+    /* 3 is for ":" and "\r\n". */
+    uint32_t n = (uint32_t)(namelen + valuelen + 3);
 
-      rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                     frame->hd.stream_id,
-                                     NGHTTP2_PROTOCOL_ERROR);
-      if(nghttp2_is_fatal(rv)) {
-        return NGHTTP2_ERR_CALLBACK_FAILURE;
-      }
+    DEBUGF(infof(data_s, "h2 trailer: %.*s: %.*s\n", namelen, name, valuelen,
+                 value));
 
-      return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
-    }
-
-    Curl_add_buffer(c->header_recvbuf, "HTTP/2.0 ", 9);
-    Curl_add_buffer(c->header_recvbuf, value, valuelen);
-    Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
+    Curl_add_buffer(stream->trailer_recvbuf, &n, sizeof(n));
+    Curl_add_buffer(stream->trailer_recvbuf, name, namelen);
+    Curl_add_buffer(stream->trailer_recvbuf, ":", 1);
+    Curl_add_buffer(stream->trailer_recvbuf, value, valuelen);
+    Curl_add_buffer(stream->trailer_recvbuf, "\r\n\0", 3);
 
     return 0;
   }
-  else {
-    /* Here we are sure that namelen > 0 because of
-       nghttp2_check_header_name().  Pseudo header other than :status
-       is illegal. */
-    if(c->status_code == -1 || name[0] == ':') {
-      rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
-                                     frame->hd.stream_id,
-                                     NGHTTP2_PROTOCOL_ERROR);
-      if(nghttp2_is_fatal(rv)) {
-        return NGHTTP2_ERR_CALLBACK_FAILURE;
-      }
 
-      return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
-    }
-
-    /* convert to a HTTP1-style header */
-    Curl_add_buffer(c->header_recvbuf, name, namelen);
-    Curl_add_buffer(c->header_recvbuf, ":", 1);
-    Curl_add_buffer(c->header_recvbuf, value, valuelen);
-    Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
-
-    infof(conn->data, "got http2 header: %.*s: %.*s\n",
-          namelen, name, valuelen, value);
+  if(namelen == sizeof(":status") - 1 &&
+     memcmp(":status", name, namelen) == 0) {
+    /* nghttp2 guarantees :status is received first and only once, and
+       value is 3 digits status code, and decode_status_code always
+       succeeds. */
+    stream->status_code = decode_status_code(value, valuelen);
+    DEBUGASSERT(stream->status_code != -1);
+
+    Curl_add_buffer(stream->header_recvbuf, "HTTP/2.0 ", 9);
+    Curl_add_buffer(stream->header_recvbuf, value, valuelen);
+    Curl_add_buffer(stream->header_recvbuf, "\r\n", 2);
+    data_s->state.drain++;
+    /* if we receive data for another handle, wake that up */
+    if(conn->data != data_s)
+      Curl_expire(data_s, 1);
+
+    DEBUGF(infof(data_s, "h2 status: HTTP/2 %03d (easy %p)\n",
+                 stream->status_code, data_s));
+    return 0;
   }
 
+  /* nghttp2 guarantees that namelen > 0, and :status was already
+     received, and this is not pseudo-header field . */
+  /* convert to a HTTP1-style header */
+  Curl_add_buffer(stream->header_recvbuf, name, namelen);
+  Curl_add_buffer(stream->header_recvbuf, ":", 1);
+  Curl_add_buffer(stream->header_recvbuf, value, valuelen);
+  Curl_add_buffer(stream->header_recvbuf, "\r\n", 2);
+  data_s->state.drain++;
+  /* if we receive data for another handle, wake that up */
+  if(conn->data != data_s)
+    Curl_expire(data_s, 1);
+
+  DEBUGF(infof(data_s, "h2 header: %.*s: %.*s\n", namelen, name, valuelen,
+               value));
+
   return 0; /* 0 is successful */
 }
 
@@ -512,26 +860,45 @@ static ssize_t data_source_read_callback(nghttp2_session *session,
                                          nghttp2_data_source *source,
                                          void *userp)
 {
-  struct connectdata *conn = (struct connectdata *)userp;
-  struct http_conn *c = &conn->proto.httpc;
+  struct SessionHandle *data_s;
+  struct HTTP *stream = NULL;
   size_t nread;
-  (void)session;
-  (void)stream_id;
   (void)source;
+  (void)userp;
+
+  if(stream_id) {
+    /* get the stream from the hash based on Stream ID, stream ID zero is for
+       connection-oriented stuff */
+    data_s = nghttp2_session_get_stream_user_data(session, stream_id);
+    if(!data_s)
+      /* Receiving a Stream ID not in the hash should not happen, this is an
+         internal error more than anything else! */
+      return NGHTTP2_ERR_CALLBACK_FAILURE;
 
-  nread = c->upload_len < length ? c->upload_len : length;
+    stream = data_s->req.protop;
+    if(!stream)
+      return NGHTTP2_ERR_CALLBACK_FAILURE;
+  }
+  else
+    return NGHTTP2_ERR_INVALID_ARGUMENT;
+
+  nread = MIN(stream->upload_len, length);
   if(nread > 0) {
-    memcpy(buf, c->upload_mem, nread);
-    c->upload_mem += nread;
-    c->upload_len -= nread;
-    c->upload_left -= nread;
+    memcpy(buf, stream->upload_mem, nread);
+    stream->upload_mem += nread;
+    stream->upload_len -= nread;
+    stream->upload_left -= nread;
   }
 
-  if(c->upload_left == 0)
+  if(stream->upload_left == 0)
     *data_flags = 1;
   else if(nread == 0)
     return NGHTTP2_ERR_DEFERRED;
 
+  DEBUGF(infof(data_s, "data_source_read_callback: "
+               "returns %zu bytes stream %u\n",
+               nread, stream_id));
+
   return nread;
 }
 
@@ -543,7 +910,7 @@ static nghttp2_settings_entry settings[] = {
   { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, NGHTTP2_INITIAL_WINDOW_SIZE },
 };
 
-#define H2_BUFSIZE 4096
+#define H2_BUFSIZE 32768
 
 /*
  * Initialize nghttp2 for a Curl connection
@@ -595,8 +962,7 @@ CURLcode Curl_http2_init(struct connectdata *conn)
     nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);
 
     /* The nghttp2 session is not yet setup, do it */
-    rc = nghttp2_session_client_new(&conn->proto.httpc.h2,
-                                    callbacks, conn);
+    rc = nghttp2_session_client_new(&conn->proto.httpc.h2, callbacks, conn);
 
     nghttp2_session_callbacks_del(callbacks);
 
@@ -609,15 +975,6 @@ CURLcode Curl_http2_init(struct connectdata *conn)
 }
 
 /*
- * Send a request using http2
- */
-CURLcode Curl_http2_send_request(struct connectdata *conn)
-{
-  (void)conn;
-  return CURLE_OK;
-}
-
-/*
  * Append headers to ask for a HTTP1.1 to HTTP2 upgrade.
  */
 CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
@@ -630,14 +987,6 @@ CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
   struct SingleRequest *k = &conn->data->req;
   uint8_t *binsettings = conn->proto.httpc.binsettings;
 
-  result = Curl_http2_init(conn);
-  if(result)
-    return result;
-
-  result = Curl_http2_setup(conn);
-  if(result)
-    return result;
-
   /* As long as we have a fixed set of settings, we don't have to dynamically
    * figure out the base64 strings since it'll always be the same. However,
    * the settings will likely not be fixed every time in the future.
@@ -663,13 +1012,104 @@ CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
                             "Upgrade: %s\r\n"
                             "HTTP2-Settings: %s\r\n",
                             NGHTTP2_CLEARTEXT_PROTO_VERSION_ID, base64);
-  Curl_safefree(base64);
+  free(base64);
 
   k->upgr101 = UPGR101_REQUESTED;
 
   return result;
 }
 
+static ssize_t http2_handle_stream_close(struct connectdata *conn,
+                                         struct SessionHandle *data,
+                                         struct HTTP *stream, CURLcode *err) {
+  char *trailer_pos, *trailer_end;
+  CURLcode result;
+  struct http_conn *httpc = &conn->proto.httpc;
+
+  if(httpc->pause_stream_id == stream->stream_id) {
+    httpc->pause_stream_id = 0;
+  }
+  /* Reset to FALSE to prevent infinite loop in readwrite_data
+   function. */
+  stream->closed = FALSE;
+  if(stream->error_code != NGHTTP2_NO_ERROR) {
+    failf(data, "HTTP/2 stream %u was not closed cleanly: error_code = %d",
+          stream->stream_id, stream->error_code);
+    *err = CURLE_HTTP2;
+    return -1;
+  }
+
+  if(stream->trailer_recvbuf && stream->trailer_recvbuf->buffer) {
+    trailer_pos = stream->trailer_recvbuf->buffer;
+    trailer_end = trailer_pos + stream->trailer_recvbuf->size_used;
+
+    for(; trailer_pos < trailer_end;) {
+      uint32_t n;
+      memcpy(&n, trailer_pos, sizeof(n));
+      trailer_pos += sizeof(n);
+
+      result = Curl_client_write(conn, CLIENTWRITE_HEADER, trailer_pos, n);
+      if(result) {
+        *err = result;
+        return -1;
+      }
+
+      trailer_pos += n + 1;
+    }
+  }
+
+  DEBUGF(infof(data, "http2_recv returns 0, http2_handle_stream_close\n"));
+  return 0;
+}
+
+/*
+ * h2_pri_spec() fills in the pri_spec struct, used by nghttp2 to send weight
+ * and dependency to the peer. It also stores the updated values in the state
+ * struct.
+ */
+
+static void h2_pri_spec(struct SessionHandle *data,
+                        nghttp2_priority_spec *pri_spec)
+{
+  struct HTTP *depstream = (data->set.stream_depends_on?
+                            data->set.stream_depends_on->req.protop:NULL);
+  int32_t depstream_id = depstream? depstream->stream_id:0;
+  nghttp2_priority_spec_init(pri_spec, depstream_id, data->set.stream_weight,
+                             data->set.stream_depends_e);
+  data->state.stream_weight = data->set.stream_weight;
+  data->state.stream_depends_e = data->set.stream_depends_e;
+  data->state.stream_depends_on = data->set.stream_depends_on;
+}
+
+/*
+ * h2_session_send() checks if there's been an update in the priority /
+ * dependency settings and if so it submits a PRIORITY frame with the updated
+ * info.
+ */
+static int h2_session_send(struct SessionHandle *data,
+                           nghttp2_session *h2)
+{
+  struct HTTP *stream = data->req.protop;
+  if((data->set.stream_weight != data->state.stream_weight) ||
+     (data->set.stream_depends_e != data->state.stream_depends_e) ||
+     (data->set.stream_depends_on != data->state.stream_depends_on) ) {
+    /* send new weight and/or dependency */
+    nghttp2_priority_spec pri_spec;
+    int rv;
+
+    h2_pri_spec(data, &pri_spec);
+
+    DEBUGF(infof(data, "Queuing PRIORITY on stream %u (easy %p)\n",
+                 stream->stream_id, data));
+    rv = nghttp2_submit_priority(h2, NGHTTP2_FLAG_NONE, stream->stream_id,
+                                 &pri_spec);
+    if(rv)
+      return rv;
+  }
+
+  return nghttp2_session_send(h2);
+}
+
 /*
  * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
  * a regular CURLcode value.
@@ -681,103 +1121,189 @@ static ssize_t http2_recv(struct connectdata *conn, int sockindex,
   ssize_t rv;
   ssize_t nread;
   struct http_conn *httpc = &conn->proto.httpc;
+  struct SessionHandle *data = conn->data;
+  struct HTTP *stream = data->req.protop;
 
   (void)sockindex; /* we always do HTTP2 on sockindex 0 */
 
-  if(httpc->closed) {
-    /* Reset to FALSE to prevent infinite loop in readwrite_data
-       function. */
-    httpc->closed = FALSE;
-    return 0;
+  /* If stream is closed, return 0 to signal the http routine to close
+     the connection.  We need to handle stream closure here,
+     otherwise, we may be going to read from underlying connection,
+     and gets EAGAIN, and we will get stuck there. */
+  if(stream->memlen == 0 && stream->closed) {
+    return http2_handle_stream_close(conn, data, stream, err);
   }
 
   /* Nullify here because we call nghttp2_session_send() and they
      might refer to the old buffer. */
-  httpc->upload_mem = NULL;
-  httpc->upload_len = 0;
+  stream->upload_mem = NULL;
+  stream->upload_len = 0;
+
+  /*
+   * At this point 'stream' is just in the SessionHandle the connection
+   * identifies as its owner at this time.
+   */
 
-  if(httpc->bodystarted &&
-     httpc->nread_header_recvbuf < httpc->header_recvbuf->size_used) {
+  if(stream->bodystarted &&
+     stream->nread_header_recvbuf < stream->header_recvbuf->size_used) {
+    /* If there is body data pending for this stream to return, do that */
     size_t left =
-      httpc->header_recvbuf->size_used - httpc->nread_header_recvbuf;
-    size_t ncopy = len < left ? len : left;
-    memcpy(mem, httpc->header_recvbuf->buffer + httpc->nread_header_recvbuf,
+      stream->header_recvbuf->size_used - stream->nread_header_recvbuf;
+    size_t ncopy = MIN(len, left);
+    memcpy(mem, stream->header_recvbuf->buffer + stream->nread_header_recvbuf,
            ncopy);
-    httpc->nread_header_recvbuf += ncopy;
+    stream->nread_header_recvbuf += ncopy;
+
+    DEBUGF(infof(data, "http2_recv: Got %d bytes from header_recvbuf\n",
+                 (int)ncopy));
     return ncopy;
   }
 
-  if(httpc->data) {
-    nread = len < httpc->datalen ? len : httpc->datalen;
-    memcpy(mem, httpc->data, nread);
-
-    httpc->data += nread;
-    httpc->datalen -= nread;
-
-    infof(conn->data, "%zu data written\n", nread);
-    if(httpc->datalen == 0) {
-      httpc->data = NULL;
-      httpc->datalen = 0;
+  DEBUGF(infof(data, "http2_recv: easy %p (stream %u)\n",
+               data, stream->stream_id));
+
+  if((data->state.drain) && stream->memlen) {
+    DEBUGF(infof(data, "http2_recv: DRAIN %zu bytes stream %u!! (%p => %p)\n",
+                 stream->memlen, stream->stream_id,
+                 stream->mem, mem));
+    if(mem != stream->mem) {
+      /* if we didn't get the same buffer this time, we must move the data to
+         the beginning */
+      memmove(mem, stream->mem, stream->memlen);
+      stream->len = len - stream->memlen;
+      stream->mem = mem;
+    }
+  }
+  else if(stream->pausedata) {
+    nread = MIN(len, stream->pauselen);
+    memcpy(mem, stream->pausedata, nread);
+
+    stream->pausedata += nread;
+    stream->pauselen -= nread;
+
+    infof(data, "%zu data bytes written\n", nread);
+    if(stream->pauselen == 0) {
+      DEBUGF(infof(data, "Unpaused by stream %u\n", stream->stream_id));
+      assert(httpc->pause_stream_id == stream->stream_id);
+      httpc->pause_stream_id = 0;
+
+      stream->pausedata = NULL;
+      stream->pauselen = 0;
+
+      /* When NGHTTP2_ERR_PAUSE is returned from
+         data_source_read_callback, we might not process DATA frame
+         fully.  Calling nghttp2_session_mem_recv() again will
+         continue to process DATA frame, but if there is no incoming
+         frames, then we have to call it again with 0-length data.
+         Without this, on_stream_close callback will not be called,
+         and stream could be hanged. */
+      nghttp2_session_mem_recv(httpc->h2, NULL, 0);
     }
+    DEBUGF(infof(data, "http2_recv: returns unpaused %zd bytes on stream %u\n",
+                 nread, stream->stream_id));
     return nread;
   }
-
-  conn->proto.httpc.mem = mem;
-  conn->proto.httpc.len = len;
-
-  infof(conn->data, "http2_recv: %d bytes buffer\n",
-        conn->proto.httpc.len);
-
-  nread = ((Curl_recv*)httpc->recv_underlying)(conn, FIRSTSOCKET,
-                                               httpc->inbuf, H2_BUFSIZE,
-                                               &result);
-  if(result == CURLE_AGAIN) {
-    *err = result;
+  else if(httpc->pause_stream_id) {
+    /* If a stream paused nghttp2_session_mem_recv previously, and has
+       not processed all data, it still refers to the buffer in
+       nghttp2_session.  If we call nghttp2_session_mem_recv(), we may
+       overwrite that buffer.  To avoid that situation, just return
+       here with CURLE_AGAIN.  This could be busy loop since data in
+       socket is not read.  But it seems that usually streams are
+       notified with its drain property, and socket is read again
+       quickly. */
+    *err = CURLE_AGAIN;
     return -1;
   }
+  else {
+    char *inbuf;
+    /* remember where to store incoming data for this stream and how big the
+       buffer is */
+    stream->mem = mem;
+    stream->len = len;
+    stream->memlen = 0;
+
+    if(httpc->inbuflen == 0) {
+      nread = ((Curl_recv *)httpc->recv_underlying)(
+          conn, FIRSTSOCKET, httpc->inbuf, H2_BUFSIZE, &result);
+
+      if(nread == -1) {
+        if(result != CURLE_AGAIN)
+          failf(data, "Failed receiving HTTP2 data");
+        *err = result;
+        return -1;
+      }
 
-  if(nread == -1) {
-    failf(conn->data, "Failed receiving HTTP2 data");
-    *err = result;
-    return 0;
-  }
+      if(nread == 0) {
+        failf(data, "Unexpected EOF");
+        *err = CURLE_RECV_ERROR;
+        return -1;
+      }
 
-  infof(conn->data, "nread=%zd\n", nread);
+      DEBUGF(infof(data, "nread=%zd\n", nread));
 
-  if(nread == 0) {
-    failf(conn->data, "EOF");
-    return 0;
-  }
+      httpc->inbuflen = nread;
+      inbuf = httpc->inbuf;
+    }
+    else {
+      nread = httpc->inbuflen - httpc->nread_inbuf;
+      inbuf = httpc->inbuf + httpc->nread_inbuf;
 
-  rv = nghttp2_session_mem_recv(httpc->h2,
-                                (const uint8_t *)httpc->inbuf, nread);
+      DEBUGF(infof(data, "Use data left in connection buffer, nread=%zd\n",
+                   nread));
+    }
+    rv = nghttp2_session_mem_recv(httpc->h2, (const uint8_t *)inbuf, nread);
 
-  if(nghttp2_is_fatal((int)rv)) {
-    failf(conn->data, "nghttp2_session_mem_recv() returned %d:%s\n",
-          rv, nghttp2_strerror((int)rv));
-    *err = CURLE_RECV_ERROR;
-    return 0;
-  }
-  infof(conn->data, "nghttp2_session_mem_recv() returns %zd\n", rv);
-  /* Always send pending frames in nghttp2 session, because
-     nghttp2_session_mem_recv() may queue new frame */
-  rv = nghttp2_session_send(httpc->h2);
-  if(rv != 0) {
-    *err = CURLE_SEND_ERROR;
-    return 0;
+    if(nghttp2_is_fatal((int)rv)) {
+      failf(data, "nghttp2_session_mem_recv() returned %d:%s\n",
+            rv, nghttp2_strerror((int)rv));
+      *err = CURLE_RECV_ERROR;
+      return 0;
+    }
+    DEBUGF(infof(data, "nghttp2_session_mem_recv() returns %zd\n", rv));
+    if(nread == rv) {
+      DEBUGF(infof(data, "All data in connection buffer processed\n"));
+      httpc->inbuflen = 0;
+      httpc->nread_inbuf = 0;
+    }
+    else {
+      httpc->nread_inbuf += rv;
+      DEBUGF(infof(data, "%zu bytes left in connection buffer\n",
+                   httpc->inbuflen - httpc->nread_inbuf));
+    }
+    /* Always send pending frames in nghttp2 session, because
+       nghttp2_session_mem_recv() may queue new frame */
+    rv = h2_session_send(data, httpc->h2);
+    if(rv != 0) {
+      *err = CURLE_SEND_ERROR;
+      return 0;
+    }
   }
-  if(len != httpc->len) {
-    return len - conn->proto.httpc.len;
+  if(stream->memlen) {
+    ssize_t retlen = stream->memlen;
+    DEBUGF(infof(data, "http2_recv: returns %zd for stream %u\n",
+                 retlen, stream->stream_id));
+    stream->memlen = 0;
+
+    if(httpc->pause_stream_id == stream->stream_id) {
+      /* data for this stream is returned now, but this stream caused a pause
+         already so we need it called again asap */
+      DEBUGF(infof(data, "Data returned for PAUSED stream %u\n",
+                   stream->stream_id));
+    }
+    else
+      data->state.drain = 0; /* this stream is hereby drained */
+
+    return retlen;
   }
   /* If stream is closed, return 0 to signal the http routine to close
      the connection */
-  if(httpc->closed) {
-    /* Reset to FALSE to prevent infinite loop in readwrite_data
-       function. */
-    httpc->closed = FALSE;
-    return 0;
+  if(stream->closed) {
+    return http2_handle_stream_close(conn, data, stream, err);
   }
   *err = CURLE_AGAIN;
+  DEBUGF(infof(data, "http2_recv returns AGAIN for stream %u\n",
+               stream->stream_id));
   return -1;
 }
 
@@ -796,6 +1322,7 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
    */
   int rv;
   struct http_conn *httpc = &conn->proto.httpc;
+  struct HTTP *stream = conn->data->req.protop;
   nghttp2_nv *nva;
   size_t nheader;
   size_t i;
@@ -804,23 +1331,42 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
   char *end;
   nghttp2_data_provider data_prd;
   int32_t stream_id;
+  nghttp2_session *h2 = httpc->h2;
+  nghttp2_priority_spec pri_spec;
 
   (void)sockindex;
 
-  infof(conn->data, "http2_send len=%zu\n", len);
+  DEBUGF(infof(conn->data, "http2_send len=%zu\n", len));
 
-  if(httpc->stream_id != -1) {
+  if(stream->stream_id != -1) {
     /* If stream_id != -1, we have dispatched request HEADERS, and now
        are going to send or sending request body in DATA frame */
-    httpc->upload_mem = mem;
-    httpc->upload_len = len;
-    nghttp2_session_resume_data(httpc->h2, httpc->stream_id);
-    rv = nghttp2_session_send(httpc->h2);
+    stream->upload_mem = mem;
+    stream->upload_len = len;
+    nghttp2_session_resume_data(h2, stream->stream_id);
+    rv = h2_session_send(conn->data, h2);
     if(nghttp2_is_fatal(rv)) {
       *err = CURLE_SEND_ERROR;
       return -1;
     }
-    return len - httpc->upload_len;
+    len -= stream->upload_len;
+
+    /* Nullify here because we call nghttp2_session_send() and they
+       might refer to the old buffer. */
+    stream->upload_mem = NULL;
+    stream->upload_len = 0;
+
+    if(stream->upload_left) {
+      /* we are sure that we have more data to send here.  Calling the
+         following API will make nghttp2_session_want_write() return
+         nonzero if remote window allows it, which then libcurl checks
+         socket is writable or not.  See http2_perform_getsock(). */
+      nghttp2_session_resume_data(h2, stream->stream_id);
+    }
+
+    DEBUGF(infof(conn->data, "http2_send returns %zu for stream %u\n", len,
+                 stream->stream_id));
+    return len;
   }
 
   /* Calculate number of headers contained in [mem, mem + len) */
@@ -843,6 +1389,8 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
   }
   /* Extract :method, :path from request line */
   end = strchr(hdbuf, ' ');
+  if(!end)
+    goto fail;
   nva[0].name = (unsigned char *)":method";
   nva[0].namelen = (uint16_t)strlen((char *)nva[0].name);
   nva[0].value = (unsigned char *)hdbuf;
@@ -852,6 +1400,8 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
   hdbuf = end + 1;
 
   end = strchr(hdbuf, ' ');
+  if(!end)
+    goto fail;
   nva[1].name = (unsigned char *)":path";
   nva[1].namelen = (uint16_t)strlen((char *)nva[1].name);
   nva[1].value = (unsigned char *)hdbuf;
@@ -868,14 +1418,26 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
   nva[2].flags = NGHTTP2_NV_FLAG_NONE;
 
   hdbuf = strchr(hdbuf, 0x0a);
+  if(!hdbuf)
+    goto fail;
   ++hdbuf;
 
   authority_idx = 0;
 
-  for(i = 3; i < nheader; ++i) {
+  i = 3;
+  while(i < nheader) {
+    size_t hlen;
+    int skip = 0;
     end = strchr(hdbuf, ':');
-    assert(end);
-    if(end - hdbuf == 4 && Curl_raw_nequal("host", hdbuf, 4)) {
+    if(!end)
+      goto fail;
+    hlen = end - hdbuf;
+    if(hlen == 10 && Curl_raw_nequal("connection", hdbuf, 10)) {
+      /* skip Connection: headers! */
+      skip = 1;
+      --nheader;
+    }
+    else if(hlen == 4 && Curl_raw_nequal("host", hdbuf, 4)) {
       authority_idx = i;
       nva[i].name = (unsigned char *)":authority";
       nva[i].namelen = (uint16_t)strlen((char *)nva[i].name);
@@ -887,24 +1449,31 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
     hdbuf = end + 1;
     for(; *hdbuf == ' '; ++hdbuf);
     end = strchr(hdbuf, 0x0d);
-    assert(end);
-    nva[i].value = (unsigned char *)hdbuf;
-    nva[i].valuelen = (uint16_t)(end - hdbuf);
-    nva[i].flags = NGHTTP2_NV_FLAG_NONE;
-
-    hdbuf = end + 2;
-    /* Inspect Content-Length header field and retrieve the request
-       entity length so that we can set END_STREAM to the last DATA
-       frame. */
-    if(nva[i].namelen == 14 &&
-       Curl_raw_nequal("content-length", (char*)nva[i].name, 14)) {
-      size_t j;
-      for(j = 0; j < nva[i].valuelen; ++j) {
-        httpc->upload_left *= 10;
-        httpc->upload_left += nva[i].value[j] - '0';
+    if(!end)
+      goto fail;
+    if(!skip) {
+      nva[i].value = (unsigned char *)hdbuf;
+      nva[i].valuelen = (uint16_t)(end - hdbuf);
+      nva[i].flags = NGHTTP2_NV_FLAG_NONE;
+      /* Inspect Content-Length header field and retrieve the request
+         entity length so that we can set END_STREAM to the last DATA
+         frame. */
+      if(nva[i].namelen == 14 &&
+         Curl_raw_nequal("content-length", (char*)nva[i].name, 14)) {
+        size_t j;
+        stream->upload_left = 0;
+        for(j = 0; j < nva[i].valuelen; ++j) {
+          stream->upload_left *= 10;
+          stream->upload_left += nva[i].value[j] - '0';
+        }
+        DEBUGF(infof(conn->data,
+                     "request content-length=%"
+                     CURL_FORMAT_CURL_OFF_T
+                     "\n", stream->upload_left));
       }
-      infof(conn->data, "request content-length=%zu\n", httpc->upload_left);
+      ++i;
     }
+    hdbuf = end + 2;
   }
 
   /* :authority must come before non-pseudo header fields */
@@ -916,37 +1485,44 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
     nva[i] = authority;
   }
 
+  h2_pri_spec(conn->data, &pri_spec);
+
   switch(conn->data->set.httpreq) {
   case HTTPREQ_POST:
   case HTTPREQ_POST_FORM:
   case HTTPREQ_PUT:
     data_prd.read_callback = data_source_read_callback;
     data_prd.source.ptr = NULL;
-    stream_id = nghttp2_submit_request(httpc->h2, NULL, nva, nheader,
-                                       &data_prd, NULL);
+    stream_id = nghttp2_submit_request(h2, &pri_spec, nva, nheader,
+                                       &data_prd, conn->data);
     break;
   default:
-    stream_id = nghttp2_submit_request(httpc->h2, NULL, nva, nheader,
-                                       NULL, NULL);
+    stream_id = nghttp2_submit_request(h2, &pri_spec, nva, nheader,
+                                       NULL, conn->data);
   }
 
   Curl_safefree(nva);
 
   if(stream_id < 0) {
+    DEBUGF(infof(conn->data, "http2_send() send error\n"));
     *err = CURLE_SEND_ERROR;
     return -1;
   }
 
-  httpc->stream_id = stream_id;
+  infof(conn->data, "Using Stream ID: %x (easy handle %p)\n",
+        stream_id, conn->data);
+  stream->stream_id = stream_id;
 
-  rv = nghttp2_session_send(httpc->h2);
+  /* this does not call h2_session_send() since there can not have been any
+   * priority upodate since the nghttp2_submit_request() call above */
+  rv = nghttp2_session_send(h2);
 
   if(rv != 0) {
     *err = CURLE_SEND_ERROR;
     return -1;
   }
 
-  if(httpc->stream_id != -1) {
+  if(stream->stream_id != -1) {
     /* If whole HEADERS frame was sent off to the underlying socket,
        the nghttp2 library calls data_source_read_callback. But only
        it found that no data available, so it deferred the DATA
@@ -955,36 +1531,63 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
        writable socket check is performed. To workaround this, we
        issue nghttp2_session_resume_data() here to bring back DATA
        transmission from deferred state. */
-    nghttp2_session_resume_data(httpc->h2, httpc->stream_id);
+    nghttp2_session_resume_data(h2, stream->stream_id);
   }
 
   return len;
+
+fail:
+  free(nva);
+  *err = CURLE_SEND_ERROR;
+  return -1;
 }
 
 CURLcode Curl_http2_setup(struct connectdata *conn)
 {
+  CURLcode result;
   struct http_conn *httpc = &conn->proto.httpc;
+  struct HTTP *stream = conn->data->req.protop;
+
+  stream->stream_id = -1;
+
+  if(!stream->header_recvbuf)
+    stream->header_recvbuf = Curl_add_buffer_init();
+
+  if((conn->handler == &Curl_handler_http2_ssl) ||
+     (conn->handler == &Curl_handler_http2))
+    return CURLE_OK; /* already done */
+
   if(conn->handler->flags & PROTOPT_SSL)
     conn->handler = &Curl_handler_http2_ssl;
   else
     conn->handler = &Curl_handler_http2;
 
-  infof(conn->data, "Using HTTP2\n");
-  httpc->bodystarted = FALSE;
-  httpc->closed = FALSE;
-  httpc->header_recvbuf = Curl_add_buffer_init();
-  httpc->nread_header_recvbuf = 0;
-  httpc->data = NULL;
-  httpc->datalen = 0;
-  httpc->upload_left = 0;
-  httpc->upload_mem = NULL;
-  httpc->upload_len = 0;
-  httpc->stream_id = -1;
-  httpc->status_code = -1;
+  result = Curl_http2_init(conn);
+  if(result)
+    return result;
+
+  infof(conn->data, "Using HTTP2, server supports multi-use\n");
+  stream->upload_left = 0;
+  stream->upload_mem = NULL;
+  stream->upload_len = 0;
 
+  httpc->inbuflen = 0;
+  httpc->nread_inbuf = 0;
+
+  httpc->pause_stream_id = 0;
+
+  conn->bits.multiplex = TRUE; /* at least potentially multiplexed */
   conn->httpversion = 20;
+  conn->bundle->multiuse = BUNDLE_MULTIPLEX;
 
-  return 0;
+  infof(conn->data, "Connection state changed (HTTP/2 confirmed)\n");
+  Curl_multi_connchanged(conn->data->multi);
+
+  /* switch on TCP_NODELAY as we need to send off packets without delay for
+     maximum throughput */
+  Curl_tcpnodelay(conn, conn->sock[FIRSTSOCKET]);
+
+  return CURLE_OK;
 }
 
 CURLcode Curl_http2_switched(struct connectdata *conn,
@@ -993,30 +1596,22 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
   CURLcode result;
   struct http_conn *httpc = &conn->proto.httpc;
   int rv;
+  ssize_t nproc;
   struct SessionHandle *data = conn->data;
+  struct HTTP *stream = conn->data->req.protop;
+
+  result = Curl_http2_setup(conn);
+  if(result)
+    return result;
 
   httpc->recv_underlying = (recving)conn->recv[FIRSTSOCKET];
   httpc->send_underlying = (sending)conn->send[FIRSTSOCKET];
   conn->recv[FIRSTSOCKET] = http2_recv;
   conn->send[FIRSTSOCKET] = http2_send;
 
-  rv = (int) ((Curl_send*)httpc->send_underlying)
-    (conn, FIRSTSOCKET,
-     NGHTTP2_CLIENT_CONNECTION_PREFACE,
-     NGHTTP2_CLIENT_CONNECTION_PREFACE_LEN,
-     &result);
-  if(result)
-    /* TODO: This may get CURLE_AGAIN */
-    return result;
-
-  if(rv != 24) {
-    failf(data, "Only sent partial HTTP2 packet");
-    return CURLE_SEND_ERROR;
-  }
-
   if(conn->data->req.upgr101 == UPGR101_RECEIVED) {
     /* stream 1 is opened implicitly on upgrade */
-    httpc->stream_id = 1;
+    stream->stream_id = 1;
     /* queue SETTINGS frame (again) */
     rv = nghttp2_session_upgrade(httpc->h2, httpc->binsettings,
                                  httpc->binlen, NULL);
@@ -1025,10 +1620,14 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
             nghttp2_strerror(rv), rv);
       return CURLE_HTTP2;
     }
+
+    nghttp2_session_set_stream_user_data(httpc->h2,
+                                         stream->stream_id,
+                                         conn->data);
   }
   else {
     /* stream ID is unknown at this point */
-    httpc->stream_id = -1;
+    stream->stream_id = -1;
     rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, NULL, 0);
     if(rv != 0) {
       failf(data, "nghttp2_submit_settings() failed: %s(%d)",
@@ -1037,10 +1636,48 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
     }
   }
 
-  rv = (int)nghttp2_session_mem_recv(httpc->h2, (const uint8_t*)mem, nread);
+  /* we are going to copy mem to httpc->inbuf.  This is required since
+     mem is part of buffer pointed by stream->mem, and callbacks
+     called by nghttp2_session_mem_recv() will write stream specific
+     data into stream->mem, overwriting data already there. */
+  if(H2_BUFSIZE < nread) {
+    failf(data, "connection buffer size is too small to store data following "
+                "HTTP Upgrade response header: buflen=%zu, datalen=%zu",
+          H2_BUFSIZE, nread);
+    return CURLE_HTTP2;
+  }
+
+  infof(conn->data, "Copying HTTP/2 data in stream buffer to connection buffer"
+                    " after upgrade: len=%zu\n",
+        nread);
 
-  if(rv != (int)nread) {
+  memcpy(httpc->inbuf, mem, nread);
+  httpc->inbuflen = nread;
+
+  nproc = nghttp2_session_mem_recv(httpc->h2, (const uint8_t *)httpc->inbuf,
+                                   httpc->inbuflen);
+
+  if(nghttp2_is_fatal((int)nproc)) {
     failf(data, "nghttp2_session_mem_recv() failed: %s(%d)",
+          nghttp2_strerror((int)nproc), (int)nproc);
+    return CURLE_HTTP2;
+  }
+
+  DEBUGF(infof(data, "nghttp2_session_mem_recv() returns %zd\n", nproc));
+
+  if((ssize_t)nread == nproc) {
+    httpc->inbuflen = 0;
+    httpc->nread_inbuf = 0;
+  }
+  else {
+    httpc->nread_inbuf += nproc;
+  }
+
+  /* Try to send some frames since we may read SETTINGS already. */
+  rv = h2_session_send(data, httpc->h2);
+
+  if(rv != 0) {
+    failf(data, "nghttp2_session_send() failed: %s(%d)",
           nghttp2_strerror(rv), rv);
     return CURLE_HTTP2;
   }
@@ -1048,4 +1685,25 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
   return CURLE_OK;
 }
 
-#endif
+#else /* !USE_NGHTTP2 */
+
+/* Satisfy external references even if http2 is not compiled in. */
+
+#define CURL_DISABLE_TYPECHECK
+#include <curl/curl.h>
+
+char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num)
+{
+  (void) h;
+  (void) num;
+  return NULL;
+}
+
+char *curl_pushheader_byname(struct curl_pushheaders *h, const char *header)
+{
+  (void) h;
+  (void) header;
+  return NULL;
+}
+
+#endif /* USE_NGHTTP2 */
index a2e4eb7..2d07334 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #ifdef USE_NGHTTP2
 #include "http.h"
+
+/* value for MAX_CONCURRENT_STREAMS we use until we get an updated setting
+   from the peer */
+#define DEFAULT_MAX_CONCURRENT_STREAMS 13
+
 /*
  * Store nghttp2 version info in this buffer, Prefix with a space.  Return
  * total length written.
 int Curl_http2_ver(char *p, size_t len);
 
 CURLcode Curl_http2_init(struct connectdata *conn);
+void Curl_http2_init_state(struct UrlState *state);
+void Curl_http2_init_userset(struct UserDefined *set);
 CURLcode Curl_http2_send_request(struct connectdata *conn);
 CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
                                     struct connectdata *conn);
 CURLcode Curl_http2_setup(struct connectdata *conn);
 CURLcode Curl_http2_switched(struct connectdata *conn,
                              const char *data, size_t nread);
+/* called from Curl_http_setup_conn */
+void Curl_http2_setup_conn(struct connectdata *conn);
+void Curl_http2_setup_req(struct SessionHandle *data);
 #else /* USE_NGHTTP2 */
 #define Curl_http2_init(x) CURLE_UNSUPPORTED_PROTOCOL
 #define Curl_http2_send_request(x) CURLE_UNSUPPORTED_PROTOCOL
 #define Curl_http2_request_upgrade(x,y) CURLE_UNSUPPORTED_PROTOCOL
 #define Curl_http2_setup(x) CURLE_UNSUPPORTED_PROTOCOL
 #define Curl_http2_switched(x,y,z) CURLE_UNSUPPORTED_PROTOCOL
+#define Curl_http2_setup_conn(x)
+#define Curl_http2_setup_req(x)
+#define Curl_http2_init_state(x)
+#define Curl_http2_init_userset(x)
 #endif
 
 #endif /* HEADER_CURL_HTTP2_H */
index 61a6098..5309173 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include "content_encoding.h"
 #include "http.h"
-#include "curl_memory.h"
 #include "non-ascii.h" /* for Curl_convert_to_network prototype */
 #include "strtoofft.h"
 #include "warnless.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
@@ -158,7 +155,7 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
         if(result) {
           /* Curl_convert_from_network calls failf if unsuccessful */
           /* Treat it as a bad hex character */
-          return CHUNKE_ILLEGAL_HEX ;
+          return CHUNKE_ILLEGAL_HEX;
         }
 
         ch->datasize=curlx_strtoofft(ch->hexbuffer, &endptr, 16);
@@ -221,7 +218,6 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
                                           (ssize_t)piece);
         break;
 
-      case COMPRESS:
       default:
         failf (conn->data,
                "Unrecognized content encoding type. "
index 0489eb8..3a8b4dd 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index ba59e5d..dc867d5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "rawstr.h"
 #include "curl_sasl.h"
 #include "http_digest.h"
-#include "curl_memory.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* Test example headers:
@@ -137,7 +135,7 @@ CURLcode Curl_output_digest(struct connectdata *conn,
 
      Apache servers can be set to do the Digest IE-style automatically using
      the BrowserMatch feature:
-     http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html#msie
+     https://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html#msie
 
      Further details on Digest implementation differences:
      http://www.fngtps.com/2006/09/http-authentication
index d13d563..49aad89 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 97d0cb7..4a808f8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include "curl_setup.h"
 
-#ifdef HAVE_GSSAPI
-
-#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
-
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
+#if defined(HAVE_GSSAPI) && !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
 
 #include "urldata.h"
 #include "sendf.h"
 #include "rawstr.h"
 #include "curl_base64.h"
 #include "http_negotiate.h"
-#include "curl_memory.h"
+#include "curl_sasl.h"
 #include "url.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
-static int
-get_gss_name(struct connectdata *conn, bool proxy, gss_name_t *server)
-{
-  OM_uint32 major_status, minor_status;
-  gss_buffer_desc token = GSS_C_EMPTY_BUFFER;
-  char name[2048];
-  const char* service = "HTTP";
-
-  token.length = strlen(service) + 1 + strlen(proxy ? conn->proxy.name :
-                                              conn->host.name) + 1;
-  if(token.length + 1 > sizeof(name))
-    return EMSGSIZE;
-
-  snprintf(name, sizeof(name), "%s@%s", service, proxy ? conn->proxy.name :
-           conn->host.name);
-
-  token.value = (void *) name;
-  major_status = gss_import_name(&minor_status,
-                                 &token,
-                                 GSS_C_NT_HOSTBASED_SERVICE,
-                                 server);
-
-  return GSS_ERROR(major_status) ? -1 : 0;
-}
-
-/* returning zero (0) means success, everything else is treated as "failure"
-   with no care exactly what the failure was */
-int Curl_input_negotiate(struct connectdata *conn, bool proxy,
-                         const char *header)
+CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
+                              const char *header)
 {
   struct SessionHandle *data = conn->data;
   struct negotiatedata *neg_ctx = proxy?&data->state.proxyneg:
     &data->state.negotiate;
   OM_uint32 major_status, minor_status, discard_st;
+  gss_buffer_desc spn_token = GSS_C_EMPTY_BUFFER;
   gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
   gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
-  int ret;
   size_t len;
   size_t rawlen = 0;
   CURLcode result;
@@ -92,12 +57,36 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
      * rejected it (since we're again here). Exit with an error since we
      * can't invent anything better */
     Curl_cleanup_negotiate(data);
-    return -1;
+    return CURLE_LOGIN_DENIED;
   }
 
-  if(neg_ctx->server_name == NULL &&
-      (ret = get_gss_name(conn, proxy, &neg_ctx->server_name)))
-    return ret;
+  if(!neg_ctx->server_name) {
+    /* Generate our SPN */
+    char *spn = Curl_sasl_build_gssapi_spn(
+      proxy ? data->set.str[STRING_PROXY_SERVICE_NAME] :
+      data->set.str[STRING_SERVICE_NAME],
+      proxy ? conn->proxy.name : conn->host.name);
+    if(!spn)
+      return CURLE_OUT_OF_MEMORY;
+
+    /* Populate the SPN structure */
+    spn_token.value = spn;
+    spn_token.length = strlen(spn);
+
+    /* Import the SPN */
+    major_status = gss_import_name(&minor_status, &spn_token,
+                                   GSS_C_NT_HOSTBASED_SERVICE,
+                                   &neg_ctx->server_name);
+    if(GSS_ERROR(major_status)) {
+      Curl_gss_log_error(data, minor_status, "gss_import_name() failed: ");
+
+      free(spn);
+
+      return CURLE_OUT_OF_MEMORY;
+    }
+
+    free(spn);
+  }
 
   header += strlen("Negotiate");
   while(*header && ISSPACE(*header))
@@ -107,8 +96,15 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
   if(len > 0) {
     result = Curl_base64_decode(header, (unsigned char **)&input_token.value,
                                 &rawlen);
-    if(result || rawlen == 0)
-      return -1;
+    if(result)
+      return result;
+
+    if(!rawlen) {
+      infof(data, "Negotiate handshake failure (empty challenge message)\n");
+
+      return CURLE_BAD_CONTENT_ENCODING;
+    }
+
     input_token.length = rawlen;
 
     DEBUGASSERT(input_token.value != NULL);
@@ -132,19 +128,19 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
       gss_release_buffer(&discard_st, &output_token);
     Curl_gss_log_error(conn->data, minor_status,
                        "gss_init_sec_context() failed: ");
-    return -1;
+    return CURLE_OUT_OF_MEMORY;
   }
 
   if(!output_token.value || !output_token.length) {
     if(output_token.value)
       gss_release_buffer(&discard_st, &output_token);
-    return -1;
+    return CURLE_OUT_OF_MEMORY;
   }
 
   neg_ctx->output_token = output_token;
-  return 0;
-}
 
+  return CURLE_OK;
+}
 
 CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
 {
@@ -185,7 +181,7 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
     conn->allocptr.userpwd = userp;
   }
 
-  Curl_safefree(encoded);
+  free(encoded);
 
   return (userp == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK;
 }
@@ -211,6 +207,4 @@ void Curl_cleanup_negotiate(struct SessionHandle *data)
   cleanup(&data->state.proxyneg);
 }
 
-#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */
-
-#endif /* HAVE_GSSAPI */
+#endif /* HAVE_GSSAPI && !CURL_DISABLE_HTTP && USE_SPNEGO */
index f7efe8c..acbbf6a 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -25,8 +25,8 @@
 #ifdef USE_SPNEGO
 
 /* this is for Negotiate header input */
-int Curl_input_negotiate(struct connectdata *conn, bool proxy,
-                         const char *header);
+CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
+                              const char *header);
 
 /* this is for creating Negotiate header output */
 CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy);
index d651ac9..d2643bb 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "curl_base64.h"
 #include "curl_sasl.h"
 #include "http_negotiate.h"
-#include "curl_memory.h"
 #include "curl_multibyte.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
-/* returning zero (0) means success, everything else is treated as "failure"
-   with no care exactly what the failure was */
-int Curl_input_negotiate(struct connectdata *conn, bool proxy,
-                         const char *header)
+CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
+                              const char *header)
 {
+  struct SessionHandle *data = conn->data;
   BYTE              *input_token = NULL;
   SecBufferDesc     out_buff_desc;
   SecBuffer         out_sec_buff;
   SecBufferDesc     in_buff_desc;
   SecBuffer         in_sec_buff;
-  unsigned long     context_attributes;
-  TimeStamp         expiry;
-  int ret;
+  SECURITY_STATUS   status;
+  unsigned long     attrs;
+  TimeStamp         expiry; /* For Windows 9x compatibility of SSPI calls */
   size_t len = 0, input_token_len = 0;
-  CURLcode error;
+  CURLcode result;
 
   /* Point to the username and password */
   const char *userp;
@@ -68,12 +65,12 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
   if(proxy) {
     userp = conn->proxyuser;
     passwdp = conn->proxypasswd;
-    neg_ctx = &conn->data->state.proxyneg;
+    neg_ctx = &data->state.proxyneg;
   }
   else {
     userp = conn->user;
     passwdp = conn->passwd;
-    neg_ctx = &conn->data->state.negotiate;
+    neg_ctx = &data->state.negotiate;
   }
 
   /* Not set means empty */
@@ -87,29 +84,31 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
     /* We finished successfully our part of authentication, but server
      * rejected it (since we're again here). Exit with an error since we
      * can't invent anything better */
-    Curl_cleanup_negotiate(conn->data);
-    return -1;
+    Curl_cleanup_negotiate(data);
+    return CURLE_LOGIN_DENIED;
   }
 
   if(!neg_ctx->server_name) {
     /* Check proxy auth requested but no given proxy name */
     if(proxy && !conn->proxy.name)
-      return -1;
+      return CURLE_BAD_FUNCTION_ARGUMENT;
 
     /* Generate our SPN */
-    neg_ctx->server_name = Curl_sasl_build_spn("HTTP",
-                                                proxy ? conn->proxy.name :
-                                                        conn->host.name);
+    neg_ctx->server_name = Curl_sasl_build_spn(
+      proxy ? data->set.str[STRING_PROXY_SERVICE_NAME] :
+      data->set.str[STRING_SERVICE_NAME],
+      proxy ? conn->proxy.name : conn->host.name);
     if(!neg_ctx->server_name)
-      return -1;
+      return CURLE_OUT_OF_MEMORY;
   }
 
   if(!neg_ctx->output_token) {
     PSecPkgInfo SecurityPackage;
-    ret = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NEGOTIATE),
-                                             &SecurityPackage);
-    if(ret != SEC_E_OK)
-      return -1;
+    status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *)
+                                                TEXT(SP_NAME_NEGOTIATE),
+                                                &SecurityPackage);
+    if(status != SEC_E_OK)
+      return CURLE_NOT_BUILT_IN;
 
     /* Allocate input and output buffers according to the max token size
        as indicated by the security package */
@@ -129,7 +128,7 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
     if(neg_ctx->context) {
       /* The server rejected our authentication and hasn't suppled any more
          negotiation mechanisms */
-      return -1;
+      return CURLE_LOGIN_DENIED;
     }
 
     /* We have to acquire credentials and allocate memory for the context */
@@ -137,13 +136,13 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
     neg_ctx->context = malloc(sizeof(CtxtHandle));
 
     if(!neg_ctx->credentials || !neg_ctx->context)
-      return -1;
+      return CURLE_OUT_OF_MEMORY;
 
     if(userp && *userp) {
       /* Populate our identity structure */
-      error = Curl_create_sspi_identity(userp, passwdp, &neg_ctx->identity);
-      if(error)
-        return -1;
+      result = Curl_create_sspi_identity(userp, passwdp, &neg_ctx->identity);
+      if(result)
+        return result;
 
       /* Allow proper cleanup of the identity structure */
       neg_ctx->p_identity = &neg_ctx->identity;
@@ -160,14 +159,21 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
                                          neg_ctx->p_identity, NULL, NULL,
                                          neg_ctx->credentials, &expiry);
     if(neg_ctx->status != SEC_E_OK)
-      return -1;
+      return CURLE_LOGIN_DENIED;
   }
   else {
-    error = Curl_base64_decode(header,
-                               (unsigned char **)&input_token,
-                               &input_token_len);
-    if(error || !input_token_len)
-      return -1;
+    result = Curl_base64_decode(header,
+                                (unsigned char **)&input_token,
+                                &input_token_len);
+    if(result)
+      return result;
+
+    if(!input_token_len) {
+      infof(data,
+            "Negotiate handshake failure (empty challenge message)\n");
+
+      return CURLE_BAD_CONTENT_ENCODING;
+    }
   }
 
   /* Setup the "output" security buffer */
@@ -200,28 +206,27 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
     0,
     neg_ctx->context,
     &out_buff_desc,
-    &context_attributes,
+    &attrs,
     &expiry);
 
-  Curl_safefree(input_token);
+  free(input_token);
 
   if(GSS_ERROR(neg_ctx->status))
-    return -1;
+    return CURLE_OUT_OF_MEMORY;
 
   if(neg_ctx->status == SEC_I_COMPLETE_NEEDED ||
      neg_ctx->status == SEC_I_COMPLETE_AND_CONTINUE) {
     neg_ctx->status = s_pSecFn->CompleteAuthToken(neg_ctx->context,
                                                   &out_buff_desc);
     if(GSS_ERROR(neg_ctx->status))
-      return -1;
+      return CURLE_RECV_ERROR;
   }
 
   neg_ctx->output_token_length = out_sec_buff.cbBuffer;
 
-  return 0;
+  return CURLE_OK;
 }
 
-
 CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
 {
   struct negotiatedata *neg_ctx = proxy?&conn->data->state.proxyneg:
@@ -229,14 +234,14 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
   char *encoded = NULL;
   size_t len = 0;
   char *userp;
-  CURLcode error;
+  CURLcode result;
 
-  error = Curl_base64_encode(conn->data,
-                             (const char*)neg_ctx->output_token,
-                             neg_ctx->output_token_length,
-                             &encoded, &len);
-  if(error)
-    return error;
+  result = Curl_base64_encode(conn->data,
+                              (const char*)neg_ctx->output_token,
+                              neg_ctx->output_token_length,
+                              &encoded, &len);
+  if(result)
+    return result;
 
   if(!len)
     return CURLE_REMOTE_ACCESS_DENIED;
@@ -252,7 +257,9 @@ CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
     Curl_safefree(conn->allocptr.userpwd);
     conn->allocptr.userpwd = userp;
   }
+
   free(encoded);
+
   return (userp == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK;
 }
 
index 72123ed..e082ba2 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "progress.h"
 #include "non-ascii.h"
 #include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curlx.h"
 
 #include "curl_memory.h"
@@ -71,10 +68,11 @@ CURLcode Curl_proxy_connect(struct connectdata *conn)
     conn->data->req.protop = &http_proxy;
     connkeep(conn, "HTTP proxy CONNECT");
     result = Curl_proxyCONNECT(conn, FIRSTSOCKET,
-                               conn->host.name, conn->remote_port);
+                               conn->host.name, conn->remote_port, FALSE);
     conn->data->req.protop = prot_save;
     if(CURLE_OK != result)
       return result;
+    Curl_safefree(conn->allocptr.proxyuserpwd);
 #else
     return CURLE_NOT_BUILT_IN;
 #endif
@@ -87,12 +85,16 @@ CURLcode Curl_proxy_connect(struct connectdata *conn)
  * Curl_proxyCONNECT() requires that we're connected to a HTTP proxy. This
  * function will issue the necessary commands to get a seamless tunnel through
  * this proxy. After that, the socket can be used just as a normal socket.
+ *
+ * 'blocking' set to TRUE means that this function will do the entire CONNECT
+ * + response in a blocking fashion. Should be avoided!
  */
 
 CURLcode Curl_proxyCONNECT(struct connectdata *conn,
                            int sockindex,
                            const char *hostname,
-                           int remote_port)
+                           int remote_port,
+                           bool blocking)
 {
   int subversion=0;
   struct SessionHandle *data=conn->data;
@@ -123,13 +125,11 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
       infof(data, "Establish HTTP proxy tunnel to %s:%hu\n",
             hostname, remote_port);
 
-      if(data->req.newurl) {
         /* This only happens if we've looped here due to authentication
            reasons, and we don't really use the newly cloned URL here
            then. Just free() it. */
-        free(data->req.newurl);
-        data->req.newurl = NULL;
-      }
+      free(data->req.newurl);
+      data->req.newurl = NULL;
 
       /* initialize a dynamic send-buffer */
       req_buffer = Curl_add_buffer_init();
@@ -139,7 +139,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
 
       host_port = aprintf("%s:%hu", hostname, remote_port);
       if(!host_port) {
-        free(req_buffer);
+        Curl_add_buffer_free(req_buffer);
         return CURLE_OUT_OF_MEMORY;
       }
 
@@ -150,7 +150,6 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
 
       if(!result) {
         char *host=(char *)"";
-        const char *proxyconn="";
         const char *useragent="";
         const char *http = (conn->proxytype == CURLPROXY_HTTP_1_0) ?
           "1.0" : "1.1";
@@ -159,7 +158,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
                   hostname, conn->bits.ipv6_ip?"]":"",
                   remote_port);
         if(!hostheader) {
-          free(req_buffer);
+          Curl_add_buffer_free(req_buffer);
           return CURLE_OUT_OF_MEMORY;
         }
 
@@ -167,13 +166,10 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
           host = aprintf("Host: %s\r\n", hostheader);
           if(!host) {
             free(hostheader);
-            free(req_buffer);
+            Curl_add_buffer_free(req_buffer);
             return CURLE_OUT_OF_MEMORY;
           }
         }
-        if(!Curl_checkProxyheaders(conn, "Proxy-Connection:"))
-          proxyconn = "Proxy-Connection: Keep-Alive\r\n";
-
         if(!Curl_checkProxyheaders(conn, "User-Agent:") &&
            data->set.str[STRING_USERAGENT])
           useragent = conn->allocptr.uagent;
@@ -183,15 +179,13 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
                            "CONNECT %s HTTP/%s\r\n"
                            "%s"  /* Host: */
                            "%s"  /* Proxy-Authorization */
-                           "%s"  /* User-Agent */
-                           "%s", /* Proxy-Connection */
+                           "%s", /* User-Agent */
                            hostheader,
                            http,
                            host,
                            conn->allocptr.proxyuserpwd?
                            conn->allocptr.proxyuserpwd:"",
-                           useragent,
-                           proxyconn);
+                           useragent);
 
         if(host && *host)
           free(host);
@@ -216,7 +210,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
           failf(data, "Failed sending CONNECT to proxy");
       }
 
-      Curl_safefree(req_buffer);
+      Curl_add_buffer_free(req_buffer);
       if(result)
         return result;
 
@@ -229,12 +223,14 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
       return CURLE_RECV_ERROR;
     }
 
-    if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0))
-      /* return so we'll be called again polling-style */
-      return CURLE_OK;
-    else {
-      DEBUGF(infof(data,
-                   "Read response immediately from proxy CONNECT\n"));
+    if(!blocking) {
+      if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0))
+        /* return so we'll be called again polling-style */
+        return CURLE_OK;
+      else {
+        DEBUGF(infof(data,
+               "Read response immediately from proxy CONNECT\n"));
+      }
     }
 
     /* at this point, the tunnel_connecting phase is over. */
@@ -285,7 +281,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
               /* proxy auth was requested and there was proxy auth available,
                  then deem this as "mere" proxy disconnect */
               conn->bits.proxy_connect_closed = TRUE;
-              infof(data, "Proxy CONNECT connection closed");
+              infof(data, "Proxy CONNECT connection closed\n");
             }
             else {
               error = SELECT_ERROR;
@@ -467,7 +463,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
 
                     result = Curl_http_input_auth(conn, proxy, auth);
 
-                    Curl_safefree(auth);
+                    free(auth);
 
                     if(result)
                       return result;
@@ -554,11 +550,8 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
       infof(data, "Connect me again please\n");
     }
     else {
-      if(data->req.newurl) {
-        /* this won't be used anymore for the CONNECT so free it now */
-        free(data->req.newurl);
-        data->req.newurl = NULL;
-      }
+      free(data->req.newurl);
+      data->req.newurl = NULL;
       /* failure, close this connection to avoid re-use */
       connclose(conn, "proxy CONNECT failure");
       Curl_closesocket(conn, conn->sock[sockindex]);
index 2b5e9c9..fd04330 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -26,7 +26,8 @@
 /* ftp can use this as well */
 CURLcode Curl_proxyCONNECT(struct connectdata *conn,
                            int tunnelsocket,
-                           const char *hostname, int remote_port);
+                           const char *hostname, int remote_port,
+                           bool blocking);
 
 /* Default proxy timeout in milliseconds */
 #define PROXY_TIMEOUT (3600*1000)
@@ -34,7 +35,7 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
 CURLcode Curl_proxy_connect(struct connectdata *conn);
 
 #else
-#define Curl_proxyCONNECT(x,y,z,w) CURLE_NOT_BUILT_IN
+#define Curl_proxyCONNECT(x,y,z,w,v) CURLE_NOT_BUILT_IN
 #define Curl_proxy_connect(x) CURLE_OK
 #endif
 
index b369723..8dc300b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #ifdef USE_WIN32_IDN
 
 #include "curl_multibyte.h"
-
 #include "curl_memory.h"
-/* The last #include file should be: */
+#include "warnless.h"
+
+  /* The last #include file should be: */
 #include "memdebug.h"
 
 #ifdef WANT_IDN_PROTOTYPES
@@ -64,45 +65,47 @@ WINBASEAPI int WINAPI IdnToUnicode(DWORD dwFlags,
 
 #define IDN_MAX_LENGTH 255
 
-int curl_win32_idn_to_ascii(const char *in, char **out);
-int curl_win32_ascii_to_idn(const char *in, size_t in_len, char **out_utf8);
+bool curl_win32_idn_to_ascii(const char *in, char **out);
+bool curl_win32_ascii_to_idn(const char *in, char **out);
 
-int curl_win32_idn_to_ascii(const char *in, char **out)
+bool curl_win32_idn_to_ascii(const char *in, char **out)
 {
+  bool success = FALSE;
+
   wchar_t *in_w = Curl_convert_UTF8_to_wchar(in);
   if(in_w) {
     wchar_t punycode[IDN_MAX_LENGTH];
-    if(IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH) == 0) {
-      wprintf(L"ERROR %d converting to Punycode\n", GetLastError());
-      free(in_w);
-      return 0;
-    }
+    int chars = IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH);
     free(in_w);
-
-    *out = Curl_convert_wchar_to_UTF8(punycode);
-    if(!*out)
-      return 0;
+    if(chars) {
+      *out = Curl_convert_wchar_to_UTF8(punycode);
+      if(*out)
+        success = TRUE;
+    }
   }
-  return 1;
+
+  return success;
 }
 
-int curl_win32_ascii_to_idn(const char *in, size_t in_len, char **out_utf8)
+bool curl_win32_ascii_to_idn(const char *in, char **out)
 {
-  (void)in_len; /* unused */
-  if(in) {
-    WCHAR unicode[IDN_MAX_LENGTH];
+  bool success = FALSE;
 
-    if(IdnToUnicode(0, (wchar_t *)in, -1, unicode, IDN_MAX_LENGTH) == 0) {
-      wprintf(L"ERROR %d converting to Punycode\n", GetLastError());
-      return 0;
-    }
-    else {
-      *out_utf8 = Curl_convert_wchar_to_UTF8(unicode);
-      if(!*out_utf8)
-        return 0;
+  wchar_t *in_w = Curl_convert_UTF8_to_wchar(in);
+  if(in_w) {
+    size_t in_len = wcslen(in_w) + 1;
+    wchar_t unicode[IDN_MAX_LENGTH];
+    int chars = IdnToUnicode(0, in_w, curlx_uztosi(in_len),
+                             unicode, IDN_MAX_LENGTH);
+    free(in_w);
+    if(chars) {
+      *out = Curl_convert_wchar_to_UTF8(unicode);
+      if(*out)
+        success = TRUE;
     }
   }
-  return 1;
+
+  return success;
 }
 
 #endif /* USE_WIN32_IDN */
index 389feed..63bea54 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -53,9 +53,7 @@
 #include "inet_ntop.h"
 #include "strequal.h"
 #include "if2ip.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -70,7 +68,7 @@ unsigned int Curl_ipv6_scope(const struct sockaddr *sa)
   (void) sa;
 #else
   if(sa->sa_family == AF_INET6) {
-    const struct sockaddr_in6 * sa6 = (const struct sockaddr_in6 *) sa;
+    const struct sockaddr_in6 * sa6 = (const struct sockaddr_in6 *)(void *) sa;
     const unsigned char * b = sa6->sin6_addr.s6_addr;
     unsigned short w = (unsigned short) ((b[0] << 8) | b[1]);
 
@@ -154,11 +152,12 @@ if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
                 continue;
               }
 
-              addr = &((struct sockaddr_in6 *)iface->ifa_addr)->sin6_addr;
+              addr =
+                &((struct sockaddr_in6 *)(void *)iface->ifa_addr)->sin6_addr;
 #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
               /* Include the scope of this interface as part of the address */
-              scopeid =
-                ((struct sockaddr_in6 *)iface->ifa_addr)->sin6_scope_id;
+              scopeid = ((struct sockaddr_in6 *)(void *)iface->ifa_addr)
+                            ->sin6_scope_id;
 
               /* If given, scope id should match. */
               if(remote_scope_id && scopeid != remote_scope_id) {
@@ -173,7 +172,8 @@ if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
             }
             else
 #endif
-              addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr;
+              addr =
+                  &((struct sockaddr_in *)(void *)iface->ifa_addr)->sin_addr;
             res = IF2IP_FOUND;
             ip = (char *) Curl_inet_ntop(af, addr, ipstr, sizeof(ipstr));
             snprintf(buf, buf_size, "%s%s", ip, scope);
index 78bb0bd..f3a7ff0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 767ac80..ff25e54 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -80,9 +80,7 @@
 #include "rawstr.h"
 #include "curl_sasl.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -100,15 +98,17 @@ static int imap_getsock(struct connectdata *conn, curl_socket_t *socks,
                         int numsocks);
 static CURLcode imap_doing(struct connectdata *conn, bool *dophase_done);
 static CURLcode imap_setup_connection(struct connectdata *conn);
-static char *imap_atom(const char *str);
+static char *imap_atom(const char *str, bool escape_only);
 static CURLcode imap_sendf(struct connectdata *conn, const char *fmt, ...);
 static CURLcode imap_parse_url_options(struct connectdata *conn);
 static CURLcode imap_parse_url_path(struct connectdata *conn);
 static CURLcode imap_parse_custom_request(struct connectdata *conn);
-static CURLcode imap_calc_sasl_details(struct connectdata *conn,
-                                       const char **mech,
-                                       char **initresp, size_t *len,
-                                       imapstate *state1, imapstate *state2);
+static CURLcode imap_perform_authenticate(struct connectdata *conn,
+                                          const char *mech,
+                                          const char *initresp);
+static CURLcode imap_continue_authenticate(struct connectdata *conn,
+                                           const char *resp);
+static void imap_get_message(char *buffer, char** outptr);
 
 /*
  * IMAP protocol handler.
@@ -131,7 +131,7 @@ const struct Curl_handler Curl_handler_imap = {
   ZERO_NULL,                        /* readwrite */
   PORT_IMAP,                        /* defport */
   CURLPROTO_IMAP,                   /* protocol */
-  PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD  /* flags */
+  PROTOPT_CLOSEACTION               /* flags */
 };
 
 #ifdef USE_SSL
@@ -156,8 +156,7 @@ const struct Curl_handler Curl_handler_imaps = {
   ZERO_NULL,                        /* readwrite */
   PORT_IMAPS,                       /* defport */
   CURLPROTO_IMAPS,                  /* protocol */
-  PROTOPT_CLOSEACTION | PROTOPT_SSL |
-  PROTOPT_NEEDSPWD                  /* flags */
+  PROTOPT_CLOSEACTION | PROTOPT_SSL /* flags */
 };
 #endif
 
@@ -213,10 +212,26 @@ static const struct Curl_handler Curl_handler_imaps_proxy = {
 #endif
 #endif
 
+/* SASL parameters for the imap protocol */
+static const struct SASLproto saslimap = {
+  "imap",                     /* The service name */
+  '+',                        /* Code received when continuation is expected */
+  'O',                        /* Code to receive upon authentication success */
+  0,                          /* Maximum initial response length (no max) */
+  imap_perform_authenticate,  /* Send authentication command */
+  imap_continue_authenticate, /* Send authentication continuation */
+  imap_get_message            /* Get SASL response message */
+};
+
+
 #ifdef USE_SSL
 static void imap_to_imaps(struct connectdata *conn)
 {
+  /* Change the connection handler */
   conn->handler = &Curl_handler_imaps;
+
+  /* Set the connection's upgraded to TLS flag */
+  conn->tls_upgraded = TRUE;
 }
 #else
 #define imap_to_imaps(x) Curl_nop_stmt
@@ -349,20 +364,11 @@ static bool imap_endofresp(struct connectdata *conn, char *line, size_t len,
      a space and optionally some text as per RFC-3501 for the AUTHENTICATE and
      APPEND commands and as outlined in Section 4. Examples of RFC-4959 but
      some e-mail servers ignore this and only send a single + instead. */
-  if((len == 3 && !memcmp("+", line, 1)) ||
-     (len >= 2 && !memcmp("+ ", line, 2))) {
+  if(!imap->custom && ((len == 3 && !memcmp("+", line, 1)) ||
+     (len >= 2 && !memcmp("+ ", line, 2)))) {
     switch(imapc->state) {
       /* States which are interested in continuation responses */
-      case IMAP_AUTHENTICATE_PLAIN:
-      case IMAP_AUTHENTICATE_LOGIN:
-      case IMAP_AUTHENTICATE_LOGIN_PASSWD:
-      case IMAP_AUTHENTICATE_CRAMMD5:
-      case IMAP_AUTHENTICATE_DIGESTMD5:
-      case IMAP_AUTHENTICATE_DIGESTMD5_RESP:
-      case IMAP_AUTHENTICATE_NTLM:
-      case IMAP_AUTHENTICATE_NTLM_TYPE2MSG:
-      case IMAP_AUTHENTICATE_XOAUTH2:
-      case IMAP_AUTHENTICATE_FINAL:
+      case IMAP_AUTHENTICATE:
       case IMAP_APPEND:
         *resp = '+';
         break;
@@ -425,20 +431,7 @@ static void state(struct connectdata *conn, imapstate newstate)
     "CAPABILITY",
     "STARTTLS",
     "UPGRADETLS",
-    "AUTHENTICATE_PLAIN",
-    "AUTHENTICATE_LOGIN",
-    "AUTHENTICATE_LOGIN_PASSWD",
-    "AUTHENTICATE_CRAMMD5",
-    "AUTHENTICATE_DIGESTMD5",
-    "AUTHENTICATE_DIGESTMD5_RESP",
-    "AUTHENTICATE_NTLM",
-    "AUTHENTICATE_NTLM_TYPE2MSG",
-    "AUTHENTICATE_GSSAPI",
-    "AUTHENTICATE_GSSAPI_TOKEN",
-    "AUTHENTICATE_GSSAPI_NO_DATA",
-    "AUTHENTICATE_XOAUTH2",
-    "AUTHENTICATE_CANCEL",
-    "AUTHENTICATE_FINAL",
+    "AUTHENTICATE",
     "LOGIN",
     "LIST",
     "SELECT",
@@ -471,9 +464,9 @@ static CURLcode imap_perform_capability(struct connectdata *conn)
   CURLcode result = CURLE_OK;
   struct imap_conn *imapc = &conn->proto.imapc;
 
-  imapc->authmechs = 0;         /* No known authentication mechanisms yet */
-  imapc->authused = 0;          /* Clear the authentication mechanism used */
-  imapc->tls_supported = FALSE; /* Clear the TLS capability */
+  imapc->sasl.authmechs = SASL_AUTH_NONE; /* No known auth. mechanisms yet */
+  imapc->sasl.authused = SASL_AUTH_NONE;  /* Clear the auth. mechanism used */
+  imapc->tls_supported = FALSE;           /* Clear the TLS capability */
 
   /* Send the CAPABILITY command */
   result = imap_sendf(conn, "CAPABILITY");
@@ -551,15 +544,15 @@ static CURLcode imap_perform_login(struct connectdata *conn)
   }
 
   /* Make sure the username and password are in the correct atom format */
-  user = imap_atom(conn->user);
-  passwd = imap_atom(conn->passwd);
+  user = imap_atom(conn->user, false);
+  passwd = imap_atom(conn->passwd, false);
 
   /* Send the LOGIN command */
   result = imap_sendf(conn, "LOGIN %s %s", user ? user : "",
                       passwd ? passwd : "");
 
-  Curl_safefree(user);
-  Curl_safefree(passwd);
+  free(user);
+  free(passwd);
 
   if(!result)
     state(conn, IMAP_LOGIN);
@@ -576,24 +569,17 @@ static CURLcode imap_perform_login(struct connectdata *conn)
  */
 static CURLcode imap_perform_authenticate(struct connectdata *conn,
                                           const char *mech,
-                                          const char *initresp,
-                                          imapstate state1, imapstate state2)
+                                          const char *initresp)
 {
   CURLcode result = CURLE_OK;
 
   if(initresp) {
     /* Send the AUTHENTICATE command with the initial response */
     result = imap_sendf(conn, "AUTHENTICATE %s %s", mech, initresp);
-
-    if(!result)
-      state(conn, state2);
   }
   else {
     /* Send the AUTHENTICATE command */
     result = imap_sendf(conn, "AUTHENTICATE %s", mech);
-
-    if(!result)
-      state(conn, state1);
   }
 
   return result;
@@ -601,6 +587,20 @@ static CURLcode imap_perform_authenticate(struct connectdata *conn,
 
 /***********************************************************************
  *
+ * imap_continue_authenticate()
+ *
+ * Sends SASL continuation data or cancellation.
+ */
+static CURLcode imap_continue_authenticate(struct connectdata *conn,
+                                           const char *resp)
+{
+  struct imap_conn *imapc = &conn->proto.imapc;
+
+  return Curl_pp_sendf(&imapc->pp, "%s", resp);
+}
+
+/***********************************************************************
+ *
  * imap_perform_authentication()
  *
  * Initiates the authentication sequence, with the appropriate SASL
@@ -611,31 +611,22 @@ static CURLcode imap_perform_authentication(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
   struct imap_conn *imapc = &conn->proto.imapc;
-  const char *mech = NULL;
-  char *initresp = NULL;
-  size_t len = 0;
-  imapstate state1 = IMAP_STOP;
-  imapstate state2 = IMAP_STOP;
+  saslprogress progress;
 
-  /* Check we have a username and password to authenticate with and end the
+  /* Check we have enough data to authenticate with and end the
      connect phase if we don't */
-  if(!conn->bits.user_passwd) {
+  if(!Curl_sasl_can_authenticate(&imapc->sasl, conn)) {
     state(conn, IMAP_STOP);
-
     return result;
   }
 
   /* Calculate the SASL login details */
-  result = imap_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
-                                  &state2);
+  result = Curl_sasl_start(&imapc->sasl, conn, imapc->ir_supported, &progress);
 
   if(!result) {
-    if(mech && (imapc->preftype & IMAP_TYPE_SASL)) {
-      /* Perform SASL based authentication */
-      result = imap_perform_authenticate(conn, mech, initresp, state1, state2);
-    }
-    else if((!imapc->login_disabled) &&
-            (imapc->preftype & IMAP_TYPE_CLEARTEXT))
+    if(progress == SASL_INPROGRESS)
+      state(conn, IMAP_AUTHENTICATE);
+    else if(!imapc->login_disabled && (imapc->preftype & IMAP_TYPE_CLEARTEXT))
       /* Perform clear text authentication */
       result = imap_perform_login(conn);
     else {
@@ -645,8 +636,6 @@ static CURLcode imap_perform_authentication(struct connectdata *conn)
     }
   }
 
-  Curl_safefree(initresp);
-
   return result;
 }
 
@@ -668,15 +657,15 @@ static CURLcode imap_perform_list(struct connectdata *conn)
     result = imap_sendf(conn, "%s%s", imap->custom,
                         imap->custom_params ? imap->custom_params : "");
   else {
-    /* Make sure the mailbox is in the correct atom format */
-    mailbox = imap_atom(imap->mailbox ? imap->mailbox : "");
+    /* Make sure the mailbox is in the correct atom format if necessary */
+    mailbox = imap->mailbox ? imap_atom(imap->mailbox, true) : strdup("");
     if(!mailbox)
       return CURLE_OUT_OF_MEMORY;
 
     /* Send the LIST command */
     result = imap_sendf(conn, "LIST \"%s\" *", mailbox);
 
-    Curl_safefree(mailbox);
+    free(mailbox);
   }
 
   if(!result)
@@ -710,14 +699,14 @@ static CURLcode imap_perform_select(struct connectdata *conn)
   }
 
   /* Make sure the mailbox is in the correct atom format */
-  mailbox = imap_atom(imap->mailbox);
+  mailbox = imap_atom(imap->mailbox, false);
   if(!mailbox)
     return CURLE_OUT_OF_MEMORY;
 
   /* Send the SELECT command */
   result = imap_sendf(conn, "SELECT %s", mailbox);
 
-  Curl_safefree(mailbox);
+  free(mailbox);
 
   if(!result)
     state(conn, IMAP_SELECT);
@@ -784,7 +773,7 @@ static CURLcode imap_perform_append(struct connectdata *conn)
   }
 
   /* Make sure the mailbox is in the correct atom format */
-  mailbox = imap_atom(imap->mailbox);
+  mailbox = imap_atom(imap->mailbox, false);
   if(!mailbox)
     return CURLE_OUT_OF_MEMORY;
 
@@ -792,7 +781,7 @@ static CURLcode imap_perform_append(struct connectdata *conn)
   result = imap_sendf(conn, "APPEND %s (\\Seen) {%" CURL_FORMAT_CURL_OFF_T "}",
                       mailbox, conn->data->state.infilesize);
 
-  Curl_safefree(mailbox);
+  free(mailbox);
 
   if(!result)
     state(conn, IMAP_APPEND);
@@ -914,26 +903,16 @@ static CURLcode imap_state_capability_resp(struct connectdata *conn,
 
       /* Do we have a SASL based authentication mechanism? */
       else if(wordlen > 5 && !memcmp(line, "AUTH=", 5)) {
+        size_t llen;
+        unsigned int mechbit;
+
         line += 5;
         wordlen -= 5;
 
         /* Test the word for a matching authentication mechanism */
-        if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_LOGIN))
-          imapc->authmechs |= SASL_MECH_LOGIN;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_PLAIN))
-          imapc->authmechs |= SASL_MECH_PLAIN;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_CRAM_MD5))
-          imapc->authmechs |= SASL_MECH_CRAM_MD5;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_DIGEST_MD5))
-          imapc->authmechs |= SASL_MECH_DIGEST_MD5;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_GSSAPI))
-          imapc->authmechs |= SASL_MECH_GSSAPI;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_EXTERNAL))
-          imapc->authmechs |= SASL_MECH_EXTERNAL;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_NTLM))
-          imapc->authmechs |= SASL_MECH_NTLM;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_XOAUTH2))
-          imapc->authmechs |= SASL_MECH_XOAUTH2;
+        mechbit = Curl_sasl_decode_mech(line, wordlen, &llen);
+        if(mechbit && llen == wordlen)
+          imapc->sasl.authmechs |= mechbit;
       }
 
       line += wordlen;
@@ -986,569 +965,36 @@ static CURLcode imap_state_starttls_resp(struct connectdata *conn,
   return result;
 }
 
-/* For AUTHENTICATE PLAIN (without initial response) responses */
-static CURLcode imap_state_auth_plain_resp(struct connectdata *conn,
-                                           int imapcode,
-                                           imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *plainauth = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied. %c", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the authorisation message */
-    result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
-                                            &plainauth, &len);
-    if(!result && plainauth) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", plainauth);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_FINAL);
-    }
-  }
-
-  Curl_safefree(plainauth);
-
-  return result;
-}
-
-/* For AUTHENTICATE LOGIN (without initial response) responses */
-static CURLcode imap_state_auth_login_resp(struct connectdata *conn,
-                                           int imapcode,
-                                           imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *authuser = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the user message */
-    result = Curl_sasl_create_login_message(data, conn->user,
-                                            &authuser, &len);
-    if(!result && authuser) {
-      /* Send the user */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", authuser);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_LOGIN_PASSWD);
-    }
-  }
-
-  Curl_safefree(authuser);
-
-  return result;
-}
-
-/* For AUTHENTICATE LOGIN user entry responses */
-static CURLcode imap_state_auth_login_password_resp(struct connectdata *conn,
-                                                    int imapcode,
-                                                    imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *authpasswd = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the password message */
-    result = Curl_sasl_create_login_message(data, conn->passwd,
-                                            &authpasswd, &len);
-    if(!result && authpasswd) {
-      /* Send the password */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", authpasswd);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_FINAL);
-    }
-  }
-
-  Curl_safefree(authpasswd);
-
-  return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For AUTHENTICATE CRAM-MD5 responses */
-static CURLcode imap_state_auth_cram_resp(struct connectdata *conn,
-                                          int imapcode,
-                                          imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlg = NULL;
-  char *chlg64 = NULL;
-  char *rplyb64 = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    return CURLE_LOGIN_DENIED;
-  }
-
-  /* Get the challenge message */
-  imap_get_message(data->state.buffer, &chlg64);
-
-  /* Decode the challenge message */
-  result = Curl_sasl_decode_cram_md5_message(chlg64, &chlg, &len);
-  if(result) {
-    /* Send the cancellation */
-    result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
-    if(!result)
-      state(conn, IMAP_AUTHENTICATE_CANCEL);
-  }
-  else {
-    /* Create the response message */
-    result = Curl_sasl_create_cram_md5_message(data, chlg, conn->user,
-                                               conn->passwd, &rplyb64, &len);
-    if(!result && rplyb64) {
-      /* Send the response */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", rplyb64);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_FINAL);
-    }
-  }
-
-  Curl_safefree(chlg);
-  Curl_safefree(rplyb64);
-
-  return result;
-}
-
-/* For AUTHENTICATE DIGEST-MD5 challenge responses */
-static CURLcode imap_state_auth_digest_resp(struct connectdata *conn,
-                                            int imapcode,
-                                            imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlg64 = NULL;
-  char *rplyb64 = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    return CURLE_LOGIN_DENIED;
-  }
-
-  /* Get the challenge message */
-  imap_get_message(data->state.buffer, &chlg64);
-
-  /* Create the response message */
-  result = Curl_sasl_create_digest_md5_message(data, chlg64,
-                                               conn->user, conn->passwd,
-                                               "imap", &rplyb64, &len);
-  if(result) {
-    if(result == CURLE_BAD_CONTENT_ENCODING) {
-      /* Send the cancellation */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_CANCEL);
-    }
-  }
-  else {
-    /* Send the response */
-    result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", rplyb64);
-
-    if(!result)
-      state(conn, IMAP_AUTHENTICATE_DIGESTMD5_RESP);
-  }
-
-  Curl_safefree(rplyb64);
-
-  return result;
-}
-
-/* For AUTHENTICATE DIGEST-MD5 challenge-response responses */
-static CURLcode imap_state_auth_digest_resp_resp(struct connectdata *conn,
-                                                 int imapcode,
-                                                 imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Authentication failed: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Send an empty response */
-    result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "");
-
-    if(!result)
-      state(conn, IMAP_AUTHENTICATE_FINAL);
-  }
-
-  return result;
-}
-#endif
-
-#ifdef USE_NTLM
-/* For AUTHENTICATE NTLM (without initial response) responses */
-static CURLcode imap_state_auth_ntlm_resp(struct connectdata *conn,
-                                          int imapcode,
-                                          imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *type1msg = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the type-1 message */
-    result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                 &conn->ntlm,
-                                                 &type1msg, &len);
-    if(!result && type1msg) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", type1msg);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_NTLM_TYPE2MSG);
-    }
-  }
-
-  Curl_safefree(type1msg);
-
-  return result;
-}
-
-/* For NTLM type-2 responses (sent in reponse to our type-1 message) */
-static CURLcode imap_state_auth_ntlm_type2msg_resp(struct connectdata *conn,
-                                                   int imapcode,
-                                                   imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *type2msg = NULL;
-  char *type3msg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    imap_get_message(data->state.buffer, &type2msg);
-
-    /* Decode the type-2 message */
-    result = Curl_sasl_decode_ntlm_type2_message(data, type2msg, &conn->ntlm);
-    if(result) {
-      /* Send the cancellation */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_CANCEL);
-    }
-    else {
-      /* Create the type-3 message */
-      result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
-                                                   conn->passwd, &conn->ntlm,
-                                                   &type3msg, &len);
-      if(!result && type3msg) {
-        /* Send the message */
-        result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", type3msg);
-
-        if(!result)
-          state(conn, IMAP_AUTHENTICATE_FINAL);
-      }
-    }
-  }
-
-  Curl_safefree(type3msg);
-
-  return result;
-}
-#endif
-
-#if defined(USE_KERBEROS5)
-/* For AUTHENTICATE GSSAPI (without initial response) responses */
-static CURLcode imap_state_auth_gssapi_resp(struct connectdata *conn,
-                                            int imapcode,
-                                            imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct imap_conn *imapc = &conn->proto.imapc;
-  size_t len = 0;
-  char *respmsg = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the initial response message */
-    result = Curl_sasl_create_gssapi_user_message(data, conn->user,
-                                                  conn->passwd, "imap",
-                                                  imapc->mutual_auth,
-                                                  NULL, &conn->krb5,
-                                                  &respmsg, &len);
-    if(!result && respmsg) {
-      /* Send the message */
-      result = Curl_pp_sendf(&imapc->pp, "%s", respmsg);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_GSSAPI_TOKEN);
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-
-/* For AUTHENTICATE GSSAPI user token responses */
-static CURLcode imap_state_auth_gssapi_token_resp(struct connectdata *conn,
-                                                  int imapcode,
-                                                  imapstate instate)
+/* For SASL authentication responses */
+static CURLcode imap_state_auth_resp(struct connectdata *conn,
+                                     int imapcode,
+                                     imapstate instate)
 {
   CURLcode result = CURLE_OK;
   struct SessionHandle *data = conn->data;
   struct imap_conn *imapc = &conn->proto.imapc;
-  char *chlgmsg = NULL;
-  char *respmsg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    imap_get_message(data->state.buffer, &chlgmsg);
-
-    if(imapc->mutual_auth)
-      /* Decode the user token challenge and create the optional response
-         message */
-      result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
-                                                    imapc->mutual_auth,
-                                                    chlgmsg, &conn->krb5,
-                                                    &respmsg, &len);
-    else
-      /* Decode the security challenge and create the response message */
-      result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
-                                                        &conn->krb5,
-                                                        &respmsg, &len);
-
-    if(result) {
-      if(result == CURLE_BAD_CONTENT_ENCODING) {
-        /* Send the cancellation */
-        result = Curl_pp_sendf(&imapc->pp, "%s", "*");
-
-        if(!result)
-          state(conn, IMAP_AUTHENTICATE_CANCEL);
-      }
-    }
-    else {
-      /* Send the response */
-      if(respmsg)
-        result = Curl_pp_sendf(&imapc->pp, "%s", respmsg);
-      else
-        result = Curl_pp_sendf(&imapc->pp, "%s", "");
-
-      if(!result)
-        state(conn, (imapc->mutual_auth ? IMAP_AUTHENTICATE_GSSAPI_NO_DATA :
-                                          IMAP_AUTHENTICATE_FINAL));
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-
-/* For AUTHENTICATE GSSAPI no data responses */
-static CURLcode imap_state_auth_gssapi_no_data_resp(struct connectdata *conn,
-                                                    int imapcode,
-                                                    imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlgmsg = NULL;
-  char *respmsg = NULL;
-  size_t len = 0;
+  saslprogress progress;
 
   (void)instate; /* no use for this yet */
 
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    imap_get_message(data->state.buffer, &chlgmsg);
-
-    /* Decode the security challenge and create the response message */
-    result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
-                                                      &conn->krb5,
-                                                      &respmsg, &len);
-    if(result) {
-      if(result == CURLE_BAD_CONTENT_ENCODING) {
-        /* Send the cancellation */
-        result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
-        if(!result)
-          state(conn, IMAP_AUTHENTICATE_CANCEL);
-      }
-    }
-    else {
-      /* Send the response */
-      if(respmsg) {
-        result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", respmsg);
-
-        if(!result)
-          state(conn, IMAP_AUTHENTICATE_FINAL);
+  result = Curl_sasl_continue(&imapc->sasl, conn, imapcode, &progress);
+  if(!result)
+    switch(progress) {
+    case SASL_DONE:
+      state(conn, IMAP_STOP);  /* Authenticated */
+      break;
+    case SASL_IDLE:            /* No mechanism left after cancellation */
+      if((!imapc->login_disabled) && (imapc->preftype & IMAP_TYPE_CLEARTEXT))
+        /* Perform clear text authentication */
+        result = imap_perform_login(conn);
+      else {
+        failf(data, "Authentication cancelled");
+        result = CURLE_LOGIN_DENIED;
       }
+      break;
+    default:
+      break;
     }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-#endif
-
-/* For AUTHENTICATE XOAUTH2 (without initial response) responses */
-static CURLcode imap_state_auth_xoauth2_resp(struct connectdata *conn,
-                                             int imapcode,
-                                             imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *xoauth = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != '+') {
-    failf(data, "Access denied: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the authorisation message */
-    result = Curl_sasl_create_xoauth2_message(conn->data, conn->user,
-                                              conn->xoauth2_bearer,
-                                              &xoauth, &len);
-    if(!result && xoauth) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", xoauth);
-
-      if(!result)
-        state(conn, IMAP_AUTHENTICATE_FINAL);
-    }
-  }
-
-  Curl_safefree(xoauth);
-
-  return result;
-}
-
-/* For AUTHENTICATE cancellation responses */
-static CURLcode imap_state_auth_cancel_resp(struct connectdata *conn,
-                                            int imapcode,
-                                            imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct imap_conn *imapc = &conn->proto.imapc;
-  const char *mech = NULL;
-  char *initresp = NULL;
-  size_t len = 0;
-  imapstate state1 = IMAP_STOP;
-  imapstate state2 = IMAP_STOP;
-
-  (void)imapcode;
-  (void)instate; /* no use for this yet */
-
-  /* Remove the offending mechanism from the supported list */
-  imapc->authmechs ^= imapc->authused;
-
-  /* Calculate alternative SASL login details */
-  result = imap_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
-                                  &state2);
-
-  if(!result) {
-    /* Do we have any mechanisms left or can we fallback to clear text? */
-    if(mech) {
-      /* Retry SASL based authentication */
-      result = imap_perform_authenticate(conn, mech, initresp, state1, state2);
-
-      Curl_safefree(initresp);
-    }
-    else if((!imapc->login_disabled) &&
-            (imapc->preftype & IMAP_TYPE_CLEARTEXT))
-      /* Perform clear text authentication */
-      result = imap_perform_login(conn);
-    else {
-      failf(data, "Authentication cancelled");
-
-      result = CURLE_LOGIN_DENIED;
-    }
-  }
-
-  return result;
-}
-
-/* For final responses in the AUTHENTICATE sequence */
-static CURLcode imap_state_auth_final_resp(struct connectdata *conn,
-                                           int imapcode,
-                                           imapstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-
-  (void)instate; /* no use for this yet */
-
-  if(imapcode != 'O') {
-    failf(data, "Authentication failed: %d", imapcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else
-    /* End of connect phase */
-    state(conn, IMAP_STOP);
 
   return result;
 }
@@ -1656,7 +1102,7 @@ static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
   struct pingpong *pp = &imapc->pp;
   const char *ptr = data->state.buffer;
   bool parsed = FALSE;
-  curl_off_t size;
+  curl_off_t size = 0;
 
   (void)instate; /* no use for this yet */
 
@@ -1872,69 +1318,8 @@ static CURLcode imap_statemach_act(struct connectdata *conn)
       result = imap_state_starttls_resp(conn, imapcode, imapc->state);
       break;
 
-    case IMAP_AUTHENTICATE_PLAIN:
-      result = imap_state_auth_plain_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_LOGIN:
-      result = imap_state_auth_login_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_LOGIN_PASSWD:
-      result = imap_state_auth_login_password_resp(conn, imapcode,
-                                                   imapc->state);
-      break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-    case IMAP_AUTHENTICATE_CRAMMD5:
-      result = imap_state_auth_cram_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_DIGESTMD5:
-      result = imap_state_auth_digest_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_DIGESTMD5_RESP:
-      result = imap_state_auth_digest_resp_resp(conn, imapcode, imapc->state);
-      break;
-#endif
-
-#ifdef USE_NTLM
-    case IMAP_AUTHENTICATE_NTLM:
-      result = imap_state_auth_ntlm_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_NTLM_TYPE2MSG:
-      result = imap_state_auth_ntlm_type2msg_resp(conn, imapcode,
-                                                  imapc->state);
-      break;
-#endif
-
-#if defined(USE_KERBEROS5)
-    case IMAP_AUTHENTICATE_GSSAPI:
-      result = imap_state_auth_gssapi_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_GSSAPI_TOKEN:
-      result = imap_state_auth_gssapi_token_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_GSSAPI_NO_DATA:
-      result = imap_state_auth_gssapi_no_data_resp(conn, imapcode,
-                                                   imapc->state);
-      break;
-#endif
-
-    case IMAP_AUTHENTICATE_XOAUTH2:
-      result = imap_state_auth_xoauth2_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_CANCEL:
-      result = imap_state_auth_cancel_resp(conn, imapcode, imapc->state);
-      break;
-
-    case IMAP_AUTHENTICATE_FINAL:
-      result = imap_state_auth_final_resp(conn, imapcode, imapc->state);
+    case IMAP_AUTHENTICATE:
+      result = imap_state_auth_resp(conn, imapcode, imapc->state);
       break;
 
     case IMAP_LOGIN:
@@ -2061,7 +1446,7 @@ static CURLcode imap_connect(struct connectdata *conn, bool *done)
 
   /* Set the default preferred authentication type and mechanism */
   imapc->preftype = IMAP_TYPE_ANY;
-  imapc->prefmech = SASL_AUTH_ANY;
+  Curl_sasl_init(&imapc->sasl, &saslimap);
 
   /* Initialise the pingpong layer */
   Curl_pp_init(pp);
@@ -2274,7 +1659,7 @@ static CURLcode imap_disconnect(struct connectdata *conn, bool dead_connection)
   Curl_pp_disconnect(&imapc->pp);
 
   /* Cleanup the SASL module */
-  Curl_sasl_cleanup(conn, imapc->authused);
+  Curl_sasl_cleanup(conn, imapc->sasl.authused);
 
   /* Cleanup our connection based variables */
   Curl_safefree(imapc->mailbox);
@@ -2357,6 +1742,10 @@ static CURLcode imap_setup_connection(struct connectdata *conn)
   if(result)
     return result;
 
+  /* Clear the TLS upgraded flag */
+  conn->tls_upgraded = FALSE;
+
+  /* Set up the proxy if necessary */
   if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
     /* Unless we have asked to tunnel IMAP operations through the proxy, we
        switch and use HTTP operations only */
@@ -2419,7 +1808,7 @@ static CURLcode imap_sendf(struct connectdata *conn, const char *fmt, ...)
   result = Curl_pp_vsendf(&imapc->pp, taggedfmt, ap);
   va_end(ap);
 
-  Curl_safefree(taggedfmt);
+  free(taggedfmt);
 
   return result;
 }
@@ -2434,38 +1823,48 @@ static CURLcode imap_sendf(struct connectdata *conn, const char *fmt, ...)
  * The returned string needs to be freed.
  *
  */
-static char *imap_atom(const char *str)
+static char *imap_atom(const char *str, bool escape_only)
 {
+  const char atom_specials[] = "(){ %*]";
   const char *p1;
   char *p2;
   size_t backsp_count = 0;
   size_t quote_count = 0;
-  bool space_exists = FALSE;
+  bool others_exists = FALSE;
   size_t newlen = 0;
   char *newstr = NULL;
 
   if(!str)
     return NULL;
 
-  /* Count any unescaped characters */
+  /* Look for "atom-specials", counting the backslash and quote characters as
+     these will need escapping */
   p1 = str;
   while(*p1) {
     if(*p1 == '\\')
       backsp_count++;
     else if(*p1 == '"')
       quote_count++;
-    else if(*p1 == ' ')
-      space_exists = TRUE;
+    else if(!escape_only) {
+      const char *p3 = atom_specials;
+
+      while(*p3 && !others_exists) {
+        if(*p1 == *p3)
+          others_exists = TRUE;
+
+        p3++;
+      }
+    }
 
     p1++;
   }
 
-  /* Does the input contain any unescaped characters? */
-  if(!backsp_count && !quote_count && !space_exists)
+  /* Does the input contain any "atom-special" characters? */
+  if(!backsp_count && !quote_count && !others_exists)
     return strdup(str);
 
   /* Calculate the new string length */
-  newlen = strlen(str) + backsp_count + quote_count + (space_exists ? 2 : 0);
+  newlen = strlen(str) + backsp_count + quote_count + (others_exists ? 2 : 0);
 
   /* Allocate the new string */
   newstr = (char *) malloc((newlen + 1) * sizeof(char));
@@ -2474,7 +1873,7 @@ static char *imap_atom(const char *str)
 
   /* Surround the string in quotes if necessary */
   p2 = newstr;
-  if(space_exists) {
+  if(others_exists) {
     newstr[0] = '"';
     newstr[newlen - 1] = '"';
     p2++;
@@ -2548,69 +1947,42 @@ static CURLcode imap_parse_url_options(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
   struct imap_conn *imapc = &conn->proto.imapc;
-  const char *options = conn->options;
-  const char *ptr = options;
-  bool reset = TRUE;
+  const char *ptr = conn->options;
+
+  imapc->sasl.resetprefs = TRUE;
 
-  while(ptr && *ptr) {
+  while(!result && ptr && *ptr) {
     const char *key = ptr;
+    const char *value;
 
     while(*ptr && *ptr != '=')
         ptr++;
 
-    if(strnequal(key, "AUTH", 4)) {
-      size_t len = 0;
-      const char *value = ++ptr;
+    value = ptr + 1;
 
-      if(reset) {
-        reset = FALSE;
-        imapc->preftype = IMAP_TYPE_NONE;
-        imapc->prefmech = SASL_AUTH_NONE;
-      }
-
-      while(*ptr && *ptr != ';') {
-        ptr++;
-        len++;
-      }
-
-      if(strnequal(value, "*", len)) {
-        imapc->preftype = IMAP_TYPE_ANY;
-        imapc->prefmech = SASL_AUTH_ANY;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_LOGIN;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_PLAIN;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_CRAM_MD5;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_DIGEST_MD5;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_GSSAPI;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_NTLM;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) {
-        imapc->preftype = IMAP_TYPE_SASL;
-        imapc->prefmech |= SASL_MECH_XOAUTH2;
-      }
+    while(*ptr && *ptr != ';')
+      ptr++;
 
-      if(*ptr == ';')
-        ptr++;
-    }
+    if(strnequal(key, "AUTH=", 5))
+      result = Curl_sasl_parse_url_auth_option(&imapc->sasl,
+                                               value, ptr - value);
     else
       result = CURLE_URL_MALFORMAT;
+
+    if(*ptr == ';')
+      ptr++;
+  }
+
+  switch(imapc->sasl.prefmech) {
+  case SASL_AUTH_NONE:
+    imapc->preftype = IMAP_TYPE_NONE;
+    break;
+  case SASL_AUTH_DEFAULT:
+    imapc->preftype = IMAP_TYPE_ANY;
+    break;
+  default:
+    imapc->preftype = IMAP_TYPE_SASL;
+    break;
   }
 
   return result;
@@ -2677,7 +2049,7 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
     /* Decode the value parameter */
     result = Curl_urldecode(data, begin, ptr - begin, &value, &valuelen, TRUE);
     if(result) {
-      Curl_safefree(name);
+      free(name);
       return result;
     }
 
@@ -2716,14 +2088,14 @@ static CURLcode imap_parse_url_path(struct connectdata *conn)
       value = NULL;
     }
     else {
-      Curl_safefree(name);
-      Curl_safefree(value);
+      free(name);
+      free(value);
 
       return CURLE_URL_MALFORMAT;
     }
 
-    Curl_safefree(name);
-    Curl_safefree(value);
+    free(name);
+    free(value);
   }
 
   /* Does the URL contain a query parameter? Only valid when we have a mailbox
@@ -2785,108 +2157,4 @@ static CURLcode imap_parse_custom_request(struct connectdata *conn)
   return result;
 }
 
-/***********************************************************************
- *
- * imap_calc_sasl_details()
- *
- * Calculate the required login details for SASL authentication.
- */
-static CURLcode imap_calc_sasl_details(struct connectdata *conn,
-                                       const char **mech,
-                                       char **initresp, size_t *len,
-                                       imapstate *state1, imapstate *state2)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct imap_conn *imapc = &conn->proto.imapc;
-
-  /* Calculate the supported authentication mechanism, by decreasing order of
-     security, as well as the initial response where appropriate */
-#if defined(USE_KERBEROS5)
-    if((imapc->authmechs & SASL_MECH_GSSAPI) &&
-       (imapc->prefmech & SASL_MECH_GSSAPI)) {
-    imapc->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
-
-    *mech = SASL_MECH_STRING_GSSAPI;
-    *state1 = IMAP_AUTHENTICATE_GSSAPI;
-    *state2 = IMAP_AUTHENTICATE_GSSAPI_TOKEN;
-    imapc->authused = SASL_MECH_GSSAPI;
-
-    if(imapc->ir_supported || data->set.sasl_ir)
-      result = Curl_sasl_create_gssapi_user_message(data, conn->user,
-                                                    conn->passwd, "imap",
-                                                    imapc->mutual_auth,
-                                                    NULL, &conn->krb5,
-                                                    initresp, len);
-  }
-  else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-  if((imapc->authmechs & SASL_MECH_DIGEST_MD5) &&
-     (imapc->prefmech & SASL_MECH_DIGEST_MD5)) {
-    *mech = SASL_MECH_STRING_DIGEST_MD5;
-    *state1 = IMAP_AUTHENTICATE_DIGESTMD5;
-    imapc->authused = SASL_MECH_DIGEST_MD5;
-  }
-  else if((imapc->authmechs & SASL_MECH_CRAM_MD5) &&
-          (imapc->prefmech & SASL_MECH_CRAM_MD5)) {
-    *mech = SASL_MECH_STRING_CRAM_MD5;
-    *state1 = IMAP_AUTHENTICATE_CRAMMD5;
-    imapc->authused = SASL_MECH_CRAM_MD5;
-  }
-  else
-#endif
-#ifdef USE_NTLM
-    if((imapc->authmechs & SASL_MECH_NTLM) &&
-       (imapc->prefmech & SASL_MECH_NTLM)) {
-    *mech = SASL_MECH_STRING_NTLM;
-    *state1 = IMAP_AUTHENTICATE_NTLM;
-    *state2 = IMAP_AUTHENTICATE_NTLM_TYPE2MSG;
-    imapc->authused = SASL_MECH_NTLM;
-
-    if(imapc->ir_supported || data->set.sasl_ir)
-      result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                   &conn->ntlm,
-                                                   initresp, len);
-  }
-  else
-#endif
-  if(((imapc->authmechs & SASL_MECH_XOAUTH2) &&
-      (imapc->prefmech & SASL_MECH_XOAUTH2) &&
-      (imapc->prefmech != SASL_AUTH_ANY)) || conn->xoauth2_bearer) {
-    *mech = SASL_MECH_STRING_XOAUTH2;
-    *state1 = IMAP_AUTHENTICATE_XOAUTH2;
-    *state2 = IMAP_AUTHENTICATE_FINAL;
-    imapc->authused = SASL_MECH_XOAUTH2;
-
-    if(imapc->ir_supported || data->set.sasl_ir)
-      result = Curl_sasl_create_xoauth2_message(data, conn->user,
-                                                conn->xoauth2_bearer,
-                                                initresp, len);
-  }
-  else if((imapc->authmechs & SASL_MECH_LOGIN) &&
-          (imapc->prefmech & SASL_MECH_LOGIN)) {
-    *mech = SASL_MECH_STRING_LOGIN;
-    *state1 = IMAP_AUTHENTICATE_LOGIN;
-    *state2 = IMAP_AUTHENTICATE_LOGIN_PASSWD;
-    imapc->authused = SASL_MECH_LOGIN;
-
-    if(imapc->ir_supported || data->set.sasl_ir)
-      result = Curl_sasl_create_login_message(data, conn->user, initresp, len);
-  }
-  else if((imapc->authmechs & SASL_MECH_PLAIN) &&
-          (imapc->prefmech & SASL_MECH_PLAIN)) {
-    *mech = SASL_MECH_STRING_PLAIN;
-    *state1 = IMAP_AUTHENTICATE_PLAIN;
-    *state2 = IMAP_AUTHENTICATE_FINAL;
-    imapc->authused = SASL_MECH_PLAIN;
-
-    if(imapc->ir_supported || data->set.sasl_ir)
-      result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
-                                              initresp, len);
-  }
-
-  return result;
-}
-
 #endif /* CURL_DISABLE_IMAP */
index 768fc4b..e6b9b89 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2009 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2009 - 2015, 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.
+ * are also available at https://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
@@ -23,6 +23,7 @@
  ***************************************************************************/
 
 #include "pingpong.h"
+#include "curl_sasl.h"
 
 /****************************************************************************
  * IMAP unique setup
@@ -35,20 +36,7 @@ typedef enum {
   IMAP_STARTTLS,
   IMAP_UPGRADETLS,   /* asynchronously upgrade the connection to SSL/TLS
                        (multi mode only) */
-  IMAP_AUTHENTICATE_PLAIN,
-  IMAP_AUTHENTICATE_LOGIN,
-  IMAP_AUTHENTICATE_LOGIN_PASSWD,
-  IMAP_AUTHENTICATE_CRAMMD5,
-  IMAP_AUTHENTICATE_DIGESTMD5,
-  IMAP_AUTHENTICATE_DIGESTMD5_RESP,
-  IMAP_AUTHENTICATE_NTLM,
-  IMAP_AUTHENTICATE_NTLM_TYPE2MSG,
-  IMAP_AUTHENTICATE_GSSAPI,
-  IMAP_AUTHENTICATE_GSSAPI_TOKEN,
-  IMAP_AUTHENTICATE_GSSAPI_NO_DATA,
-  IMAP_AUTHENTICATE_XOAUTH2,
-  IMAP_AUTHENTICATE_CANCEL,
-  IMAP_AUTHENTICATE_FINAL,
+  IMAP_AUTHENTICATE,
   IMAP_LOGIN,
   IMAP_LIST,
   IMAP_SELECT,
@@ -83,16 +71,13 @@ struct imap_conn {
   struct pingpong pp;
   imapstate state;            /* Always use imap.c:state() to change state! */
   bool ssldone;               /* Is connect() over SSL done? */
-  unsigned int authmechs;     /* Accepted authentication mechanisms */
+  struct SASL sasl;           /* SASL-related parameters */
   unsigned int preftype;      /* Preferred authentication type */
-  unsigned int prefmech;      /* Preferred authentication mechanism */
-  unsigned int authused;      /* Auth mechanism used for the connection */
   int cmdid;                  /* Last used command ID */
   char resptag[5];            /* Response tag to wait for */
   bool tls_supported;         /* StartTLS capability supported by server */
   bool login_disabled;        /* LOGIN command disabled by server */
   bool ir_supported;          /* Initial response supported by server */
-  bool mutual_auth;           /* Mutual authentication enabled (GSSAPI only) */
   char *mailbox;              /* The last selected mailbox */
   char *mailbox_uidvalidity;  /* UIDVALIDITY parsed from select response */
 };
index c327150..da9a3ab 100644 (file)
@@ -32,8 +32,7 @@
 #include <arpa/inet.h>
 #endif
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #include "inet_ntop.h"
 
index db28ed8..9f44612 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -31,7 +31,7 @@ char *Curl_inet_ntop(int af, const void *addr, char *buf, size_t size);
 #include <arpa/inet.h>
 #endif
 #define Curl_inet_ntop(af,addr,buf,size) \
-        inet_ntop(af,addr,buf,(curl_socklen_t)size)
+        inet_ntop(af, addr, buf, (curl_socklen_t)size)
 #endif
 
 #endif /* HEADER_CURL_INET_NTOP_H */
index f50b365..cf8b88a 100644 (file)
@@ -188,8 +188,8 @@ inet_pton6(const char *src, unsigned char *dst)
       }
       if(tp + INT16SZ > endp)
         return (0);
-      *tp++ = (unsigned char) (val >> 8) & 0xff;
-      *tp++ = (unsigned char) val & 0xff;
+      *tp++ = (unsigned char) ((val >> 8) & 0xff);
+      *tp++ = (unsigned char) (val & 0xff);
       saw_xdigit = 0;
       val = 0;
       continue;
@@ -205,8 +205,8 @@ inet_pton6(const char *src, unsigned char *dst)
   if(saw_xdigit) {
     if(tp + INT16SZ > endp)
       return (0);
-    *tp++ = (unsigned char) (val >> 8) & 0xff;
-    *tp++ = (unsigned char) val & 0xff;
+    *tp++ = (unsigned char) ((val >> 8) & 0xff);
+    *tp++ = (unsigned char) (val & 0xff);
   }
   if(colonp != NULL) {
     /*
index 43c5491..9188d95 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index a0d7bb4..65869c9 100644 (file)
@@ -1,8 +1,8 @@
 /* GSSAPI/krb5 support for FTP - loosely based on old krb4.c
  *
- * Copyright (c) 1995, 1996, 1997, 1998, 1999, 2013 Kungliga Tekniska Högskolan
+ * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Högskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
- * Copyright (c) 2004 - 2014 Daniel Stenberg
+ * Copyright (c) 2004 - 2016 Daniel Stenberg
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 #include "curl_setup.h"
 
-#ifndef CURL_DISABLE_FTP
-#ifdef HAVE_GSSAPI
-
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
+#if defined(HAVE_GSSAPI) && !defined(CURL_DISABLE_FTP)
 
 #ifdef HAVE_NETDB_H
 #include <netdb.h>
 #include "curl_gssapi.h"
 #include "sendf.h"
 #include "curl_sec.h"
-#include "curl_memory.h"
 #include "warnless.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
-#define LOCAL_ADDR (&conn->local_addr)
-#define REMOTE_ADDR conn->ip_addr->ai_addr
-
 static int
 krb5_init(void *app_data)
 {
@@ -170,19 +159,19 @@ krb5_auth(void *app_data, struct connectdata *conn)
   gss_ctx_id_t *context = app_data;
   struct gss_channel_bindings_struct chan;
   size_t base64_sz = 0;
+  struct sockaddr_in **remote_addr =
+    (struct sockaddr_in **)&conn->ip_addr->ai_addr;
 
   if(getsockname(conn->sock[FIRSTSOCKET],
-                 (struct sockaddr *)LOCAL_ADDR, &l) < 0)
+                 (struct sockaddr *)&conn->local_addr, &l) < 0)
     perror("getsockname()");
 
   chan.initiator_addrtype = GSS_C_AF_INET;
   chan.initiator_address.length = l - 4;
-  chan.initiator_address.value =
-    &((struct sockaddr_in *)LOCAL_ADDR)->sin_addr.s_addr;
+  chan.initiator_address.value = &conn->local_addr.sin_addr.s_addr;
   chan.acceptor_addrtype = GSS_C_AF_INET;
   chan.acceptor_address.length = l - 4;
-  chan.acceptor_address.value =
-    &((struct sockaddr_in *)REMOTE_ADDR)->sin_addr.s_addr;
+  chan.acceptor_address.value = &(*remote_addr)->sin_addr.s_addr;
   chan.application_data.length = 0;
   chan.application_data.value = NULL;
 
@@ -254,7 +243,8 @@ krb5_auth(void *app_data, struct connectdata *conn)
         result = Curl_base64_encode(data, (char *)output_buffer.value,
                                     output_buffer.length, &p, &base64_sz);
         if(result) {
-          Curl_infof(data,"base64-encoding: %s\n", curl_easy_strerror(result));
+          Curl_infof(data, "base64-encoding: %s\n",
+                     curl_easy_strerror(result));
           ret = AUTH_CONTINUE;
           break;
         }
@@ -286,7 +276,8 @@ krb5_auth(void *app_data, struct connectdata *conn)
                                       (unsigned char **)&_gssresp.value,
                                       &_gssresp.length);
           if(result) {
-            Curl_failf(data,"base64-decoding: %s", curl_easy_strerror(result));
+            Curl_failf(data, "base64-decoding: %s",
+                       curl_easy_strerror(result));
             ret = AUTH_CONTINUE;
             break;
           }
@@ -335,5 +326,4 @@ struct Curl_sec_client_mech Curl_krb5_client_mech = {
     krb5_decode
 };
 
-#endif /* HAVE_GSSAPI */
-#endif /* CURL_DISABLE_FTP */
+#endif /* HAVE_GSSAPI && !CURL_DISABLE_FTP */
index f27fa90..4f4c707 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -35,7 +35,7 @@
  * OpenLDAP library versions, USE_OPENLDAP shall not be defined.
  */
 
-#ifdef CURL_LDAP_WIN            /* Use Windows LDAP implementation. */
+#ifdef USE_WIN32_LDAP           /* Use Windows LDAP implementation. */
 # include <winldap.h>
 # ifndef LDAP_VENDOR_NAME
 #  error Your Platform SDK is NOT sufficient for LDAP support! \
 # endif /* HAVE_LDAP_SSL && HAVE_LDAP_SSL_H */
 #endif
 
+/* These are macros in both <wincrypt.h> (in above <winldap.h>) and typedefs
+ * in BoringSSL's <openssl/x509.h>
+ */
+#ifdef HAVE_BORINGSSL
+# undef X509_NAME
+# undef X509_CERT_PAIR
+# undef X509_EXTENSIONS
+#endif
+
 #include "urldata.h"
 #include <curl/curl.h>
 #include "sendf.h"
 #include "strequal.h"
 #include "strtok.h"
 #include "curl_ldap.h"
-#include "curl_memory.h"
 #include "curl_multibyte.h"
 #include "curl_base64.h"
 #include "rawstr.h"
 #include "connect.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #ifndef HAVE_LDAP_URL_PARSE
@@ -81,7 +89,7 @@
 typedef struct {
   char   *lud_host;
   int     lud_port;
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
   TCHAR  *lud_dn;
   TCHAR **lud_attrs;
 #else
@@ -89,7 +97,7 @@ typedef struct {
   char  **lud_attrs;
 #endif
   int     lud_scope;
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
   TCHAR  *lud_filter;
 #else
   char   *lud_filter;
@@ -192,9 +200,9 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
   size_t val_b64_sz = 0;
   curl_off_t dlsize = 0;
 #ifdef LDAP_OPT_NETWORK_TIMEOUT
-  struct timeval ldap_timeout = {10,0}; /* 10 sec connection/search timeout */
+  struct timeval ldap_timeout = {10, 0}; /* 10 sec connection/search timeout */
 #endif
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
   TCHAR *host = NULL;
   TCHAR *user = NULL;
   TCHAR *passwd = NULL;
@@ -226,7 +234,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
   infof(data, "LDAP local: trying to establish %s connection\n",
           ldap_ssl ? "encrypted" : "cleartext");
 
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
   host = Curl_convert_UTF8_to_tchar(conn->host.name);
   if(!host) {
     result = CURLE_OUT_OF_MEMORY;
@@ -259,7 +267,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
 
   if(ldap_ssl) {
 #ifdef HAVE_LDAP_SSL
-#ifdef CURL_LDAP_WIN
+#ifdef USE_WIN32_LDAP
     /* Win32 LDAP SDK doesn't support insecure mode without CA! */
     server = ldap_sslinit(host, (int)conn->port, 1);
     ldap_set_option(server, LDAP_OPT_SSL, LDAP_OPT_ON);
@@ -392,7 +400,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
       goto quit;
     }
   }
-#ifdef CURL_LDAP_WIN
+#ifdef USE_WIN32_LDAP
   ldap_set_option(server, LDAP_OPT_PROTOCOL_VERSION, &ldap_proto);
 #endif
 
@@ -421,7 +429,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
       entryIterator;
       entryIterator = ldap_next_entry(server, entryIterator), num++) {
     BerElement *ber = NULL;
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
     TCHAR *attribute;
 #else
     char  *attribute;       /*! suspicious that this isn't 'const' */
@@ -432,7 +440,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
     {
       char *name;
       size_t name_len;
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
       TCHAR *dn = ldap_get_dn(server, entryIterator);
       name = Curl_convert_tchar_to_UTF8(dn);
       if(!name) {
@@ -449,7 +457,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
 
       result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
       if(result) {
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
         Curl_unicodefree(name);
 #endif
         ldap_memfree(dn);
@@ -460,7 +468,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
       result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *) name,
                                  name_len);
       if(result) {
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
         Curl_unicodefree(name);
 #endif
         ldap_memfree(dn);
@@ -470,7 +478,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
 
       result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
       if(result) {
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
         Curl_unicodefree(name);
 #endif
         ldap_memfree(dn);
@@ -480,7 +488,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
 
       dlsize += name_len + 5;
 
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
       Curl_unicodefree(name);
 #endif
       ldap_memfree(dn);
@@ -492,7 +500,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
         attribute = ldap_next_attribute(server, entryIterator, ber)) {
       BerValue **vals;
       size_t attr_len;
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
       char *attr = Curl_convert_tchar_to_UTF8(attribute);
       if(!attr) {
         if(ber)
@@ -513,7 +521,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
           result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
           if(result) {
             ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
             Curl_unicodefree(attr);
 #endif
             ldap_memfree(attribute);
@@ -527,7 +535,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
                                      (char *) attr, attr_len);
           if(result) {
             ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
             Curl_unicodefree(attr);
 #endif
             ldap_memfree(attribute);
@@ -540,7 +548,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
           result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
           if(result) {
             ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
             Curl_unicodefree(attr);
 #endif
             ldap_memfree(attribute);
@@ -562,7 +570,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
                                         &val_b64_sz);
             if(result) {
               ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
               Curl_unicodefree(attr);
 #endif
               ldap_memfree(attribute);
@@ -578,7 +586,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
               free(val_b64);
               if(result) {
                 ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
                 Curl_unicodefree(attr);
 #endif
                 ldap_memfree(attribute);
@@ -596,7 +604,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
                                        vals[i]->bv_len);
             if(result) {
               ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
               Curl_unicodefree(attr);
 #endif
               ldap_memfree(attribute);
@@ -612,7 +620,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
           result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
           if(result) {
             ldap_value_free_len(vals);
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
             Curl_unicodefree(attr);
 #endif
             ldap_memfree(attribute);
@@ -630,7 +638,7 @@ static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
       }
 
       /* Free the attribute as we are done with it */
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
       Curl_unicodefree(attr);
 #endif
       ldap_memfree(attribute);
@@ -662,7 +670,7 @@ quit:
     ldapssl_client_deinit();
 #endif /* HAVE_LDAP_SSL && CURL_HAS_NOVELL_LDAPSDK */
 
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
   Curl_unicodefree(passwd);
   Curl_unicodefree(user);
   Curl_unicodefree(host);
@@ -802,7 +810,7 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
       goto quit;
     }
 
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
     /* Convert the unescaped string to a tchar */
     ludp->lud_dn = Curl_convert_UTF8_to_tchar(unescaped);
 
@@ -840,13 +848,13 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
     }
 
     /* Allocate our array (+1 for the NULL entry) */
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
     ludp->lud_attrs = calloc(count + 1, sizeof(TCHAR *));
 #else
     ludp->lud_attrs = calloc(count + 1, sizeof(char *));
 #endif
     if(!ludp->lud_attrs) {
-      Curl_safefree(attributes);
+      free(attributes);
 
       rc = LDAP_NO_MEMORY;
 
@@ -861,14 +869,14 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
       /* Unescape the attribute */
       unescaped = curl_easy_unescape(conn->data, attributes[i], 0, NULL);
       if(!unescaped) {
-        Curl_safefree(attributes);
+        free(attributes);
 
         rc = LDAP_NO_MEMORY;
 
         goto quit;
       }
 
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
       /* Convert the unescaped string to a tchar */
       ludp->lud_attrs[i] = Curl_convert_UTF8_to_tchar(unescaped);
 
@@ -876,7 +884,7 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
       Curl_unicodefree(unescaped);
 
       if(!ludp->lud_attrs[i]) {
-        Curl_safefree(attributes);
+        free(attributes);
 
         rc = LDAP_NO_MEMORY;
 
@@ -889,7 +897,7 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
       ludp->lud_attrs_dups++;
     }
 
-    Curl_safefree(attributes);
+    free(attributes);
   }
 
   p = q;
@@ -934,7 +942,7 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
       goto quit;
     }
 
-#if defined(CURL_LDAP_WIN)
+#if defined(USE_WIN32_LDAP)
     /* Convert the unescaped string to a tchar */
     ludp->lud_filter = Curl_convert_UTF8_to_tchar(unescaped);
 
@@ -959,7 +967,7 @@ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
   }
 
 quit:
-  Curl_safefree(path);
+  free(path);
 
   return rc;
 }
@@ -990,11 +998,8 @@ static void _ldap_free_urldesc (LDAPURLDesc *ludp)
   if(!ludp)
     return;
 
-  if(ludp->lud_dn)
-    free(ludp->lud_dn);
-
-  if(ludp->lud_filter)
-    free(ludp->lud_filter);
+  free(ludp->lud_dn);
+  free(ludp->lud_filter);
 
   if(ludp->lud_attrs) {
     for(i = 0; i < ludp->lud_attrs_dups; i++)
index cb60271..147ff79 100644 (file)
@@ -15,7 +15,7 @@
        <string>se.haxx.curl.libcurl</string>
 
        <key>CFBundleVersion</key>
-       <string>7.40.0</string>
+       <string>7.48.0</string>
 
        <key>CFBundleName</key>
        <string>libcurl</string>
@@ -27,9 +27,9 @@
        <string>????</string>
 
        <key>CFBundleShortVersionString</key>
-       <string>libcurl 7.40.0</string>
+       <string>libcurl 7.48.0</string>
 
        <key>CFBundleGetInfoString</key>
-       <string>libcurl.plist 7.40.0</string>
+       <string>libcurl.plist 7.48.0</string>
 </dict>
 </plist>
index 47b944a..50b365d 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -44,7 +44,7 @@ BEGIN
   BEGIN
     BLOCK "040904b0"
     BEGIN
-      VALUE "CompanyName",      "The cURL library, http://curl.haxx.se/\0"
+      VALUE "CompanyName",      "The cURL library, https://curl.haxx.se/\0"
       VALUE "FileDescription",  "libcurl Shared Library\0"
       VALUE "FileVersion",      LIBCURL_VERSION "\0"
       VALUE "InternalName",     "libcurl\0"
@@ -52,7 +52,7 @@ BEGIN
       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"
+      VALUE "License",          "https://curl.haxx.se/docs/copyright.html\0"
     END
   END
 
index 40bb628..04b23e7 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 27ddb71..39ff408 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 7b2ca86..2331afe 100644 (file)
@@ -1,15 +1,39 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
 #
-#  Adapted for djgpp2 / Watt-32 / DOS by
-#  Gisle Vanem <gvanem@broadpark.no>
+# Copyright (C) 2003 - 2008, Gisle Vanem <gvanem@yahoo.no>.
+# Copyright (C) 2003 - 2015, 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 https://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.
+#
+#***************************************************************************
+
+#
+#  Adapted for djgpp2 / Watt-32 / DOS
 #
 
 DEPEND_PREREQ = curl_config.h
+VPATH  = vtls
 TOPDIR = ..
 
 include ../packages/DOS/common.dj
 include Makefile.inc
 
-OBJECTS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(strip $(CSOURCES)))
+SOURCES = $(sort $(CSOURCES))
+OBJECTS = $(addprefix $(OBJ_DIR)/, $(notdir $(SOURCES:.c=.o)))
 
 CURL_LIB = libcurl.a
 
index fd0c6d4..60f73a2 100644 (file)
--- a/lib/md4.c
+++ b/lib/md4.c
@@ -1,23 +1,38 @@
-/*-
-   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.
+/*
+ * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
+ * MD4 Message-Digest Algorithm (RFC 1320).
+ *
+ * Homepage:
+ http://openwall.info/wiki/people/solar/software/public-domain-source-code/md4
+ *
+ * Author:
+ * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
+ *
+ * This software was written by Alexander Peslyak in 2001.  No copyright is
+ * claimed, and the software is hereby placed in the public domain.  In case
+ * this attempt to disclaim copyright and place the software in the public
+ * domain is deemed null and void, then the software is Copyright (c) 2001
+ * Alexander Peslyak and it is hereby released to the general public under the
+ * following terms:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted.
+ *
+ * There's ABSOLUTELY NO WARRANTY, express or implied.
+ *
+ * (This is a heavily cut-down "BSD license".)
+ *
+ * This differs from Colin Plumb's older public domain implementation in that
+ * no exactly 32-bit integer data type is required (any 32-bit or wider
+ * unsigned integer data type will do), there's no compile-time endianness
+ * configuration, and the function prototypes match OpenSSL's.  No code from
+ * Colin Plumb's implementation has been reused; this comment merely compares
+ * the properties of the two independent implementations.
+ *
+ * The primary goals of this implementation are portability and ease of use.
+ * It is meant to be fast, but not as fast as possible.  Some known
+ * optimizations are not included to reduce source code size and avoid
+ * compile-time configuration.
  */
 
 #include "curl_setup.h"
 #include "curl_md4.h"
 #include "warnless.h"
 
-typedef unsigned int UINT4;
+#ifndef HAVE_OPENSSL
 
-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 */
+#include <string.h>
+
+/* Any 32-bit or wider unsigned integer data type will do */
+typedef unsigned int MD4_u32plus;
+
+typedef struct {
+  MD4_u32plus lo, hi;
+  MD4_u32plus a, b, c, d;
+  unsigned char buffer[64];
+  MD4_u32plus block[16];
 } 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))
+static void MD4_Init(MD4_CTX *ctx);
+static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size);
+static void MD4_Final(unsigned char *result, MD4_CTX *ctx);
 
-/* ROTATE_LEFT rotates x left n bits.
+/*
+ * The basic MD4 functions.
+ *
+ * F and G are optimized compared to their RFC 1320 definitions, with the
+ * optimization for F borrowed from Colin Plumb's MD5 implementation.
  */
-#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)); \
-  }
+#define F(x, y, z)                      ((z) ^ ((x) & ((y) ^ (z))))
+#define G(x, y, z)                      (((x) & ((y) | (z))) | ((y) & (z)))
+#define H(x, y, z)                      ((x) ^ (y) ^ (z))
 
-/* MD4 initialization. Begins an MD4 operation, writing a new context.
+/*
+ * The MD4 transformation for all three rounds.
  */
-static void MD4Init(MD4_CTX *context)
+#define STEP(f, a, b, c, d, x, s) \
+        (a) += f((b), (c), (d)) + (x); \
+        (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s))));
+
+/*
+ * SET reads 4 input bytes in little-endian byte order and stores them
+ * in a properly aligned word in host byte order.
+ *
+ * The check for little-endian architectures that tolerate unaligned
+ * memory accesses is just an optimization.  Nothing will break if it
+ * doesn't work.
+ */
+#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
+#define SET(n) \
+        (*(MD4_u32plus *)&ptr[(n) * 4])
+#define GET(n) \
+        SET(n)
+#else
+#define SET(n) \
+        (ctx->block[(n)] = \
+        (MD4_u32plus)ptr[(n) * 4] | \
+        ((MD4_u32plus)ptr[(n) * 4 + 1] << 8) | \
+        ((MD4_u32plus)ptr[(n) * 4 + 2] << 16) | \
+        ((MD4_u32plus)ptr[(n) * 4 + 3] << 24))
+#define GET(n) \
+        (ctx->block[(n)])
+#endif
+
+/*
+ * This processes one or more 64-byte data blocks, but does NOT update
+ * the bit counters.  There are no alignment requirements.
+ */
+static const void *body(MD4_CTX *ctx, const void *data, unsigned long size)
 {
-  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;
+  const unsigned char *ptr;
+  MD4_u32plus a, b, c, d;
+  MD4_u32plus saved_a, saved_b, saved_c, saved_d;
+
+  ptr = (const unsigned char *)data;
+
+  a = ctx->a;
+  b = ctx->b;
+  c = ctx->c;
+  d = ctx->d;
+
+  do {
+    saved_a = a;
+    saved_b = b;
+    saved_c = c;
+    saved_d = d;
+
+/* Round 1 */
+    STEP(F, a, b, c, d, SET(0), 3)
+      STEP(F, d, a, b, c, SET(1), 7)
+      STEP(F, c, d, a, b, SET(2), 11)
+      STEP(F, b, c, d, a, SET(3), 19)
+      STEP(F, a, b, c, d, SET(4), 3)
+      STEP(F, d, a, b, c, SET(5), 7)
+      STEP(F, c, d, a, b, SET(6), 11)
+      STEP(F, b, c, d, a, SET(7), 19)
+      STEP(F, a, b, c, d, SET(8), 3)
+      STEP(F, d, a, b, c, SET(9), 7)
+      STEP(F, c, d, a, b, SET(10), 11)
+      STEP(F, b, c, d, a, SET(11), 19)
+      STEP(F, a, b, c, d, SET(12), 3)
+      STEP(F, d, a, b, c, SET(13), 7)
+      STEP(F, c, d, a, b, SET(14), 11)
+      STEP(F, b, c, d, a, SET(15), 19)
+
+/* Round 2 */
+      STEP(G, a, b, c, d, GET(0) + 0x5a827999, 3)
+      STEP(G, d, a, b, c, GET(4) + 0x5a827999, 5)
+      STEP(G, c, d, a, b, GET(8) + 0x5a827999, 9)
+      STEP(G, b, c, d, a, GET(12) + 0x5a827999, 13)
+      STEP(G, a, b, c, d, GET(1) + 0x5a827999, 3)
+      STEP(G, d, a, b, c, GET(5) + 0x5a827999, 5)
+      STEP(G, c, d, a, b, GET(9) + 0x5a827999, 9)
+      STEP(G, b, c, d, a, GET(13) + 0x5a827999, 13)
+      STEP(G, a, b, c, d, GET(2) + 0x5a827999, 3)
+      STEP(G, d, a, b, c, GET(6) + 0x5a827999, 5)
+      STEP(G, c, d, a, b, GET(10) + 0x5a827999, 9)
+      STEP(G, b, c, d, a, GET(14) + 0x5a827999, 13)
+      STEP(G, a, b, c, d, GET(3) + 0x5a827999, 3)
+      STEP(G, d, a, b, c, GET(7) + 0x5a827999, 5)
+      STEP(G, c, d, a, b, GET(11) + 0x5a827999, 9)
+      STEP(G, b, c, d, a, GET(15) + 0x5a827999, 13)
+
+/* Round 3 */
+      STEP(H, a, b, c, d, GET(0) + 0x6ed9eba1, 3)
+      STEP(H, d, a, b, c, GET(8) + 0x6ed9eba1, 9)
+      STEP(H, c, d, a, b, GET(4) + 0x6ed9eba1, 11)
+      STEP(H, b, c, d, a, GET(12) + 0x6ed9eba1, 15)
+      STEP(H, a, b, c, d, GET(2) + 0x6ed9eba1, 3)
+      STEP(H, d, a, b, c, GET(10) + 0x6ed9eba1, 9)
+      STEP(H, c, d, a, b, GET(6) + 0x6ed9eba1, 11)
+      STEP(H, b, c, d, a, GET(14) + 0x6ed9eba1, 15)
+      STEP(H, a, b, c, d, GET(1) + 0x6ed9eba1, 3)
+      STEP(H, d, a, b, c, GET(9) + 0x6ed9eba1, 9)
+      STEP(H, c, d, a, b, GET(5) + 0x6ed9eba1, 11)
+      STEP(H, b, c, d, a, GET(13) + 0x6ed9eba1, 15)
+      STEP(H, a, b, c, d, GET(3) + 0x6ed9eba1, 3)
+      STEP(H, d, a, b, c, GET(11) + 0x6ed9eba1, 9)
+      STEP(H, c, d, a, b, GET(7) + 0x6ed9eba1, 11)
+      STEP(H, b, c, d, a, GET(15) + 0x6ed9eba1, 15)
+
+      a += saved_a;
+    b += saved_b;
+    c += saved_c;
+    d += saved_d;
+
+    ptr += 64;
+  } while(size -= 64);
+
+  ctx->a = a;
+  ctx->b = b;
+  ctx->c = c;
+  ctx->d = d;
+
+  return ptr;
 }
 
-/* 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)
+static void MD4_Init(MD4_CTX *ctx)
 {
-  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;
+  ctx->a = 0x67452301;
+  ctx->b = 0xefcdab89;
+  ctx->c = 0x98badcfe;
+  ctx->d = 0x10325476;
 
-  /* Buffer remaining input */
-  memcpy(&context->buffer[bufindex], &input[i], inputLen-i);
+  ctx->lo = 0;
+  ctx->hi = 0;
 }
 
-/* MD4 padding. */
-static void MD4Pad(MD4_CTX *context)
+static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
 {
-  unsigned char bits[8];
-  unsigned int bufindex, padLen;
+  MD4_u32plus saved_lo;
+  unsigned long used, available;
 
-  /* Save number of bits */
-  Encode (bits, context->count, 8);
+  saved_lo = ctx->lo;
+  if((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
+    ctx->hi++;
+  ctx->hi += (MD4_u32plus)size >> 29;
 
-  /* 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);
+  used = saved_lo & 0x3f;
 
-  /* Append length (before padding) */
-  MD4Update (context, bits, 8);
-}
+  if(used) {
+    available = 64 - used;
 
-/* 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);
+    if(size < available) {
+      memcpy(&ctx->buffer[used], data, size);
+      return;
+    }
 
-  /* Store state in digest */
-  Encode (digest, context->state, 16);
+    memcpy(&ctx->buffer[used], data, available);
+    data = (const unsigned char *)data + available;
+    size -= available;
+    body(ctx, ctx->buffer, 64);
+  }
 
-  /* Zeroize sensitive information.
-   */
-  memset(context, 0, sizeof(*context));
-}
+  if(size >= 64) {
+    data = body(ctx, data, size & ~(unsigned long)0x3f);
+    size &= 0x3f;
+  }
 
-/* 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));
+  memcpy(ctx->buffer, data, size);
 }
 
-/* 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)
+static void MD4_Final(unsigned char *result, MD4_CTX *ctx)
 {
-  unsigned int i, j;
+  unsigned long used, available;
 
-  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);
-  }
-}
+  used = ctx->lo & 0x3f;
 
-/* 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;
+  ctx->buffer[used++] = 0x80;
+
+  available = 64 - used;
 
-  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);
+  if(available < 8) {
+    memset(&ctx->buffer[used], 0, available);
+    body(ctx, ctx->buffer, 64);
+    used = 0;
+    available = 64;
+  }
+
+  memset(&ctx->buffer[used], 0, available - 8);
+
+  ctx->lo <<= 3;
+  ctx->buffer[56] = curlx_ultouc((ctx->lo)&0xff);
+  ctx->buffer[57] = curlx_ultouc((ctx->lo >> 8)&0xff);
+  ctx->buffer[58] = curlx_ultouc((ctx->lo >> 16)&0xff);
+  ctx->buffer[59] = curlx_ultouc((ctx->lo >> 24)&0xff);
+  ctx->buffer[60] = curlx_ultouc((ctx->hi)&0xff);
+  ctx->buffer[61] = curlx_ultouc((ctx->hi >> 8)&0xff);
+  ctx->buffer[62] = curlx_ultouc((ctx->hi >> 16)&0xff);
+  ctx->buffer[63] = curlx_ultouc(ctx->hi >> 24);
+
+  body(ctx, ctx->buffer, 64);
+
+  result[0] = curlx_ultouc((ctx->a)&0xff);
+  result[1] = curlx_ultouc((ctx->a >> 8)&0xff);
+  result[2] = curlx_ultouc((ctx->a >> 16)&0xff);
+  result[3] = curlx_ultouc(ctx->a >> 24);
+  result[4] = curlx_ultouc((ctx->b)&0xff);
+  result[5] = curlx_ultouc((ctx->b >> 8)&0xff);
+  result[6] = curlx_ultouc((ctx->b >> 16)&0xff);
+  result[7] = curlx_ultouc(ctx->b >> 24);
+  result[8] = curlx_ultouc((ctx->c)&0xff);
+  result[9] = curlx_ultouc((ctx->c >> 8)&0xff);
+  result[10] = curlx_ultouc((ctx->c >> 16)&0xff);
+  result[11] = curlx_ultouc(ctx->c >> 24);
+  result[12] = curlx_ultouc((ctx->d)&0xff);
+  result[13] = curlx_ultouc((ctx->d >> 8)&0xff);
+  result[14] = curlx_ultouc((ctx->d >> 16)&0xff);
+  result[15] = curlx_ultouc(ctx->d >> 24);
+
+  memset(ctx, 0, sizeof(*ctx));
 }
 
+#endif
+
 void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len)
 {
   MD4_CTX ctx;
-  MD4Init(&ctx);
-  MD4Update(&ctx, input, curlx_uztoui(len));
-  MD4Final(output, &ctx);
+  MD4_Init(&ctx);
+  MD4_Update(&ctx, input, curlx_uztoui(len));
+  MD4_Final(output, &ctx);
 }
 #endif /* defined(USE_NSS) || defined(USE_OS400CRYPTO) */
index af39fd4..6df07dc 100644 (file)
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "curl_hmac.h"
 #include "warnless.h"
 
-#include "curl_memory.h"
-
 #if defined(USE_GNUTLS_NETTLE)
 
 #include <nettle/md5.h>
+#include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
 
@@ -58,6 +57,7 @@ static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
 #elif defined(USE_GNUTLS)
 
 #include <gcrypt.h>
+#include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
 
@@ -81,14 +81,12 @@ static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
   gcry_md_close(*ctx);
 }
 
-#elif defined(USE_SSLEAY)
+#elif defined(USE_OPENSSL)
 /* When OpenSSL is available we use the MD5-function from OpenSSL */
-
-#  ifdef USE_OPENSSL
-#    include <openssl/md5.h>
-#  else
-#    include <md5.h>
-#  endif
+#include <openssl/md5.h>
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
 
 #elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
               (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
@@ -103,6 +101,9 @@ static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
    reliable than defining COMMON_DIGEST_FOR_OPENSSL on older cats. */
 #  include <CommonCrypto/CommonDigest.h>
 #  define MD5_CTX CC_MD5_CTX
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
 
 static void MD5_Init(MD5_CTX *ctx)
 {
@@ -124,6 +125,9 @@ static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
 #elif defined(_WIN32)
 
 #include <wincrypt.h>
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
 
 typedef struct {
   HCRYPTPROV hCryptProv;
@@ -157,314 +161,326 @@ static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
     CryptReleaseContext(ctx->hCryptProv, 0);
 }
 
+#elif defined(USE_AXTLS)
+#include <axTLS/config.h>
+#include <axTLS/os_int.h>
+#include <axTLS/crypto.h>
+#include "curl_memory.h"
+/* The last #include file should be: */
+#include "memdebug.h"
 #else
 /* When no other crypto library is available we use this code segment */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 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. MD5 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.
+/*
+ * This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
+ * MD5 Message-Digest Algorithm (RFC 1321).
+ *
+ * Homepage:
+ http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
+ *
+ * Author:
+ * Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
+ *
+ * This software was written by Alexander Peslyak in 2001.  No copyright is
+ * claimed, and the software is hereby placed in the public domain.
+ * In case this attempt to disclaim copyright and place the software in the
+ * public domain is deemed null and void, then the software is
+ * Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
+ * general public under the following terms:
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted.
+ *
+ * There's ABSOLUTELY NO WARRANTY, express or implied.
+ *
+ * (This is a heavily cut-down "BSD license".)
+ *
+ * This differs from Colin Plumb's older public domain implementation in that
+ * no exactly 32-bit integer data type is required (any 32-bit or wider
+ * unsigned integer data type will do), there's no compile-time endianness
+ * configuration, and the function prototypes match OpenSSL's.  No code from
+ * Colin Plumb's implementation has been reused; this comment merely compares
+ * the properties of the two independent implementations.
+ *
+ * The primary goals of this implementation are portability and ease of use.
+ * It is meant to be fast, but not as fast as possible.  Some known
+ * optimizations are not included to reduce source code size and avoid
+ * compile-time configuration.
  */
 
-/* UINT4 defines a four byte word */
-typedef unsigned int UINT4;
+#include <string.h>
 
-/* MD5 context. */
-struct md5_ctx {
-  UINT4 state[4];                                   /* state (ABCD) */
-  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
-  unsigned char buffer[64];                         /* input buffer */
-};
-
-typedef struct md5_ctx MD5_CTX;
+/* The last #include files should be: */
+#include "curl_memory.h"
+#include "memdebug.h"
 
-static void MD5_Init(struct md5_ctx *);
-static void MD5_Update(struct md5_ctx *, const unsigned char *, unsigned int);
-static void MD5_Final(unsigned char [16], struct md5_ctx *);
+/* Any 32-bit or wider unsigned integer data type will do */
+typedef unsigned int MD5_u32plus;
 
-/* Constants for MD5Transform routine.
- */
+typedef struct {
+  MD5_u32plus lo, hi;
+  MD5_u32plus a, b, c, d;
+  unsigned char buffer[64];
+  MD5_u32plus block[16];
+} MD5_CTX;
 
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform(UINT4 [4], const unsigned char [64]);
-static void Encode(unsigned char *, UINT4 *, unsigned int);
-static void Decode(UINT4 *, const unsigned char *, unsigned int);
-
-static const 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
-};
+static void MD5_Init(MD5_CTX *ctx);
+static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
+static void MD5_Final(unsigned char *result, MD5_CTX *ctx);
 
-/* F, G, H and I are basic MD5 functions.
+/*
+ * The basic MD5 functions.
+ *
+ * F and G are optimized compared to their RFC 1321 definitions for
+ * architectures that lack an AND-NOT instruction, just like in Colin Plumb's
+ * implementation.
  */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
+#define F(x, y, z)                      ((z) ^ ((x) & ((y) ^ (z))))
+#define G(x, y, z)                      ((y) ^ ((z) & ((x) ^ (y))))
+#define H(x, y, z)                      (((x) ^ (y)) ^ (z))
+#define H2(x, y, z)                     ((x) ^ ((y) ^ (z)))
+#define I(x, y, z)                      ((y) ^ ((x) | ~(z)))
+
+/*
+ * The MD5 transformation for all four rounds.
  */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
+#define STEP(f, a, b, c, d, x, t, s) \
+        (a) += f((b), (c), (d)) + (x) + (t); \
+        (a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
+        (a) += (b);
+
+/*
+ * SET reads 4 input bytes in little-endian byte order and stores them
+ * in a properly aligned word in host byte order.
+ *
+ * The check for little-endian architectures that tolerate unaligned
+ * memory accesses is just an optimization.  Nothing will break if it
+ * doesn't work.
  */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
-  }
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
+#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
+#define SET(n) \
+        (*(MD5_u32plus *)&ptr[(n) * 4])
+#define GET(n) \
+        SET(n)
+#else
+#define SET(n) \
+        (ctx->block[(n)] = \
+        (MD5_u32plus)ptr[(n) * 4] | \
+        ((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \
+        ((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \
+        ((MD5_u32plus)ptr[(n) * 4 + 3] << 24))
+#define GET(n) \
+        (ctx->block[(n)])
+#endif
+
+/*
+ * This processes one or more 64-byte data blocks, but does NOT update
+ * the bit counters.  There are no alignment requirements.
  */
-static void MD5_Init(struct md5_ctx *context)
+static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
 {
-  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;
+  const unsigned char *ptr;
+  MD5_u32plus a, b, c, d;
+  MD5_u32plus saved_a, saved_b, saved_c, saved_d;
+
+  ptr = (const unsigned char *)data;
+
+  a = ctx->a;
+  b = ctx->b;
+  c = ctx->c;
+  d = ctx->d;
+
+  do {
+    saved_a = a;
+    saved_b = b;
+    saved_c = c;
+    saved_d = d;
+
+/* Round 1 */
+    STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
+      STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
+      STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
+      STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
+      STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
+      STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
+      STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
+      STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
+      STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
+      STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
+      STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
+      STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
+      STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
+      STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
+      STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
+      STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
+
+/* Round 2 */
+      STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
+      STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
+      STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
+      STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
+      STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
+      STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
+      STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
+      STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
+      STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
+      STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
+      STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
+      STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
+      STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
+      STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
+      STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
+      STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
+
+/* Round 3 */
+      STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
+      STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
+      STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
+      STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)
+      STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
+      STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)
+      STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
+      STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)
+      STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
+      STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)
+      STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
+      STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)
+      STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
+      STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
+      STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
+      STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)
+
+/* Round 4 */
+      STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
+      STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
+      STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
+      STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
+      STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
+      STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
+      STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
+      STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
+      STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
+      STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
+      STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
+      STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
+      STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
+      STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
+      STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
+      STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
+
+      a += saved_a;
+    b += saved_b;
+    c += saved_c;
+    d += saved_d;
+
+    ptr += 64;
+  } while(size -= 64);
+
+  ctx->a = a;
+  ctx->b = b;
+  ctx->c = c;
+  ctx->d = d;
+
+  return ptr;
 }
 
-/* MD5 block update operation. Continues an MD5 message-digest
-  operation, processing another message block, and updating the
-  context.
- */
-static void MD5_Update (struct md5_ctx *context,    /* context */
-                        const unsigned char *input, /* input block */
-                        unsigned int inputLen)      /* length of input block */
+static void MD5_Init(MD5_CTX *ctx)
 {
-  unsigned int i, bufindex, partLen;
+  ctx->a = 0x67452301;
+  ctx->b = 0xefcdab89;
+  ctx->c = 0x98badcfe;
+  ctx->d = 0x10325476;
 
-  /* Compute number of bytes mod 64 */
-  bufindex = (unsigned int)((context->count[0] >> 3) & 0x3F);
+  ctx->lo = 0;
+  ctx->hi = 0;
+}
 
-  /* Update number of bits */
-  if((context->count[0] += ((UINT4)inputLen << 3))
-      < ((UINT4)inputLen << 3))
-    context->count[1]++;
-  context->count[1] += ((UINT4)inputLen >> 29);
+static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
+{
+  MD5_u32plus saved_lo;
+  unsigned long used, available;
+
+  saved_lo = ctx->lo;
+  if((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
+    ctx->hi++;
+  ctx->hi += (MD5_u32plus)size >> 29;
 
-  partLen = 64 - bufindex;
+  used = saved_lo & 0x3f;
 
-  /* Transform as many times as possible. */
-  if(inputLen >= partLen) {
-    memcpy(&context->buffer[bufindex], input, partLen);
-    MD5Transform(context->state, context->buffer);
+  if(used) {
+    available = 64 - used;
 
-    for(i = partLen; i + 63 < inputLen; i += 64)
-      MD5Transform(context->state, &input[i]);
+    if(size < available) {
+      memcpy(&ctx->buffer[used], data, size);
+      return;
+    }
+
+    memcpy(&ctx->buffer[used], data, available);
+    data = (const unsigned char *)data + available;
+    size -= available;
+    body(ctx, ctx->buffer, 64);
+  }
 
-    bufindex = 0;
+  if(size >= 64) {
+    data = body(ctx, data, size & ~(unsigned long)0x3f);
+    size &= 0x3f;
   }
-  else
-    i = 0;
 
-  /* Buffer remaining input */
-  memcpy(&context->buffer[bufindex], &input[i], inputLen-i);
+  memcpy(ctx->buffer, data, size);
 }
 
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
-   the message digest and zeroizing the context.
-*/
-static void MD5_Final(unsigned char digest[16], /* message digest */
-                      struct md5_ctx *context) /* context */
+static void MD5_Final(unsigned char *result, MD5_CTX *ctx)
 {
-  unsigned char bits[8];
-  unsigned int count, padLen;
+  unsigned long used, available;
 
-  /* Save number of bits */
-  Encode (bits, context->count, 8);
+  used = ctx->lo & 0x3f;
 
-  /* Pad out to 56 mod 64. */
-  count = (unsigned int)((context->count[0] >> 3) & 0x3f);
-  padLen = (count < 56) ? (56 - count) : (120 - count);
-  MD5_Update (context, PADDING, padLen);
+  ctx->buffer[used++] = 0x80;
 
-  /* Append length (before padding) */
-  MD5_Update (context, bits, 8);
+  available = 64 - used;
 
-  /* Store state in digest */
-  Encode (digest, context->state, 16);
-
-  /* Zeroize sensitive information. */
-  memset ((void *)context, 0, sizeof (*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block. */
-static void MD5Transform(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, 0xd76aa478); /* 1 */
-  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
-  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
-  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
-  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
-  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
-  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
-  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
-  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
-  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
-  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
-  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
-  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
-  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
-  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
-  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
-  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
-  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
-  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
-  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
-  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
-  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
-  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
-  /* Round 3 */
-  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
-  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
-  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
-  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
-  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
-  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
-  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
-  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
-  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
-  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-
-  /* Round 4 */
-  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
-  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
-  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
-  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
-  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
-  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
-  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
-  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
-  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
-  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
-  state[0] += a;
-  state[1] += b;
-  state[2] += c;
-  state[3] += d;
-
-  /* Zeroize sensitive information. */
-  memset((void *)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);
+  if(available < 8) {
+    memset(&ctx->buffer[used], 0, available);
+    body(ctx, ctx->buffer, 64);
+    used = 0;
+    available = 64;
   }
-}
-
-/* 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);
+  memset(&ctx->buffer[used], 0, available - 8);
+
+  ctx->lo <<= 3;
+  ctx->buffer[56] = curlx_ultouc((ctx->lo)&0xff);
+  ctx->buffer[57] = curlx_ultouc((ctx->lo >> 8)&0xff);
+  ctx->buffer[58] = curlx_ultouc((ctx->lo >> 16)&0xff);
+  ctx->buffer[59] = curlx_ultouc(ctx->lo >> 24);
+  ctx->buffer[60] = curlx_ultouc((ctx->hi)&0xff);
+  ctx->buffer[61] = curlx_ultouc((ctx->hi >> 8)&0xff);
+  ctx->buffer[62] = curlx_ultouc((ctx->hi >> 16)&0xff);
+  ctx->buffer[63] = curlx_ultouc(ctx->hi >> 24);
+
+  body(ctx, ctx->buffer, 64);
+
+  result[0] = curlx_ultouc((ctx->a)&0xff);
+  result[1] = curlx_ultouc((ctx->a >> 8)&0xff);
+  result[2] = curlx_ultouc((ctx->a >> 16)&0xff);
+  result[3] = curlx_ultouc(ctx->a >> 24);
+  result[4] = curlx_ultouc((ctx->b)&0xff);
+  result[5] = curlx_ultouc((ctx->b >> 8)&0xff);
+  result[6] = curlx_ultouc((ctx->b >> 16)&0xff);
+  result[7] = curlx_ultouc(ctx->b >> 24);
+  result[8] = curlx_ultouc((ctx->c)&0xff);
+  result[9] = curlx_ultouc((ctx->c >> 8)&0xff);
+  result[10] = curlx_ultouc((ctx->c >> 16)&0xff);
+  result[11] = curlx_ultouc(ctx->c >> 24);
+  result[12] = curlx_ultouc((ctx->d)&0xff);
+  result[13] = curlx_ultouc((ctx->d >> 8)&0xff);
+  result[14] = curlx_ultouc((ctx->d >> 16)&0xff);
+  result[15] = curlx_ultouc(ctx->d >> 24);
+
+  memset(ctx, 0, sizeof(*ctx));
 }
 
 #endif /* CRYPTO LIBS */
 
-/* The last #include file should be: */
-#include "memdebug.h"
-
 const HMAC_params Curl_HMAC_MD5[] = {
   {
     (HMAC_hinit_func) MD5_Init,           /* Hash initialization function. */
@@ -486,6 +502,9 @@ const MD5_params Curl_DIGEST_MD5[] = {
   }
 };
 
+/*
+ * @unittest: 1601
+ */
 void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */
                 const unsigned char *input)
 {
index 4afa620..804b5fa 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -26,8 +26,7 @@
 
 #include <curl/curl.h>
 
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 #include "urldata.h"
 
 #define MEMDEBUG_NODEFINES /* don't redefine the standard functions */
@@ -113,7 +112,7 @@ void curl_memdebug(const char *logname)
 {
   if(!logfile) {
     if(logname && *logname)
-      logfile = fopen(logname, "w");
+      logfile = fopen(logname, FOPEN_WRITETEXT);
     else
       logfile = stderr;
 #ifdef MEMDEBUG_LOG_SYNC
@@ -147,6 +146,7 @@ static bool countcheck(const char *func, int line, const char *source)
         /* log to stderr also */
         fprintf(stderr, "LIMIT %s:%d %s reached memlimit\n",
                 source, line, func);
+        fflush(logfile); /* because it might crash now */
       }
       SET_ERRNO(ENOMEM);
       return TRUE; /* RETURN ERROR! */
@@ -154,10 +154,6 @@ static bool countcheck(const char *func, int line, const char *source)
     else
       memsize--; /* countdown */
 
-    /* log the countdown */
-    if(source)
-      curl_memlog("LIMIT %s:%d %ld ALLOCS left\n",
-                  source, line, memsize);
 
   }
 
@@ -343,10 +339,10 @@ curl_socket_t curl_socket(int domain, int type, int protocol,
                           int line, const char *source)
 {
   const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
-                    "FD %s:%d socket() = %d\n" :
-                    (sizeof(curl_socket_t) == sizeof(long)) ?
-                    "FD %s:%d socket() = %ld\n" :
-                    "FD %s:%d socket() = %zd\n" ;
+    "FD %s:%d socket() = %d\n" :
+    (sizeof(curl_socket_t) == sizeof(long)) ?
+    "FD %s:%d socket() = %ld\n" :
+    "FD %s:%d socket() = %zd\n";
 
   curl_socket_t sockfd = socket(domain, type, protocol);
 
@@ -362,10 +358,10 @@ int curl_socketpair(int domain, int type, int protocol,
                     int line, const char *source)
 {
   const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
-                    "FD %s:%d socketpair() = %d %d\n" :
-                    (sizeof(curl_socket_t) == sizeof(long)) ?
-                    "FD %s:%d socketpair() = %ld %ld\n" :
-                    "FD %s:%d socketpair() = %zd %zd\n" ;
+    "FD %s:%d socketpair() = %d %d\n" :
+    (sizeof(curl_socket_t) == sizeof(long)) ?
+    "FD %s:%d socketpair() = %ld %ld\n" :
+    "FD %s:%d socketpair() = %zd %zd\n";
 
   int res = socketpair(domain, type, protocol, socket_vector);
 
@@ -380,10 +376,10 @@ curl_socket_t curl_accept(curl_socket_t s, void *saddr, void *saddrlen,
                           int line, const char *source)
 {
   const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
-                    "FD %s:%d accept() = %d\n" :
-                    (sizeof(curl_socket_t) == sizeof(long)) ?
-                    "FD %s:%d accept() = %ld\n" :
-                    "FD %s:%d accept() = %zd\n" ;
+    "FD %s:%d accept() = %d\n" :
+    (sizeof(curl_socket_t) == sizeof(long)) ?
+    "FD %s:%d accept() = %ld\n" :
+    "FD %s:%d accept() = %zd\n";
 
   struct sockaddr *addr = (struct sockaddr *)saddr;
   curl_socklen_t *addrlen = (curl_socklen_t *)saddrlen;
@@ -400,10 +396,10 @@ curl_socket_t curl_accept(curl_socket_t s, void *saddr, void *saddrlen,
 void curl_mark_sclose(curl_socket_t sockfd, int line, const char *source)
 {
   const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
-                    "FD %s:%d sclose(%d)\n" :
-                    (sizeof(curl_socket_t) == sizeof(long)) ?
-                    "FD %s:%d sclose(%ld)\n" :
-                    "FD %s:%d sclose(%zd)\n" ;
+    "FD %s:%d sclose(%d)\n":
+    (sizeof(curl_socket_t) == sizeof(long)) ?
+    "FD %s:%d sclose(%ld)\n":
+    "FD %s:%d sclose(%zd)\n";
 
   if(source)
     curl_memlog(fmt, source, line, sockfd);
index bd565c8..ce1a842 100644 (file)
@@ -8,11 +8,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -103,14 +103,15 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source);
 #  endif
 #endif
 
+#undef socket
 #define socket(domain,type,protocol)\
- curl_socket(domain,type,protocol,__LINE__,__FILE__)
+ curl_socket(domain, type, protocol, __LINE__, __FILE__)
 #undef accept /* for those with accept as a macro */
 #define accept(sock,addr,len)\
- curl_accept(sock,addr,len,__LINE__,__FILE__)
+ curl_accept(sock, addr, len, __LINE__, __FILE__)
 #ifdef HAVE_SOCKETPAIR
 #define socketpair(domain,type,protocol,socket_vector)\
- curl_socketpair(domain,type,protocol,socket_vector,__LINE__,__FILE__)
+ curl_socketpair(domain, type, protocol, socket_vector, __LINE__, __FILE__)
 #endif
 
 #ifdef HAVE_GETADDRINFO
@@ -119,25 +120,25 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source);
    our macro as for other platforms. Instead, we redefine the new name they
    define getaddrinfo to become! */
 #define ogetaddrinfo(host,serv,hint,res) \
-  curl_dogetaddrinfo(host,serv,hint,res,__LINE__,__FILE__)
+  curl_dogetaddrinfo(host, serv, hint, res, __LINE__, __FILE__)
 #else
 #undef getaddrinfo
 #define getaddrinfo(host,serv,hint,res) \
-  curl_dogetaddrinfo(host,serv,hint,res,__LINE__,__FILE__)
+  curl_dogetaddrinfo(host, serv, hint, res, __LINE__, __FILE__)
 #endif
 #endif /* HAVE_GETADDRINFO */
 
 #ifdef HAVE_GETNAMEINFO
 #undef getnameinfo
 #define getnameinfo(sa,salen,host,hostlen,serv,servlen,flags) \
-  curl_dogetnameinfo(sa,salen,host,hostlen,serv,servlen,flags, __LINE__, \
-  __FILE__)
+  curl_dogetnameinfo(sa, salen, host, hostlen, serv, servlen, flags, \
+                     __LINE__, __FILE__)
 #endif /* HAVE_GETNAMEINFO */
 
 #ifdef HAVE_FREEADDRINFO
 #undef freeaddrinfo
 #define freeaddrinfo(data) \
-  curl_dofreeaddrinfo(data,__LINE__,__FILE__)
+  curl_dofreeaddrinfo(data, __LINE__, __FILE__)
 #endif /* HAVE_FREEADDRINFO */
 
 /* sclose is probably already defined, redefine it! */
@@ -171,6 +172,6 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source);
  */
 
 #define Curl_safefree(ptr) \
-  do {if((ptr)) {free((ptr)); (ptr) = NULL;}} WHILE_FALSE
+  do { free((ptr)); (ptr) = NULL;} WHILE_FALSE
 
 #endif /* HEADER_CURL_MEMDEBUG_H */
index 0b13318..5a1435c 100755 (executable)
@@ -10,7 +10,7 @@
 # *
 # * 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.
+# * are also available at https://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
@@ -185,6 +185,12 @@ sub VERSION_MESSAGE() {
 warning_message() unless ($opt_q || $url =~ m/^(ht|f)tps:/i );
 HELP_MESSAGE() if ($opt_h);
 
+sub report($@) {
+  my $output = shift;
+
+  print STDERR $output . "\n" unless $opt_q;
+}
+
 sub is_in_list($@) {
   my $target = shift;
 
@@ -278,20 +284,20 @@ my $fetched;
 
 my $oldsha1 = oldsha1($crt);
 
-print STDERR "SHA1 of old file: $oldsha1\n" if (!$opt_q);
+report "SHA1 of old file: $oldsha1";
 
-print STDERR "Downloading '$txt' ...\n" if (!$opt_q);
+report "Downloading '$txt' ...";
 
 if($curl && !$opt_n) {
   my $https = $url;
   $https =~ s/^http:/https:/;
-  print STDERR "Get certdata over HTTPS with curl!\n" if (!$opt_q);
+  report "Get certdata over HTTPS with curl!";
   my $quiet = $opt_q ? "-s" : "";
   my @out = `curl -w %{response_code} $quiet -O $https`;
   if(@out && $out[0] == 200) {
     $fetched = 1;
   } else {
-    print STDERR "Failed downloading HTTPS with curl, trying HTTP with LWP\n" if (!$opt_q);
+    report "Failed downloading HTTPS with curl, trying HTTP with LWP";
   }
 }
 
@@ -300,15 +306,14 @@ unless ($fetched || ($opt_n and -e $txt)) {
   $ua->env_proxy();
   $resp = $ua->mirror($url, $txt);
   if ($resp && $resp->code eq '304') {
-    print STDERR "Not modified\n" unless $opt_q;
+    report "Not modified";
     exit 0 if -e $crt && !$opt_f;
   } else {
       $fetched = 1;
   }
   if( !$resp || $resp->code !~ /^(?:200|304)$/ ) {
-      print STDERR "Unable to download latest data: "
-        . ($resp? $resp->code . ' - ' . $resp->message : "LWP failed") . "\n"
-        unless $opt_q;
+      report "Unable to download latest data: "
+        . ($resp? $resp->code . ' - ' . $resp->message : "LWP failed");
       exit 1 if -e $crt || ! -r $txt;
   }
 }
@@ -325,11 +330,11 @@ if(!$filedate) {
 my $newsha1= sha1($txt);
 
 if(!$opt_f && $oldsha1 eq $newsha1) {
-    print STDERR "Downloaded file identical to previous run\'s source file. Exiting\n";
+    report "Downloaded file identical to previous run\'s source file. Exiting";
     exit;
 }
 
-print STDERR "SHA1 of new file: $newsha1\n";
+report "SHA1 of new file: $newsha1";
 
 my $currentdate = scalar gmtime($filedate);
 
@@ -361,7 +366,7 @@ print CRT <<EOT;
 
 EOT
 
-print STDERR "Processing  '$txt' ...\n" if (!$opt_q);
+report "Processing  '$txt' ...";
 my $caname;
 my $certnum = 0;
 my $skipnum = 0;
@@ -413,9 +418,9 @@ while (<TXT>) {
       last if (/^#/);
       if (/^CKA_TRUST_([A-Z_]+)\s+CK_TRUST\s+CKT_NSS_([A-Z_]+)\s*$/) {
         if ( !is_in_list($1,@valid_mozilla_trust_purposes) ) {
-          print STDERR "Warning: Unrecognized trust purpose for cert: $caname. Trust purpose: $1. Trust Level: $2\n" if (!$opt_q);
+          report "Warning: Unrecognized trust purpose for cert: $caname. Trust purpose: $1. Trust Level: $2";
         } elsif ( !is_in_list($2,@valid_mozilla_trust_levels) ) {
-          print STDERR "Warning: Unrecognized trust level for cert: $caname. Trust purpose: $1. Trust Level: $2\n" if (!$opt_q);
+          report "Warning: Unrecognized trust level for cert: $caname. Trust purpose: $1. Trust Level: $2";
         } else {
           push @{$trust_purposes_by_level{$2}}, $1;
         }
@@ -470,7 +475,7 @@ while (<TXT>) {
           open(CRT, ">>$crt.~") or die "Couldn't open $crt.~: $!";
         }
       }
-      print STDERR "Parsing: $caname\n" if ($opt_v);
+      report "Parsing: $caname" if ($opt_v);
       $certnum ++;
       $start_of_cert = 0;
     }
@@ -491,4 +496,4 @@ unless( $stdout ) {
     rename "$crt.~", $crt or die "Failed to rename $crt.~ to $crt: $!\n";
 }
 unlink $txt if ($opt_u);
-print STDERR "Done ($certnum CA certs processed, $skipnum skipped).\n" if (!$opt_q);
+report "Done ($certnum CA certs processed, $skipnum skipped).";
index 2d82e7d..b0d9427 100755 (executable)
@@ -9,7 +9,7 @@
 '*\r
 '* This software is licensed as described in the file COPYING, which\r
 '* you should have received as part of this distribution. The terms\r
-'* are also available at http://curl.haxx.se/docs/copyright.html.\r
+'* are also available at https://curl.haxx.se/docs/copyright.html.\r
 '*\r
 '* You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 '* copies of the Software, and permit persons to whom the Software is\r
index 23070a7..f5fc996 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -32,7 +32,7 @@
  *
  * If you ever want truly portable and good *printf() clones, the project that
  * took on from here is named 'Trio' and you find more details on the trio web
- * page at http://daniel.haxx.se/trio/
+ * page at https://daniel.haxx.se/projects/trio/
  */
 
 #include "curl_setup.h"
index 97c9e65..a147963 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "warnless.h"
 #include "speedcheck.h"
 #include "conncache.h"
-#include "bundles.h"
 #include "multihandle.h"
 #include "pipeline.h"
 #include "sigpipe.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
 
 #define GOOD_MULTI_HANDLE(x) \
   ((x) && (((struct Curl_multi *)(x))->type == CURL_MULTI_HANDLE))
-#define GOOD_EASY_HANDLE(x) \
-  ((x) && (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER))
 
 static void singlesocket(struct Curl_multi *multi,
                          struct SessionHandle *data);
 static int update_timer(struct Curl_multi *multi);
 
-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);
@@ -89,6 +81,7 @@ static const char * const statename[]={
   "WAITRESOLVE",
   "WAITCONNECT",
   "WAITPROXYCONNECT",
+  "SENDPROTOCONNECT",
   "PROTOCONNECT",
   "WAITDO",
   "DO",
@@ -106,6 +99,9 @@ static const char * const statename[]={
 
 static void multi_freetimeout(void *a, void *b);
 
+/* function pointer called once when switching TO a state */
+typedef void (*init_multistate_func)(struct SessionHandle *data);
+
 /* always use this function to change state, to make debugging easier */
 static void mstate(struct SessionHandle *data, CURLMstate state
 #ifdef DEBUGBUILD
@@ -114,6 +110,12 @@ static void mstate(struct SessionHandle *data, CURLMstate state
 )
 {
   CURLMstate oldstate = data->mstate;
+  static const init_multistate_func finit[CURLM_STATE_LAST] = {
+    NULL,
+    NULL,
+    Curl_init_CONNECT, /* CONNECT */
+    /* the rest is NULL too */
+  };
 
 #if defined(DEBUGBUILD) && defined(CURL_DISABLE_VERBOSE_STRINGS)
   (void) lineno;
@@ -143,6 +145,10 @@ static void mstate(struct SessionHandle *data, CURLMstate state
   if(state == CURLM_STATE_COMPLETED)
     /* changing to COMPLETED means there's one less easy handle 'alive' */
     data->multi->num_alive--;
+
+  /* if this state has an init-function, run it */
+  if(finit[state])
+    finit[state](data);
 }
 
 #ifndef DEBUGBUILD
@@ -157,7 +163,6 @@ static void mstate(struct SessionHandle *data, CURLMstate state
 
 struct Curl_sh_entry {
   struct SessionHandle *easy;
-  time_t timestamp;
   int action;  /* what action READ/WRITE this socket waits for */
   curl_socket_t socket; /* mainly to ease debugging */
   void *socketp; /* settable by users with curl_multi_assign() */
@@ -167,13 +172,22 @@ struct Curl_sh_entry {
 #define SH_READ  1
 #define SH_WRITE 2
 
+/* look up a given socket in the socket hash, skip invalid sockets */
+static struct Curl_sh_entry *sh_getentry(struct curl_hash *sh,
+                                         curl_socket_t s)
+{
+  if(s != CURL_SOCKET_BAD)
+    /* only look for proper sockets */
+    return Curl_hash_pick(sh, (char *)&s, sizeof(curl_socket_t));
+  return NULL;
+}
+
 /* make sure this socket is present in the hash for this handle */
 static struct Curl_sh_entry *sh_addentry(struct curl_hash *sh,
                                          curl_socket_t s,
                                          struct SessionHandle *data)
 {
-  struct Curl_sh_entry *there =
-    Curl_hash_pick(sh, (char *)&s, sizeof(curl_socket_t));
+  struct Curl_sh_entry *there = sh_getentry(sh, s);
   struct Curl_sh_entry *check;
 
   if(there)
@@ -201,15 +215,9 @@ static struct Curl_sh_entry *sh_addentry(struct curl_hash *sh,
 /* delete the given socket + handle from the hash */
 static void sh_delentry(struct curl_hash *sh, curl_socket_t s)
 {
-  struct Curl_sh_entry *there =
-    Curl_hash_pick(sh, (char *)&s, sizeof(curl_socket_t));
-
-  if(there) {
-    /* this socket is in the hash */
-    /* We remove the hash entry. (This'll end up in a call to
-       sh_freeentry().) */
-    Curl_hash_delete(sh, (char *)&s, sizeof(curl_socket_t));
-  }
+  /* We remove the hash entry. This will end up in a call to
+     sh_freeentry(). */
+  Curl_hash_delete(sh, (char *)&s, sizeof(curl_socket_t));
 }
 
 /*
@@ -219,23 +227,22 @@ static void sh_freeentry(void *freethis)
 {
   struct Curl_sh_entry *p = (struct Curl_sh_entry *) freethis;
 
-  if(p)
-    free(p);
+  free(p);
 }
 
 static size_t fd_key_compare(void *k1, size_t k1_len, void *k2, size_t k2_len)
 {
   (void) k1_len; (void) k2_len;
 
-  return (*((int *) k1)) == (*((int *) k2));
+  return (*((curl_socket_t *) k1)) == (*((curl_socket_t *) k2));
 }
 
 static size_t hash_fd(void *key, size_t key_length, size_t slots_num)
 {
-  int fd = *((int *) key);
+  curl_socket_t fd = *((curl_socket_t *) key);
   (void) key_length;
 
-  return (fd % (int)slots_num);
+  return (fd % slots_num);
 }
 
 /*
@@ -256,10 +263,10 @@ static size_t hash_fd(void *key, size_t key_length, size_t slots_num)
  * per call."
  *
  */
-static struct curl_hash *sh_init(int hashsize)
+static int sh_init(struct curl_hash *hash, int hashsize)
 {
-  return Curl_hash_alloc(hashsize, hash_fd, fd_key_compare,
-                         sh_freeentry);
+  return Curl_hash_init(hash, hashsize, hash_fd, fd_key_compare,
+                        sh_freeentry);
 }
 
 /*
@@ -298,16 +305,13 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
 
   multi->type = CURL_MULTI_HANDLE;
 
-  multi->hostcache = Curl_mk_dnscache();
-  if(!multi->hostcache)
+  if(Curl_mk_dnscache(&multi->hostcache))
     goto error;
 
-  multi->sockhash = sh_init(hashsize);
-  if(!multi->sockhash)
+  if(sh_init(&multi->sockhash, hashsize))
     goto error;
 
-  multi->conn_cache = Curl_conncache_init(chashsize);
-  if(!multi->conn_cache)
+  if(Curl_conncache_init(&multi->conn_cache, chashsize))
     goto error;
 
   multi->msglist = Curl_llist_alloc(multi_freeamsg);
@@ -324,7 +328,7 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
     goto error;
 
   multi->closure_handle->multi = multi;
-  multi->closure_handle->state.conn_cache = multi->conn_cache;
+  multi->closure_handle->state.conn_cache = &multi->conn_cache;
 
   multi->max_pipeline_length = 5;
 
@@ -334,12 +338,9 @@ struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
 
   error:
 
-  Curl_hash_destroy(multi->sockhash);
-  multi->sockhash = NULL;
-  Curl_hash_destroy(multi->hostcache);
-  multi->hostcache = NULL;
-  Curl_conncache_destroy(multi->conn_cache);
-  multi->conn_cache = NULL;
+  Curl_hash_destroy(&multi->sockhash);
+  Curl_hash_destroy(&multi->hostcache);
+  Curl_conncache_destroy(&multi->conn_cache);
   Curl_close(multi->closure_handle);
   multi->closure_handle = NULL;
   Curl_llist_destroy(multi->msglist, NULL);
@@ -408,14 +409,12 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
      easy handle's one is currently not set. */
   else if(!data->dns.hostcache ||
      (data->dns.hostcachetype == HCACHE_NONE)) {
-    data->dns.hostcache = multi->hostcache;
+    data->dns.hostcache = &multi->hostcache;
     data->dns.hostcachetype = HCACHE_MULTI;
   }
 
   /* Point to the multi's connection cache */
-  data->state.conn_cache = multi->conn_cache;
-
-  data->state.infilesize = data->set.filesize;
+  data->state.conn_cache = &multi->conn_cache;
 
   /* This adds the new entry at the 'end' of the doubly-linked circular
      list of SessionHandle structs to try and maintain a FIFO queue so
@@ -431,8 +430,7 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
     multi->easylp = data; /* the new last node */
   }
   else {
-    /* first node, make both prev and next be NULL! */
-    data->next = NULL;
+    /* first node, make prev NULL! */
     data->prev = NULL;
     multi->easylp = multi->easyp = data; /* both first and last */
   }
@@ -508,18 +506,22 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
   if(!data->multi)
     return CURLM_OK; /* it is already removed so let's say it is fine! */
 
-
   premature = (data->mstate < CURLM_STATE_COMPLETED) ? TRUE : FALSE;
   easy_owns_conn = (data->easy_conn && (data->easy_conn->data == easy)) ?
     TRUE : FALSE;
 
   /* If the 'state' is not INIT or COMPLETED, we might need to do something
      nice to put the easy_handle in a good known state when this returns. */
-  if(premature)
+  if(premature) {
     /* this handle is "alive" so we need to count down the total number of
        alive connections when this is removed */
     multi->num_alive--;
 
+    /* When this handle gets removed, other handles may be able to get the
+       connection */
+    Curl_multi_process_pending_handles(multi);
+  }
+
   if(data->easy_conn &&
      data->mstate > CURLM_STATE_DO &&
      data->mstate < CURLM_STATE_COMPLETED) {
@@ -538,12 +540,6 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
      curl_easy_cleanup is called. */
   Curl_expire(data, 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(data->dns.hostcachetype == HCACHE_MULTI) {
     /* stop using the multi handle's DNS cache */
     data->dns.hostcache = NULL;
@@ -570,6 +566,13 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
 
   Curl_wildcard_dtor(&data->wildcard);
 
+  /* destroy the timeout list that is held in the easy handle, do this *after*
+     Curl_done() as that may actuall call Curl_expire that uses this */
+  if(data->state.timeoutlist) {
+    Curl_llist_destroy(data->state.timeoutlist, NULL);
+    data->state.timeoutlist = NULL;
+  }
+
   /* as this was using a shared connection cache we clear the pointer to that
      since we're not part of that multi handle anymore */
   data->state.conn_cache = NULL;
@@ -621,9 +624,10 @@ CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
   return CURLM_OK;
 }
 
-bool Curl_multi_pipeline_enabled(const struct Curl_multi *multi)
+/* Return TRUE if the application asked for a certain set of pipelining */
+bool Curl_pipeline_wanted(const struct Curl_multi *multi, int bits)
 {
-  return (multi && multi->pipelining_enabled) ? TRUE : FALSE;
+  return (multi && (multi->pipelining & bits)) ? TRUE : FALSE;
 }
 
 void Curl_multi_handlePipeBreak(struct SessionHandle *data)
@@ -649,14 +653,24 @@ static int waitconnect_getsock(struct connectdata *conn,
     }
   }
 
+  return rc;
+}
+
+static int waitproxyconnect_getsock(struct connectdata *conn,
+                                    curl_socket_t *sock,
+                                    int numsocks)
+{
+  if(!numsocks)
+    return GETSOCK_BLANK;
+
+  sock[0] = conn->sock[FIRSTSOCKET];
+
   /* when we've sent a CONNECT to a proxy, we should rather wait for the
      socket to become readable to be able to get the response headers */
-  if(conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT) {
-    sock[0] = conn->sock[FIRSTSOCKET];
-    rc = GETSOCK_READSOCK(0);
-  }
+  if(conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
+    return GETSOCK_READSOCK(0);
 
-  return rc;
+  return GETSOCK_WRITESOCK(0);
 }
 
 static int domore_getsock(struct connectdata *conn,
@@ -709,6 +723,7 @@ static int multi_getsock(struct SessionHandle *data,
     return Curl_resolver_getsock(data->easy_conn, socks, numsocks);
 
   case CURLM_STATE_PROTOCONNECT:
+  case CURLM_STATE_SENDPROTOCONNECT:
     return Curl_protocol_getsock(data->easy_conn, socks, numsocks);
 
   case CURLM_STATE_DO:
@@ -716,6 +731,8 @@ static int multi_getsock(struct SessionHandle *data,
     return Curl_doing_getsock(data->easy_conn, socks, numsocks);
 
   case CURLM_STATE_WAITPROXYCONNECT:
+    return waitproxyconnect_getsock(data->easy_conn, socks, numsocks);
+
   case CURLM_STATE_WAITCONNECT:
     return waitconnect_getsock(data->easy_conn, socks, numsocks);
 
@@ -797,6 +814,7 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
   unsigned int curlfds;
   struct pollfd *ufds = NULL;
   long timeout_internal;
+  int retcode = 0;
 
   if(!GOOD_MULTI_HANDLE(multi))
     return CURLM_BAD_HANDLE;
@@ -889,18 +907,20 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
   }
 
   if(nfds) {
+    int pollrc;
     /* wait... */
-    infof(data, "Curl_poll(%d ds, %d ms)\n", nfds, timeout_ms);
-    i = Curl_poll(ufds, nfds, timeout_ms);
+    pollrc = Curl_poll(ufds, nfds, timeout_ms);
+    DEBUGF(infof(data, "Curl_poll(%d ds, %d ms) == %d\n",
+                 nfds, timeout_ms, pollrc));
 
-    if(i) {
-      unsigned int j;
+    if(pollrc > 0) {
+      retcode = pollrc;
       /* copy revents results from the poll to the curl_multi_wait poll
          struct, the bit values of the actual underlying poll() implementation
          may not be the same as the ones in the public libcurl API! */
-      for(j = 0; j < extra_nfds; j++) {
+      for(i = 0; i < extra_nfds; i++) {
         unsigned short mask = 0;
-        unsigned r = ufds[curlfds + j].revents;
+        unsigned r = ufds[curlfds + i].revents;
 
         if(r & POLLIN)
           mask |= CURL_WAIT_POLLIN;
@@ -909,19 +929,67 @@ CURLMcode curl_multi_wait(CURLM *multi_handle,
         if(r & POLLPRI)
           mask |= CURL_WAIT_POLLPRI;
 
-        extra_fds[j].revents = mask;
+        extra_fds[i].revents = mask;
       }
     }
   }
-  else
-    i = 0;
 
-  Curl_safefree(ufds);
+  free(ufds);
   if(ret)
-    *ret = i;
+    *ret = retcode;
   return CURLM_OK;
 }
 
+/*
+ * Curl_multi_connchanged() is called to tell that there is a connection in
+ * this multi handle that has changed state (pipelining become possible, the
+ * number of allowed streams changed or similar), and a subsequent use of this
+ * multi handle should move CONNECT_PEND handles back to CONNECT to have them
+ * retry.
+ */
+void Curl_multi_connchanged(struct Curl_multi *multi)
+{
+  multi->recheckstate = TRUE;
+}
+
+/*
+ * multi_ischanged() is called
+ *
+ * Returns TRUE/FALSE whether the state is changed to trigger a CONNECT_PEND
+ * => CONNECT action.
+ *
+ * Set 'clear' to TRUE to have it also clear the state variable.
+ */
+static bool multi_ischanged(struct Curl_multi *multi, bool clear)
+{
+  bool retval = multi->recheckstate;
+  if(clear)
+    multi->recheckstate = FALSE;
+  return retval;
+}
+
+CURLMcode Curl_multi_add_perform(struct Curl_multi *multi,
+                                 struct SessionHandle *data,
+                                 struct connectdata *conn)
+{
+  CURLMcode rc;
+
+  rc = curl_multi_add_handle(multi, data);
+  if(!rc) {
+    struct SingleRequest *k = &data->req;
+
+    /* pass in NULL for 'conn' here since we don't want to init the
+       connection, only this transfer */
+    Curl_init_do(data, NULL);
+
+    /* take this handle to the perform state right away */
+    multistate(data, CURLM_STATE_PERFORM);
+    data->easy_conn = conn;
+    k->keepon |= KEEP_RECV; /* setup to receive! */
+  }
+  return rc;
+}
+
 static CURLMcode multi_runsingle(struct Curl_multi *multi,
                                  struct timeval now,
                                  struct SessionHandle *data)
@@ -973,6 +1041,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       return CURLM_INTERNAL_ERROR;
     }
 
+    if(multi_ischanged(multi, TRUE)) {
+      DEBUGF(infof(data, "multi changed, check CONNECT_PEND queue!\n"));
+      Curl_multi_process_pending_handles(multi);
+    }
+
     if(data->easy_conn && data->mstate > CURLM_STATE_CONNECT &&
        data->mstate < CURLM_STATE_COMPLETED)
       /* Make sure we set the connection's current owner */
@@ -1019,6 +1092,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
           disconnect_conn = TRUE;
         }
         result = CURLE_OPERATION_TIMEDOUT;
+        (void)Curl_done(&data->easy_conn, result, TRUE);
         /* Skip the statemachine and go directly to error handling section. */
         goto statemachine_end;
       }
@@ -1076,7 +1150,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
             rc = CURLM_CALL_MULTI_PERFORM;
 
             if(protocol_connect)
-              multistate(data, multi->pipelining_enabled?
+              multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
                          CURLM_STATE_WAITDO:CURLM_STATE_DO);
             else {
 #ifndef CURL_DISABLE_HTTP
@@ -1098,13 +1172,9 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       struct connectdata *conn = data->easy_conn;
 
       /* check if we have the name resolved by now */
-      if(data->share)
-        Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
       dns = Curl_fetch_addr(conn, conn->host.name, (int)conn->port);
 
       if(dns) {
-        dns->inuse++; /* we use it! */
 #ifdef CURLRES_ASYNCH
         conn->async.dns = dns;
         conn->async.done = TRUE;
@@ -1113,9 +1183,6 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
         infof(data, "Hostname was found in DNS cache\n");
       }
 
-      if(data->share)
-        Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-
       if(!dns)
         result = Curl_resolver_is_resolved(data->easy_conn, &dns);
 
@@ -1140,7 +1207,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
           /* call again please so that we get the next socket setup */
           rc = CURLM_CALL_MULTI_PERFORM;
           if(protocol_connect)
-            multistate(data, multi->pipelining_enabled?
+            multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
                        CURLM_STATE_WAITDO:CURLM_STATE_DO);
           else {
 #ifndef CURL_DISABLE_HTTP
@@ -1167,39 +1234,30 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       result = Curl_http_connect(data->easy_conn, &protocol_connect);
 
       if(data->easy_conn->bits.proxy_connect_closed) {
+        rc = CURLM_CALL_MULTI_PERFORM;
         /* connect back to proxy again */
         result = CURLE_OK;
-        rc = CURLM_CALL_MULTI_PERFORM;
+        Curl_done(&data->easy_conn, CURLE_OK, FALSE);
         multistate(data, CURLM_STATE_CONNECT);
       }
       else if(!result) {
-        if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_COMPLETE)
-          multistate(data, CURLM_STATE_WAITCONNECT);
+        if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_COMPLETE) {
+          rc = CURLM_CALL_MULTI_PERFORM;
+          /* initiate protocol connect phase */
+          multistate(data, CURLM_STATE_SENDPROTOCONNECT);
+        }
       }
       break;
 #endif
 
     case CURLM_STATE_WAITCONNECT:
-      /* awaiting a completion of an asynch connect */
-      result = Curl_is_connected(data->easy_conn,
-                                 FIRSTSOCKET,
-                                 &connected);
-      if(connected) {
-
-        if(!result)
-          /* if everything is still fine we do the protocol-specific connect
-             setup */
-          result = Curl_protocol_connect(data->easy_conn,
-                                         &protocol_connect);
-      }
-
-      if(data->easy_conn->bits.proxy_connect_closed) {
-        /* connect back to proxy again since it was closed in a proxy CONNECT
-           setup */
-        result = CURLE_OK;
+      /* awaiting a completion of an asynch TCP connect */
+      result = Curl_is_connected(data->easy_conn, FIRSTSOCKET, &connected);
+      if(connected && !result) {
         rc = CURLM_CALL_MULTI_PERFORM;
-        multistate(data, CURLM_STATE_CONNECT);
-        break;
+        multistate(data, data->easy_conn->bits.tunnel_proxy?
+                   CURLM_STATE_WAITPROXYCONNECT:
+                   CURLM_STATE_SENDPROTOCONNECT);
       }
       else if(result) {
         /* failure detected */
@@ -1207,29 +1265,25 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
         disconnect_conn = TRUE;
         break;
       }
+      break;
 
-      if(connected) {
-        if(!protocol_connect) {
-          /* We have a TCP connection, but 'protocol_connect' may be false
-             and then we continue to 'STATE_PROTOCONNECT'. If protocol
-             connect is TRUE, we move on to STATE_DO.
-             BUT if we are using a proxy we must change to WAITPROXYCONNECT
-          */
-#ifndef CURL_DISABLE_HTTP
-          if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
-            multistate(data, CURLM_STATE_WAITPROXYCONNECT);
-          else
-#endif
-            multistate(data, CURLM_STATE_PROTOCONNECT);
-
-        }
-        else
-          /* after the connect has completed, go WAITDO or DO */
-          multistate(data, multi->pipelining_enabled?
-                     CURLM_STATE_WAITDO:CURLM_STATE_DO);
-
+    case CURLM_STATE_SENDPROTOCONNECT:
+      result = Curl_protocol_connect(data->easy_conn, &protocol_connect);
+      if(!protocol_connect)
+        /* switch to waiting state */
+        multistate(data, CURLM_STATE_PROTOCONNECT);
+      else if(!result) {
+        /* protocol connect has completed, go WAITDO or DO */
+        multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
+                   CURLM_STATE_WAITDO:CURLM_STATE_DO);
         rc = CURLM_CALL_MULTI_PERFORM;
       }
+      else if(result) {
+        /* failure detected */
+        Curl_posttransfer(data);
+        Curl_done(&data->easy_conn, result, TRUE);
+        disconnect_conn = TRUE;
+      }
       break;
 
     case CURLM_STATE_PROTOCONNECT:
@@ -1237,7 +1291,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       result = Curl_protocol_connecting(data->easy_conn, &protocol_connect);
       if(!result && protocol_connect) {
         /* after the connect has completed, go WAITDO or DO */
-        multistate(data, multi->pipelining_enabled?
+        multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
                    CURLM_STATE_WAITDO:CURLM_STATE_DO);
         rc = CURLM_CALL_MULTI_PERFORM;
       }
@@ -1251,19 +1305,8 @@ 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(data, "WAITDO: Conn %ld send pipe %zu inuse %s athead %s\n",
-            data->easy_conn->connection_id,
-            data->easy_conn->send_pipe->size,
-            data->easy_conn->writechannel_inuse?"TRUE":"FALSE",
-            isHandleAtHead(data,
-                           data->easy_conn->send_pipe)?"TRUE":"FALSE");
-#endif
-      if(!data->easy_conn->writechannel_inuse &&
-         isHandleAtHead(data,
-                        data->easy_conn->send_pipe)) {
-        /* Grab the channel */
-        data->easy_conn->writechannel_inuse = TRUE;
+      if(Curl_pipeline_checkget_write(data, data->easy_conn)) {
+        /* Grabbed the channel */
         multistate(data, CURLM_STATE_DO);
         rc = CURLM_CALL_MULTI_PERFORM;
       }
@@ -1446,24 +1489,11 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
 
     case CURLM_STATE_WAITPERFORM:
       /* Wait for our turn to PERFORM */
-      if(!data->easy_conn->readchannel_inuse &&
-         isHandleAtHead(data,
-                        data->easy_conn->recv_pipe)) {
-        /* Grab the channel */
-        data->easy_conn->readchannel_inuse = TRUE;
+      if(Curl_pipeline_checkget_read(data, data->easy_conn)) {
+        /* Grabbed the channel */
         multistate(data, CURLM_STATE_PERFORM);
         rc = CURLM_CALL_MULTI_PERFORM;
       }
-#ifdef DEBUGBUILD
-      else {
-        infof(data, "WAITPERFORM: Conn %ld recv pipe %zu inuse %s athead %s\n",
-              data->easy_conn->connection_id,
-              data->easy_conn->recv_pipe->size,
-              data->easy_conn->readchannel_inuse?"TRUE":"FALSE",
-              isHandleAtHead(data,
-                             data->easy_conn->recv_pipe)?"TRUE":"FALSE");
-      }
-#endif
       break;
 
     case CURLM_STATE_TOOFAST: /* limit-rate exceeded in either direction */
@@ -1518,19 +1548,17 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
       }
 
       /* read/write data if it is ready to do so */
-      result = Curl_readwrite(data->easy_conn, &done);
+      result = Curl_readwrite(data->easy_conn, data, &done);
 
       k = &data->req;
 
-      if(!(k->keepon & KEEP_RECV)) {
+      if(!(k->keepon & KEEP_RECV))
         /* We're done receiving */
-        data->easy_conn->readchannel_inuse = FALSE;
-      }
+        Curl_pipeline_leave_read(data->easy_conn);
 
-      if(!(k->keepon & KEEP_SEND)) {
+      if(!(k->keepon & KEEP_SEND))
         /* We're done sending */
-        data->easy_conn->writechannel_inuse = FALSE;
-      }
+        Curl_pipeline_leave_write(data->easy_conn);
 
       if(done || (result == CURLE_RECV_ERROR)) {
         /* If CURLE_RECV_ERROR happens early enough, we assume it was a race
@@ -1586,8 +1614,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
           if(!retry) {
             /* if the URL is a follow-location and not just a retried request
                then figure out the URL here */
-            if(newurl)
-              free(newurl);
+            free(newurl);
             newurl = data->req.newurl;
             data->req.newurl = NULL;
             follow = FOLLOW_REDIR;
@@ -1612,8 +1639,7 @@ 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(data->req.location) {
-            if(newurl)
-              free(newurl);
+            free(newurl);
             newurl = data->req.location;
             data->req.location = NULL;
             result = Curl_follow(data, newurl, FOLLOW_FAKE);
@@ -1628,8 +1654,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
         }
       }
 
-      if(newurl)
-        free(newurl);
+      free(newurl);
       break;
     }
 
@@ -1710,14 +1735,15 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
 
         data->state.pipe_broke = FALSE;
 
+        /* Check if we can move pending requests to send pipe */
+        Curl_multi_process_pending_handles(multi);
+
         if(data->easy_conn) {
           /* if this has a connection, unsubscribe from the pipelines */
-          data->easy_conn->writechannel_inuse = FALSE;
-          data->easy_conn->readchannel_inuse = FALSE;
+          Curl_pipeline_leave_write(data->easy_conn);
+          Curl_pipeline_leave_read(data->easy_conn);
           Curl_removeHandleFromPipeline(data, data->easy_conn->send_pipe);
           Curl_removeHandleFromPipeline(data, data->easy_conn->recv_pipe);
-          /* Check if we can move pending requests to send pipe */
-          Curl_multi_process_pending_handles(multi);
 
           if(disconnect_conn) {
             /* Don't attempt to send data over a connection that timed out */
@@ -1764,7 +1790,7 @@ static CURLMcode multi_runsingle(struct Curl_multi *multi,
 
       multistate(data, CURLM_STATE_MSGSENT);
     }
-  } while(rc == CURLM_CALL_MULTI_PERFORM);
+  } while((rc == CURLM_CALL_MULTI_PERFORM) || multi_ischanged(multi, FALSE));
 
   data->result = result;
 
@@ -1844,7 +1870,7 @@ static void close_all_connections(struct Curl_multi *multi)
 {
   struct connectdata *conn;
 
-  conn = Curl_conncache_find_first_connection(multi->conn_cache);
+  conn = Curl_conncache_find_first_connection(&multi->conn_cache);
   while(conn) {
     SIGPIPE_VARIABLE(pipe_st);
     conn->data = multi->closure_handle;
@@ -1854,7 +1880,7 @@ static void close_all_connections(struct Curl_multi *multi)
     (void)Curl_disconnect(conn, FALSE);
     sigpipe_restore(&pipe_st);
 
-    conn = Curl_conncache_find_first_connection(multi->conn_cache);
+    conn = Curl_conncache_find_first_connection(&multi->conn_cache);
   }
 }
 
@@ -1877,15 +1903,15 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
       sigpipe_ignore(multi->closure_handle, &pipe_st);
       restore_pipe = TRUE;
 
-      multi->closure_handle->dns.hostcache = multi->hostcache;
+      multi->closure_handle->dns.hostcache = &multi->hostcache;
       Curl_hostcache_clean(multi->closure_handle,
                            multi->closure_handle->dns.hostcache);
 
       Curl_close(multi->closure_handle);
     }
 
-    Curl_hash_destroy(multi->sockhash);
-    Curl_conncache_destroy(multi->conn_cache);
+    Curl_hash_destroy(&multi->sockhash);
+    Curl_conncache_destroy(&multi->conn_cache);
     Curl_llist_destroy(multi->msglist, NULL);
     Curl_llist_destroy(multi->pending, NULL);
 
@@ -1907,7 +1933,7 @@ CURLMcode curl_multi_cleanup(CURLM *multi_handle)
       data = nextdata;
     }
 
-    Curl_hash_destroy(multi->hostcache);
+    Curl_hash_destroy(&multi->hostcache);
 
     /* Free the blacklists by setting them to NULL */
     Curl_pipeline_set_site_blacklist(NULL, &multi->pipelining_site_bl);
@@ -1974,7 +2000,6 @@ static void singlesocket(struct Curl_multi *multi,
   curl_socket_t s;
   int num;
   unsigned int curraction;
-  bool remove_sock_from_hash;
 
   for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++)
     socks[i] = CURL_SOCKET_BAD;
@@ -1996,7 +2021,7 @@ static void singlesocket(struct Curl_multi *multi,
     s = socks[i];
 
     /* get it from the hash */
-    entry = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
+    entry = sh_getentry(&multi->sockhash, s);
 
     if(curraction & GETSOCK_READSOCK(i))
       action |= CURL_POLL_IN;
@@ -2011,7 +2036,7 @@ static void singlesocket(struct Curl_multi *multi,
     }
     else {
       /* this is a socket we didn't have before, add it! */
-      entry = sh_addentry(multi->sockhash, s, data);
+      entry = sh_addentry(&multi->sockhash, s, data);
       if(!entry)
         /* fatal */
         return;
@@ -2042,57 +2067,50 @@ static void singlesocket(struct Curl_multi *multi,
         break;
       }
     }
-    if(s != CURL_SOCKET_BAD) {
 
+    entry = sh_getentry(&multi->sockhash, s);
+    if(entry) {
       /* this socket has been removed. Tell the app to remove it */
-      remove_sock_from_hash = TRUE;
-
-      entry = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
-      if(entry) {
-        /* check if the socket to be removed serves a connection which has
-           other easy-s in a pipeline. In this case the socket should not be
-           removed. */
-        struct connectdata *easy_conn = data->easy_conn;
-        if(easy_conn) {
-          if(easy_conn->recv_pipe && easy_conn->recv_pipe->size > 1) {
-            /* the handle should not be removed from the pipe yet */
-            remove_sock_from_hash = FALSE;
-
-            /* Update the sockhash entry to instead point to the next in line
-               for the recv_pipe, or the first (in case this particular easy
-               isn't already) */
-            if(entry->easy == data) {
-              if(isHandleAtHead(data, easy_conn->recv_pipe))
-                entry->easy = easy_conn->recv_pipe->head->next->ptr;
-              else
-                entry->easy = easy_conn->recv_pipe->head->ptr;
-            }
+      bool remove_sock_from_hash = TRUE;
+
+      /* check if the socket to be removed serves a connection which has
+         other easy-s in a pipeline. In this case the socket should not be
+         removed. */
+      struct connectdata *easy_conn = data->easy_conn;
+      if(easy_conn) {
+        if(easy_conn->recv_pipe && easy_conn->recv_pipe->size > 1) {
+          /* the handle should not be removed from the pipe yet */
+          remove_sock_from_hash = FALSE;
+
+          /* Update the sockhash entry to instead point to the next in line
+             for the recv_pipe, or the first (in case this particular easy
+             isn't already) */
+          if(entry->easy == data) {
+            if(Curl_recvpipe_head(data, easy_conn))
+              entry->easy = easy_conn->recv_pipe->head->next->ptr;
+            else
+              entry->easy = easy_conn->recv_pipe->head->ptr;
           }
-          if(easy_conn->send_pipe  && easy_conn->send_pipe->size > 1) {
-            /* the handle should not be removed from the pipe yet */
-            remove_sock_from_hash = FALSE;
-
-            /* Update the sockhash entry to instead point to the next in line
-               for the send_pipe, or the first (in case this particular easy
-               isn't already) */
-            if(entry->easy == data) {
-              if(isHandleAtHead(data, easy_conn->send_pipe))
-                entry->easy = easy_conn->send_pipe->head->next->ptr;
-              else
-                entry->easy = easy_conn->send_pipe->head->ptr;
-            }
+        }
+        if(easy_conn->send_pipe  && easy_conn->send_pipe->size > 1) {
+          /* the handle should not be removed from the pipe yet */
+          remove_sock_from_hash = FALSE;
+
+          /* Update the sockhash entry to instead point to the next in line
+             for the send_pipe, or the first (in case this particular easy
+             isn't already) */
+          if(entry->easy == data) {
+            if(Curl_sendpipe_head(data, easy_conn))
+              entry->easy = easy_conn->send_pipe->head->next->ptr;
+            else
+              entry->easy = easy_conn->send_pipe->head->ptr;
           }
-          /* Don't worry about overwriting recv_pipe head with send_pipe_head,
-             when action will be asked on the socket (see multi_socket()), the
-             head of the correct pipe will be taken according to the
-             action. */
         }
+        /* Don't worry about overwriting recv_pipe head with send_pipe_head,
+           when action will be asked on the socket (see multi_socket()), the
+           head of the correct pipe will be taken according to the
+           action. */
       }
-      else
-        /* just a precaution, this socket really SHOULD be in the hash already
-           but in case it isn't, we don't have to tell the app to remove it
-           either since it never got to know about it */
-        remove_sock_from_hash = FALSE;
 
       if(remove_sock_from_hash) {
         /* in this case 'entry' is always non-NULL */
@@ -2102,11 +2120,10 @@ static void singlesocket(struct Curl_multi *multi,
                            CURL_POLL_REMOVE,
                            multi->socket_userp,
                            entry->socketp);
-        sh_delentry(multi->sockhash, s);
+        sh_delentry(&multi->sockhash, s);
       }
-
-    }
-  }
+    } /* if sockhash entry existed */
+  } /* for loop over numsocks */
 
   memcpy(data->sockets, socks, num*sizeof(curl_socket_t));
   data->numsocks = num;
@@ -2128,8 +2145,7 @@ void Curl_multi_closed(struct connectdata *conn, curl_socket_t s)
   if(multi) {
     /* this is set if this connection is part of a handle that is added to
        a multi handle, and only then this is necessary */
-    struct Curl_sh_entry *entry =
-      Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
+    struct Curl_sh_entry *entry = sh_getentry(&multi->sockhash, s);
 
     if(entry) {
       if(multi->socket_cb)
@@ -2138,7 +2154,7 @@ void Curl_multi_closed(struct connectdata *conn, curl_socket_t s)
                          entry->socketp);
 
       /* now remove it from the socket hash */
-      sh_delentry(multi->sockhash, s);
+      sh_delentry(&multi->sockhash, s);
     }
   }
 }
@@ -2230,8 +2246,7 @@ static CURLMcode multi_socket(struct Curl_multi *multi,
   }
   else if(s != CURL_SOCKET_TIMEOUT) {
 
-    struct Curl_sh_entry *entry =
-      Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
+    struct Curl_sh_entry *entry = sh_getentry(&multi->sockhash, s);
 
     if(!entry)
       /* Unmatched socket, we can't act on it but we ignore this fact.  In
@@ -2355,8 +2370,14 @@ CURLMcode curl_multi_setopt(CURLM *multi_handle,
   case CURLMOPT_SOCKETDATA:
     multi->socket_userp = va_arg(param, void *);
     break;
+  case CURLMOPT_PUSHFUNCTION:
+    multi->push_cb = va_arg(param, curl_push_callback);
+    break;
+  case CURLMOPT_PUSHDATA:
+    multi->push_userp = va_arg(param, void *);
+    break;
   case CURLMOPT_PIPELINING:
-    multi->pipelining_enabled = (0 != va_arg(param, long)) ? TRUE : FALSE;
+    multi->pipelining = va_arg(param, long);
     break;
   case CURLMOPT_TIMERFUNCTION:
     multi->timer_cb = va_arg(param, curl_multi_timer_callback);
@@ -2434,7 +2455,7 @@ CURLMcode curl_multi_socket_all(CURLM *multi_handle, int *running_handles)
 static CURLMcode multi_timeout(struct Curl_multi *multi,
                                long *timeout_ms)
 {
-  static struct timeval tv_zero = {0,0};
+  static struct timeval tv_zero = {0, 0};
 
   if(multi->timetree) {
     /* we have a tree of expire times */
@@ -2492,7 +2513,7 @@ static int update_timer(struct Curl_multi *multi)
     return -1;
   }
   if(timeout_ms < 0) {
-    static const struct timeval none={0,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
@@ -2514,16 +2535,6 @@ static int update_timer(struct Curl_multi *multi)
   return multi->timer_cb((CURLM*)multi, timeout_ms, multi->timer_userp);
 }
 
-static bool isHandleAtHead(struct SessionHandle *handle,
-                           struct curl_llist *pipeline)
-{
-  struct curl_llist_element *curr = pipeline->head;
-  if(curr)
-    return (curr->ptr == handle) ? TRUE : FALSE;
-
-  return FALSE;
-}
-
 /*
  * multi_freetimeout()
  *
@@ -2722,8 +2733,7 @@ CURLMcode curl_multi_assign(CURLM *multi_handle,
   struct Curl_sh_entry *there = NULL;
   struct Curl_multi *multi = (struct Curl_multi *)multi_handle;
 
-  if(s != CURL_SOCKET_BAD)
-    there = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(curl_socket_t));
+  there = sh_getentry(&multi->sockhash, s);
 
   if(!there)
     return CURLM_BAD_SOCKET;
@@ -2743,11 +2753,6 @@ size_t Curl_multi_max_total_connections(struct Curl_multi *multi)
   return multi ? multi->max_total_connections : 0;
 }
 
-size_t Curl_multi_max_pipeline_length(struct Curl_multi *multi)
-{
-  return multi ? multi->max_pipeline_length : 0;
-}
-
 curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi)
 {
   return multi ? multi->content_length_penalty_size : 0;
@@ -2806,8 +2811,7 @@ void Curl_multi_dump(const struct Curl_multi *multi_handle)
               statename[data->mstate], data->numsocks);
       for(i=0; i < data->numsocks; i++) {
         curl_socket_t s = data->sockets[i];
-        struct Curl_sh_entry *entry =
-          Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
+        struct Curl_sh_entry *entry = sh_getentry(&multi->sockhash, s);
 
         fprintf(stderr, "%d ", (int)s);
         if(!entry) {
index 1a4b1d9..fc81a55 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -22,6 +22,8 @@
  *
  ***************************************************************************/
 
+#include "conncache.h"
+
 struct Curl_message {
   /* the 'CURLMsg' is the part that is visible to the external user */
   struct CURLMsg extmsg;
@@ -35,22 +37,23 @@ typedef enum {
   CURLM_STATE_CONNECT_PEND, /* 1 - no connections, waiting for one */
   CURLM_STATE_CONNECT,      /* 2 - resolve/connect has been sent off */
   CURLM_STATE_WAITRESOLVE,  /* 3 - awaiting the resolve to finalize */
-  CURLM_STATE_WAITCONNECT,  /* 4 - awaiting the connect to finalize */
+  CURLM_STATE_WAITCONNECT,  /* 4 - awaiting the TCP connect to finalize */
   CURLM_STATE_WAITPROXYCONNECT, /* 5 - awaiting proxy CONNECT to finalize */
-  CURLM_STATE_PROTOCONNECT, /* 6 - completing the protocol-specific connect
+  CURLM_STATE_SENDPROTOCONNECT, /* 6 - initiate protocol connect procedure */
+  CURLM_STATE_PROTOCONNECT, /* 7 - completing the protocol-specific connect
                                    phase */
-  CURLM_STATE_WAITDO,       /* 7 - wait for our turn to send the request */
-  CURLM_STATE_DO,           /* 8 - start send off the request (part 1) */
-  CURLM_STATE_DOING,        /* 9 - sending off the request (part 1) */
-  CURLM_STATE_DO_MORE,      /* 10 - send off the request (part 2) */
-  CURLM_STATE_DO_DONE,      /* 11 - done sending off request */
-  CURLM_STATE_WAITPERFORM,  /* 12 - wait for our turn to read the response */
-  CURLM_STATE_PERFORM,      /* 13 - transfer data */
-  CURLM_STATE_TOOFAST,      /* 14 - wait because limit-rate exceeded */
-  CURLM_STATE_DONE,         /* 15 - post data transfer operation */
-  CURLM_STATE_COMPLETED,    /* 16 - operation complete */
-  CURLM_STATE_MSGSENT,      /* 17 - the operation complete message is sent */
-  CURLM_STATE_LAST          /* 18 - not a true state, never use this */
+  CURLM_STATE_WAITDO,       /* 8 - wait for our turn to send the request */
+  CURLM_STATE_DO,           /* 9 - start send off the request (part 1) */
+  CURLM_STATE_DOING,        /* 10 - sending off the request (part 1) */
+  CURLM_STATE_DO_MORE,      /* 11 - send off the request (part 2) */
+  CURLM_STATE_DO_DONE,      /* 12 - done sending off request */
+  CURLM_STATE_WAITPERFORM,  /* 13 - wait for our turn to read the response */
+  CURLM_STATE_PERFORM,      /* 14 - transfer data */
+  CURLM_STATE_TOOFAST,      /* 15 - wait because limit-rate exceeded */
+  CURLM_STATE_DONE,         /* 16 - post data transfer operation */
+  CURLM_STATE_COMPLETED,    /* 17 - operation complete */
+  CURLM_STATE_MSGSENT,      /* 18 - the operation complete message is sent */
+  CURLM_STATE_LAST          /* 19 - not a true state, never use this */
 } CURLMstate;
 
 /* we support N sockets per easy handle. Set the corresponding bit to what
@@ -59,6 +62,8 @@ typedef enum {
 #define GETSOCK_READABLE (0x00ff)
 #define GETSOCK_WRITABLE (0xff00)
 
+#define CURLPIPE_ANY (CURLPIPE_HTTP1 | CURLPIPE_MULTIPLEX)
+
 /* This is the struct known as CURLM on the outside */
 struct Curl_multi {
   /* First a simple identifier to easier detect if a user mix up
@@ -82,8 +87,12 @@ struct Curl_multi {
   curl_socket_callback socket_cb;
   void *socket_userp;
 
+  /* callback function and user data pointer for server push */
+  curl_push_callback push_cb;
+  void *push_userp;
+
   /* Hostname cache */
-  struct curl_hash *hostcache;
+  struct curl_hash hostcache;
 
   /* timetree points to the splay-tree of time nodes to figure out expire
      times of all currently set timers */
@@ -92,13 +101,15 @@ struct Curl_multi {
   /* 'sockhash' is the lookup hash for socket descriptor => easy handles (note
      the pluralis form, there can be more than one easy handle waiting on the
      same actual socket) */
-  struct curl_hash *sockhash;
+  struct curl_hash sockhash;
 
-  /* Whether pipelining is enabled for this multi handle */
-  bool pipelining_enabled;
+  /* pipelining wanted bits (CURLPIPE*) */
+  long pipelining;
+
+  bool recheckstate; /* see Curl_multi_connchanged */
 
   /* Shared connection cache (bundles)*/
-  struct conncache *conn_cache;
+  struct conncache conn_cache;
 
   /* This handle will be used for closing the cached connections in
      curl_multi_cleanup() */
@@ -139,4 +150,3 @@ struct Curl_multi {
 };
 
 #endif /* HEADER_CURL_MULTIHANDLE_H */
-
index d8acfca..b229f53 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -27,8 +27,7 @@
  */
 void Curl_expire(struct SessionHandle *data, long milli);
 void Curl_expire_latest(struct SessionHandle *data, long milli);
-
-bool Curl_multi_pipeline_enabled(const struct Curl_multi* multi);
+bool Curl_pipeline_wanted(const struct Curl_multi* multi, int bits);
 void Curl_multi_handlePipeBreak(struct SessionHandle *data);
 
 /* Internal version of curl_multi_init() accepts size parameters for the
@@ -60,9 +59,6 @@ void Curl_multi_process_pending_handles(struct Curl_multi *multi);
 /* Return the value of the CURLMOPT_MAX_HOST_CONNECTIONS option */
 size_t Curl_multi_max_host_connections(struct Curl_multi *multi);
 
-/* Return the value of the CURLMOPT_MAX_PIPELINE_LENGTH option */
-size_t Curl_multi_max_pipeline_length(struct Curl_multi *multi);
-
 /* Return the value of the CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE option */
 curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi);
 
@@ -78,6 +74,8 @@ struct curl_llist *Curl_multi_pipelining_server_bl(struct Curl_multi *multi);
 /* Return the value of the CURLMOPT_MAX_TOTAL_CONNECTIONS option */
 size_t Curl_multi_max_total_connections(struct Curl_multi *multi);
 
+void Curl_multi_connchanged(struct Curl_multi *multi);
+
 /*
  * Curl_multi_closed()
  *
@@ -90,4 +88,10 @@ size_t Curl_multi_max_total_connections(struct Curl_multi *multi);
 
 void Curl_multi_closed(struct connectdata *conn, curl_socket_t s);
 
+/*
+ * Add a handle and move it into PERFORM state at once. For pushed streams.
+ */
+CURLMcode Curl_multi_add_perform(struct Curl_multi *multi,
+                                 struct SessionHandle *data,
+                                 struct connectdata *conn);
 #endif /* HEADER_CURL_MULTIIF_H */
index 7435d94..541310e 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include "strequal.h"
 #include "strtok.h"
-#include "curl_memory.h"
 #include "rawstr.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* Get user and password from .netrc when given a machine name */
@@ -104,16 +102,16 @@ int Curl_parsenetrc(const char *host,
 
     netrcfile = curl_maprintf("%s%s%s", home, DIR_CHAR, NETRC);
     if(home_alloc)
-      Curl_safefree(home);
+      free(home);
     if(!netrcfile) {
       return -1;
     }
     netrc_alloc = TRUE;
   }
 
-  file = fopen(netrcfile, "r");
+  file = fopen(netrcfile, FOPEN_READTEXT);
   if(netrc_alloc)
-    Curl_safefree(netrcfile);
+    free(netrcfile);
   if(file) {
     char *tok;
     char *tok_buf;
@@ -139,6 +137,10 @@ int Curl_parsenetrc(const char *host,
                'password'. */
             state=HOSTFOUND;
           }
+          else if(Curl_raw_equal("default", tok)) {
+            state=HOSTVALID;
+            retcode=0; /* we did find our host */
+          }
           break;
         case HOSTFOUND:
           if(Curl_raw_equal(host, tok)) {
index a145601..d980166 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 6ccb449..205ff04 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 8b4b7c2..f3e2049 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 1447c87..b764278 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -77,7 +77,7 @@ int curlx_nonblock(curl_socket_t sockfd,    /* operate on this */
 
   /* Amiga */
   long flags = nonblock ? 1L : 0L;
-  return IoctlSocket(sockfd, FIONBIO, flags);
+  return IoctlSocket(sockfd, FIONBIO, (char *)&flags);
 
 #elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK)
 
index b540ae4..98cdc25 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 252bf11..7feb8fc 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -282,9 +282,7 @@ int DisposeLibraryData( void *data )
   if(data) {
     void *tenbytes = ((libdata_t *) data)->tenbytes;
 
-    if(tenbytes)
-      free(tenbytes);
-
+    free(tenbytes);
     free(data);
   }
 
@@ -296,9 +294,7 @@ void DisposeThreadData( void *data )
   if(data) {
     void *twentybytes = ((libthreaddata_t *) data)->twentybytes;
 
-    if(twentybytes)
-      free(twentybytes);
-
+    free(twentybytes);
     free(data);
   }
 }
index 23ff2a7..28137e9 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 82bf4f9..4859757 100755 (executable)
@@ -10,7 +10,7 @@
 # *
 # * 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.
+# * are also available at https://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
index 2d85b8f..62184b8 100755 (executable)
@@ -10,7 +10,7 @@
 # *
 # * 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.
+# * are also available at https://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
index 8778492..b895528 100644 (file)
@@ -9,7 +9,7 @@
 # *
 # * 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.
+# * are also available at https://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
index b94c034..7241bb9 100644 (file)
@@ -5,12 +5,12 @@
  *                | (__| |_| |  _ <| |___
  *                 \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2010, 2013, Howard Chu, <hyc@openldap.org>
- * Copyright (C) 2011 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2010, Howard Chu, <hyc@openldap.org>
+ * Copyright (C) 2011 - 2015, 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.
+ * are also available at https://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
 #include "vtls/vtls.h"
 #include "transfer.h"
 #include "curl_ldap.h"
-#include "curl_memory.h"
 #include "curl_base64.h"
 #include "connect.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #ifndef _LDAP_PVT_H
@@ -230,7 +229,7 @@ static CURLcode ldap_connecting(struct connectdata *conn, bool *done)
   ldapconninfo *li = conn->proto.generic;
   struct SessionHandle *data = conn->data;
   LDAPMessage *msg = NULL;
-  struct timeval tv = {0,1}, *tvp;
+  struct timeval tv = {0, 1}, *tvp;
   int rc, err;
   char *info = NULL;
 
@@ -381,7 +380,7 @@ static CURLcode ldap_do(struct connectdata *conn, bool *done)
     failf(data, "LDAP local: ldap_search_ext %s", ldap_err2string(rc));
     return CURLE_LDAP_SEARCH_FAILED;
   }
-  lr = calloc(1,sizeof(ldapreqinfo));
+  lr = calloc(1, sizeof(ldapreqinfo));
   if(!lr)
     return CURLE_OUT_OF_MEMORY;
   lr->msgid = msgid;
@@ -423,7 +422,7 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
   LDAPMessage *msg = NULL;
   LDAPMessage *ent;
   BerElement *ber = NULL;
-  struct timeval tv = {0,1};
+  struct timeval tv = {0, 1};
 
   (void)len;
   (void)buf;
@@ -447,6 +446,7 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
     ent = ldap_next_message(li->ld, ent)) {
     struct berval bv, *bvals, **bvp = &bvals;
     int binary = 0, msgtype;
+    CURLcode writeerr;
 
     msgtype = ldap_msgtype(ent);
     if(msgtype == LDAP_RES_SEARCH_RESULT) {
@@ -486,18 +486,24 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
       *err = CURLE_RECV_ERROR;
       return -1;
     }
-    *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
-    if(*err)
+    writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
+    if(writeerr) {
+      *err = writeerr;
       return -1;
+    }
 
-    *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val,
-                             bv.bv_len);
-    if(*err)
+    writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val,
+                                 bv.bv_len);
+    if(writeerr) {
+      *err = writeerr;
       return -1;
+    }
 
-    *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
-    if(*err)
+    writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
+    if(writeerr) {
+      *err = writeerr;
       return -1;
+    }
     data->req.bytecount += bv.bv_len + 5;
 
     for(rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp);
@@ -514,18 +520,24 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
 
       for(i=0; bvals[i].bv_val != NULL; i++) {
         int binval = 0;
-        *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
-        if(*err)
-          return -1;
-
-        *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val,
-                                 bv.bv_len);
-        if(*err)
+        writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
+        if(writeerr) {
+          *err = writeerr;
           return -1;
+        }
 
-        *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)":", 1);
-        if(*err)
-          return -1;
+       writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val,
+                                    bv.bv_len);
+       if(writeerr) {
+         *err = writeerr;
+         return -1;
+       }
+
+        writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)":", 1);
+       if(writeerr) {
+         *err = writeerr;
+         return -1;
+       }
         data->req.bytecount += bv.bv_len + 2;
 
         if(!binary) {
@@ -559,47 +571,62 @@ static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
             *err = error;
             return -1;
           }
-          *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
-          if(*err)
+          writeerr = Curl_client_write(conn, CLIENTWRITE_BODY,
+                                       (char *)": ", 2);
+          if(writeerr) {
+            *err = writeerr;
             return -1;
+          }
 
           data->req.bytecount += 2;
           if(val_b64_sz > 0) {
-            *err = Curl_client_write(conn, CLIENTWRITE_BODY, val_b64,
+            writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, val_b64,
                                      val_b64_sz);
-            if(*err)
+            if(writeerr) {
+              *err = writeerr;
               return -1;
+            }
             free(val_b64);
             data->req.bytecount += val_b64_sz;
           }
         }
         else {
-          *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)" ", 1);
-          if(*err)
+          writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)" ", 1);
+          if(writeerr) {
+            *err = writeerr;
             return -1;
+          }
 
-          *err = Curl_client_write(conn, CLIENTWRITE_BODY, bvals[i].bv_val,
-                                   bvals[i].bv_len);
-          if(*err)
+          writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, bvals[i].bv_val,
+                                       bvals[i].bv_len);
+          if(writeerr) {
+            *err = writeerr;
             return -1;
+          }
 
           data->req.bytecount += bvals[i].bv_len + 1;
         }
-        *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
-        if(*err)
+        writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
+        if(writeerr) {
+          *err = writeerr;
           return -1;
+        }
 
         data->req.bytecount++;
       }
       ber_memfree(bvals);
-      *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
-      if(*err)
+      writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
+      if(writeerr) {
+        *err = writeerr;
         return -1;
+      }
       data->req.bytecount++;
     }
-    *err = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
-    if(*err)
+    writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
+    if(writeerr) {
+      *err = writeerr;
       return -1;
+    }
     data->req.bytecount++;
     ber_free(ber, 0);
   }
index 3e168f5..dfcf855 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index ade0f4f..2e59eb1 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2c2741f..5fea5de 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -34,9 +34,7 @@
 #include "multiif.h"
 #include "non-ascii.h"
 #include "vtls/vtls.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -495,10 +493,8 @@ CURLcode Curl_pp_flushsend(struct pingpong *pp)
 
 CURLcode Curl_pp_disconnect(struct pingpong *pp)
 {
-  if(pp->cache) {
-    free(pp->cache);
-    pp->cache = NULL;
-  }
+  free(pp->cache);
+  pp->cache = NULL;
   return CURLE_OK;
 }
 
index b925ab9..2f649d5 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2645fdb..95b89b5 100644 (file)
@@ -6,11 +6,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2013, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2013-2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2013-2015, 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.
+ * are also available at https://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
@@ -32,7 +32,6 @@
 #include "pipeline.h"
 #include "sendf.h"
 #include "rawstr.h"
-#include "bundles.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -49,15 +48,13 @@ static void site_blacklist_llist_dtor(void *user, void *element)
   (void)user;
 
   Curl_safefree(entry->hostname);
-  Curl_safefree(entry);
+  free(entry);
 }
 
 static void server_blacklist_llist_dtor(void *user, void *element)
 {
-  char *server_name = element;
   (void)user;
-
-  Curl_safefree(server_name);
+  free(element);
 }
 
 bool Curl_pipeline_penalized(struct SessionHandle *data,
@@ -94,6 +91,15 @@ bool Curl_pipeline_penalized(struct SessionHandle *data,
   return FALSE;
 }
 
+static CURLcode addHandleToPipeline(struct SessionHandle *data,
+                                    struct curl_llist *pipeline)
+{
+  if(!Curl_llist_insert_next(pipeline, pipeline->tail, data))
+    return CURLE_OUT_OF_MEMORY;
+  return CURLE_OK;
+}
+
+
 CURLcode Curl_add_handle_to_pipeline(struct SessionHandle *handle,
                                      struct connectdata *conn)
 {
@@ -103,11 +109,11 @@ CURLcode Curl_add_handle_to_pipeline(struct SessionHandle *handle,
 
   pipeline = conn->send_pipe;
 
-  result = Curl_addHandleToPipeline(handle, pipeline);
+  result = 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 */
+    Curl_pipeline_leave_write(conn); /* not in use yet */
     Curl_expire(conn->send_pipe->head->ptr, 1);
   }
 
@@ -138,7 +144,7 @@ void Curl_move_handle_from_send_to_recv_pipe(struct SessionHandle *handle,
       if(conn->send_pipe->head) {
         /* Since there's a new easy handle at the start of the send pipeline,
            set its timeout value to 1ms to make it trigger instantly */
-        conn->writechannel_inuse = FALSE; /* not used now */
+        Curl_pipeline_leave_write(conn); /* not used now */
 #ifdef DEBUGBUILD
         infof(conn->data, "%p is at send pipe head B!\n",
               (void *)conn->send_pipe->head->ptr);
@@ -314,6 +320,94 @@ CURLMcode Curl_pipeline_set_server_blacklist(char **servers,
   return CURLM_OK;
 }
 
+static bool pipe_head(struct SessionHandle *data,
+                      struct curl_llist *pipeline)
+{
+  if(pipeline) {
+    struct curl_llist_element *curr = pipeline->head;
+    if(curr)
+      return (curr->ptr == data) ? TRUE : FALSE;
+  }
+  return FALSE;
+}
+
+/* returns TRUE if the given handle is head of the recv pipe */
+bool Curl_recvpipe_head(struct SessionHandle *data,
+                        struct connectdata *conn)
+{
+  return pipe_head(data, conn->recv_pipe);
+}
+
+/* returns TRUE if the given handle is head of the send pipe */
+bool Curl_sendpipe_head(struct SessionHandle *data,
+                        struct connectdata *conn)
+{
+  return pipe_head(data, conn->send_pipe);
+}
+
+
+/*
+ * Check if the write channel is available and this handle as at the head,
+ * then grab the channel and return TRUE.
+ *
+ * If not available, return FALSE.
+ */
+
+bool Curl_pipeline_checkget_write(struct SessionHandle *data,
+                                  struct connectdata *conn)
+{
+  if(conn->bits.multiplex)
+    /* when multiplexing, we can use it at once */
+    return TRUE;
+
+  if(!conn->writechannel_inuse && Curl_sendpipe_head(data, conn)) {
+    /* Grab the channel */
+    conn->writechannel_inuse = TRUE;
+    return TRUE;
+  }
+  return FALSE;
+}
+
+
+/*
+ * Check if the read channel is available and this handle as at the head, then
+ * grab the channel and return TRUE.
+ *
+ * If not available, return FALSE.
+ */
+
+bool Curl_pipeline_checkget_read(struct SessionHandle *data,
+                                 struct connectdata *conn)
+{
+  if(conn->bits.multiplex)
+    /* when multiplexing, we can use it at once */
+    return TRUE;
+
+  if(!conn->readchannel_inuse && Curl_recvpipe_head(data, conn)) {
+    /* Grab the channel */
+    conn->readchannel_inuse = TRUE;
+    return TRUE;
+  }
+  return FALSE;
+}
+
+/*
+ * The current user of the pipeline write channel gives it up.
+ */
+void Curl_pipeline_leave_write(struct connectdata *conn)
+{
+  conn->writechannel_inuse = FALSE;
+}
+
+/*
+ * The current user of the pipeline read channel gives it up.
+ */
+void Curl_pipeline_leave_read(struct connectdata *conn)
+{
+  conn->readchannel_inuse = FALSE;
+}
+
+
 #if 0
 void print_pipeline(struct connectdata *conn)
 {
index 96c4c33..a39dfa8 100644 (file)
@@ -7,11 +7,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2013 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
  *
  * 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.
+ * are also available at https://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
@@ -41,4 +42,15 @@ bool Curl_pipeline_server_blacklisted(struct SessionHandle *handle,
 CURLMcode Curl_pipeline_set_server_blacklist(char **servers,
                                              struct curl_llist **list_ptr);
 
+bool Curl_pipeline_checkget_write(struct SessionHandle *data,
+                                  struct connectdata *conn);
+bool Curl_pipeline_checkget_read(struct SessionHandle *data,
+                                 struct connectdata *conn);
+void Curl_pipeline_leave_write(struct connectdata *conn);
+void Curl_pipeline_leave_read(struct connectdata *conn);
+bool Curl_recvpipe_head(struct SessionHandle *data,
+                        struct connectdata *conn);
+bool Curl_sendpipe_head(struct SessionHandle *data,
+                        struct connectdata *conn);
+
 #endif /* HEADER_CURL_PIPELINE_H */
index 6600459..823761d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "curl_sasl.h"
 #include "curl_md5.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -106,10 +103,10 @@ static CURLcode pop3_setup_connection(struct connectdata *conn);
 static CURLcode pop3_parse_url_options(struct connectdata *conn);
 static CURLcode pop3_parse_url_path(struct connectdata *conn);
 static CURLcode pop3_parse_custom_request(struct connectdata *conn);
-static CURLcode pop3_calc_sasl_details(struct connectdata *conn,
-                                       const char **mech,
-                                       char **initresp, size_t *len,
-                                       pop3state *state1, pop3state *state2);
+static CURLcode pop3_perform_auth(struct connectdata *conn, const char *mech,
+                                  const char *initresp);
+static CURLcode pop3_continue_auth(struct connectdata *conn, const char *resp);
+static void pop3_get_message(char *buffer, char** outptr);
 
 /*
  * POP3 protocol handler.
@@ -214,10 +211,25 @@ static const struct Curl_handler Curl_handler_pop3s_proxy = {
 #endif
 #endif
 
+/* SASL parameters for the pop3 protocol */
+static const struct SASLproto saslpop3 = {
+  "pop",                      /* The service name */
+  '*',                        /* Code received when continuation is expected */
+  '+',                        /* Code to receive upon authentication success */
+  255 - 8,                    /* Maximum initial response length (no max) */
+  pop3_perform_auth,          /* Send authentication command */
+  pop3_continue_auth,         /* Send authentication continuation */
+  pop3_get_message            /* Get SASL response message */
+};
+
 #ifdef USE_SSL
 static void pop3_to_pop3s(struct connectdata *conn)
 {
+  /* Change the connection handler */
   conn->handler = &Curl_handler_pop3s;
+
+  /* Set the connection's upgraded to TLS flag */
+  conn->tls_upgraded = TRUE;
 }
 #else
 #define pop3_to_pop3s(x) Curl_nop_stmt
@@ -248,21 +260,29 @@ static bool pop3_endofresp(struct connectdata *conn, char *line, size_t len,
   if(pop3c->state == POP3_CAPA) {
     /* Do we have the terminating line? */
     if(len >= 1 && !memcmp(line, ".", 1))
+      /* Treat the response as a success */
       *resp = '+';
     else
+      /* Treat the response as an untagged continuation */
       *resp = '*';
 
     return TRUE;
   }
 
-  /* Do we have a command or continuation response? */
-  if((len >= 3 && !memcmp("+OK", line, 3)) ||
-     (len >= 1 && !memcmp("+", line, 1))) {
+  /* Do we have a success response? */
+  if(len >= 3 && !memcmp("+OK", line, 3)) {
     *resp = '+';
 
     return TRUE;
   }
 
+  /* Do we have a continuation response? */
+  if(len >= 1 && !memcmp("+", line, 1)) {
+    *resp = '*';
+
+    return TRUE;
+  }
+
   return FALSE; /* Nothing for us */
 }
 
@@ -312,20 +332,7 @@ static void state(struct connectdata *conn, pop3state newstate)
     "CAPA",
     "STARTTLS",
     "UPGRADETLS",
-    "AUTH_PLAIN",
-    "AUTH_LOGIN",
-    "AUTH_LOGIN_PASSWD",
-    "AUTH_CRAMMD5",
-    "AUTH_DIGESTMD5",
-    "AUTH_DIGESTMD5_RESP",
-    "AUTH_NTLM",
-    "AUTH_NTLM_TYPE2MSG",
-    "AUTH_GSSAPI",
-    "AUTH_GSSAPI_TOKEN",
-    "AUTH_GSSAPI_NO_DATA",
-    "AUTH_XOAUTH2",
-    "AUTH_CANCEL",
-    "AUTH_FINAL",
+    "AUTH",
     "APOP",
     "USER",
     "PASS",
@@ -354,9 +361,9 @@ static CURLcode pop3_perform_capa(struct connectdata *conn)
   CURLcode result = CURLE_OK;
   struct pop3_conn *pop3c = &conn->proto.pop3c;
 
-  pop3c->authmechs = 0;         /* No known authentication mechanisms yet */
-  pop3c->authused = 0;          /* Clear the authentication mechanism used */
-  pop3c->tls_supported = FALSE; /* Clear the TLS capability */
+  pop3c->sasl.authmechs = SASL_AUTH_NONE; /* No known auth. mechanisms yet */
+  pop3c->sasl.authused = SASL_AUTH_NONE;  /* Clear the auth. mechanism used */
+  pop3c->tls_supported = FALSE;           /* Clear the TLS capability */
 
   /* Send the CAPA command */
   result = Curl_pp_sendf(&pop3c->pp, "%s", "CAPA");
@@ -500,25 +507,18 @@ static CURLcode pop3_perform_apop(struct connectdata *conn)
  */
 static CURLcode pop3_perform_auth(struct connectdata *conn,
                                   const char *mech,
-                                  const char *initresp, size_t len,
-                                  pop3state state1, pop3state state2)
+                                  const char *initresp)
 {
   CURLcode result = CURLE_OK;
   struct pop3_conn *pop3c = &conn->proto.pop3c;
 
-  if(initresp && 8 + strlen(mech) + len <= 255) { /* AUTH <mech> ...<crlf> */
+  if(initresp) {                                  /* AUTH <mech> ...<crlf> */
     /* Send the AUTH command with the initial response */
     result = Curl_pp_sendf(&pop3c->pp, "AUTH %s %s", mech, initresp);
-
-    if(!result)
-      state(conn, state2);
   }
   else {
     /* Send the AUTH command */
     result = Curl_pp_sendf(&pop3c->pp, "AUTH %s", mech);
-
-    if(!result)
-      state(conn, state1);
   }
 
   return result;
@@ -526,6 +526,20 @@ static CURLcode pop3_perform_auth(struct connectdata *conn,
 
 /***********************************************************************
  *
+ * pop3_continue_auth()
+ *
+ * Sends SASL continuation data or cancellation.
+ */
+static CURLcode pop3_continue_auth(struct connectdata *conn,
+                                   const char *resp)
+{
+  struct pop3_conn *pop3c = &conn->proto.pop3c;
+
+  return Curl_pp_sendf(&pop3c->pp, "%s", resp);
+}
+
+/***********************************************************************
+ *
  * pop3_perform_authentication()
  *
  * Initiates the authentication sequence, with the appropriate SASL
@@ -536,38 +550,32 @@ static CURLcode pop3_perform_authentication(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
   struct pop3_conn *pop3c = &conn->proto.pop3c;
-  const char *mech = NULL;
-  char *initresp = NULL;
-  size_t len = 0;
-  pop3state state1 = POP3_STOP;
-  pop3state state2 = POP3_STOP;
+  saslprogress progress = SASL_IDLE;
 
-  /* Check we have a username and password to authenticate with and end the
+  /* Check we have enough data to authenticate with and end the
      connect phase if we don't */
-  if(!conn->bits.user_passwd) {
+  if(!Curl_sasl_can_authenticate(&pop3c->sasl, conn)) {
     state(conn, POP3_STOP);
-
     return result;
   }
 
-  /* Calculate the SASL login details */
-  if(pop3c->authtypes & POP3_TYPE_SASL)
-    result = pop3_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
-                                    &state2);
+  if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_SASL) {
+    /* Calculate the SASL login details */
+    result = Curl_sasl_start(&pop3c->sasl, conn, FALSE, &progress);
 
-  if(!result) {
-    if(mech && (pop3c->preftype & POP3_TYPE_SASL)) {
-      /* Perform SASL based authentication */
-      result = pop3_perform_auth(conn, mech, initresp, len, state1, state2);
-    }
+    if(!result)
+      if(progress == SASL_INPROGRESS)
+        state(conn, POP3_AUTH);
+  }
+
+  if(!result && progress == SASL_IDLE) {
 #ifndef CURL_DISABLE_CRYPTO_AUTH
-    else if((pop3c->authtypes & POP3_TYPE_APOP) &&
-            (pop3c->preftype & POP3_TYPE_APOP))
+    if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_APOP)
       /* Perform APOP authentication */
       result = pop3_perform_apop(conn);
+    else
 #endif
-    else if((pop3c->authtypes & POP3_TYPE_CLEARTEXT) &&
-            (pop3c->preftype & POP3_TYPE_CLEARTEXT))
+    if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_CLEARTEXT)
       /* Perform clear text authentication */
       result = pop3_perform_user(conn);
     else {
@@ -577,8 +585,6 @@ static CURLcode pop3_perform_authentication(struct connectdata *conn)
     }
   }
 
-  Curl_safefree(initresp);
-
   return result;
 }
 
@@ -706,7 +712,7 @@ static CURLcode pop3_state_capa_resp(struct connectdata *conn, int pop3code,
 
   (void)instate; /* no use for this yet */
 
-  /* Do we have a untagged response? */
+  /* Do we have a untagged continuation response? */
   if(pop3code == '*') {
     /* Does the server support the STLS capability? */
     if(len >= 4 && !memcmp(line, "STLS", 4))
@@ -726,6 +732,9 @@ static CURLcode pop3_state_capa_resp(struct connectdata *conn, int pop3code,
 
       /* Loop through the data line */
       for(;;) {
+        size_t llen;
+        unsigned int mechbit;
+
         while(len &&
               (*line == ' ' || *line == '\t' ||
                *line == '\r' || *line == '\n')) {
@@ -744,22 +753,9 @@ static CURLcode pop3_state_capa_resp(struct connectdata *conn, int pop3code,
           wordlen++;
 
         /* Test the word for a matching authentication mechanism */
-        if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_LOGIN))
-          pop3c->authmechs |= SASL_MECH_LOGIN;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_PLAIN))
-          pop3c->authmechs |= SASL_MECH_PLAIN;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_CRAM_MD5))
-          pop3c->authmechs |= SASL_MECH_CRAM_MD5;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_DIGEST_MD5))
-          pop3c->authmechs |= SASL_MECH_DIGEST_MD5;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_GSSAPI))
-          pop3c->authmechs |= SASL_MECH_GSSAPI;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_EXTERNAL))
-          pop3c->authmechs |= SASL_MECH_EXTERNAL;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_NTLM))
-          pop3c->authmechs |= SASL_MECH_NTLM;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_XOAUTH2))
-          pop3c->authmechs |= SASL_MECH_XOAUTH2;
+        mechbit = Curl_sasl_decode_mech(line, wordlen, &llen);
+        if(mechbit && llen == wordlen)
+          pop3c->sasl.authmechs |= mechbit;
 
         line += wordlen;
         len -= wordlen;
@@ -817,575 +813,42 @@ static CURLcode pop3_state_starttls_resp(struct connectdata *conn,
   return result;
 }
 
-/* For AUTH PLAIN (without initial response) responses */
-static CURLcode pop3_state_auth_plain_resp(struct connectdata *conn,
-                                           int pop3code,
-                                           pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *plainauth = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied. %c", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the authorisation message */
-    result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
-                                            &plainauth, &len);
-    if(!result && plainauth) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", plainauth);
-
-      if(!result)
-        state(conn, POP3_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(plainauth);
-
-  return result;
-}
-
-/* For AUTH LOGIN (without initial response) responses */
-static CURLcode pop3_state_auth_login_resp(struct connectdata *conn,
-                                           int pop3code,
-                                           pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *authuser = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the user message */
-    result = Curl_sasl_create_login_message(data, conn->user,
-                                            &authuser, &len);
-    if(!result && authuser) {
-      /* Send the user */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", authuser);
-
-      if(!result)
-        state(conn, POP3_AUTH_LOGIN_PASSWD);
-    }
-  }
-
-  Curl_safefree(authuser);
-
-  return result;
-}
-
-/* For AUTH LOGIN user entry responses */
-static CURLcode pop3_state_auth_login_password_resp(struct connectdata *conn,
-                                                    int pop3code,
-                                                    pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *authpasswd = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the password message */
-    result = Curl_sasl_create_login_message(data, conn->passwd,
-                                            &authpasswd, &len);
-    if(!result && authpasswd) {
-      /* Send the password */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", authpasswd);
-
-      if(!result)
-        state(conn, POP3_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(authpasswd);
-
-  return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For AUTH CRAM-MD5 responses */
-static CURLcode pop3_state_auth_cram_resp(struct connectdata *conn,
-                                          int pop3code,
-                                          pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlg = NULL;
-  char *chlg64 = NULL;
-  char *rplyb64 = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    return CURLE_LOGIN_DENIED;
-  }
-
-  /* Get the challenge message */
-  pop3_get_message(data->state.buffer, &chlg64);
-
-  /* Decode the challenge message */
-  result = Curl_sasl_decode_cram_md5_message(chlg64, &chlg, &len);
-  if(result) {
-    /* Send the cancellation */
-    result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
-    if(!result)
-      state(conn, POP3_AUTH_CANCEL);
-  }
-  else {
-    /* Create the response message */
-    result = Curl_sasl_create_cram_md5_message(data, chlg, conn->user,
-                                               conn->passwd, &rplyb64, &len);
-    if(!result && rplyb64) {
-      /* Send the response */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", rplyb64);
-
-      if(!result)
-        state(conn, POP3_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(chlg);
-  Curl_safefree(rplyb64);
-
-  return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge responses */
-static CURLcode pop3_state_auth_digest_resp(struct connectdata *conn,
-                                            int pop3code,
-                                            pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlg64 = NULL;
-  char *rplyb64 = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    return CURLE_LOGIN_DENIED;
-  }
-
-  /* Get the challenge message */
-  pop3_get_message(data->state.buffer, &chlg64);
-
-  /* Create the response message */
-  result = Curl_sasl_create_digest_md5_message(data, chlg64,
-                                               conn->user, conn->passwd,
-                                               "pop", &rplyb64, &len);
-  if(result) {
-    if(result == CURLE_BAD_CONTENT_ENCODING) {
-      /* Send the cancellation */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
-      if(!result)
-        state(conn, POP3_AUTH_CANCEL);
-    }
-  }
-  else {
-    /* Send the response */
-    result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", rplyb64);
-
-    if(!result)
-      state(conn, POP3_AUTH_DIGESTMD5_RESP);
-  }
-
-  Curl_safefree(rplyb64);
-
-  return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge-response responses */
-static CURLcode pop3_state_auth_digest_resp_resp(struct connectdata *conn,
-                                                 int pop3code,
-                                                 pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Authentication failed: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Send an empty response */
-    result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "");
-
-    if(!result)
-      state(conn, POP3_AUTH_FINAL);
-  }
-
-  return result;
-}
-#endif
-
-#ifdef USE_NTLM
-/* For AUTH NTLM (without initial response) responses */
-static CURLcode pop3_state_auth_ntlm_resp(struct connectdata *conn,
-                                          int pop3code,
-                                          pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *type1msg = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the type-1 message */
-    result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                 &conn->ntlm,
-                                                 &type1msg, &len);
-    if(!result && type1msg) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", type1msg);
-
-      if(!result)
-        state(conn, POP3_AUTH_NTLM_TYPE2MSG);
-    }
-  }
-
-  Curl_safefree(type1msg);
-
-  return result;
-}
-
-/* For NTLM type-2 responses (sent in reponse to our type-1 message) */
-static CURLcode pop3_state_auth_ntlm_type2msg_resp(struct connectdata *conn,
-                                                   int pop3code,
-                                                   pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *type2msg = NULL;
-  char *type3msg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the type-2 message */
-    pop3_get_message(data->state.buffer, &type2msg);
-
-    /* Decode the type-2 message */
-    result = Curl_sasl_decode_ntlm_type2_message(data, type2msg, &conn->ntlm);
-    if(result) {
-      /* Send the cancellation */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
-      if(!result)
-        state(conn, POP3_AUTH_CANCEL);
-    }
-    else {
-      /* Create the type-3 message */
-      result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
-                                                   conn->passwd, &conn->ntlm,
-                                                   &type3msg, &len);
-      if(!result && type3msg) {
-        /* Send the message */
-        result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", type3msg);
-
-        if(!result)
-          state(conn, POP3_AUTH_FINAL);
-      }
-    }
-  }
-
-  Curl_safefree(type3msg);
-
-  return result;
-}
-#endif
-
-#if defined(USE_KERBEROS5)
-/* For AUTH GSSAPI (without initial response) responses */
-static CURLcode pop3_state_auth_gssapi_resp(struct connectdata *conn,
-                                            int pop3code,
-                                            pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct pop3_conn *pop3c = &conn->proto.pop3c;
-  size_t len = 0;
-  char *respmsg = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the initial response message */
-    result = Curl_sasl_create_gssapi_user_message(data, conn->user,
-                                                  conn->passwd, "pop",
-                                                  pop3c->mutual_auth,
-                                                  NULL, &conn->krb5,
-                                                  &respmsg, &len);
-    if(!result && respmsg) {
-      /* Send the message */
-      result = Curl_pp_sendf(&pop3c->pp, "%s", respmsg);
-
-      if(!result)
-        state(conn, POP3_AUTH_GSSAPI_TOKEN);
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-
-/* For AUTH GSSAPI user token responses */
-static CURLcode pop3_state_auth_gssapi_token_resp(struct connectdata *conn,
-                                                  int pop3code,
-                                                  pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct pop3_conn *pop3c = &conn->proto.pop3c;
-  char *chlgmsg = NULL;
-  char *respmsg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    pop3_get_message(data->state.buffer, &chlgmsg);
-
-    if(pop3c->mutual_auth)
-      /* Decode the user token challenge and create the optional response
-         message */
-      result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
-                                                    pop3c->mutual_auth,
-                                                    chlgmsg, &conn->krb5,
-                                                    &respmsg, &len);
-    else
-      /* Decode the security challenge and create the response message */
-      result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
-                                                        &conn->krb5,
-                                                        &respmsg, &len);
-
-    if(result) {
-      if(result == CURLE_BAD_CONTENT_ENCODING) {
-        /* Send the cancellation */
-        result = Curl_pp_sendf(&pop3c->pp, "%s", "*");
-
-        if(!result)
-          state(conn, POP3_AUTH_CANCEL);
-      }
-    }
-    else {
-      /* Send the response */
-      if(respmsg)
-        result = Curl_pp_sendf(&pop3c->pp, "%s", respmsg);
-      else
-        result = Curl_pp_sendf(&pop3c->pp, "%s", "");
-
-      if(!result)
-        state(conn, (pop3c->mutual_auth ? POP3_AUTH_GSSAPI_NO_DATA :
-                                          POP3_AUTH_FINAL));
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-
-/* For AUTH GSSAPI no data responses */
-static CURLcode pop3_state_auth_gssapi_no_data_resp(struct connectdata *conn,
-                                                    int pop3code,
-                                                    pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlgmsg = NULL;
-  char *respmsg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    pop3_get_message(data->state.buffer, &chlgmsg);
-
-    /* Decode the security challenge and create the security message */
-    result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
-                                                      &conn->krb5,
-                                                      &respmsg, &len);
-    if(result) {
-      if(result == CURLE_BAD_CONTENT_ENCODING) {
-        /* Send the cancellation */
-        result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
-        if(!result)
-          state(conn, POP3_AUTH_CANCEL);
-      }
-    }
-    else {
-      /* Send the response */
-      if(respmsg) {
-        result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", respmsg);
-
-        if(!result)
-          state(conn, POP3_AUTH_FINAL);
-      }
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-#endif
-
-/* For AUTH XOAUTH2 (without initial response) responses */
-static CURLcode pop3_state_auth_xoauth2_resp(struct connectdata *conn,
-                                             int pop3code, pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *xoauth = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Access denied: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the authorisation message */
-    result = Curl_sasl_create_xoauth2_message(conn->data, conn->user,
-                                              conn->xoauth2_bearer,
-                                              &xoauth, &len);
-    if(!result && xoauth) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", xoauth);
-
-      if(!result)
-        state(conn, POP3_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(xoauth);
-
-  return result;
-}
-
-/* For AUTH cancellation responses */
-static CURLcode pop3_state_auth_cancel_resp(struct connectdata *conn,
-                                            int pop3code,
-                                            pop3state instate)
+/* For SASL authentication responses */
+static CURLcode pop3_state_auth_resp(struct connectdata *conn,
+                                     int pop3code,
+                                     pop3state instate)
 {
   CURLcode result = CURLE_OK;
   struct SessionHandle *data = conn->data;
   struct pop3_conn *pop3c = &conn->proto.pop3c;
-  const char *mech = NULL;
-  char *initresp = NULL;
-  size_t len = 0;
-  pop3state state1 = POP3_STOP;
-  pop3state state2 = POP3_STOP;
+  saslprogress progress;
 
-  (void)pop3code;
   (void)instate; /* no use for this yet */
 
-  /* Remove the offending mechanism from the supported list */
-  pop3c->authmechs ^= pop3c->authused;
-
-  /* Calculate alternative SASL login details */
-  result = pop3_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
-                                  &state2);
-
-  if(!result) {
-    /* Do we have any mechanisms left or can we fallback to another
-       authentication type? */
-    if(mech) {
-      /* Retry SASL based authentication */
-      result = pop3_perform_auth(conn, mech, initresp, len, state1, state2);
-
-      Curl_safefree(initresp);
-    }
+  result = Curl_sasl_continue(&pop3c->sasl, conn, pop3code, &progress);
+  if(!result)
+    switch(progress) {
+    case SASL_DONE:
+      state(conn, POP3_STOP);  /* Authenticated */
+      break;
+    case SASL_IDLE:            /* No mechanism left after cancellation */
 #ifndef CURL_DISABLE_CRYPTO_AUTH
-    else if((pop3c->authtypes & POP3_TYPE_APOP) &&
-            (pop3c->preftype & POP3_TYPE_APOP))
-      /* Perform APOP authentication */
-      result = pop3_perform_apop(conn);
+      if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_APOP)
+        /* Perform APOP authentication */
+        result = pop3_perform_apop(conn);
+      else
 #endif
-    else if((pop3c->authtypes & POP3_TYPE_CLEARTEXT) &&
-            (pop3c->preftype & POP3_TYPE_CLEARTEXT))
-      /* Perform clear text authentication */
-      result = pop3_perform_user(conn);
-    else {
-      failf(data, "Authentication cancelled");
-
-      result = CURLE_LOGIN_DENIED;
+      if(pop3c->authtypes & pop3c->preftype & POP3_TYPE_CLEARTEXT)
+        /* Perform clear text authentication */
+        result = pop3_perform_user(conn);
+      else {
+        failf(data, "Authentication cancelled");
+        result = CURLE_LOGIN_DENIED;
+      }
+      break;
+    default:
+      break;
     }
-  }
-
-  return result;
-}
-
-/* For final responses in the AUTH sequence */
-static CURLcode pop3_state_auth_final_resp(struct connectdata *conn,
-                                           int pop3code,
-                                           pop3state instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-
-  (void)instate; /* no use for this yet */
-
-  if(pop3code != '+') {
-    failf(data, "Authentication failed: %d", pop3code);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else
-    /* End of connect phase */
-    state(conn, POP3_STOP);
 
   return result;
 }
@@ -1552,69 +1015,8 @@ static CURLcode pop3_statemach_act(struct connectdata *conn)
       result = pop3_state_starttls_resp(conn, pop3code, pop3c->state);
       break;
 
-    case POP3_AUTH_PLAIN:
-      result = pop3_state_auth_plain_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_LOGIN:
-      result = pop3_state_auth_login_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_LOGIN_PASSWD:
-      result = pop3_state_auth_login_password_resp(conn, pop3code,
-                                                   pop3c->state);
-      break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-    case POP3_AUTH_CRAMMD5:
-      result = pop3_state_auth_cram_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_DIGESTMD5:
-      result = pop3_state_auth_digest_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_DIGESTMD5_RESP:
-      result = pop3_state_auth_digest_resp_resp(conn, pop3code, pop3c->state);
-      break;
-#endif
-
-#ifdef USE_NTLM
-    case POP3_AUTH_NTLM:
-      result = pop3_state_auth_ntlm_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_NTLM_TYPE2MSG:
-      result = pop3_state_auth_ntlm_type2msg_resp(conn, pop3code,
-                                                  pop3c->state);
-      break;
-#endif
-
-#if defined(USE_KERBEROS5)
-    case POP3_AUTH_GSSAPI:
-      result = pop3_state_auth_gssapi_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_GSSAPI_TOKEN:
-      result = pop3_state_auth_gssapi_token_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_GSSAPI_NO_DATA:
-      result = pop3_state_auth_gssapi_no_data_resp(conn, pop3code,
-                                                   pop3c->state);
-      break;
-#endif
-
-    case POP3_AUTH_XOAUTH2:
-      result = pop3_state_auth_xoauth2_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_CANCEL:
-      result = pop3_state_auth_cancel_resp(conn, pop3code, pop3c->state);
-      break;
-
-    case POP3_AUTH_FINAL:
-      result = pop3_state_auth_final_resp(conn, pop3code, pop3c->state);
+    case POP3_AUTH:
+      result = pop3_state_auth_resp(conn, pop3code, pop3c->state);
       break;
 
 #ifndef CURL_DISABLE_CRYPTO_AUTH
@@ -1727,7 +1129,7 @@ static CURLcode pop3_connect(struct connectdata *conn, bool *done)
 
   /* Set the default preferred authentication type and mechanism */
   pop3c->preftype = POP3_TYPE_ANY;
-  pop3c->prefmech = SASL_AUTH_ANY;
+  Curl_sasl_init(&pop3c->sasl, &saslpop3);
 
   /* Initialise the pingpong layer */
   Curl_pp_init(pp);
@@ -1879,7 +1281,7 @@ static CURLcode pop3_disconnect(struct connectdata *conn, bool dead_connection)
   Curl_pp_disconnect(&pop3c->pp);
 
   /* Cleanup the SASL module */
-  Curl_sasl_cleanup(conn, pop3c->authused);
+  Curl_sasl_cleanup(conn, pop3c->sasl.authused);
 
   /* Cleanup our connection based variables */
   Curl_safefree(pop3c->apoptimestamp);
@@ -1956,6 +1358,10 @@ static CURLcode pop3_setup_connection(struct connectdata *conn)
   if(result)
     return result;
 
+  /* Clear the TLS upgraded flag */
+  conn->tls_upgraded = FALSE;
+
+  /* Set up the proxy if necessary */
   if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
     /* Unless we have asked to tunnel POP3 operations through the proxy, we
        switch and use HTTP operations only */
@@ -1994,75 +1400,52 @@ static CURLcode pop3_parse_url_options(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
   struct pop3_conn *pop3c = &conn->proto.pop3c;
-  const char *options = conn->options;
-  const char *ptr = options;
-  bool reset = TRUE;
+  const char *ptr = conn->options;
 
-  while(ptr && *ptr) {
+  pop3c->sasl.resetprefs = TRUE;
+
+  while(!result && ptr && *ptr) {
     const char *key = ptr;
+    const char *value;
 
     while(*ptr && *ptr != '=')
         ptr++;
 
-    if(strnequal(key, "AUTH", 4)) {
-      size_t len = 0;
-      const char *value = ++ptr;
+    value = ptr + 1;
 
-      if(reset) {
-        reset = FALSE;
-        pop3c->preftype = POP3_TYPE_NONE;
-        pop3c->prefmech = SASL_AUTH_NONE;
-      }
+    while(*ptr && *ptr != ';')
+      ptr++;
 
-      while(*ptr && *ptr != ';') {
-        ptr++;
-        len++;
-      }
+    if(strnequal(key, "AUTH=", 5)) {
+      result = Curl_sasl_parse_url_auth_option(&pop3c->sasl,
+                                               value, ptr - value);
 
-      if(strnequal(value, "*", len)) {
-        pop3c->preftype = POP3_TYPE_ANY;
-        pop3c->prefmech = SASL_AUTH_ANY;
-      }
-      else if(strnequal(value, "+APOP", len)) {
+      if(result && strnequal(value, "+APOP", ptr - value)) {
         pop3c->preftype = POP3_TYPE_APOP;
-        pop3c->prefmech = SASL_AUTH_NONE;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_LOGIN;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_PLAIN;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_CRAM_MD5;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_DIGEST_MD5;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_GSSAPI;
-      }
-      else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_NTLM;
+        pop3c->sasl.prefmech = SASL_AUTH_NONE;
+        result = CURLE_OK;
       }
-      else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) {
-        pop3c->preftype = POP3_TYPE_SASL;
-        pop3c->prefmech |= SASL_MECH_XOAUTH2;
-      }
-
-      if(*ptr == ';')
-        ptr++;
     }
     else
       result = CURLE_URL_MALFORMAT;
+
+    if(*ptr == ';')
+      ptr++;
   }
 
+  if(pop3c->preftype != POP3_TYPE_APOP)
+    switch(pop3c->sasl.prefmech) {
+    case SASL_AUTH_NONE:
+      pop3c->preftype = POP3_TYPE_NONE;
+      break;
+    case SASL_AUTH_DEFAULT:
+      pop3c->preftype = POP3_TYPE_ANY;
+      break;
+    default:
+      pop3c->preftype = POP3_TYPE_SASL;
+      break;
+    }
+
   return result;
 }
 
@@ -2105,110 +1488,6 @@ static CURLcode pop3_parse_custom_request(struct connectdata *conn)
 
 /***********************************************************************
  *
- * pop3_calc_sasl_details()
- *
- * Calculate the required login details for SASL authentication.
- */
-static CURLcode pop3_calc_sasl_details(struct connectdata *conn,
-                                       const char **mech,
-                                       char **initresp, size_t *len,
-                                       pop3state *state1, pop3state *state2)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct pop3_conn *pop3c = &conn->proto.pop3c;
-
-  /* Calculate the supported authentication mechanism, by decreasing order of
-     security, as well as the initial response where appropriate */
-#if defined(USE_KERBEROS5)
-  if((pop3c->authmechs & SASL_MECH_GSSAPI) &&
-      (pop3c->prefmech & SASL_MECH_GSSAPI)) {
-    pop3c->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
-
-    *mech = SASL_MECH_STRING_GSSAPI;
-    *state1 = POP3_AUTH_GSSAPI;
-    *state2 = POP3_AUTH_GSSAPI_TOKEN;
-    pop3c->authused = SASL_MECH_GSSAPI;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_gssapi_user_message(data, conn->user,
-                                                    conn->passwd, "pop",
-                                                    pop3c->mutual_auth,
-                                                    NULL, &conn->krb5,
-                                                    initresp, len);
-  }
-  else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-  if((pop3c->authmechs & SASL_MECH_DIGEST_MD5) &&
-      (pop3c->prefmech & SASL_MECH_DIGEST_MD5)) {
-    *mech = SASL_MECH_STRING_DIGEST_MD5;
-    *state1 = POP3_AUTH_DIGESTMD5;
-    pop3c->authused = SASL_MECH_DIGEST_MD5;
-  }
-  else if((pop3c->authmechs & SASL_MECH_CRAM_MD5) &&
-          (pop3c->prefmech & SASL_MECH_CRAM_MD5)) {
-    *mech = SASL_MECH_STRING_CRAM_MD5;
-    *state1 = POP3_AUTH_CRAMMD5;
-    pop3c->authused = SASL_MECH_CRAM_MD5;
-  }
-  else
-#endif
-#ifdef USE_NTLM
-  if((pop3c->authmechs & SASL_MECH_NTLM) &&
-      (pop3c->prefmech & SASL_MECH_NTLM)) {
-    *mech = SASL_MECH_STRING_NTLM;
-    *state1 = POP3_AUTH_NTLM;
-    *state2 = POP3_AUTH_NTLM_TYPE2MSG;
-    pop3c->authused = SASL_MECH_NTLM;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                    &conn->ntlm,
-                                                    initresp, len);
-  }
-  else
-#endif
-  if(((pop3c->authmechs & SASL_MECH_XOAUTH2) &&
-      (pop3c->prefmech & SASL_MECH_XOAUTH2) &&
-      (pop3c->prefmech != SASL_AUTH_ANY)) || conn->xoauth2_bearer) {
-    *mech = SASL_MECH_STRING_XOAUTH2;
-    *state1 = POP3_AUTH_XOAUTH2;
-    *state2 = POP3_AUTH_FINAL;
-    pop3c->authused = SASL_MECH_XOAUTH2;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_xoauth2_message(data, conn->user,
-                                                conn->xoauth2_bearer,
-                                                initresp, len);
-  }
-  else if((pop3c->authmechs & SASL_MECH_LOGIN) &&
-          (pop3c->prefmech & SASL_MECH_LOGIN)) {
-    *mech = SASL_MECH_STRING_LOGIN;
-    *state1 = POP3_AUTH_LOGIN;
-    *state2 = POP3_AUTH_LOGIN_PASSWD;
-    pop3c->authused = SASL_MECH_LOGIN;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_login_message(data, conn->user, initresp, len);
-  }
-  else if((pop3c->authmechs & SASL_MECH_PLAIN) &&
-          (pop3c->prefmech & SASL_MECH_PLAIN)) {
-    *mech = SASL_MECH_STRING_PLAIN;
-    *state1 = POP3_AUTH_PLAIN;
-    *state2 = POP3_AUTH_FINAL;
-    pop3c->authused = SASL_MECH_PLAIN;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
-                                              initresp, len);
-  }
-
-  return result;
-}
-
-/***********************************************************************
- *
  * Curl_pop3_write()
  *
  * This function scans the body after the end-of-body and writes everything
index 729a55a..2d96101 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2009 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2009 - 2015, 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.
+ * are also available at https://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
@@ -23,6 +23,7 @@
  ***************************************************************************/
 
 #include "pingpong.h"
+#include "curl_sasl.h"
 
 /****************************************************************************
  * POP3 unique setup
@@ -35,20 +36,7 @@ typedef enum {
   POP3_STARTTLS,
   POP3_UPGRADETLS,   /* asynchronously upgrade the connection to SSL/TLS
                        (multi mode only) */
-  POP3_AUTH_PLAIN,
-  POP3_AUTH_LOGIN,
-  POP3_AUTH_LOGIN_PASSWD,
-  POP3_AUTH_CRAMMD5,
-  POP3_AUTH_DIGESTMD5,
-  POP3_AUTH_DIGESTMD5_RESP,
-  POP3_AUTH_NTLM,
-  POP3_AUTH_NTLM_TYPE2MSG,
-  POP3_AUTH_GSSAPI,
-  POP3_AUTH_GSSAPI_TOKEN,
-  POP3_AUTH_GSSAPI_NO_DATA,
-  POP3_AUTH_XOAUTH2,
-  POP3_AUTH_CANCEL,
-  POP3_AUTH_FINAL,
+  POP3_AUTH,
   POP3_APOP,
   POP3_USER,
   POP3_PASS,
@@ -77,14 +65,11 @@ struct pop3_conn {
                              have been received so far */
   size_t strip;           /* Number of bytes from the start to ignore as
                              non-body */
+  struct SASL sasl;       /* SASL-related storage */
   unsigned int authtypes; /* Accepted authentication types */
-  unsigned int authmechs; /* Accepted SASL authentication mechanisms */
   unsigned int preftype;  /* Preferred authentication type */
-  unsigned int prefmech;  /* Preferred SASL authentication mechanism */
-  unsigned int authused;  /* SASL auth mechanism used for the connection */
   char *apoptimestamp;    /* APOP timestamp from the server greeting */
   bool tls_supported;     /* StartTLS capability supported by server */
-  bool mutual_auth;       /* Mutual authentication enabled (GSSAPI only) */
 };
 
 extern const struct Curl_handler Curl_handler_pop3;
index f147ce7..713ab08 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -25,9 +25,7 @@
 #include "urldata.h"
 #include "sendf.h"
 #include "progress.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 /* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero
    byte) */
index a1e6f1a..ea00afa 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index e27dac4..5665ebd 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
    its behavior is altered by the current locale. */
 char Curl_raw_toupper(char in)
 {
+#if !defined(CURL_DOES_CONVERSIONS)
+  if(in >= 'a' && in <= 'z')
+    return (char)('A' + in - 'a');
+#else
   switch (in) {
   case 'a':
     return 'A';
@@ -82,13 +86,15 @@ char Curl_raw_toupper(char in)
   case 'z':
     return 'Z';
   }
+#endif
+
   return in;
 }
 
 /*
  * Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
  * to be locale independent and only compare strings we know are safe for
- * this.  See http://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
+ * this.  See https://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
  * some further explanation to why this function is necessary.
  *
  * The function is capable of comparing a-z case insensitively even for
index b491460..4af00f1 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 029738d..24bf801 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "progress.h"
 #include "rtsp.h"
 #include "rawstr.h"
-#include "curl_memory.h"
 #include "select.h"
 #include "connect.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
@@ -251,6 +249,8 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
   const char *p_stream_uri = NULL;
   const char *p_transport = NULL;
   const char *p_uagent = NULL;
+  const char *p_proxyuserpwd = NULL;
+  const char *p_userpwd = NULL;
 
   *done = TRUE;
 
@@ -265,11 +265,10 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
    * Since all RTSP requests are included here, there is no need to
    * support custom requests like HTTP.
    **/
-  DEBUGASSERT((rtspreq > RTSPREQ_NONE && rtspreq < RTSPREQ_LAST));
   data->set.opt_no_body = TRUE; /* most requests don't contain a body */
   switch(rtspreq) {
-  case RTSPREQ_NONE:
-    failf(data, "Got invalid RTSP request: RTSPREQ_NONE");
+  default:
+    failf(data, "Got invalid RTSP request");
     return CURLE_BAD_FUNCTION_ARGUMENT;
   case RTSPREQ_OPTIONS:
     p_request = "OPTIONS";
@@ -325,11 +324,10 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
   if(!p_session_id &&
      (rtspreq & ~(RTSPREQ_OPTIONS | RTSPREQ_DESCRIBE | RTSPREQ_SETUP))) {
     failf(data, "Refusing to issue an RTSP request [%s] without a session ID.",
-          p_request ? p_request : "");
+          p_request);
     return CURLE_BAD_FUNCTION_ARGUMENT;
   }
 
-  /* TODO: auth? */
   /* TODO: proxy? */
 
   /* Stream URI. Default to server '*' if not specified */
@@ -395,6 +393,14 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
     p_uagent = conn->allocptr.uagent;
   }
 
+  /* setup the authentication headers */
+  result = Curl_http_output_auth(conn, p_request, p_stream_uri, FALSE);
+  if(result)
+    return result;
+
+  p_proxyuserpwd = conn->allocptr.proxyuserpwd;
+  p_userpwd = conn->allocptr.userpwd;
+
   /* Referrer */
   Curl_safefree(conn->allocptr.ref);
   if(data->change.referer && !Curl_checkheaders(conn, "Referer:"))
@@ -443,8 +449,7 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
     Curl_add_bufferf(req_buffer,
                      "%s %s RTSP/1.0\r\n" /* Request Stream-URI RTSP/1.0 */
                      "CSeq: %ld\r\n", /* CSeq */
-                     (p_request ? p_request : ""), p_stream_uri,
-                     rtsp->CSeq_sent);
+                     p_request, p_stream_uri, rtsp->CSeq_sent);
   if(result)
     return result;
 
@@ -468,13 +473,25 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
                             "%s" /* range */
                             "%s" /* referrer */
                             "%s" /* user-agent */
+                            "%s" /* proxyuserpwd */
+                            "%s" /* userpwd */
                             ,
                             p_transport ? p_transport : "",
                             p_accept ? p_accept : "",
                             p_accept_encoding ? p_accept_encoding : "",
                             p_range ? p_range : "",
                             p_referrer ? p_referrer : "",
-                            p_uagent ? p_uagent : "");
+                            p_uagent ? p_uagent : "",
+                            p_proxyuserpwd ? p_proxyuserpwd : "",
+                            p_userpwd ? p_userpwd : "");
+
+  /*
+   * Free userpwd now --- cannot reuse this for Negotiate and possibly NTLM
+   * with basic and digest, it will be freed anyway by the next request
+   */
+  Curl_safefree (conn->allocptr.userpwd);
+  conn->allocptr.userpwd = NULL;
+
   if(result)
     return result;
 
@@ -498,8 +515,8 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
 
     }
     else {
-      postsize = (data->set.postfieldsize != -1)?
-        data->set.postfieldsize:
+      postsize = (data->state.infilesize != -1)?
+        data->state.infilesize:
         (data->set.postfields? (curl_off_t)strlen(data->set.postfields):0);
       data->set.httpreq = HTTPREQ_POST;
     }
index 3ffa70c..5a8d555 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 607048c..014bbf1 100644 (file)
@@ -7,10 +7,10 @@
  * rewrite to work around the paragraph 2 in the BSD licenses as explained
  * below.
  *
- * Copyright (c) 1998, 1999, 2013 Kungliga Tekniska Högskolan
+ * Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
  *
- * Copyright (C) 2001 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2001 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  *
  * All rights reserved.
  *
@@ -109,19 +109,12 @@ static char level_to_char(int level) {
   return 'P';
 }
 
-static const struct Curl_sec_client_mech * const mechs[] = {
-#ifdef HAVE_GSSAPI
-  &Curl_krb5_client_mech,
-#endif
-  NULL
-};
-
 /* 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, ...)
 {
   int ftp_code;
-  ssize_t nread;
+  ssize_t nread=0;
   va_list args;
   char print_buffer[50];
 
@@ -366,7 +359,7 @@ int Curl_sec_read_msg(struct connectdata *conn, char *buffer,
      int */
   int decoded_len;
   char *buf;
-  int ret_code;
+  int ret_code = 0;
   size_t decoded_sz = 0;
   CURLcode error;
 
@@ -395,13 +388,13 @@ int Curl_sec_read_msg(struct connectdata *conn, char *buffer,
   }
 
   buf[decoded_len] = '\0';
-  DEBUGASSERT(decoded_len > 3);
-  if(buf[3] == '-')
-    ret_code = 0;
-  else {
-    /* Check for error? */
+  if(decoded_len <= 3)
+    /* suspiciously short */
+    return 0;
+
+  if(buf[3] != '-')
+    /* safe to ignore return code */
     (void)sscanf(buf, "%d", &ret_code);
-  }
 
   if(buf[decoded_len - 1] == '\n')
     buf[decoded_len - 1] = '\0';
@@ -444,8 +437,8 @@ static int sec_set_protection_level(struct connectdata *conn)
 
     pbsz = strstr(conn->data->state.buffer, "PBSZ=");
     if(pbsz) {
-      /* FIXME: Checks for errors in sscanf? */
-      sscanf(pbsz, "PBSZ=%u", &buffer_size);
+      /* ignore return code, use default value if it fails */
+      (void)sscanf(pbsz, "PBSZ=%u", &buffer_size);
       if(buffer_size < conn->buffer_size)
         conn->buffer_size = buffer_size;
     }
@@ -484,72 +477,63 @@ static CURLcode choose_mech(struct connectdata *conn)
 {
   int ret;
   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", (void *)mech);
-      continue;
-    }
-    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;
+  const struct Curl_sec_client_mech *mech = &Curl_krb5_client_mech;
 
-    if((*mech)->init) {
-      ret = (*mech)->init(conn->app_data);
-      if(ret != 0) {
-        infof(data, "Failed initialization for %s. Skipping it.\n", mech_name);
-        continue;
-      }
+  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(mech->init) {
+    ret = mech->init(conn->app_data);
+    if(ret) {
+      infof(data, "Failed initialization for %s. Skipping it.\n",
+            mech->name);
+      return CURLE_FAILED_INIT;
     }
+  }
 
-    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(ret/100 != 3) {
-      switch(ret) {
-      case 504:
-        infof(data, "Mechanism %s is not supported by the server (server "
-                    "returned ftp code: 504).\n", mech_name);
-        break;
-      case 534:
-        infof(data, "Mechanism %s was rejected by the server (server returned "
-                    "ftp code: 534).\n", mech_name);
-        break;
-      default:
-        if(ret/100 == 5) {
-          infof(data, "server does not support the security extensions\n");
-          return CURLE_USE_SSL_FAILED;
-        }
-        break;
+  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(ret/100 != 3) {
+    switch(ret) {
+    case 504:
+      infof(data, "Mechanism %s is not supported by the server (server "
+            "returned ftp code: 504).\n", mech->name);
+      break;
+    case 534:
+      infof(data, "Mechanism %s was rejected by the server (server returned "
+            "ftp code: 534).\n", mech->name);
+      break;
+    default:
+      if(ret/100 == 5) {
+        infof(data, "server does not support the security extensions\n");
+        return CURLE_USE_SSL_FAILED;
       }
-      continue;
+      break;
     }
+    return CURLE_LOGIN_DENIED;
+  }
 
-    /* Authenticate */
-    ret = (*mech)->auth(conn->app_data, conn);
+  /* Authenticate */
+  ret = mech->auth(conn->app_data, conn);
 
-    if(ret == AUTH_CONTINUE)
-      continue;
-    else if(ret != AUTH_OK) {
+  if(ret != AUTH_CONTINUE) {
+    if(ret != AUTH_OK) {
       /* Mechanism has dumped the error to stderr, don't error here. */
       return -1;
     }
     DEBUGASSERT(ret == AUTH_OK);
 
-    conn->mech = *mech;
+    conn->mech = mech;
     conn->sec_complete = 1;
     conn->recv[FIRSTSOCKET] = sec_recv;
     conn->send[FIRSTSOCKET] = sec_send;
@@ -559,10 +543,9 @@ static CURLcode choose_mech(struct connectdata *conn)
     /* Set the requested protection level */
     /* BLOCKING */
     (void)sec_set_protection_level(conn);
-    break;
   }
 
-  return *mech != NULL ? CURLE_OK : CURLE_FAILED_INIT;
+  return CURLE_OK;
 }
 
 CURLcode
@@ -577,10 +560,8 @@ Curl_sec_end(struct connectdata *conn)
 {
   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;
-  }
+  free(conn->app_data);
+  conn->app_data = NULL;
   if(conn->in_buffer.data) {
     free(conn->in_buffer.data);
     conn->in_buffer.data = NULL;
index 1c6481c..abf55d8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -159,7 +159,7 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
   fd_set fds_err;
   curl_socket_t maxfd;
 #endif
-  struct timeval initial_tv = {0,0};
+  struct timeval initial_tv = {0, 0};
   int pending_ms = 0;
   int error;
   int r;
@@ -316,15 +316,15 @@ int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
        curl_socket_t is unsigned in such cases and thus -1 is the largest
        value).
     */
+#ifdef USE_WINSOCK
     r = select((int)maxfd + 1,
-#ifndef USE_WINSOCK
-               &fds_read,
-               &fds_write,
-#else
                fds_read.fd_count ? &fds_read : NULL,
                fds_write.fd_count ? &fds_write : NULL,
-#endif
                &fds_err, ptimeout);
+#else
+    r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
+#endif
+
     if(r != -1)
       break;
     error = SOCKERRNO;
@@ -393,7 +393,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
   fd_set fds_err;
   curl_socket_t maxfd;
 #endif
-  struct timeval initial_tv = {0,0};
+  struct timeval initial_tv = {0, 0};
   bool fds_none = TRUE;
   unsigned int i;
   int pending_ms = 0;
@@ -505,19 +505,19 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
       pending_tv.tv_sec = 0;
       pending_tv.tv_usec = 0;
     }
+
+#ifdef USE_WINSOCK
     r = select((int)maxfd + 1,
-#ifndef USE_WINSOCK
-               &fds_read, &fds_write, &fds_err,
-#else
                /* WinSock select() can't handle fd_sets with zero bits set, so
                   don't give it such arguments.  See the comment about this in
                   Curl_check_socket().
                */
                fds_read.fd_count ? &fds_read : NULL,
                fds_write.fd_count ? &fds_write : NULL,
-               fds_err.fd_count ? &fds_err : NULL,
+               fds_err.fd_count ? &fds_err : NULL, ptimeout);
+#else
+    r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
 #endif
-               ptimeout);
     if(r != -1)
       break;
     error = SOCKERRNO;
@@ -573,6 +573,6 @@ int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes,
 
    rc = tpf_select_bsd(maxfds, reads, writes, excepts, tv);
    tpf_process_signals();
-   return(rc);
+   return rc;
 }
 #endif /* TPF */
index c00afe1..695bb69 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2d1a166..ea04ae8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "ssh.h"
 #include "multiif.h"
 #include "non-ascii.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
+#include "curl_printf.h"
 #include "strerror.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #ifdef CURL_DO_LINEEND_CONV
@@ -55,7 +52,7 @@ static size_t convert_lineends(struct SessionHandle *data,
 
   /* sanity check */
   if((startPtr == NULL) || (size < 1)) {
-    return(size);
+    return size;
   }
 
   if(data->state.prev_block_had_trailing_cr) {
@@ -117,9 +114,9 @@ static size_t convert_lineends(struct SessionHandle *data,
       /* tidy up by null terminating the now shorter data */
       *outPtr = '\0';
 
-    return(outPtr - startPtr);
+    return (outPtr - startPtr);
   }
-  return(size);
+  return size;
 }
 #endif /* CURL_DO_LINEEND_CONV */
 
@@ -523,11 +520,13 @@ CURLcode Curl_read_plain(curl_socket_t sockfd,
 
   if(-1 == nread) {
     int err = SOCKERRNO;
+    int return_error;
 #ifdef USE_WINSOCK
-    if(WSAEWOULDBLOCK == err)
+    return_error = WSAEWOULDBLOCK == err;
 #else
-    if((EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err))
+    return_error = EWOULDBLOCK == err || EAGAIN == err || EINTR == err;
 #endif
+    if(return_error)
       return CURLE_AGAIN;
     else
       return CURLE_RECV_ERROR;
@@ -554,7 +553,10 @@ CURLcode Curl_read(struct connectdata *conn, /* connection data */
   ssize_t nread = 0;
   size_t bytesfromsocket = 0;
   char *buffertofill = NULL;
-  bool pipelining = Curl_multi_pipeline_enabled(conn->data->multi);
+
+  /* if HTTP/1 pipelining is both wanted and possible */
+  bool pipelining = Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1) &&
+    (conn->bundle->multiuse == BUNDLE_PIPELINING);
 
   /* Set 'num' to 0 or 1, depending on which socket that has been sent here.
      If it is the second socket, we set num to 1. Otherwise to 0. This lets
index 86f06cf..48e9444 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index fae8567..e32b72f 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 4b3dded..4b78e0b 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -249,6 +249,9 @@ char * unix_path;
 #define MD5_Init MD5_INIT
 #define MD5_Update MD5_UPDATE
 #define OPENSSL_add_all_algo_noconf OPENSSL_ADD_ALL_ALGO_NOCONF
+#ifndef __VAX
+#define OPENSSL_load_builtin_modules OPENSSL_LOAD_BUILTIN_MODULES
+#endif
 #define PEM_read_X509 PEM_READ_X509
 #define PEM_write_bio_X509 PEM_WRITE_BIO_X509
 #define PKCS12_PBE_add PKCS12_PBE_ADD
@@ -272,6 +275,7 @@ char * unix_path;
 #define SSL_CTX_set_cipher_list SSL_CTX_SET_CIPHER_LIST
 #define SSL_CTX_set_def_passwd_cb_ud SSL_CTX_SET_DEF_PASSWD_CB_UD
 #define SSL_CTX_set_default_passwd_cb SSL_CTX_SET_DEFAULT_PASSWD_CB
+#define SSL_CTX_set_msg_callback SSL_CTX_SET_MSG_CALLBACK
 #define SSL_CTX_set_verify SSL_CTX_SET_VERIFY
 #define SSL_CTX_use_PrivateKey SSL_CTX_USE_PRIVATEKEY
 #define SSL_CTX_use_PrivateKey_file SSL_CTX_USE_PRIVATEKEY_FILE
@@ -301,6 +305,7 @@ char * unix_path;
 #define SSL_set_fd SSL_SET_FD
 #define SSL_set_session SSL_SET_SESSION
 #define SSL_shutdown SSL_SHUTDOWN
+#define SSL_version SSL_VERSION
 #define SSL_write SSL_WRITE
 #define SSLeay SSLEAY
 #define SSLv23_client_method SSLV23_CLIENT_METHOD
@@ -325,6 +330,7 @@ char * unix_path;
 #define UI_set_result UI_SET_RESULT
 #define X509V3_EXT_print X509V3_EXT_PRINT
 #define X509_EXTENSION_get_critical X509_EXTENSION_GET_CRITICAL
+#define X509_EXTENSION_get_data X509_EXTENSION_GET_DATA
 #define X509_EXTENSION_get_object X509_EXTENSION_GET_OBJECT
 #define X509_LOOKUP_file X509_LOOKUP_FILE
 #define X509_NAME_ENTRY_get_data X509_NAME_ENTRY_GET_DATA
@@ -349,6 +355,12 @@ char * unix_path;
 #define sk_pop SK_POP
 #define sk_pop_free SK_POP_FREE
 #define sk_value SK_VALUE
+#ifdef __VAX
+#define OPENSSL_NO_SHA256
+#endif
+#define SHA256_Final SHA256_FINAL
+#define SHA256_Init SHA256_INIT
+#define SHA256_Update SHA256_UPDATE
 
 #define USE_UPPERCASE_GSSAPI 1
 #define gss_seal GSS_SEAL
@@ -414,7 +426,7 @@ char * unix_path;
 
         static void des_ecb_encrypt(const_des_cblock *input,
                                     des_cblock *output,
-                                    des_key_schedule ks,int enc) {
+                                    des_key_schedule ks, int enc) {
             DES_ECB_ENCRYPT(input, output, ks, enc);
         }
 #endif
index b8b6bee..01503e0 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -35,9 +35,15 @@ CURLSH *
 curl_share_init(void)
 {
   struct Curl_share *share = calloc(1, sizeof(struct Curl_share));
-  if(share)
+  if(share) {
     share->specifier |= (1<<CURL_LOCK_DATA_SHARE);
 
+    if(Curl_mk_dnscache(&share->hostcache)) {
+      free(share);
+      return NULL;
+    }
+  }
+
   return share;
 }
 
@@ -67,11 +73,6 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
     share->specifier |= (1<<type);
     switch( type ) {
     case CURL_LOCK_DATA_DNS:
-      if(!share->hostcache) {
-        share->hostcache = Curl_mk_dnscache();
-        if(!share->hostcache)
-          res = CURLSHE_NOMEM;
-      }
       break;
 
     case CURL_LOCK_DATA_COOKIE:
@@ -115,10 +116,6 @@ curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
     share->specifier &= ~(1<<type);
     switch( type ) {
     case CURL_LOCK_DATA_DNS:
-      if(share->hostcache) {
-        Curl_hash_destroy(share->hostcache);
-        share->hostcache = NULL;
-      }
       break;
 
     case CURL_LOCK_DATA_COOKIE:
@@ -192,14 +189,10 @@ curl_share_cleanup(CURLSH *sh)
     return CURLSHE_IN_USE;
   }
 
-  if(share->hostcache) {
-    Curl_hash_destroy(share->hostcache);
-    share->hostcache = NULL;
-  }
+  Curl_hash_destroy(&share->hostcache);
 
 #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
-  if(share->cookies)
-    Curl_cookie_cleanup(share->cookies);
+  Curl_cookie_cleanup(share->cookies);
 #endif
 
 #ifdef USE_SSL
index 9a5128e..d23d3a0 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -44,7 +44,7 @@ struct Curl_share {
   curl_unlock_function unlockfunc;
   void *clientdata;
 
-  struct curl_hash *hostcache;
+  struct curl_hash hostcache;
 #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
   struct CookieInfo *cookies;
 #endif
index e8d2acd..6559c74 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3cac6ca..37ce97c 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
 
 #include "curl_setup.h"
 
-#include "curl_memory.h"
 #include "slist.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* returns last node in linked list */
index ea7dcc4..b3f498c 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index e66427b..2c33c11 100644 (file)
--- a/lib/smb.c
+++ b/lib/smb.c
@@ -10,7 +10,7 @@
  *
  * 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.
+ * are also available at https://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
 #include "transfer.h"
 #include "vtls/vtls.h"
 #include "curl_ntlm_core.h"
-#include "curl_memory.h"
 #include "escape.h"
 #include "curl_endian.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* Local API functions */
@@ -131,7 +131,7 @@ const struct Curl_handler Curl_handler_smbs = {
    defined(__OS400__)
 static unsigned short smb_swap16(unsigned short x)
 {
-  return (x << 8) | ((x >> 8) & 0xff);
+  return (unsigned short) ((x << 8) | ((x >> 8) & 0xff));
 }
 
 static unsigned int smb_swap32(unsigned int x)
@@ -143,12 +143,14 @@ static unsigned int smb_swap32(unsigned int x)
 #ifdef HAVE_LONGLONG
 static unsigned long long smb_swap64(unsigned long long x)
 {
-  return ((unsigned long long)smb_swap32(x) << 32) | smb_swap32(x >> 32);
+  return ((unsigned long long) smb_swap32((unsigned int) x) << 32) |
+          smb_swap32((unsigned int) (x >> 32));
 }
 #else
 static unsigned __int64 smb_swap64(unsigned __int64 x)
 {
-  return ((unsigned __int64)smb_swap32(x) << 32) | smb_swap32(x >> 32);
+  return ((unsigned __int64) smb_swap32((unsigned int) x) << 32) |
+          smb_swap32((unsigned int) (x >> 32));
 }
 #endif
 #else
@@ -783,9 +785,15 @@ static CURLcode smb_request_state(struct connectdata *conn, bool *done)
     off = Curl_read16_le(((unsigned char *) msg) +
                          sizeof(struct smb_header) + 13);
     if(len > 0) {
-      result = Curl_client_write(conn, CLIENTWRITE_BODY,
-                                 (char *)msg + off + sizeof(unsigned int),
-                                 len);
+      struct smb_conn *smbc = &conn->proto.smbc;
+      if(off + sizeof(unsigned int) + len > smbc->got) {
+        failf(conn->data, "Invalid input packet");
+        result = CURLE_RECV_ERROR;
+      }
+      else
+        result = Curl_client_write(conn, CLIENTWRITE_BODY,
+                                   (char *)msg + off + sizeof(unsigned int),
+                                   len);
       if(result) {
         req->result = result;
         next_state = SMB_CLOSE;
@@ -935,7 +943,7 @@ static CURLcode smb_parse_url_path(struct connectdata *conn)
   /* Parse the path for the share */
   req->share = strdup((*path == '/' || *path == '\\') ? path + 1 : path);
   if(!req->share) {
-    Curl_safefree(path);
+    free(path);
 
     return CURLE_OUT_OF_MEMORY;
   }
@@ -946,7 +954,7 @@ static CURLcode smb_parse_url_path(struct connectdata *conn)
 
   /* The share must be present */
   if(!slash) {
-    Curl_safefree(path);
+    free(path);
 
     return CURLE_URL_MALFORMAT;
   }
@@ -960,7 +968,7 @@ static CURLcode smb_parse_url_path(struct connectdata *conn)
       *slash = '\\';
   }
 
-  Curl_safefree(path);
+  free(path);
 
   return CURLE_OK;
 }
index 7852fa1..1a4f66e 100644 (file)
--- a/lib/smb.h
+++ b/lib/smb.h
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 7bd5158..83e51bf 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "curl_gethostname.h"
 #include "curl_sasl.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -105,10 +102,10 @@ static CURLcode smtp_setup_connection(struct connectdata *conn);
 static CURLcode smtp_parse_url_options(struct connectdata *conn);
 static CURLcode smtp_parse_url_path(struct connectdata *conn);
 static CURLcode smtp_parse_custom_request(struct connectdata *conn);
-static CURLcode smtp_calc_sasl_details(struct connectdata *conn,
-                                       const char **mech,
-                                       char **initresp, size_t *len,
-                                       smtpstate *state1, smtpstate *state2);
+static CURLcode smtp_perform_auth(struct connectdata *conn, const char *mech,
+                                  const char *initresp);
+static CURLcode smtp_continue_auth(struct connectdata *conn, const char *resp);
+static void smtp_get_message(char *buffer, char** outptr);
 
 /*
  * SMTP protocol handler.
@@ -213,10 +210,25 @@ static const struct Curl_handler Curl_handler_smtps_proxy = {
 #endif
 #endif
 
+/* SASL parameters for the smtp protocol */
+static const struct SASLproto saslsmtp = {
+  "smtp",                     /* The service name */
+  334,                        /* Code received when continuation is expected */
+  235,                        /* Code to receive upon authentication success */
+  512 - 8,                    /* Maximum initial response length (no max) */
+  smtp_perform_auth,          /* Send authentication command */
+  smtp_continue_auth,         /* Send authentication continuation */
+  smtp_get_message            /* Get SASL response message */
+};
+
 #ifdef USE_SSL
 static void smtp_to_smtps(struct connectdata *conn)
 {
+  /* Change the connection handler */
   conn->handler = &Curl_handler_smtps;
+
+  /* Set the connection's upgraded to TLS flag */
+  conn->tls_upgraded = TRUE;
 }
 #else
 #define smtp_to_smtps(x) Curl_nop_stmt
@@ -309,20 +321,7 @@ static void state(struct connectdata *conn, smtpstate newstate)
     "HELO",
     "STARTTLS",
     "UPGRADETLS",
-    "AUTH_PLAIN",
-    "AUTH_LOGIN",
-    "AUTH_LOGIN_PASSWD",
-    "AUTH_CRAMMD5",
-    "AUTH_DIGESTMD5",
-    "AUTH_DIGESTMD5_RESP",
-    "AUTH_NTLM",
-    "AUTH_NTLM_TYPE2MSG",
-    "AUTH_GSSAPI",
-    "AUTH_GSSAPI_TOKEN",
-    "AUTH_GSSAPI_NO_DATA",
-    "AUTH_XOAUTH2",
-    "AUTH_CANCEL",
-    "AUTH_FINAL",
+    "AUTH",
     "COMMAND",
     "MAIL",
     "RCPT",
@@ -352,11 +351,11 @@ static CURLcode smtp_perform_ehlo(struct connectdata *conn)
   CURLcode result = CURLE_OK;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
 
-  smtpc->authmechs = 0;           /* No known authentication mechanisms yet */
-  smtpc->authused = 0;            /* Clear the authentication mechanism used
-                                     for esmtp connections */
-  smtpc->tls_supported = FALSE;   /* Clear the TLS capability */
-  smtpc->auth_supported = FALSE;  /* Clear the AUTH capability */
+  smtpc->sasl.authmechs = SASL_AUTH_NONE; /* No known auth. mechanism yet */
+  smtpc->sasl.authused = SASL_AUTH_NONE;  /* Clear the authentication mechanism
+                                             used for esmtp connections */
+  smtpc->tls_supported = FALSE;           /* Clear the TLS capability */
+  smtpc->auth_supported = FALSE;          /* Clear the AUTH capability */
 
   /* Send the EHLO command */
   result = Curl_pp_sendf(&smtpc->pp, "EHLO %s", smtpc->domain);
@@ -378,8 +377,8 @@ static CURLcode smtp_perform_helo(struct connectdata *conn)
   CURLcode result = CURLE_OK;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
 
-  smtpc->authused = 0;          /* No authentication mechanism used in smtp
-                                   connections */
+  smtpc->sasl.authused = SASL_AUTH_NONE; /* No authentication mechanism used
+                                            in smtp connections */
 
   /* Send the HELO command */
   result = Curl_pp_sendf(&smtpc->pp, "HELO %s", smtpc->domain);
@@ -445,25 +444,18 @@ static CURLcode smtp_perform_upgrade_tls(struct connectdata *conn)
  */
 static CURLcode smtp_perform_auth(struct connectdata *conn,
                                   const char *mech,
-                                  const char *initresp, size_t len,
-                                  smtpstate state1, smtpstate state2)
+                                  const char *initresp)
 {
   CURLcode result = CURLE_OK;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
 
-  if(initresp && 8 + strlen(mech) + len <= 512) { /* AUTH <mech> ...<crlf> */
+  if(initresp) {                                  /* AUTH <mech> ...<crlf> */
     /* Send the AUTH command with the initial response */
     result = Curl_pp_sendf(&smtpc->pp, "AUTH %s %s", mech, initresp);
-
-    if(!result)
-      state(conn, state2);
   }
   else {
     /* Send the AUTH command */
     result = Curl_pp_sendf(&smtpc->pp, "AUTH %s", mech);
-
-    if(!result)
-      state(conn, state1);
   }
 
   return result;
@@ -471,6 +463,19 @@ static CURLcode smtp_perform_auth(struct connectdata *conn,
 
 /***********************************************************************
  *
+ * smtp_continue_auth()
+ *
+ * Sends SASL continuation data or cancellation.
+ */
+static CURLcode smtp_continue_auth(struct connectdata *conn, const char *resp)
+{
+  struct smtp_conn *smtpc = &conn->proto.smtpc;
+
+  return Curl_pp_sendf(&smtpc->pp, "%s", resp);
+}
+
+/***********************************************************************
+ *
  * smtp_perform_authentication()
  *
  * Initiates the authentication sequence, with the appropriate SASL
@@ -480,31 +485,22 @@ static CURLcode smtp_perform_authentication(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
-  const char *mech = NULL;
-  char *initresp = NULL;
-  size_t len = 0;
-  smtpstate state1 = SMTP_STOP;
-  smtpstate state2 = SMTP_STOP;
+  saslprogress progress;
 
-  /* Check we have a username and password to authenticate with, and the
+  /* Check we have enough data to authenticate with, and the
      server supports authentiation, and end the connect phase if not */
-  if(!conn->bits.user_passwd || !smtpc->auth_supported) {
+  if(!smtpc->auth_supported ||
+      !Curl_sasl_can_authenticate(&smtpc->sasl, conn)) {
     state(conn, SMTP_STOP);
-
     return result;
   }
 
   /* Calculate the SASL login details */
-  result = smtp_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
-                                  &state2);
+  result = Curl_sasl_start(&smtpc->sasl, conn, FALSE, &progress);
 
   if(!result) {
-    if(mech) {
-      /* Perform SASL based authentication */
-      result = smtp_perform_auth(conn, mech, initresp, len, state1, state2);
-
-      Curl_safefree(initresp);
-    }
+    if(progress == SASL_INPROGRESS)
+      state(conn, SMTP_AUTH);
     else {
       /* Other mechanisms not supported */
       infof(conn->data, "No known authentication mechanisms supported!\n");
@@ -571,7 +567,7 @@ static CURLcode smtp_perform_mail(struct connectdata *conn)
     return CURLE_OUT_OF_MEMORY;
 
   /* Calculate the optional AUTH parameter */
-  if(data->set.str[STRING_MAIL_AUTH] && conn->proto.smtpc.authused) {
+  if(data->set.str[STRING_MAIL_AUTH] && conn->proto.smtpc.sasl.authused) {
     if(data->set.str[STRING_MAIL_AUTH][0] != '\0')
       auth = aprintf("%s", data->set.str[STRING_MAIL_AUTH]);
     else
@@ -579,7 +575,7 @@ static CURLcode smtp_perform_mail(struct connectdata *conn)
       auth = strdup("<>");
 
     if(!auth) {
-      Curl_safefree(from);
+      free(from);
 
       return CURLE_OUT_OF_MEMORY;
     }
@@ -590,8 +586,8 @@ static CURLcode smtp_perform_mail(struct connectdata *conn)
     size = aprintf("%" CURL_FORMAT_CURL_OFF_T, data->state.infilesize);
 
     if(!size) {
-      Curl_safefree(from);
-      Curl_safefree(auth);
+      free(from);
+      free(auth);
 
       return CURLE_OUT_OF_MEMORY;
     }
@@ -611,9 +607,9 @@ static CURLcode smtp_perform_mail(struct connectdata *conn)
     result = Curl_pp_sendf(&conn->proto.smtpc.pp,
                            "MAIL FROM:%s SIZE=%s", from, size);
 
-  Curl_safefree(from);
-  Curl_safefree(auth);
-  Curl_safefree(size);
+  free(from);
+  free(auth);
+  free(size);
 
   if(!result)
     state(conn, SMTP_MAIL);
@@ -753,6 +749,9 @@ static CURLcode smtp_state_ehlo_resp(struct connectdata *conn, int smtpcode,
 
       /* Loop through the data line */
       for(;;) {
+        size_t llen;
+        unsigned int mechbit;
+
         while(len &&
               (*line == ' ' || *line == '\t' ||
                *line == '\r' || *line == '\n')) {
@@ -771,22 +770,9 @@ static CURLcode smtp_state_ehlo_resp(struct connectdata *conn, int smtpcode,
           wordlen++;
 
         /* Test the word for a matching authentication mechanism */
-        if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_LOGIN))
-          smtpc->authmechs |= SASL_MECH_LOGIN;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_PLAIN))
-          smtpc->authmechs |= SASL_MECH_PLAIN;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_CRAM_MD5))
-          smtpc->authmechs |= SASL_MECH_CRAM_MD5;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_DIGEST_MD5))
-          smtpc->authmechs |= SASL_MECH_DIGEST_MD5;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_GSSAPI))
-          smtpc->authmechs |= SASL_MECH_GSSAPI;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_EXTERNAL))
-          smtpc->authmechs |= SASL_MECH_EXTERNAL;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_NTLM))
-          smtpc->authmechs |= SASL_MECH_NTLM;
-        else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_XOAUTH2))
-          smtpc->authmechs |= SASL_MECH_XOAUTH2;
+        mechbit = Curl_sasl_decode_mech(line, wordlen, &llen);
+        if(mechbit && llen == wordlen)
+          smtpc->sasl.authmechs |= mechbit;
 
         line += wordlen;
         len -= wordlen;
@@ -835,565 +821,31 @@ static CURLcode smtp_state_helo_resp(struct connectdata *conn, int smtpcode,
   return result;
 }
 
-/* For AUTH PLAIN (without initial response) responses */
-static CURLcode smtp_state_auth_plain_resp(struct connectdata *conn,
-                                           int smtpcode,
-                                           smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *plainauth = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the authorisation message */
-    result = Curl_sasl_create_plain_message(conn->data, conn->user,
-                                            conn->passwd, &plainauth, &len);
-    if(!result && plainauth) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", plainauth);
-
-      if(!result)
-        state(conn, SMTP_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(plainauth);
-
-  return result;
-}
-
-/* For AUTH LOGIN (without initial response) responses */
-static CURLcode smtp_state_auth_login_resp(struct connectdata *conn,
-                                           int smtpcode,
-                                           smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *authuser = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the user message */
-    result = Curl_sasl_create_login_message(conn->data, conn->user,
-                                            &authuser, &len);
-    if(!result && authuser) {
-      /* Send the user */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", authuser);
-
-      if(!result)
-        state(conn, SMTP_AUTH_LOGIN_PASSWD);
-    }
-  }
-
-  Curl_safefree(authuser);
-
-  return result;
-}
-
-/* For AUTH LOGIN user entry responses */
-static CURLcode smtp_state_auth_login_password_resp(struct connectdata *conn,
-                                                    int smtpcode,
-                                                    smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *authpasswd = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the password message */
-    result = Curl_sasl_create_login_message(conn->data, conn->passwd,
-                                            &authpasswd, &len);
-    if(!result && authpasswd) {
-      /* Send the password */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", authpasswd);
-
-      if(!result)
-        state(conn, SMTP_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(authpasswd);
-
-  return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For AUTH CRAM-MD5 responses */
-static CURLcode smtp_state_auth_cram_resp(struct connectdata *conn,
-                                          int smtpcode,
-                                          smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlg = NULL;
-  char *chlg64 = NULL;
-  char *rplyb64 = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    return CURLE_LOGIN_DENIED;
-  }
-
-  /* Get the challenge message */
-  smtp_get_message(data->state.buffer, &chlg64);
-
-  /* Decode the challenge message */
-  result = Curl_sasl_decode_cram_md5_message(chlg64, &chlg, &len);
-  if(result) {
-    /* Send the cancellation */
-    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
-    if(!result)
-      state(conn, SMTP_AUTH_CANCEL);
-  }
-  else {
-    /* Create the response message */
-    result = Curl_sasl_create_cram_md5_message(data, chlg, conn->user,
-                                               conn->passwd, &rplyb64, &len);
-    if(!result && rplyb64) {
-      /* Send the response */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", rplyb64);
-
-      if(!result)
-        state(conn, SMTP_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(chlg);
-  Curl_safefree(rplyb64);
-
-  return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge responses */
-static CURLcode smtp_state_auth_digest_resp(struct connectdata *conn,
-                                            int smtpcode,
-                                            smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlg64 = NULL;
-  char *rplyb64 = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    return CURLE_LOGIN_DENIED;
-  }
-
-  /* Get the challenge message */
-  smtp_get_message(data->state.buffer, &chlg64);
-
-  /* Create the response message */
-  result = Curl_sasl_create_digest_md5_message(data, chlg64,
-                                               conn->user, conn->passwd,
-                                               "smtp", &rplyb64, &len);
-  if(result) {
-    if(result == CURLE_BAD_CONTENT_ENCODING) {
-      /* Send the cancellation */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
-      if(!result)
-        state(conn, SMTP_AUTH_CANCEL);
-    }
-  }
-  else {
-    /* Send the response */
-    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", rplyb64);
-
-    if(!result)
-      state(conn, SMTP_AUTH_DIGESTMD5_RESP);
-  }
-
-  Curl_safefree(rplyb64);
-
-  return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge-response responses */
-static CURLcode smtp_state_auth_digest_resp_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 != 334) {
-    failf(data, "Authentication failed: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Send an empty response */
-    result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "");
-
-    if(!result)
-      state(conn, SMTP_AUTH_FINAL);
-  }
-
-  return result;
-}
-
-#endif
-
-#ifdef USE_NTLM
-/* For AUTH NTLM (without initial response) responses */
-static CURLcode smtp_state_auth_ntlm_resp(struct connectdata *conn,
-                                          int smtpcode,
-                                          smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *type1msg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the type-1 message */
-    result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                 &conn->ntlm,
-                                                 &type1msg, &len);
-    if(!result && type1msg) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", type1msg);
-
-      if(!result)
-        state(conn, SMTP_AUTH_NTLM_TYPE2MSG);
-    }
-  }
-
-  Curl_safefree(type1msg);
-
-  return result;
-}
-
-/* For NTLM type-2 responses (sent in reponse to our type-1 message) */
-static CURLcode smtp_state_auth_ntlm_type2msg_resp(struct connectdata *conn,
-                                                   int smtpcode,
-                                                   smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *type2msg = NULL;
-  char *type3msg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the type-2 message */
-    smtp_get_message(data->state.buffer, &type2msg);
-
-    /* Decode the type-2 message */
-    result = Curl_sasl_decode_ntlm_type2_message(data, type2msg, &conn->ntlm);
-    if(result) {
-      /* Send the cancellation */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
-      if(!result)
-        state(conn, SMTP_AUTH_CANCEL);
-    }
-    else {
-      /* Create the type-3 message */
-      result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
-                                                   conn->passwd, &conn->ntlm,
-                                                   &type3msg, &len);
-      if(!result && type3msg) {
-        /* Send the message */
-        result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", type3msg);
-
-        if(!result)
-          state(conn, SMTP_AUTH_FINAL);
-      }
-    }
-  }
-
-  Curl_safefree(type3msg);
-
-  return result;
-}
-#endif
-
-#if defined(USE_KERBEROS5)
-/* For AUTH GSSAPI (without initial response) responses */
-static CURLcode smtp_state_auth_gssapi_resp(struct connectdata *conn,
-                                            int smtpcode,
-                                            smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct smtp_conn *smtpc = &conn->proto.smtpc;
-  char *respmsg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the initial response message */
-    result = Curl_sasl_create_gssapi_user_message(data, conn->user,
-                                                  conn->passwd, "smtp",
-                                                  smtpc->mutual_auth, NULL,
-                                                  &conn->krb5,
-                                                  &respmsg, &len);
-    if(!result && respmsg) {
-      /* Send the message */
-      result = Curl_pp_sendf(&smtpc->pp, "%s", respmsg);
-
-      if(!result)
-        state(conn, SMTP_AUTH_GSSAPI_TOKEN);
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-
-/* For AUTH GSSAPI user token responses */
-static CURLcode smtp_state_auth_gssapi_token_resp(struct connectdata *conn,
-                                                  int smtpcode,
-                                                  smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct smtp_conn *smtpc = &conn->proto.smtpc;
-  char *chlgmsg = NULL;
-  char *respmsg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    smtp_get_message(data->state.buffer, &chlgmsg);
-
-    if(smtpc->mutual_auth)
-      /* Decode the user token challenge and create the optional response
-         message */
-      result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
-                                                    smtpc->mutual_auth,
-                                                    chlgmsg, &conn->krb5,
-                                                    &respmsg, &len);
-    else
-      /* Decode the security challenge and create the response message */
-      result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
-                                                        &conn->krb5,
-                                                        &respmsg, &len);
-
-    if(result) {
-      if(result == CURLE_BAD_CONTENT_ENCODING) {
-        /* Send the cancellation */
-        result = Curl_pp_sendf(&smtpc->pp, "%s", "*");
-
-        if(!result)
-          state(conn, SMTP_AUTH_CANCEL);
-      }
-    }
-    else {
-      /* Send the response */
-      if(respmsg)
-        result = Curl_pp_sendf(&smtpc->pp, "%s", respmsg);
-      else
-        result = Curl_pp_sendf(&smtpc->pp, "%s", "");
-
-      if(!result)
-        state(conn, (smtpc->mutual_auth ? SMTP_AUTH_GSSAPI_NO_DATA :
-                                          SMTP_AUTH_FINAL));
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-
-/* For AUTH GSSAPI no data responses */
-static CURLcode smtp_state_auth_gssapi_no_data_resp(struct connectdata *conn,
-                                                    int smtpcode,
-                                                    smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  char *chlgmsg = NULL;
-  char *respmsg = NULL;
-  size_t len = 0;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Get the challenge message */
-    smtp_get_message(data->state.buffer, &chlgmsg);
-
-    /* Decode the security challenge and create the response message */
-    result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
-                                                      &conn->krb5,
-                                                      &respmsg, &len);
-    if(result) {
-      if(result == CURLE_BAD_CONTENT_ENCODING) {
-        /* Send the cancellation */
-        result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
-        if(!result)
-          state(conn, SMTP_AUTH_CANCEL);
-      }
-    }
-    else {
-      /* Send the response */
-      if(respmsg) {
-        result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", respmsg);
-
-        if(!result)
-          state(conn, SMTP_AUTH_FINAL);
-      }
-    }
-  }
-
-  Curl_safefree(respmsg);
-
-  return result;
-}
-#endif
-
-/* For AUTH XOAUTH2 (without initial response) responses */
-static CURLcode smtp_state_auth_xoauth2_resp(struct connectdata *conn,
-                                             int smtpcode, smtpstate instate)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  size_t len = 0;
-  char *xoauth = NULL;
-
-  (void)instate; /* no use for this yet */
-
-  if(smtpcode != 334) {
-    failf(data, "Access denied: %d", smtpcode);
-    result = CURLE_LOGIN_DENIED;
-  }
-  else {
-    /* Create the authorisation message */
-    result = Curl_sasl_create_xoauth2_message(conn->data, conn->user,
-                                              conn->xoauth2_bearer,
-                                              &xoauth, &len);
-    if(!result && xoauth) {
-      /* Send the message */
-      result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", xoauth);
-
-      if(!result)
-        state(conn, SMTP_AUTH_FINAL);
-    }
-  }
-
-  Curl_safefree(xoauth);
-
-  return result;
-}
-
-/* For AUTH cancellation responses */
-static CURLcode smtp_state_auth_cancel_resp(struct connectdata *conn,
-                                            int smtpcode,
-                                            smtpstate instate)
+/* For SASL authentication responses */
+static CURLcode smtp_state_auth_resp(struct connectdata *conn,
+                                     int smtpcode,
+                                     smtpstate instate)
 {
   CURLcode result = CURLE_OK;
   struct SessionHandle *data = conn->data;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
-  const char *mech = NULL;
-  char *initresp = NULL;
-  size_t len = 0;
-  smtpstate state1 = SMTP_STOP;
-  smtpstate state2 = SMTP_STOP;
+  saslprogress progress;
 
-  (void)smtpcode;
   (void)instate; /* no use for this yet */
 
-  /* Remove the offending mechanism from the supported list */
-  smtpc->authmechs ^= smtpc->authused;
-
-  /* Calculate alternative SASL login details */
-  result = smtp_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
-                                  &state2);
-
-  if(!result) {
-    /* Do we have any mechanisms left? */
-    if(mech) {
-      /* Retry SASL based authentication */
-      result = smtp_perform_auth(conn, mech, initresp, len, state1, state2);
-
-      Curl_safefree(initresp);
-    }
-    else {
+  result = Curl_sasl_continue(&smtpc->sasl, conn, smtpcode, &progress);
+  if(!result)
+    switch(progress) {
+    case SASL_DONE:
+      state(conn, SMTP_STOP);  /* Authenticated */
+      break;
+    case SASL_IDLE:            /* No mechanism left after cancellation */
       failf(data, "Authentication cancelled");
-
       result = CURLE_LOGIN_DENIED;
+      break;
+    default:
+      break;
     }
-  }
-
-  return result;
-}
-
-/* For final responses in the AUTH sequence */
-static CURLcode smtp_state_auth_final_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
-    /* End of connect phase */
-    state(conn, SMTP_STOP);
 
   return result;
 }
@@ -1591,69 +1043,8 @@ static CURLcode smtp_statemach_act(struct connectdata *conn)
       result = smtp_state_starttls_resp(conn, smtpcode, smtpc->state);
       break;
 
-    case SMTP_AUTH_PLAIN:
-      result = smtp_state_auth_plain_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_LOGIN:
-      result = smtp_state_auth_login_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_LOGIN_PASSWD:
-      result = smtp_state_auth_login_password_resp(conn, smtpcode,
-                                                   smtpc->state);
-      break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-    case SMTP_AUTH_CRAMMD5:
-      result = smtp_state_auth_cram_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_DIGESTMD5:
-      result = smtp_state_auth_digest_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_DIGESTMD5_RESP:
-      result = smtp_state_auth_digest_resp_resp(conn, smtpcode, smtpc->state);
-      break;
-#endif
-
-#ifdef USE_NTLM
-    case SMTP_AUTH_NTLM:
-      result = smtp_state_auth_ntlm_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_NTLM_TYPE2MSG:
-      result = smtp_state_auth_ntlm_type2msg_resp(conn, smtpcode,
-                                                  smtpc->state);
-      break;
-#endif
-
-#if defined(USE_KERBEROS5)
-    case SMTP_AUTH_GSSAPI:
-      result = smtp_state_auth_gssapi_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_GSSAPI_TOKEN:
-      result = smtp_state_auth_gssapi_token_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_GSSAPI_NO_DATA:
-      result = smtp_state_auth_gssapi_no_data_resp(conn, smtpcode,
-                                                   smtpc->state);
-      break;
-#endif
-
-    case SMTP_AUTH_XOAUTH2:
-      result = smtp_state_auth_xoauth2_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_CANCEL:
-      result = smtp_state_auth_cancel_resp(conn, smtpcode, smtpc->state);
-      break;
-
-    case SMTP_AUTH_FINAL:
-      result = smtp_state_auth_final_resp(conn, smtpcode, smtpc->state);
+    case SMTP_AUTH:
+      result = smtp_state_auth_resp(conn, smtpcode, smtpc->state);
       break;
 
     case SMTP_COMMAND:
@@ -1766,8 +1157,8 @@ static CURLcode smtp_connect(struct connectdata *conn, bool *done)
   pp->endofresp = smtp_endofresp;
   pp->conn = conn;
 
-  /* Set the default preferred authentication mechanism */
-  smtpc->prefmech = SASL_AUTH_ANY;
+  /* Initialize the SASL storage */
+  Curl_sasl_init(&smtpc->sasl, &saslsmtp);
 
   /* Initialise the pingpong layer */
   Curl_pp_init(pp);
@@ -1985,7 +1376,7 @@ static CURLcode smtp_disconnect(struct connectdata *conn, bool dead_connection)
   Curl_pp_disconnect(&smtpc->pp);
 
   /* Cleanup the SASL module */
-  Curl_sasl_cleanup(conn, smtpc->authused);
+  Curl_sasl_cleanup(conn, smtpc->sasl.authused);
 
   /* Cleanup our connection based variables */
   Curl_safefree(smtpc->domain);
@@ -2063,6 +1454,10 @@ static CURLcode smtp_setup_connection(struct connectdata *conn)
   struct SessionHandle *data = conn->data;
   CURLcode result;
 
+  /* Clear the TLS upgraded flag */
+  conn->tls_upgraded = FALSE;
+
+  /* Set up the proxy if necessary */
   if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
     /* Unless we have asked to tunnel SMTP operations through the proxy, we
        switch and use HTTP operations only */
@@ -2106,52 +1501,30 @@ static CURLcode smtp_parse_url_options(struct connectdata *conn)
 {
   CURLcode result = CURLE_OK;
   struct smtp_conn *smtpc = &conn->proto.smtpc;
-  const char *options = conn->options;
-  const char *ptr = options;
-  bool reset = TRUE;
+  const char *ptr = conn->options;
+
+  smtpc->sasl.resetprefs = TRUE;
 
-  while(ptr && *ptr) {
+  while(!result && ptr && *ptr) {
     const char *key = ptr;
+    const char *value;
 
     while(*ptr && *ptr != '=')
         ptr++;
 
-    if(strnequal(key, "AUTH", 4)) {
-      size_t len = 0;
-      const char *value = ++ptr;
+    value = ptr + 1;
 
-      if(reset) {
-        reset = FALSE;
-        smtpc->prefmech = SASL_AUTH_NONE;
-      }
-
-      while(*ptr && *ptr != ';') {
-        ptr++;
-        len++;
-      }
+    while(*ptr && *ptr != ';')
+      ptr++;
 
-      if(strnequal(value, "*", len))
-        smtpc->prefmech = SASL_AUTH_ANY;
-      else if(strnequal(value, SASL_MECH_STRING_LOGIN, len))
-        smtpc->prefmech |= SASL_MECH_LOGIN;
-      else if(strnequal(value, SASL_MECH_STRING_PLAIN, len))
-        smtpc->prefmech |= SASL_MECH_PLAIN;
-      else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len))
-        smtpc->prefmech |= SASL_MECH_CRAM_MD5;
-      else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len))
-        smtpc->prefmech |= SASL_MECH_DIGEST_MD5;
-      else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len))
-        smtpc->prefmech |= SASL_MECH_GSSAPI;
-      else if(strnequal(value, SASL_MECH_STRING_NTLM, len))
-        smtpc->prefmech |= SASL_MECH_NTLM;
-      else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len))
-        smtpc->prefmech |= SASL_MECH_XOAUTH2;
-
-      if(*ptr == ';')
-        ptr++;
-    }
+    if(strnequal(key, "AUTH=", 5))
+      result = Curl_sasl_parse_url_auth_option(&smtpc->sasl,
+                                               value, ptr - value);
     else
       result = CURLE_URL_MALFORMAT;
+
+    if(*ptr == ';')
+      ptr++;
   }
 
   return result;
@@ -2203,110 +1576,6 @@ static CURLcode smtp_parse_custom_request(struct connectdata *conn)
   return result;
 }
 
-/***********************************************************************
- *
- * smtp_calc_sasl_details()
- *
- * Calculate the required login details for SASL authentication.
- */
-static CURLcode smtp_calc_sasl_details(struct connectdata *conn,
-                                       const char **mech,
-                                       char **initresp, size_t *len,
-                                       smtpstate *state1, smtpstate *state2)
-{
-  CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
-  struct smtp_conn *smtpc = &conn->proto.smtpc;
-
-  /* Calculate the supported authentication mechanism, by decreasing order of
-     security, as well as the initial response where appropriate */
-#if defined(USE_KERBEROS5)
-  if((smtpc->authmechs & SASL_MECH_GSSAPI) &&
-     (smtpc->prefmech & SASL_MECH_GSSAPI)) {
-    smtpc->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
-
-    *mech = SASL_MECH_STRING_GSSAPI;
-    *state1 = SMTP_AUTH_GSSAPI;
-    *state2 = SMTP_AUTH_GSSAPI_TOKEN;
-    smtpc->authused = SASL_MECH_GSSAPI;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_gssapi_user_message(data, conn->user,
-                                                    conn->passwd, "smtp",
-                                                    smtpc->mutual_auth,
-                                                    NULL, &conn->krb5,
-                                                    initresp, len);
-    }
-  else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-  if((smtpc->authmechs & SASL_MECH_DIGEST_MD5) &&
-     (smtpc->prefmech & SASL_MECH_DIGEST_MD5)) {
-    *mech = SASL_MECH_STRING_DIGEST_MD5;
-    *state1 = SMTP_AUTH_DIGESTMD5;
-    smtpc->authused = SASL_MECH_DIGEST_MD5;
-  }
-  else if((smtpc->authmechs & SASL_MECH_CRAM_MD5) &&
-          (smtpc->prefmech & SASL_MECH_CRAM_MD5)) {
-    *mech = SASL_MECH_STRING_CRAM_MD5;
-    *state1 = SMTP_AUTH_CRAMMD5;
-    smtpc->authused = SASL_MECH_CRAM_MD5;
-  }
-  else
-#endif
-#ifdef USE_NTLM
-  if((smtpc->authmechs & SASL_MECH_NTLM) &&
-     (smtpc->prefmech & SASL_MECH_NTLM)) {
-    *mech = SASL_MECH_STRING_NTLM;
-    *state1 = SMTP_AUTH_NTLM;
-    *state2 = SMTP_AUTH_NTLM_TYPE2MSG;
-    smtpc->authused = SASL_MECH_NTLM;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
-                                                   &conn->ntlm,
-                                                   initresp, len);
-    }
-  else
-#endif
-  if(((smtpc->authmechs & SASL_MECH_XOAUTH2) &&
-      (smtpc->prefmech & SASL_MECH_XOAUTH2) &&
-      (smtpc->prefmech != SASL_AUTH_ANY)) || conn->xoauth2_bearer) {
-    *mech = SASL_MECH_STRING_XOAUTH2;
-    *state1 = SMTP_AUTH_XOAUTH2;
-    *state2 = SMTP_AUTH_FINAL;
-    smtpc->authused = SASL_MECH_XOAUTH2;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_xoauth2_message(data, conn->user,
-                                                conn->xoauth2_bearer,
-                                                initresp, len);
-  }
-  else if((smtpc->authmechs & SASL_MECH_LOGIN) &&
-          (smtpc->prefmech & SASL_MECH_LOGIN)) {
-    *mech = SASL_MECH_STRING_LOGIN;
-    *state1 = SMTP_AUTH_LOGIN;
-    *state2 = SMTP_AUTH_LOGIN_PASSWD;
-    smtpc->authused = SASL_MECH_LOGIN;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_login_message(data, conn->user, initresp, len);
-  }
-  else if((smtpc->authmechs & SASL_MECH_PLAIN) &&
-          (smtpc->prefmech & SASL_MECH_PLAIN)) {
-    *mech = SASL_MECH_STRING_PLAIN;
-    *state1 = SMTP_AUTH_PLAIN;
-    *state2 = SMTP_AUTH_FINAL;
-    smtpc->authused = SASL_MECH_PLAIN;
-
-    if(data->set.sasl_ir)
-      result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
-                                              initresp, len);
-  }
-
-  return result;
-}
-
 CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
 {
   /* When sending a SMTP payload we must detect CRLF. sequences making sure
@@ -2396,13 +1665,13 @@ CURLcode Curl_smtp_escape_eob(struct connectdata *conn, const ssize_t nread)
     data->state.scratch = scratch;
 
     /* Free the old scratch buffer */
-    Curl_safefree(oldscratch);
+    free(oldscratch);
 
     /* Set the new amount too */
     data->req.upload_present = si;
   }
   else
-    Curl_safefree(newscratch);
+    free(newscratch);
 
   return CURLE_OK;
 }
index 7a95efe..6ebec18 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -23,6 +23,7 @@
  ***************************************************************************/
 
 #include "pingpong.h"
+#include "curl_sasl.h"
 
 /****************************************************************************
  * SMTP unique setup
@@ -36,20 +37,7 @@ typedef enum {
   SMTP_STARTTLS,
   SMTP_UPGRADETLS,  /* asynchronously upgrade the connection to SSL/TLS
                        (multi mode only) */
-  SMTP_AUTH_PLAIN,
-  SMTP_AUTH_LOGIN,
-  SMTP_AUTH_LOGIN_PASSWD,
-  SMTP_AUTH_CRAMMD5,
-  SMTP_AUTH_DIGESTMD5,
-  SMTP_AUTH_DIGESTMD5_RESP,
-  SMTP_AUTH_NTLM,
-  SMTP_AUTH_NTLM_TYPE2MSG,
-  SMTP_AUTH_GSSAPI,
-  SMTP_AUTH_GSSAPI_TOKEN,
-  SMTP_AUTH_GSSAPI_NO_DATA,
-  SMTP_AUTH_XOAUTH2,
-  SMTP_AUTH_CANCEL,
-  SMTP_AUTH_FINAL,
+  SMTP_AUTH,
   SMTP_COMMAND,     /* VRFY, EXPN, NOOP, RSET and HELP */
   SMTP_MAIL,        /* MAIL FROM */
   SMTP_RCPT,        /* RCPT TO */
@@ -79,14 +67,11 @@ struct smtp_conn {
   smtpstate state;         /* Always use smtp.c:state() to change state! */
   bool ssldone;            /* Is connect() over SSL done? */
   char *domain;            /* Client address/name to send in the EHLO */
-  unsigned int authmechs;  /* Accepted authentication mechanisms */
-  unsigned int prefmech;   /* Preferred authentication mechanism */
-  unsigned int authused;   /* Auth mechanism used for the connection */
+  struct SASL sasl;        /* SASL-related storage */
   bool tls_supported;      /* StartTLS capability supported by server */
   bool size_supported;     /* If server supports SIZE extension according to
                               RFC 1870 */
   bool auth_supported;     /* AUTH capability supported by server */
-  bool mutual_auth;        /* Mutual authentication enabled (GSSAPI only) */
 };
 
 extern const struct Curl_handler Curl_handler_smtp;
index 6a2151c..95ba4c3 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 6c6585b..e7d42e7 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -300,8 +300,8 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
             ", request rejected or failed.",
             (unsigned char)socksreq[4], (unsigned char)socksreq[5],
             (unsigned char)socksreq[6], (unsigned char)socksreq[7],
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
       return CURLE_COULDNT_CONNECT;
     case 92:
       failf(data,
@@ -310,8 +310,8 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
             "identd on the client.",
             (unsigned char)socksreq[4], (unsigned char)socksreq[5],
             (unsigned char)socksreq[6], (unsigned char)socksreq[7],
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
       return CURLE_COULDNT_CONNECT;
     case 93:
       failf(data,
@@ -320,8 +320,8 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
             "report different user-ids.",
             (unsigned char)socksreq[4], (unsigned char)socksreq[5],
             (unsigned char)socksreq[6], (unsigned char)socksreq[7],
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
       return CURLE_COULDNT_CONNECT;
     default:
       failf(data,
@@ -329,8 +329,8 @@ CURLcode Curl_SOCKS4(const char *proxy_name,
             ", Unknown.",
             (unsigned char)socksreq[4], (unsigned char)socksreq[5],
             (unsigned char)socksreq[6], (unsigned char)socksreq[7],
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
       return CURLE_COULDNT_CONNECT;
     }
   }
@@ -382,7 +382,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
 
   /* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */
   if(!socks5_resolve_local && hostname_len > 255) {
-    infof(conn->data,"SOCKS5: server resolving disabled for hostnames of "
+    infof(conn->data, "SOCKS5: server resolving disabled for hostnames of "
           "length > 255 [actual len=%zu]\n", hostname_len);
     socks5_resolve_local = TRUE;
   }
@@ -603,7 +603,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
       if(hp->ai_family == AF_INET) {
         socksreq[len++] = 1; /* ATYP: IPv4 = 1 */
 
-        saddr_in = (struct sockaddr_in*)hp->ai_addr;
+        saddr_in = (struct sockaddr_in*)(void*)hp->ai_addr;
         for(i = 0; i < 4; i++) {
           socksreq[len++] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[i];
           infof(data, "%d\n", socksreq[len-1]);
@@ -613,7 +613,7 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
       else if(hp->ai_family == AF_INET6) {
         socksreq[len++] = 4; /* ATYP: IPv6 = 4 */
 
-        saddr_in6 = (struct sockaddr_in6*)hp->ai_addr;
+        saddr_in6 = (struct sockaddr_in6*)(void*)hp->ai_addr;
         for(i = 0; i < 16; i++) {
           socksreq[len++] = ((unsigned char*)&saddr_in6->sin6_addr.s6_addr)[i];
         }
@@ -674,15 +674,15 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
             "Can't complete SOCKS5 connection to %d.%d.%d.%d:%d. (%d)",
             (unsigned char)socksreq[4], (unsigned char)socksreq[5],
             (unsigned char)socksreq[6], (unsigned char)socksreq[7],
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
     }
     else if(socksreq[3] == 3) {
       failf(data,
             "Can't complete SOCKS5 connection to %s:%d. (%d)",
             hostname,
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
     }
     else if(socksreq[3] == 4) {
       failf(data,
@@ -696,8 +696,8 @@ CURLcode Curl_SOCKS5(const char *proxy_name,
             (unsigned char)socksreq[14], (unsigned char)socksreq[15],
             (unsigned char)socksreq[16], (unsigned char)socksreq[17],
             (unsigned char)socksreq[18], (unsigned char)socksreq[19],
-            ((socksreq[8] << 8) | socksreq[9]),
-            socksreq[1]);
+            (((unsigned char)socksreq[8] << 8) | (unsigned char)socksreq[9]),
+            (unsigned char)socksreq[1]);
     }
     return CURLE_COULDNT_CONNECT;
   }
index 29e3bf0..a44ada6 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index f195c1a..09457ae 100644 (file)
@@ -6,11 +6,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2009, 2011, Markus Moeller, <markus_moeller@compuserve.com>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, 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.
+ * are also available at https://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
 
 #include "curl_setup.h"
 
-#ifndef CURL_DISABLE_PROXY
-
-#ifdef HAVE_GSSAPI
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
-#ifndef gss_nt_service_name
-#define gss_nt_service_name GSS_C_NT_HOSTBASED_SERVICE
-#endif
+#if defined(HAVE_GSSAPI) && !defined(CURL_DISABLE_PROXY)
 
 #include "curl_gssapi.h"
 #include "urldata.h"
 #include "timeval.h"
 #include "socks.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -60,7 +48,7 @@ static int check_gss_err(struct SessionHandle *data,
                          const char* function)
 {
   if(GSS_ERROR(major_status)) {
-    OM_uint32 maj_stat,min_stat;
+    OM_uint32 maj_stat, min_stat;
     OM_uint32 msg_ctx = 0;
     gss_buffer_desc status_string;
     char buf[1024];
@@ -104,10 +92,10 @@ static int check_gss_err(struct SessionHandle *data,
       gss_release_buffer(&min_stat, &status_string);
     }
     failf(data, "GSS-API error: %s failed:\n%s", function, buf);
-    return(1);
+    return 1;
   }
 
-  return(0);
+  return 0;
 }
 
 CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
@@ -143,7 +131,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
    */
 
   /* prepare service name */
-  if(strchr(serviceptr,'/')) {
+  if(strchr(serviceptr, '/')) {
     service.value = malloc(strlen(serviceptr));
     if(!service.value)
       return CURLE_OUT_OF_MEMORY;
@@ -162,13 +150,13 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
              serviceptr, conn->proxy.name);
 
     gss_major_status = gss_import_name(&gss_minor_status, &service,
-                                       gss_nt_service_name, &server);
+                                       GSS_C_NT_HOSTBASED_SERVICE, &server);
   }
 
   gss_release_buffer(&gss_status, &service); /* clear allocated memory */
 
-  if(check_gss_err(data,gss_major_status,
-                   gss_minor_status,"gss_import_name()")) {
+  if(check_gss_err(data, gss_major_status,
+                   gss_minor_status, "gss_import_name()")) {
     failf(data, "Failed to create service name.");
     gss_release_name(&gss_status, &server);
     return CURLE_COULDNT_CONNECT;
@@ -190,8 +178,8 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
 
     if(gss_token != GSS_C_NO_BUFFER)
       gss_release_buffer(&gss_status, &gss_recv_token);
-    if(check_gss_err(data,gss_major_status,
-                     gss_minor_status,"gss_init_sec_context")) {
+    if(check_gss_err(data, gss_major_status,
+                     gss_minor_status, "gss_init_sec_context")) {
       gss_release_name(&gss_status, &server);
       gss_release_buffer(&gss_status, &gss_recv_token);
       gss_release_buffer(&gss_status, &gss_send_token);
@@ -204,7 +192,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       socksreq[0] = 1;    /* GSS-API subnegotiation version */
       socksreq[1] = 1;    /* authentication message type */
       us_length = htons((short)gss_send_token.length);
-      memcpy(socksreq+2,&us_length,sizeof(short));
+      memcpy(socksreq+2, &us_length, sizeof(short));
 
       code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
       if(code || (4 != written)) {
@@ -303,8 +291,8 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
   gss_major_status = gss_inquire_context (&gss_minor_status, gss_context,
                                           &gss_client_name, NULL, NULL, NULL,
                                           NULL, NULL, NULL);
-  if(check_gss_err(data,gss_major_status,
-                   gss_minor_status,"gss_inquire_context")) {
+  if(check_gss_err(data, gss_major_status,
+                   gss_minor_status, "gss_inquire_context")) {
     gss_delete_sec_context(&gss_status, &gss_context, NULL);
     gss_release_name(&gss_status, &gss_client_name);
     failf(data, "Failed to determine user name.");
@@ -312,8 +300,8 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
   }
   gss_major_status = gss_display_name(&gss_minor_status, gss_client_name,
                                       &gss_send_token, NULL);
-  if(check_gss_err(data,gss_major_status,
-                   gss_minor_status,"gss_display_name")) {
+  if(check_gss_err(data, gss_major_status,
+                   gss_minor_status, "gss_display_name")) {
     gss_delete_sec_context(&gss_status, &gss_context, NULL);
     gss_release_name(&gss_status, &gss_client_name);
     gss_release_buffer(&gss_status, &gss_send_token);
@@ -384,7 +372,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
    */
   if(data->set.socks5_gssapi_nec) {
     us_length = htons((short)1);
-    memcpy(socksreq+2,&us_length,sizeof(short));
+    memcpy(socksreq+2, &us_length, sizeof(short));
   }
   else {
     gss_send_token.length = 1;
@@ -399,7 +387,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
                                 GSS_C_QOP_DEFAULT, &gss_send_token,
                                 &gss_conf_state, &gss_w_token);
 
-    if(check_gss_err(data,gss_major_status,gss_minor_status,"gss_wrap")) {
+    if(check_gss_err(data, gss_major_status, gss_minor_status, "gss_wrap")) {
       gss_release_buffer(&gss_status, &gss_send_token);
       gss_release_buffer(&gss_status, &gss_w_token);
       gss_delete_sec_context(&gss_status, &gss_context, NULL);
@@ -409,7 +397,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     gss_release_buffer(&gss_status, &gss_send_token);
 
     us_length = htons((short)gss_w_token.length);
-    memcpy(socksreq+2,&us_length,sizeof(short));
+    memcpy(socksreq+2, &us_length, sizeof(short));
   }
 
   code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
@@ -487,7 +475,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
                                   &gss_recv_token, &gss_w_token,
                                   0, GSS_C_QOP_DEFAULT);
 
-    if(check_gss_err(data,gss_major_status,gss_minor_status,"gss_unwrap")) {
+    if(check_gss_err(data, gss_major_status, gss_minor_status, "gss_unwrap")) {
       gss_release_buffer(&gss_status, &gss_recv_token);
       gss_release_buffer(&gss_status, &gss_w_token);
       gss_delete_sec_context(&gss_status, &gss_context, NULL);
@@ -504,7 +492,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       return CURLE_COULDNT_CONNECT;
     }
 
-    memcpy(socksreq,gss_w_token.value,gss_w_token.length);
+    memcpy(socksreq, gss_w_token.value, gss_w_token.length);
     gss_release_buffer(&gss_status, &gss_w_token);
   }
   else {
@@ -516,7 +504,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       return CURLE_COULDNT_CONNECT;
     }
 
-    memcpy(socksreq,gss_recv_token.value,gss_recv_token.length);
+    memcpy(socksreq, gss_recv_token.value, gss_recv_token.length);
     gss_release_buffer(&gss_status, &gss_recv_token);
   }
 
@@ -530,6 +518,5 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
 
   return CURLE_OK;
 }
-#endif
 
-#endif /* CURL_DISABLE_PROXY */
+#endif /* HAVE_GSSAPI && !CURL_DISABLE_PROXY */
index 0158627..356772e 100644 (file)
@@ -5,12 +5,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2009, 2011, Markus Moeller, <markus_moeller@compuserve.com>
- * Copyright (C) 2012 - 2014, 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.
+ * are also available at https://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
 #include "curl_sspi.h"
 #include "curl_multibyte.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -107,8 +104,8 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     service_name = malloc(strlen(service) + strlen(conn->proxy.name) + 2);
     if(!service_name)
       return CURLE_OUT_OF_MEMORY;
-    snprintf(service_name,strlen(service) +strlen(conn->proxy.name)+2,"%s/%s",
-             service,conn->proxy.name);
+    snprintf(service_name, strlen(service) +strlen(conn->proxy.name)+2,
+             "%s/%s", service, conn->proxy.name);
   }
 
   input_desc.cBuffers = 1;
@@ -146,7 +143,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
 
   if(check_sspi_err(conn, status, "AcquireCredentialsHandle")) {
     failf(data, "Failed to acquire credentials.");
-    Curl_safefree(service_name);
+    free(service_name);
     s_pSecFn->FreeCredentialsHandle(&cred_handle);
     return CURLE_COULDNT_CONNECT;
   }
@@ -185,7 +182,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     }
 
     if(check_sspi_err(conn, status, "InitializeSecurityContext")) {
-      Curl_safefree(service_name);
+      free(service_name);
       s_pSecFn->FreeCredentialsHandle(&cred_handle);
       s_pSecFn->DeleteSecurityContext(&sspi_context);
       if(sspi_recv_token.pvBuffer)
@@ -203,7 +200,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
       if(code || (4 != written)) {
         failf(data, "Failed to send SSPI authentication request.");
-        Curl_safefree(service_name);
+        free(service_name);
         if(sspi_send_token.pvBuffer)
           s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
         if(sspi_recv_token.pvBuffer)
@@ -217,7 +214,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
                               sspi_send_token.cbBuffer, &written);
       if(code || (sspi_send_token.cbBuffer != (size_t)written)) {
         failf(data, "Failed to send SSPI authentication token.");
-        Curl_safefree(service_name);
+        free(service_name);
         if(sspi_send_token.pvBuffer)
           s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
         if(sspi_recv_token.pvBuffer)
@@ -257,7 +254,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     result = Curl_blockread_all(conn, sock, (char *)socksreq, 4, &actualread);
     if(result || (actualread != 4)) {
       failf(data, "Failed to receive SSPI authentication response.");
-      Curl_safefree(service_name);
+      free(service_name);
       s_pSecFn->FreeCredentialsHandle(&cred_handle);
       s_pSecFn->DeleteSecurityContext(&sspi_context);
       return CURLE_COULDNT_CONNECT;
@@ -267,7 +264,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     if(socksreq[1] == 255) { /* status / message type */
       failf(data, "User was rejected by the SOCKS5 server (%u %u).",
             (unsigned int)socksreq[0], (unsigned int)socksreq[1]);
-      Curl_safefree(service_name);
+      free(service_name);
       s_pSecFn->FreeCredentialsHandle(&cred_handle);
       s_pSecFn->DeleteSecurityContext(&sspi_context);
       return CURLE_COULDNT_CONNECT;
@@ -276,7 +273,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     if(socksreq[1] != 1) { /* status / messgae type */
       failf(data, "Invalid SSPI authentication response type (%u %u).",
             (unsigned int)socksreq[0], (unsigned int)socksreq[1]);
-      Curl_safefree(service_name);
+      free(service_name);
       s_pSecFn->FreeCredentialsHandle(&cred_handle);
       s_pSecFn->DeleteSecurityContext(&sspi_context);
       return CURLE_COULDNT_CONNECT;
@@ -289,7 +286,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     sspi_recv_token.pvBuffer = malloc(us_length);
 
     if(!sspi_recv_token.pvBuffer) {
-      Curl_safefree(service_name);
+      free(service_name);
       s_pSecFn->FreeCredentialsHandle(&cred_handle);
       s_pSecFn->DeleteSecurityContext(&sspi_context);
       return CURLE_OUT_OF_MEMORY;
@@ -299,7 +296,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
 
     if(result || (actualread != us_length)) {
       failf(data, "Failed to receive SSPI authentication token.");
-      Curl_safefree(service_name);
+      free(service_name);
       if(sspi_recv_token.pvBuffer)
         s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
       s_pSecFn->FreeCredentialsHandle(&cred_handle);
@@ -310,7 +307,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     context_handle = &sspi_context;
   }
 
-  Curl_safefree(service_name);
+  free(service_name);
 
   /* Everything is good so far, user was authenticated! */
   status = s_pSecFn->QueryCredentialsAttributes(&cred_handle,
@@ -405,7 +402,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       return CURLE_OUT_OF_MEMORY;
     }
 
-    memcpy(sspi_w_token[1].pvBuffer,&gss_enc,1);
+    memcpy(sspi_w_token[1].pvBuffer, &gss_enc, 1);
     sspi_w_token[2].BufferType = SECBUFFER_PADDING;
     sspi_w_token[2].cbBuffer = sspi_sizes.cbBlockSize;
     sspi_w_token[2].pvBuffer = malloc(sspi_sizes.cbBlockSize);
@@ -459,7 +456,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
     sspi_w_token[2].cbBuffer = 0;
 
     us_length = htons((short)sspi_send_token.cbBuffer);
-    memcpy(socksreq+2,&us_length,sizeof(short));
+    memcpy(socksreq+2, &us_length, sizeof(short));
   }
 
   code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
@@ -472,7 +469,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
   }
 
   if(data->set.socks5_gssapi_nec) {
-    memcpy(socksreq,&gss_enc,1);
+    memcpy(socksreq, &gss_enc, 1);
     code = Curl_write_plain(conn, sock, (char *)socksreq, 1, &written);
     if(code || (1 != written)) {
       failf(data, "Failed to send SSPI encryption type.");
@@ -570,7 +567,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       return CURLE_COULDNT_CONNECT;
     }
 
-    memcpy(socksreq,sspi_w_token[1].pvBuffer,sspi_w_token[1].cbBuffer);
+    memcpy(socksreq, sspi_w_token[1].pvBuffer, sspi_w_token[1].cbBuffer);
     s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
     s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
   }
@@ -582,7 +579,7 @@ CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
       s_pSecFn->DeleteSecurityContext(&sspi_context);
       return CURLE_COULDNT_CONNECT;
     }
-    memcpy(socksreq,sspi_w_token[0].pvBuffer,sspi_w_token[0].cbBuffer);
+    memcpy(socksreq, sspi_w_token[0].pvBuffer, sspi_w_token[0].cbBuffer);
     s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
   }
 
index ac7447c..4706d2d 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 786cd12..e1921d6 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 5bb7065..7aa2e4b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1997 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1997 - 2015, 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.
+ * are also available at https://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
@@ -101,13 +101,13 @@ struct Curl_tree *Curl_splayinsert(struct timeval i,
                                    struct Curl_tree *t,
                                    struct Curl_tree *node)
 {
-  static const struct timeval KEY_NOTUSED = {-1,-1}; /* will *NEVER* appear */
+  static const struct timeval KEY_NOTUSED = {-1, -1}; /* will *NEVER* appear */
 
   if(node == NULL)
     return t;
 
   if(t != NULL) {
-    t = Curl_splay(i,t);
+    t = Curl_splay(i, t);
     if(compare(i, t->key)==0) {
       /* There already exists a node in the tree with the very same key. Build
          a linked list of nodes. We make the new 'node' struct the new master
@@ -162,7 +162,7 @@ struct Curl_tree *Curl_splaygetbest(struct timeval i,
     return NULL;
   }
 
-  t = Curl_splay(i,t);
+  t = Curl_splay(i, t);
   if(compare(i, t->key) < 0) {
     /* too big node, try the smaller chain */
     if(t->smaller)
@@ -223,7 +223,7 @@ int Curl_splayremovebyaddr(struct Curl_tree *t,
                            struct Curl_tree *removenode,
                            struct Curl_tree **newroot)
 {
-  static const struct timeval KEY_NOTUSED = {-1,-1}; /* will *NEVER* appear */
+  static const struct timeval KEY_NOTUSED = {-1, -1}; /* will *NEVER* appear */
   struct Curl_tree *x;
 
   if(!t || !removenode)
index 5f9ef24..1af9414 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index d7e88c6..e63446b 100644 (file)
--- a/lib/ssh.c
+++ b/lib/ssh.c
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "multiif.h"
 #include "select.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -851,14 +848,16 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
          * libssh2 extract the public key from the private key file.
          * This is done by simply passing sshc->rsa_pub = NULL.
          */
-        if(data->set.str[STRING_SSH_PUBLIC_KEY]) {
+        if(data->set.str[STRING_SSH_PUBLIC_KEY]
+            /* treat empty string the same way as NULL */
+            && data->set.str[STRING_SSH_PUBLIC_KEY][0]) {
           sshc->rsa_pub = strdup(data->set.str[STRING_SSH_PUBLIC_KEY]);
           if(!sshc->rsa_pub)
             out_of_memory = TRUE;
         }
 
         if(out_of_memory || sshc->rsa == NULL) {
-          Curl_safefree(home);
+          free(home);
           Curl_safefree(sshc->rsa);
           Curl_safefree(sshc->rsa_pub);
           state(conn, SSH_SESSION_FREE);
@@ -870,9 +869,10 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         if(!sshc->passphrase)
           sshc->passphrase = "";
 
-        Curl_safefree(home);
+        free(home);
 
-        infof(data, "Using SSH public key file '%s'\n", sshc->rsa_pub);
+        if(sshc->rsa_pub)
+          infof(data, "Using SSH public key file '%s'\n", sshc->rsa_pub);
         infof(data, "Using SSH private key file '%s'\n", sshc->rsa);
 
         state(conn, SSH_AUTH_PKEY);
@@ -938,6 +938,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
       }
       else {
         state(conn, SSH_AUTH_HOST_INIT);
+        rc = 0; /* clear rc and continue */
       }
       break;
 
@@ -1022,11 +1023,11 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
                                     sshc->sshagent_identity);
 
         if(rc < 0) {
-          if(rc != LIBSSH2_ERROR_EAGAIN) {
+          if(rc != LIBSSH2_ERROR_EAGAIN)
             /* tried and failed? go to next identity */
             sshc->sshagent_prev_identity = sshc->sshagent_identity;
-          }
-          break;
+          else
+            break;
         }
       }
 
@@ -1040,8 +1041,10 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
         infof(data, "Agent based authentication successful\n");
         state(conn, SSH_AUTH_DONE);
       }
-      else
+      else {
         state(conn, SSH_AUTH_KEY_INIT);
+        rc = 0; /* clear rc and continue */
+      }
 #endif
       break;
 
@@ -1740,8 +1743,8 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
                 BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
 
               size_t actuallyread =
-                conn->fread_func(data->state.buffer, 1, readthisamountnow,
-                                 conn->fread_in);
+                data->state.fread_func(data->state.buffer, 1,
+                                       readthisamountnow, data->state.in);
 
               passed += actuallyread;
               if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
@@ -1921,7 +1924,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
           }
           result = Curl_client_write(conn, CLIENTWRITE_BODY,
                                      tmpLine, sshc->readdir_len+1);
-          Curl_safefree(tmpLine);
+          free(tmpLine);
 
           if(result) {
             state(conn, SSH_STOP);
@@ -2144,7 +2147,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
             /* from is relative to end of file */
             from += size;
           }
-          if(from >= size) {
+          if(from > size) {
             failf(data, "Offset (%"
                   CURL_FORMAT_CURL_OFF_T ") was beyond file size (%"
                   CURL_FORMAT_CURL_OFF_T ")", from, attrs.filesize);
@@ -2245,7 +2248,7 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
       DEBUGF(infof(data, "SFTP DONE done\n"));
 
       /* Check if nextstate is set and move .nextstate could be POSTQUOTE_INIT
-         After nextstate is executed,the control should come back to
+         After nextstate is executed, the control should come back to
          SSH_SFTP_CLOSE to pass the correct result back  */
       if(sshc->nextstate != SSH_NO_STATE &&
          sshc->nextstate != SSH_SFTP_CLOSE) {
@@ -2368,19 +2371,30 @@ static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
 
     case SSH_SCP_DOWNLOAD_INIT:
     {
+      curl_off_t bytecount;
+
       /*
        * We must check the remote file; if it is a directory no values will
        * be set in sb
        */
-      struct stat sb;
-      curl_off_t bytecount;
 
-      /* clear the struct scp recv will fill in */
-      memset(&sb, 0, sizeof(struct stat));
+       /*
+        * If support for >2GB files exists, use it.
+        */
 
       /* get a fresh new channel from the ssh layer */
+#if LIBSSH2_VERSION_NUM < 0x010700
+      struct stat sb;
+      memset(&sb, 0, sizeof(struct stat));
       sshc->ssh_channel = libssh2_scp_recv(sshc->ssh_session,
                                            sftp_scp->path, &sb);
+#else
+      libssh2_struct_stat sb;
+      memset(&sb, 0, sizeof(libssh2_struct_stat));
+      sshc->ssh_channel = libssh2_scp_recv2(sshc->ssh_session,
+                                            sftp_scp->path, &sb);
+#endif
+
       if(!sshc->ssh_channel) {
         if(libssh2_session_last_errno(sshc->ssh_session) ==
            LIBSSH2_ERROR_EAGAIN) {
@@ -3270,8 +3284,8 @@ get_pathname(const char **cpp, char **path)
   return CURLE_OK;
 
   fail:
-    Curl_safefree(*path);
-    return CURLE_QUOTE_ERROR;
+  Curl_safefree(*path);
+  return CURLE_QUOTE_ERROR;
 }
 
 
index 1bc3348..6a5e731 100644 (file)
--- a/lib/ssh.h
+++ b/lib/ssh.h
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -44,9 +44,9 @@ typedef enum {
   SSH_AUTH_PKEY,
   SSH_AUTH_PASS_INIT,
   SSH_AUTH_PASS,
-  SSH_AUTH_AGENT_INIT,/* initialize then wait for connection to agent */
-  SSH_AUTH_AGENT_LIST,/* ask for list then wait for entire list to come */
-  SSH_AUTH_AGENT,     /* attempt one key at a time */
+  SSH_AUTH_AGENT_INIT, /* initialize then wait for connection to agent */
+  SSH_AUTH_AGENT_LIST, /* ask for list then wait for entire list to come */
+  SSH_AUTH_AGENT,      /* attempt one key at a time */
   SSH_AUTH_HOST_INIT,
   SSH_AUTH_HOST,
   SSH_AUTH_KEY_INIT,
index a997b12..30a42f3 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -44,7 +44,7 @@ char *curlx_strdup(const char *str)
   if(!newstr)
     return (char *)NULL;
 
-  memcpy(newstr,str,(len+1)*sizeof(char));
+  memcpy(newstr, str, (len+1)*sizeof(char));
 
   return newstr;
 
index 23a71f8..4c48ca4 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 5f2f508..01c3784 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 117a305..ff56df5 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index b85b568..d222a1f 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2004 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2004 - 2015, 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.
+ * are also available at https://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
 #include <idna.h>
 #endif
 
-#include "strerror.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#ifdef USE_WINDOWS_SSPI
+#include "curl_sspi.h"
+#endif
 
+#include "strerror.h"
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -301,6 +302,9 @@ curl_easy_strerror(CURLcode error)
   case CURLE_SSL_PINNEDPUBKEYNOTMATCH:
     return "SSL public key does not match pinned public key";
 
+  case CURLE_SSL_INVALIDCERTSTATUS:
+    return "SSL server certificate status verification FAILED";
+
     /* error codes not used by current libcurl */
   case CURLE_OBSOLETE20:
   case CURLE_OBSOLETE24:
@@ -641,7 +645,7 @@ const char *Curl_strerror(struct connectdata *conn, int err)
 
     FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
                   LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL);
-    wcstombs(buf,wbuf,max);
+    wcstombs(buf, wbuf, max);
   }
 #else
   /* 'sys_nerr' is the maximum errno number, it is not widely portable */
@@ -708,9 +712,9 @@ const char *Curl_strerror(struct connectdata *conn, int err)
   buf[max] = '\0'; /* make sure the string is zero terminated */
 
   /* strip trailing '\r\n' or '\n'. */
-  if((p = strrchr(buf,'\n')) != NULL && (p - buf) >= 2)
+  if((p = strrchr(buf, '\n')) != NULL && (p - buf) >= 2)
      *p = '\0';
-  if((p = strrchr(buf,'\r')) != NULL && (p - buf) >= 1)
+  if((p = strrchr(buf, '\r')) != NULL && (p - buf) >= 1)
      *p = '\0';
 
   if(old_errno != ERRNO)
@@ -824,6 +828,9 @@ const char *Curl_sspi_strerror (struct connectdata *conn, int err)
     case SEC_E_OK:
       txt = "No error";
       break;
+    case CRYPT_E_REVOKED:
+      txt = "CRYPT_E_REVOKED";
+      break;
     case SEC_E_ALGORITHM_MISMATCH:
       txt = "SEC_E_ALGORITHM_MISMATCH";
       break;
@@ -1067,6 +1074,12 @@ const char *Curl_sspi_strerror (struct connectdata *conn, int err)
 
   if(err == SEC_E_OK)
     strncpy(outbuf, txt, outmax);
+  else if(err == SEC_E_ILLEGAL_MESSAGE)
+    snprintf(outbuf, outmax,
+             "SEC_E_ILLEGAL_MESSAGE (0x%04X%04X) - This error usually occurs "
+             "when a fatal SSL/TLS alert is received (e.g. handshake failed). "
+             "More detail may be available in the Windows System event log.",
+             (err >> 16) & 0xffff, err & 0xffff);
   else {
     str = txtbuf;
     snprintf(txtbuf, sizeof(txtbuf), "%s (0x%04X%04X)",
@@ -1082,7 +1095,7 @@ const char *Curl_sspi_strerror (struct connectdata *conn, int err)
                        FORMAT_MESSAGE_IGNORE_INSERTS,
                        NULL, err, LANG_NEUTRAL,
                        wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL)) {
-        wcstombs(msgbuf,wbuf,sizeof(msgbuf)-1);
+        wcstombs(msgbuf, wbuf, sizeof(msgbuf)-1);
         msg_formatted = TRUE;
       }
     }
@@ -1097,9 +1110,9 @@ const char *Curl_sspi_strerror (struct connectdata *conn, int err)
     if(msg_formatted) {
       msgbuf[sizeof(msgbuf)-1] = '\0';
       /* strip trailing '\r\n' or '\n' */
-      if((p = strrchr(msgbuf,'\n')) != NULL && (p - msgbuf) >= 2)
+      if((p = strrchr(msgbuf, '\n')) != NULL && (p - msgbuf) >= 2)
          *p = '\0';
-      if((p = strrchr(msgbuf,'\r')) != NULL && (p - msgbuf) >= 1)
+      if((p = strrchr(msgbuf, '\r')) != NULL && (p - msgbuf) >= 1)
          *p = '\0';
       msg = msgbuf;
     }
index f1b2221..ae8c96b 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 0d31351..460eb87 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 1147d70..90b831e 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 03a97e8..6d5d2d5 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 75c73d4..f4039f3 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 176e994..4ebc492 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "telnet.h"
 #include "connect.h"
 #include "progress.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #define  TELOPTS
 #define  TELCMDS
 
 #include "arpa_telnet.h"
-#include "curl_memory.h"
 #include "select.h"
 #include "strequal.h"
 #include "rawstr.h"
 #include "warnless.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #define SUBBUFSIZE 512
@@ -228,9 +226,9 @@ check_wsock2 ( struct SessionHandle *data )
   if(LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) ||
       HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested)) {
       /* Our version isn't supported */
-      failf(data,"insufficient winsock version to support "
-            "telnet");
-      return CURLE_FAILED_INIT;
+    failf(data, "insufficient winsock version to support "
+          "telnet");
+    return CURLE_FAILED_INIT;
   }
 
   /* Our version is supported */
@@ -1176,7 +1174,7 @@ CURLcode telrcv(struct connectdata *conn,
         if(c == CURL_IAC)
           tn->telrcv_state = CURL_TS_SE;
         else
-          CURL_SB_ACCUM(tn,c);
+          CURL_SB_ACCUM(tn, c);
         break;
 
       case CURL_TS_SE:
@@ -1201,7 +1199,7 @@ CURLcode telrcv(struct connectdata *conn,
             tn->telrcv_state = CURL_TS_IAC;
             goto process_iac;
           }
-          CURL_SB_ACCUM(tn,c);
+          CURL_SB_ACCUM(tn, c);
           tn->telrcv_state = CURL_TS_SB;
         }
         else
@@ -1282,7 +1280,7 @@ static CURLcode telnet_done(struct connectdata *conn,
 
 static CURLcode telnet_do(struct connectdata *conn, bool *done)
 {
-  CURLcode code;
+  CURLcode result;
   struct SessionHandle *data = conn->data;
   curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
 #ifdef USE_WINSOCK
@@ -1315,65 +1313,61 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
   *done = TRUE; /* unconditionally */
 
-  code = init_telnet(conn);
-  if(code)
-    return code;
+  result = init_telnet(conn);
+  if(result)
+    return result;
 
   tn = (struct TELNET *)data->req.protop;
 
-  code = check_telnet_options(conn);
-  if(code)
-    return code;
+  result = check_telnet_options(conn);
+  if(result)
+    return result;
 
 #ifdef USE_WINSOCK
   /*
   ** This functionality only works with WinSock >= 2.0.  So,
   ** make sure have it.
   */
-  code = check_wsock2(data);
-  if(code)
-    return code;
+  result = check_wsock2(data);
+  if(result)
+    return result;
 
   /* OK, so we have WinSock 2.0.  We need to dynamically */
   /* load ws2_32.dll and get the function pointers we need. */
   wsock2 = LoadLibrary(TEXT("WS2_32.DLL"));
   if(wsock2 == NULL) {
-    failf(data,"failed to load WS2_32.DLL (%d)", ERRNO);
+    failf(data, "failed to load WS2_32.DLL (%d)", ERRNO);
     return CURLE_FAILED_INIT;
   }
 
   /* Grab a pointer to WSACreateEvent */
-  create_event_func = GetProcAddress(wsock2,"WSACreateEvent");
+  create_event_func = GetProcAddress(wsock2, "WSACreateEvent");
   if(create_event_func == NULL) {
-    failf(data,"failed to find WSACreateEvent function (%d)",
-          ERRNO);
+    failf(data, "failed to find WSACreateEvent function (%d)", ERRNO);
     FreeLibrary(wsock2);
     return CURLE_FAILED_INIT;
   }
 
   /* And WSACloseEvent */
-  close_event_func = GetProcAddress(wsock2,"WSACloseEvent");
+  close_event_func = GetProcAddress(wsock2, "WSACloseEvent");
   if(close_event_func == NULL) {
-    failf(data,"failed to find WSACloseEvent function (%d)",
-          ERRNO);
+    failf(data, "failed to find WSACloseEvent function (%d)", ERRNO);
     FreeLibrary(wsock2);
     return CURLE_FAILED_INIT;
   }
 
   /* And WSAEventSelect */
-  event_select_func = GetProcAddress(wsock2,"WSAEventSelect");
+  event_select_func = GetProcAddress(wsock2, "WSAEventSelect");
   if(event_select_func == NULL) {
-    failf(data,"failed to find WSAEventSelect function (%d)",
-          ERRNO);
+    failf(data, "failed to find WSAEventSelect function (%d)", ERRNO);
     FreeLibrary(wsock2);
     return CURLE_FAILED_INIT;
   }
 
   /* And WSAEnumNetworkEvents */
-  enum_netevents_func = GetProcAddress(wsock2,"WSAEnumNetworkEvents");
+  enum_netevents_func = GetProcAddress(wsock2, "WSAEnumNetworkEvents");
   if(enum_netevents_func == NULL) {
-    failf(data,"failed to find WSAEnumNetworkEvents function (%d)",
-          ERRNO);
+    failf(data, "failed to find WSAEnumNetworkEvents function (%d)", ERRNO);
     FreeLibrary(wsock2);
     return CURLE_FAILED_INIT;
   }
@@ -1386,7 +1380,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
   /* First, create a sockets event object */
   event_handle = (WSAEVENT)create_event_func();
   if(event_handle == WSA_INVALID_EVENT) {
-    failf(data,"WSACreateEvent failed (%d)", SOCKERRNO);
+    failf(data, "WSACreateEvent failed (%d)", SOCKERRNO);
     FreeLibrary(wsock2);
     return CURLE_FAILED_INIT;
   }
@@ -1427,29 +1421,30 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
     case WAIT_TIMEOUT:
     {
       for(;;) {
-        if(obj_count == 1) {
+        if(data->set.is_fread_set) {
           /* read from user-supplied method */
-          code = (int)conn->fread_func(buf, 1, BUFSIZE - 1, conn->fread_in);
-          if(code == CURL_READFUNC_ABORT) {
+          result = (int)data->state.fread_func(buf, 1, BUFSIZE - 1,
+                                               data->state.in);
+          if(result == CURL_READFUNC_ABORT) {
             keepon = FALSE;
-            code = CURLE_READ_ERROR;
+            result = CURLE_READ_ERROR;
             break;
           }
 
-          if(code == CURL_READFUNC_PAUSE)
+          if(result == CURL_READFUNC_PAUSE)
             break;
 
-          if(code == 0)                        /* no bytes */
+          if(result == 0)                        /* no bytes */
             break;
 
-          readfile_read = code; /* fall thru with number of bytes read */
+          readfile_read = result; /* fall thru with number of bytes read */
         }
         else {
           /* read from stdin */
           if(!PeekNamedPipe(stdin_handle, NULL, 0, NULL,
                             &readfile_read, NULL)) {
             keepon = FALSE;
-            code = CURLE_READ_ERROR;
+            result = CURLE_READ_ERROR;
             break;
           }
 
@@ -1459,13 +1454,13 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
           if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),
                        &readfile_read, NULL)) {
             keepon = FALSE;
-            code = CURLE_READ_ERROR;
+            result = CURLE_READ_ERROR;
             break;
           }
         }
 
-        code = send_telnet_data(conn, buf, readfile_read);
-        if(code) {
+        result = send_telnet_data(conn, buf, readfile_read);
+        if(result) {
           keepon = FALSE;
           break;
         }
@@ -1478,12 +1473,12 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),
                    &readfile_read, NULL)) {
         keepon = FALSE;
-        code = CURLE_READ_ERROR;
+        result = CURLE_READ_ERROR;
         break;
       }
 
-      code = send_telnet_data(conn, buf, readfile_read);
-      if(code) {
+      result = send_telnet_data(conn, buf, readfile_read);
+      if(result) {
         keepon = FALSE;
         break;
       }
@@ -1495,20 +1490,20 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       events.lNetworkEvents = 0;
       if(SOCKET_ERROR == enum_netevents_func(sockfd, event_handle, &events)) {
         if((err = SOCKERRNO) != EINPROGRESS) {
-          infof(data,"WSAEnumNetworkEvents failed (%d)", err);
+          infof(data, "WSAEnumNetworkEvents failed (%d)", err);
           keepon = FALSE;
-          code = CURLE_READ_ERROR;
+          result = CURLE_READ_ERROR;
         }
         break;
       }
       if(events.lNetworkEvents & FD_READ) {
         /* read data from network */
-        code = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+        result = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
         /* read would've blocked. Loop again */
-        if(code == CURLE_AGAIN)
+        if(result == CURLE_AGAIN)
           break;
         /* returned not-zero, this an error */
-        else if(code) {
+        else if(result) {
           keepon = FALSE;
           break;
         }
@@ -1519,8 +1514,8 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
           break;
         }
 
-        code = telrcv(conn, (unsigned char *)buf, nread);
-        if(code) {
+        result = telrcv(conn, (unsigned char *) buf, nread);
+        if(result) {
           keepon = FALSE;
           break;
         }
@@ -1544,7 +1539,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       now = Curl_tvnow();
       if(Curl_tvdiff(now, conn->created) >= data->set.timeout) {
         failf(data, "Time-out");
-        code = CURLE_OPERATION_TIMEDOUT;
+        result = CURLE_OPERATION_TIMEDOUT;
         keepon = FALSE;
       }
     }
@@ -1552,7 +1547,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
   /* We called WSACreateEvent, so call WSACloseEvent */
   if(!close_event_func(event_handle)) {
-    infof(data,"WSACloseEvent failed (%d)", SOCKERRNO);
+    infof(data, "WSACloseEvent failed (%d)", SOCKERRNO);
   }
 
   /* "Forget" pointers into the library we're about to free */
@@ -1563,18 +1558,18 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
   /* We called LoadLibrary, so call FreeLibrary */
   if(!FreeLibrary(wsock2))
-    infof(data,"FreeLibrary(wsock2) failed (%d)", ERRNO);
+    infof(data, "FreeLibrary(wsock2) failed (%d)", ERRNO);
 #else
   pfd[0].fd = sockfd;
   pfd[0].events = POLLIN;
 
-  if(conn->fread_func != (curl_read_callback)fread) {
+  if(data->set.is_fread_set) {
     poll_cnt = 1;
     interval_ms = 100; /* poll user-supplied read function */
   }
   else {
     /* really using fread, so infile is a FILE* */
-    pfd[1].fd = fileno((FILE *)conn->fread_in);
+    pfd[1].fd = fileno((FILE *)data->state.in);
     pfd[1].events = POLLIN;
     poll_cnt = 2;
     interval_ms = 1 * 1000;
@@ -1592,12 +1587,12 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
     default:                    /* read! */
       if(pfd[0].revents & POLLIN) {
         /* read data from network */
-        code = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+        result = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
         /* read would've blocked. Loop again */
-        if(code == CURLE_AGAIN)
+        if(result == CURLE_AGAIN)
           break;
         /* returned not-zero, this an error */
-        else if(code) {
+        else if(result) {
           keepon = FALSE;
           break;
         }
@@ -1610,8 +1605,8 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
 
         total_dl += nread;
         Curl_pgrsSetDownloadCounter(data, total_dl);
-        code = telrcv(conn, (unsigned char *)buf, nread);
-        if(code) {
+        result = telrcv(conn, (unsigned char *)buf, nread);
+        if(result) {
           keepon = FALSE;
           break;
         }
@@ -1633,7 +1628,8 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       }
       else {
         /* read from user-supplied method */
-        nread = (int)conn->fread_func(buf, 1, BUFSIZE - 1, conn->fread_in);
+        nread = (int)data->state.fread_func(buf, 1, BUFSIZE - 1,
+                                            data->state.in);
         if(nread == CURL_READFUNC_ABORT) {
           keepon = FALSE;
           break;
@@ -1643,8 +1639,8 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       }
 
       if(nread > 0) {
-        code = send_telnet_data(conn, buf, nread);
-        if(code) {
+        result = send_telnet_data(conn, buf, nread);
+        if(result) {
           keepon = FALSE;
           break;
         }
@@ -1661,13 +1657,13 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       now = Curl_tvnow();
       if(Curl_tvdiff(now, conn->created) >= data->set.timeout) {
         failf(data, "Time-out");
-        code = CURLE_OPERATION_TIMEDOUT;
+        result = CURLE_OPERATION_TIMEDOUT;
         keepon = FALSE;
       }
     }
 
     if(Curl_pgrsUpdate(conn)) {
-      code = CURLE_ABORTED_BY_CALLBACK;
+      result = CURLE_ABORTED_BY_CALLBACK;
       break;
     }
   }
@@ -1675,6 +1671,6 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
   /* mark this as "no further transfer wanted" */
   Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
 
-  return code;
+  return result;
 }
 #endif
index ddb9e54..419a399 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index b9723c0..f447339 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "url.h"
 #include "rawstr.h"
 #include "speedcheck.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
+#include "curl_printf.h"
 #include "select.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* RFC2348 allows the block size to be negotiated */
@@ -148,8 +145,8 @@ typedef struct tftp_state_data {
 
 
 /* Forward declarations */
-static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event) ;
-static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event) ;
+static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event);
+static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event);
 static CURLcode tftp_connect(struct connectdata *conn, bool *done);
 static CURLcode tftp_disconnect(struct connectdata *conn,
                                 bool dead_connection);
@@ -221,7 +218,7 @@ static CURLcode tftp_set_timeouts(tftp_state_data_t *state)
     state->max_time = state->start_time+maxtime;
 
     /* Set per-block timeout to total */
-    timeout = maxtime ;
+    timeout = maxtime;
 
     /* Average restart after 5 seconds */
     state->retry_max = (int)timeout/5;
@@ -411,7 +408,7 @@ static size_t tftp_option_add(tftp_state_data_t *state, size_t csize,
   if(( strlen(option) + csize + 1 ) > (size_t)state->blksize)
     return 0;
   strcpy(buf, option);
-  return( strlen(option) + 1 );
+  return strlen(option) + 1;
 }
 
 static CURLcode tftp_connect_for_tx(tftp_state_data_t *state,
@@ -426,7 +423,7 @@ static CURLcode tftp_connect_for_tx(tftp_state_data_t *state,
   state->state = TFTP_STATE_TX;
   result = tftp_set_timeouts(state);
   if(result)
-    return(result);
+    return result;
   return tftp_tx(state, event);
 }
 
@@ -442,7 +439,7 @@ static CURLcode tftp_connect_for_rx(tftp_state_data_t *state,
   state->state = TFTP_STATE_RX;
   result = tftp_set_timeouts(state);
   if(result)
-    return(result);
+    return result;
   return tftp_rx(state, event);
 }
 
@@ -454,7 +451,7 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
   char *filename;
   char buf[64];
   struct SessionHandle *data = state->conn->data;
-  CURLcode res = CURLE_OK;
+  CURLcode result = CURLE_OK;
 
   /* Set ascii mode if -B flag was used */
   if(data->set.prefer_ascii)
@@ -469,7 +466,7 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
     if(state->retries>state->retry_max) {
       state->error = TFTP_ERR_NORESPONSE;
       state->state = TFTP_STATE_FIN;
-      return res;
+      return result;
     }
 
     if(data->set.upload) {
@@ -497,33 +494,36 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
              "%s%c%s%c", filename, '\0',  mode, '\0');
     sbytes = 4 + strlen(filename) + strlen(mode);
 
-    /* add tsize option */
-    if(data->set.upload && (data->state.infilesize != -1))
-      snprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T,
-               data->state.infilesize);
-    else
-      strcpy(buf, "0"); /* the destination is large enough */
-
-    sbytes += tftp_option_add(state, sbytes,
-                              (char *)state->spacket.data+sbytes,
-                              TFTP_OPTION_TSIZE);
-    sbytes += tftp_option_add(state, sbytes,
-                              (char *)state->spacket.data+sbytes, buf);
-    /* add blksize option */
-    snprintf( buf, sizeof(buf), "%d", state->requested_blksize );
-    sbytes += tftp_option_add(state, sbytes,
-                              (char *)state->spacket.data+sbytes,
-                              TFTP_OPTION_BLKSIZE);
-    sbytes += tftp_option_add(state, sbytes,
-                              (char *)state->spacket.data+sbytes, buf );
-
-    /* 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 );
+    /* optional addition of TFTP options */
+    if(!data->set.tftp_no_options) {
+      /* add tsize option */
+      if(data->set.upload && (data->state.infilesize != -1))
+        snprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T,
+                 data->state.infilesize);
+      else
+        strcpy(buf, "0"); /* the destination is large enough */
+
+      sbytes += tftp_option_add(state, sbytes,
+                                (char *)state->spacket.data+sbytes,
+                                TFTP_OPTION_TSIZE);
+      sbytes += tftp_option_add(state, sbytes,
+                                (char *)state->spacket.data+sbytes, buf);
+      /* add blksize option */
+      snprintf(buf, sizeof(buf), "%d", state->requested_blksize);
+      sbytes += tftp_option_add(state, sbytes,
+                                (char *)state->spacket.data+sbytes,
+                                TFTP_OPTION_BLKSIZE);
+      sbytes += tftp_option_add(state, sbytes,
+                                (char *)state->spacket.data+sbytes, buf );
+
+      /* 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' */
@@ -534,24 +534,24 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
     if(senddata != (ssize_t)sbytes) {
       failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
     }
-    Curl_safefree(filename);
+    free(filename);
     break;
 
   case TFTP_EVENT_OACK:
     if(data->set.upload) {
-      res = tftp_connect_for_tx(state, event);
+      result = tftp_connect_for_tx(state, event);
     }
     else {
-      res = tftp_connect_for_rx(state, event);
+      result = tftp_connect_for_rx(state, event);
     }
     break;
 
   case TFTP_EVENT_ACK: /* Connected for transmit */
-    res = tftp_connect_for_tx(state, event);
+    result = tftp_connect_for_tx(state, event);
     break;
 
   case TFTP_EVENT_DATA: /* Connected for receive */
-    res = tftp_connect_for_rx(state, event);
+    result = tftp_connect_for_rx(state, event);
     break;
 
   case TFTP_EVENT_ERROR:
@@ -562,7 +562,8 @@ static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
     failf(state->conn->data, "tftp_send_first: internal error");
     break;
   }
-  return res;
+
+  return result;
 }
 
 /* the next blocknum is x + 1 but it needs to wrap at an unsigned 16bit
@@ -702,7 +703,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
   struct SessionHandle *data = state->conn->data;
   ssize_t sbytes;
   int rblock;
-  CURLcode res = CURLE_OK;
+  CURLcode result = CURLE_OK;
   struct SingleRequest *k = &data->req;
 
   switch(event) {
@@ -728,7 +729,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
         if(state->retries>state->retry_max) {
           failf(data, "tftp_tx: giving up waiting for block %d ack",
                 state->block);
-          res = CURLE_SEND_ERROR;
+          result = CURLE_SEND_ERROR;
         }
         else {
           /* Re-send the data packet */
@@ -739,10 +740,11 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
           /* Check all sbytes were sent */
           if(sbytes<0) {
             failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
-            res = CURLE_SEND_ERROR;
+            result = CURLE_SEND_ERROR;
           }
         }
-        return res;
+
+        return result;
       }
       /* This is the expected packet.  Reset the counters and send the next
          block */
@@ -759,11 +761,13 @@ 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, state->blksize, &state->sbytes);
-    if(res)
-      return res;
-    sbytes = sendto(state->sockfd, (void *)state->spacket.data,
-                    4+state->sbytes, SEND_4TH_ARG,
+
+    result = Curl_fillreadbuffer(state->conn, state->blksize, &state->sbytes);
+    if(result)
+      return result;
+
+    sbytes = sendto(state->sockfd, (void *) state->spacket.data,
+                    4 + state->sbytes, SEND_4TH_ARG,
                     (struct sockaddr *)&state->remote_addr,
                     state->remote_addrlen);
     /* Check all sbytes were sent */
@@ -819,7 +823,7 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
     break;
   }
 
-  return res;
+  return result;
 }
 
 /**********************************************************
@@ -831,48 +835,47 @@ static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
  **********************************************************/
 static CURLcode tftp_translate_code(tftp_error_t error)
 {
-  CURLcode code = CURLE_OK;
+  CURLcode result = CURLE_OK;
 
   if(error != TFTP_ERR_NONE) {
     switch(error) {
     case TFTP_ERR_NOTFOUND:
-      code = CURLE_TFTP_NOTFOUND;
+      result = CURLE_TFTP_NOTFOUND;
       break;
     case TFTP_ERR_PERM:
-      code = CURLE_TFTP_PERM;
+      result = CURLE_TFTP_PERM;
       break;
     case TFTP_ERR_DISKFULL:
-      code = CURLE_REMOTE_DISK_FULL;
+      result = CURLE_REMOTE_DISK_FULL;
       break;
     case TFTP_ERR_UNDEF:
     case TFTP_ERR_ILLEGAL:
-      code = CURLE_TFTP_ILLEGAL;
+      result = CURLE_TFTP_ILLEGAL;
       break;
     case TFTP_ERR_UNKNOWNID:
-      code = CURLE_TFTP_UNKNOWNID;
+      result = CURLE_TFTP_UNKNOWNID;
       break;
     case TFTP_ERR_EXISTS:
-      code = CURLE_REMOTE_FILE_EXISTS;
+      result = CURLE_REMOTE_FILE_EXISTS;
       break;
     case TFTP_ERR_NOSUCHUSER:
-      code = CURLE_TFTP_NOSUCHUSER;
+      result = CURLE_TFTP_NOSUCHUSER;
       break;
     case TFTP_ERR_TIMEOUT:
-      code = CURLE_OPERATION_TIMEDOUT;
+      result = CURLE_OPERATION_TIMEDOUT;
       break;
     case TFTP_ERR_NORESPONSE:
-      code = CURLE_COULDNT_CONNECT;
+      result = CURLE_COULDNT_CONNECT;
       break;
     default:
-      code= CURLE_ABORTED_BY_CALLBACK;
+      result = CURLE_ABORTED_BY_CALLBACK;
       break;
     }
   }
-  else {
-    code = CURLE_OK;
-  }
+  else
+    result = CURLE_OK;
 
-  return(code);
+  return result;
 }
 
 /**********************************************************
@@ -885,20 +888,21 @@ static CURLcode tftp_translate_code(tftp_error_t error)
 static CURLcode tftp_state_machine(tftp_state_data_t *state,
                                    tftp_event_t event)
 {
-  CURLcode res = CURLE_OK;
+  CURLcode result = CURLE_OK;
   struct SessionHandle *data = state->conn->data;
+
   switch(state->state) {
   case TFTP_STATE_START:
     DEBUGF(infof(data, "TFTP_STATE_START\n"));
-    res = tftp_send_first(state, event);
+    result = tftp_send_first(state, event);
     break;
   case TFTP_STATE_RX:
     DEBUGF(infof(data, "TFTP_STATE_RX\n"));
-    res = tftp_rx(state, event);
+    result = tftp_rx(state, event);
     break;
   case TFTP_STATE_TX:
     DEBUGF(infof(data, "TFTP_STATE_TX\n"));
-    res = tftp_tx(state, event);
+    result = tftp_tx(state, event);
     break;
   case TFTP_STATE_FIN:
     infof(data, "%s\n", "TFTP finished");
@@ -906,10 +910,11 @@ static CURLcode tftp_state_machine(tftp_state_data_t *state,
   default:
     DEBUGF(infof(data, "STATE: %d\n", state->state));
     failf(data, "%s", "Internal state machine error");
-    res = CURLE_TFTP_ILLEGAL;
+    result = CURLE_TFTP_ILLEGAL;
     break;
   }
-  return res;
+
+  return result;
 }
 
 /**********************************************************
@@ -943,7 +948,6 @@ static CURLcode tftp_disconnect(struct connectdata *conn, bool dead_connection)
  **********************************************************/
 static CURLcode tftp_connect(struct connectdata *conn, bool *done)
 {
-  CURLcode code;
   tftp_state_data_t *state;
   int blksize, rc;
 
@@ -974,7 +978,7 @@ static CURLcode tftp_connect(struct connectdata *conn, bool *done)
       return CURLE_OUT_OF_MEMORY;
   }
 
-  /* we don't keep TFTP connections up bascially because there's none or very
+  /* we don't keep TFTP connections up basically because there's none or very
    * little gain for UDP */
   connclose(conn, "TFTP");
 
@@ -1017,8 +1021,8 @@ static CURLcode tftp_connect(struct connectdata *conn, bool *done)
   Curl_pgrsStartNow(conn->data);
 
   *done = TRUE;
-  code = CURLE_OK;
-  return(code);
+
+  return CURLE_OK;
 }
 
 /**********************************************************
@@ -1031,7 +1035,7 @@ static CURLcode tftp_connect(struct connectdata *conn, bool *done)
 static CURLcode tftp_done(struct connectdata *conn, CURLcode status,
                           bool premature)
 {
-  CURLcode code = CURLE_OK;
+  CURLcode result = CURLE_OK;
   tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
 
   (void)status; /* unused */
@@ -1042,9 +1046,9 @@ static CURLcode tftp_done(struct connectdata *conn, CURLcode status,
 
   /* If we have encountered an error */
   if(state)
-    code = tftp_translate_code(state->error);
+    result = tftp_translate_code(state->error);
 
-  return code;
+  return result;
 }
 
 /**********************************************************
@@ -1209,7 +1213,7 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
   else if(event != TFTP_EVENT_NONE) {
     result = tftp_state_machine(state, event);
     if(result)
-      return(result);
+      return result;
     *done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE;
     if(*done)
       /* Tell curl we're done */
@@ -1228,10 +1232,10 @@ static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
     else if(rc != 0) {
       result = tftp_receive_packet(conn);
       if(result)
-        return(result);
+        return result;
       result = tftp_state_machine(state, state->event);
       if(result)
-        return(result);
+        return result;
       *done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE;
       if(*done)
         /* Tell curl we're done */
index 117b40f..c2325b2 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 769eb3c..629f1c8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -113,12 +113,20 @@ struct timeval curlx_tvnow(void)
  * 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.
+ * Returns: the time difference in number of milliseconds. For large diffs it
+ * returns 0x7fffffff on 32bit time_t systems.
  */
 long curlx_tvdiff(struct timeval newer, struct timeval older)
 {
+#if SIZEOF_TIME_T < 8
+  /* for 32bit time_t systems, add a precaution to avoid overflow for really
+     big time differences */
+  time_t diff = newer.tv_sec-older.tv_sec;
+  if(diff >= (0x7fffffff/1000))
+    return 0x7fffffff;
+#endif
   return (newer.tv_sec-older.tv_sec)*1000+
-    (newer.tv_usec-older.tv_usec)/1000;
+    (long)(newer.tv_usec-older.tv_usec)/1000;
 }
 
 /*
index 3f1b9ea..50c31a2 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index a7ab08e..7481e0c 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "url.h"
 #include "getinfo.h"
 #include "vtls/vtls.h"
-#include "http_digest.h"
-#include "curl_ntlm.h"
-#include "http_negotiate.h"
-#include "share.h"
-#include "curl_memory.h"
 #include "select.h"
 #include "multiif.h"
 #include "connect.h"
 #include "non-ascii.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /*
@@ -117,8 +111,8 @@ CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp)
 
   /* this function returns a size_t, so we typecast to int to prevent warnings
      with picky compilers */
-  nread = (int)conn->fread_func(data->req.upload_fromhere, 1,
-                                buffersize, conn->fread_in);
+  nread = (int)data->state.fread_func(data->req.upload_fromhere, 1,
+                                      buffersize, data->state.in);
 
   if(nread == CURL_READFUNC_ABORT) {
     failf(data, "operation aborted by callback");
@@ -216,7 +210,7 @@ CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp)
     result = Curl_convert_to_network(data, data->req.upload_fromhere, length);
     /* Curl_convert_to_network calls failf if unsuccessful */
     if(result)
-      return(result);
+      return result;
 #endif /* CURL_DOES_CONVERSIONS */
 
     if((nread - hexlen) == 0)
@@ -291,8 +285,8 @@ CURLcode Curl_readrewind(struct connectdata *conn)
       /* If no CURLOPT_READFUNCTION is used, we know that we operate on a
          given FILE * stream and we can actually attempt to rewind that
          ourselves with fseek() */
-      if(data->set.fread_func == (curl_read_callback)fread) {
-        if(-1 != fseek(data->set.in, 0, SEEK_SET))
+      if(data->state.fread_func == (curl_read_callback)fread) {
+        if(-1 != fseek(data->state.in, 0, SEEK_SET))
           /* successful rewind */
           return CURLE_OK;
       }
@@ -319,8 +313,7 @@ static int data_pending(const struct connectdata *conn)
        TRUE. The thing is if we read everything, then http2_recv won't
        be called and we cannot signal the HTTP/2 stream has closed. As
        a workaround, we return nonzero here to call http2_recv. */
-    ((conn->handler->protocol&PROTO_FAMILY_HTTP) && conn->httpversion == 20 &&
-     conn->proto.httpc.closed);
+    ((conn->handler->protocol&PROTO_FAMILY_HTTP) && conn->httpversion == 20);
 #else
     Curl_ssl_data_pending(conn, FIRSTSOCKET);
 #endif
@@ -402,6 +395,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
   size_t excess = 0; /* excess bytes read */
   bool is_empty_data = FALSE;
   bool readmore = FALSE; /* used by RTP to signal for more data */
+  int maxloops = 100;
 
   *done = FALSE;
 
@@ -412,7 +406,18 @@ static CURLcode readwrite_data(struct SessionHandle *data,
       data->set.buffer_size : BUFSIZE;
     size_t bytestoread = buffersize;
 
-    if(k->size != -1 && !k->header) {
+    if(
+#if defined(USE_NGHTTP2)
+       /* For HTTP/2, read data without caring about the content
+          length. This is safe because body in HTTP/2 is always
+          segmented thanks to its framing layer. Meanwhile, we have to
+          call Curl_read to ensure that http2_handle_stream_close is
+          called when we read all incoming bytes for a particular
+          stream. */
+       !((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
+         conn->httpversion == 20) &&
+#endif
+       k->size != -1 && !k->header) {
       /* make sure we don't read "too much" if we can help it since we
          might be pipelining and then someone else might want to read what
          follows! */
@@ -435,6 +440,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
     else {
       /* read nothing but since we wanted nothing we consider this an OK
          situation to proceed from */
+      DEBUGF(infof(data, "readwrite_data: we're done!\n"));
       nread = 0;
     }
 
@@ -496,7 +502,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
         /* We've stopped dealing with input, get out of the do-while loop */
 
         if(nread > 0) {
-          if(Curl_multi_pipeline_enabled(conn->data->multi)) {
+          if(Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1)) {
             infof(data,
                   "Rewinding stream by : %zd"
                   " bytes on url %s (zero-length body)\n",
@@ -641,7 +647,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
           if(dataleft != 0) {
             infof(conn->data, "Leftovers after chunking: %zu bytes\n",
                   dataleft);
-            if(Curl_multi_pipeline_enabled(conn->data->multi)) {
+            if(Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1)) {
               /* only attempt the rewind if we truly are pipelining */
               infof(conn->data, "Rewinding %zu bytes\n",dataleft);
               read_rewind(conn, dataleft);
@@ -664,7 +670,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
 
         excess = (size_t)(k->bytecount + nread - k->maxdownload);
         if(excess > 0 && !k->ignorebody) {
-          if(Curl_multi_pipeline_enabled(conn->data->multi)) {
+          if(Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1)) {
             /* The 'excess' amount below can't be more than BUFSIZE which
                always will fit in a size_t */
             infof(data,
@@ -758,7 +764,6 @@ static CURLcode readwrite_data(struct SessionHandle *data,
               result = Curl_unencode_gzip_write(conn, k, nread);
             break;
 
-          case COMPRESS:
           default:
             failf (data, "Unrecognized content encoding type. "
                    "libcurl understands `identity', `deflate' and `gzip' "
@@ -797,7 +802,7 @@ static CURLcode readwrite_data(struct SessionHandle *data,
       k->keepon &= ~KEEP_RECV;
     }
 
-  } while(data_pending(conn));
+  } while(data_pending(conn) && maxloops--);
 
   if(((k->keepon & (KEEP_RECV|KEEP_SEND)) == KEEP_SEND) &&
      conn->bits.close ) {
@@ -830,13 +835,6 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
 
   *didwhat |= KEEP_SEND;
 
-  /*
-   * We loop here to do the READ and SEND loop until we run out of
-   * data to send or until we get EWOULDBLOCK back
-   *
-   * FIXME: above comment is misleading. Currently no looping is
-   * actually done in do-while loop below.
-   */
   do {
 
     /* only read more data if there's no upload data already
@@ -933,7 +931,8 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
             if(!data->set.crlf) {
               /* we're here only because FTP is in ASCII mode...
                  bump infilesize for the LF we just added */
-              data->state.infilesize++;
+              if(data->state.infilesize != -1)
+                data->state.infilesize++;
             }
           }
           else
@@ -1022,9 +1021,9 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
  * be read and written to/from the connection.
  */
 CURLcode Curl_readwrite(struct connectdata *conn,
+                        struct SessionHandle *data,
                         bool *done)
 {
-  struct SessionHandle *data = conn->data;
   struct SingleRequest *k = &data->req;
   CURLcode result;
   int didwhat=0;
@@ -1048,6 +1047,11 @@ CURLcode Curl_readwrite(struct connectdata *conn,
   else
     fd_write = CURL_SOCKET_BAD;
 
+  if(conn->data->state.drain) {
+    select_res |= CURL_CSELECT_IN;
+    DEBUGF(infof(data, "Curl_readwrite: forcibly told to drain data\n"));
+  }
+
   if(!select_res) /* Call for select()/poll() only, if read/write/error
                      status is not known. */
     select_res = Curl_socket_ready(fd_read, fd_write, 0);
@@ -1272,7 +1276,7 @@ long Curl_sleep_time(curl_off_t rate_bps, curl_off_t cur_rate_bps,
    * the next packet at the adjusted rate.  We should wait
    * longer when using larger packets, for instance.
    */
-  rv = ((curl_off_t)((pkt_size * 8) * 1000) / rate_bps);
+  rv = ((curl_off_t)(pkt_size * 1000) / rate_bps);
 
   /* Catch rounding errors and always slow down at least 1ms if
    * we are running too fast.
@@ -1289,8 +1293,18 @@ long Curl_sleep_time(curl_off_t rate_bps, curl_off_t cur_rate_bps,
   return (long)rv;
 }
 
+/* Curl_init_CONNECT() gets called each time the handle switches to CONNECT
+   which means this gets called once for each subsequent redirect etc */
+void Curl_init_CONNECT(struct SessionHandle *data)
+{
+  data->state.fread_func = data->set.fread_func_set;
+  data->state.in = data->set.in_set;
+}
+
 /*
- * Curl_pretransfer() is called immediately before a transfer starts.
+ * Curl_pretransfer() is called immediately before a transfer starts, and only
+ * once for one transfer no matter if it has redirects or do multi-pass
+ * authentication etc.
  */
 CURLcode Curl_pretransfer(struct SessionHandle *data)
 {
@@ -1319,6 +1333,11 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
   Curl_safefree(data->info.wouldredirect);
   data->info.wouldredirect = NULL;
 
+  if(data->set.httpreq == HTTPREQ_PUT)
+    data->state.infilesize = data->set.filesize;
+  else
+    data->state.infilesize = data->set.postfieldsize;
+
   /* If there is a list of cookie files to read, do it now! */
   if(data->change.cookielist)
     Curl_cookie_loadfiles(data);
@@ -1342,6 +1361,7 @@ CURLcode Curl_pretransfer(struct SessionHandle *data)
 #endif
 
     Curl_initinfo(data); /* reset session-specific information "variables" */
+    Curl_pgrsResetTimesSizes(data);
     Curl_pgrsStartNow(data);
 
     if(data->set.timeout)
@@ -1383,16 +1403,18 @@ CURLcode Curl_posttransfer(struct SessionHandle *data)
  */
 static size_t strlen_url(const char *url)
 {
-  const char *ptr;
+  const unsigned char *ptr;
   size_t newlen=0;
   bool left=TRUE; /* left side of the ? */
 
-  for(ptr=url; *ptr; ptr++) {
+  for(ptr=(unsigned char *)url; *ptr; ptr++) {
     switch(*ptr) {
     case '?':
       left=FALSE;
       /* fall through */
     default:
+      if(*ptr >= 0x80)
+        newlen += 2;
       newlen++;
       break;
     case ' ':
@@ -1413,9 +1435,9 @@ static void strcpy_url(char *output, const char *url)
 {
   /* we must add this with whitespace-replacing */
   bool left=TRUE;
-  const char *iptr;
+  const unsigned char *iptr;
   char *optr = output;
-  for(iptr = url;    /* read from here */
+  for(iptr = (unsigned char *)url;    /* read from here */
       *iptr;         /* until zero byte */
       iptr++) {
     switch(*iptr) {
@@ -1423,7 +1445,12 @@ static void strcpy_url(char *output, const char *url)
       left=FALSE;
       /* fall through */
     default:
-      *optr++=*iptr;
+      if(*iptr >= 0x80) {
+        snprintf(optr, 4, "%%%02x", *iptr);
+        optr += 3;
+      }
+      else
+        *optr++=*iptr;
       break;
     case ' ':
       if(left) {
@@ -1633,7 +1660,7 @@ CURLcode Curl_follow(struct SessionHandle *data,
   if(type == FOLLOW_REDIR) {
     if((data->set.maxredirs != -1) &&
         (data->set.followlocation >= data->set.maxredirs)) {
-      failf(data,"Maximum (%ld) redirects followed", data->set.maxredirs);
+      failf(data, "Maximum (%ld) redirects followed", data->set.maxredirs);
       return CURLE_TOO_MANY_REDIRECTS;
     }
 
@@ -1671,23 +1698,21 @@ CURLcode Curl_follow(struct SessionHandle *data,
     newurl = absolute;
   }
   else {
+    /* The new URL MAY contain space or high byte values, that means a mighty
+       stupid redirect URL but we still make an effort to do "right". */
+    char *newest;
+    size_t newlen = strlen_url(newurl);
+
     /* This is an absolute URL, don't allow the custom port number */
     disallowport = TRUE;
 
-    if(strchr(newurl, ' ')) {
-      /* This new URL contains at least one space, this is a mighty stupid
-         redirect but we still make an effort to do "right". */
-      char *newest;
-      size_t newlen = strlen_url(newurl);
-
-      newest = malloc(newlen+1); /* get memory for this */
-      if(!newest)
-        return CURLE_OUT_OF_MEMORY;
-      strcpy_url(newest, newurl); /* create a space-free URL */
+    newest = malloc(newlen+1); /* get memory for this */
+    if(!newest)
+      return CURLE_OUT_OF_MEMORY;
+    strcpy_url(newest, newurl); /* create a space-free URL */
 
-      free(newurl); /* that was no good */
-      newurl = newest; /* use this instead now */
-    }
+    free(newurl); /* that was no good */
+    newurl = newest; /* use this instead now */
 
   }
 
index ad4a3ac..52b762a 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -22,6 +22,8 @@
  *
  ***************************************************************************/
 
+void Curl_init_CONNECT(struct SessionHandle *data);
+
 CURLcode Curl_pretransfer(struct SessionHandle *data);
 CURLcode Curl_second_connect(struct connectdata *conn);
 CURLcode Curl_posttransfer(struct SessionHandle *data);
@@ -40,7 +42,8 @@ CURLcode Curl_follow(struct SessionHandle *data, char *newurl,
                      followtype type);
 
 
-CURLcode Curl_readwrite(struct connectdata *conn, bool *done);
+CURLcode Curl_readwrite(struct connectdata *conn,
+                        struct SessionHandle *data, bool *done);
 int Curl_single_getsock(const struct connectdata *conn,
                         curl_socket_t *socks,
                         int numsocks);
index d3bb5e0..d165d9c 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -75,7 +75,7 @@ void idn_free (void *ptr);
 #endif
 #elif defined(USE_WIN32_IDN)
 /* prototype for curl_win32_idn_to_ascii() */
-int curl_win32_idn_to_ascii(const char *in, char **out);
+bool curl_win32_idn_to_ascii(const char *in, char **out);
 #endif  /* USE_LIBIDN */
 
 #include "urldata.h"
@@ -111,6 +111,7 @@ int curl_win32_idn_to_ascii(const char *in, char **out);
 #include "telnet.h"
 #include "tftp.h"
 #include "http.h"
+#include "http2.h"
 #include "file.h"
 #include "curl_ldap.h"
 #include "ssh.h"
@@ -124,16 +125,12 @@ int curl_win32_idn_to_ascii(const char *in, char **out);
 #include "curl_rtmp.h"
 #include "gopher.h"
 #include "http_proxy.h"
-#include "bundles.h"
 #include "conncache.h"
 #include "multihandle.h"
 #include "pipeline.h"
 #include "dotdot.h"
 #include "strdup.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -145,8 +142,8 @@ static struct connectdata *
 find_oldest_idle_connection_in_bundle(struct SessionHandle *data,
                                       struct connectbundle *bundle);
 static void conn_free(struct connectdata *conn);
+static void free_fixed_hostname(struct hostname *host);
 static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
-static CURLcode do_init(struct connectdata *conn);
 static CURLcode parse_url_login(struct SessionHandle *data,
                                 struct connectdata *conn,
                                 char **userptr, char **passwdptr,
@@ -154,6 +151,8 @@ static CURLcode parse_url_login(struct SessionHandle *data,
 static CURLcode parse_login_details(const char *login, const size_t len,
                                     char **userptr, char **passwdptr,
                                     char **optionsptr);
+static unsigned int get_protocol_family(unsigned int protocol);
+
 /*
  * Protocol table.
  */
@@ -300,7 +299,7 @@ void Curl_freeset(struct SessionHandle *data)
   data->change.url = NULL;
 }
 
-static CURLcode setstropt(char **charp, char *s)
+static CURLcode setstropt(char **charp, const char *s)
 {
   /* Release the previous storage at `charp' and replace by a dynamic storage
      copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */
@@ -308,12 +307,12 @@ static CURLcode setstropt(char **charp, char *s)
   Curl_safefree(*charp);
 
   if(s) {
-    s = strdup(s);
+    char *str = strdup(s);
 
-    if(!s)
+    if(!str)
       return CURLE_OUT_OF_MEMORY;
 
-    *charp = s;
+    *charp = str;
   }
 
   return CURLE_OK;
@@ -451,10 +450,8 @@ CURLcode Curl_close(struct SessionHandle *data)
   Curl_ssl_free_certinfo(data);
 
   /* Cleanup possible redirect junk */
-  if(data->req.newurl) {
-    free(data->req.newurl);
-    data->req.newurl = NULL;
-  }
+  free(data->req.newurl);
+  data->req.newurl = NULL;
 
   if(data->change.referer_alloc) {
     Curl_safefree(data->change.referer);
@@ -503,14 +500,14 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
   CURLcode result = CURLE_OK;
 
   set->out = stdout; /* default output to stdout */
-  set->in  = stdin;  /* default input from stdin */
+  set->in_set = stdin;  /* default input from stdin */
   set->err  = stderr;  /* default stderr to stderr */
 
   /* use fwrite as default function to store output */
   set->fwrite_func = (curl_write_callback)fwrite;
 
   /* use fread as default function to read input */
-  set->fread_func = (curl_read_callback)fread;
+  set->fread_func_set = (curl_read_callback)fread;
   set->is_fread_set = 0;
   set->is_fwrite_set = 0;
 
@@ -578,16 +575,33 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
   set->socks5_gssapi_nec = FALSE;
   /* set default GSS-API service name */
   result = setstropt(&set->str[STRING_SOCKS5_GSSAPI_SERVICE],
-                     (char *) CURL_DEFAULT_SOCKS5_GSSAPI_SERVICE);
+                     CURL_DEFAULT_SOCKS5_GSSAPI_SERVICE);
+  if(result)
+    return result;
+
+  /* set default negotiate proxy service name */
+  result = setstropt(&set->str[STRING_PROXY_SERVICE_NAME],
+                     CURL_DEFAULT_PROXY_SERVICE_NAME);
+  if(result)
+    return result;
+
+  /* set default negotiate service name */
+  result = setstropt(&set->str[STRING_SERVICE_NAME],
+                     CURL_DEFAULT_SERVICE_NAME);
   if(result)
     return result;
 #endif
 
   /* This is our preferred CA cert bundle/path since install time */
 #if defined(CURL_CA_BUNDLE)
-  result = setstropt(&set->str[STRING_SSL_CAFILE], (char *) CURL_CA_BUNDLE);
-#elif defined(CURL_CA_PATH)
-  result = setstropt(&set->str[STRING_SSL_CAPATH], (char *) CURL_CA_PATH);
+  result = setstropt(&set->str[STRING_SSL_CAFILE], CURL_CA_BUNDLE);
+  if(result)
+    return result;
+#endif
+#if defined(CURL_CA_PATH)
+  result = setstropt(&set->str[STRING_SSL_CAPATH], CURL_CA_PATH);
+  if(result)
+    return result;
 #endif
 
   set->wildcardmatch  = FALSE;
@@ -605,6 +619,9 @@ CURLcode Curl_init_userdefined(struct UserDefined *set)
   set->ssl_enable_alpn = TRUE;
 
   set->expect_100_timeout = 1000L; /* Wait for a second by default. */
+  set->sep_headers = TRUE; /* separated header lists by default */
+
+  Curl_http2_init_userset(set);
   return result;
 }
 
@@ -662,12 +679,13 @@ CURLcode Curl_open(struct SessionHandle **curl)
     data->wildcard.filelist = NULL;
     data->set.fnmatch = ZERO_NULL;
     data->set.maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
+
+    Curl_http2_init_state(&data->state);
   }
 
   if(result) {
     Curl_resolver_cleanup(data->state.resolver);
-    if(data->state.headerbuff)
-      free(data->state.headerbuff);
+    free(data->state.headerbuff);
     Curl_freeset(data);
     free(data);
     data = NULL;
@@ -827,9 +845,16 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      */
     data->set.server_response_timeout = va_arg( param , long ) * 1000;
     break;
+  case CURLOPT_TFTP_NO_OPTIONS:
+    /*
+     * Option that prevents libcurl from sending TFTP option requests to the
+     * server.
+     */
+    data->set.tftp_no_options = va_arg(param, long) != 0;
+    break;
   case CURLOPT_TFTP_BLKSIZE:
     /*
-     * TFTP option that specifies the block size to use for data transmission
+     * TFTP option that specifies the block size to use for data transmission.
      */
     data->set.tftp_blksize = va_arg(param, long);
     break;
@@ -893,7 +918,11 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      * Set explicit SSL version to try to connect with, as some SSL
      * implementations are lame.
      */
+#ifdef USE_SSL
     data->set.ssl.version = va_arg(param, long);
+#else
+    result = CURLE_UNKNOWN_OPTION;
+#endif
     break;
 
 #ifndef CURL_DISABLE_HTTP
@@ -917,7 +946,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     argptr = va_arg(param, char *);
     result = setstropt(&data->set.str[STRING_ENCODING],
                        (argptr && !*argptr)?
-                       (char *) ALL_CONTENT_ENCODINGS: argptr);
+                       ALL_CONTENT_ENCODINGS: argptr);
     break;
 
   case CURLOPT_TRANSFER_ENCODING:
@@ -1236,7 +1265,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
       argptr = strdup(argptr);
       if(!argptr || !data->cookies) {
         result = CURLE_OUT_OF_MEMORY;
-        Curl_safefree(argptr);
+        free(argptr);
       }
       else {
         Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
@@ -1275,7 +1304,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      */
     arg = va_arg(param, long);
 #ifndef USE_NGHTTP2
-    if(arg == CURL_HTTP_VERSION_2_0)
+    if(arg >= CURL_HTTP_VERSION_2)
       return CURLE_UNSUPPORTED_PROTOCOL;
 #endif
     data->set.httpversion = arg;
@@ -1469,12 +1498,29 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
                        va_arg(param, char *));
     break;
 
+  case CURLOPT_PROXY_SERVICE_NAME:
+    /*
+     * Set negotiate proxy service name
+     */
+    result = setstropt(&data->set.str[STRING_PROXY_SERVICE_NAME],
+                       va_arg(param, char *));
+    break;
+
   case CURLOPT_SOCKS5_GSSAPI_NEC:
     /*
      * set flag for nec socks5 support
      */
     data->set.socks5_gssapi_nec = (0 != va_arg(param, long))?TRUE:FALSE;
     break;
+
+  case CURLOPT_SERVICE_NAME:
+    /*
+     * Set negotiate service identity
+     */
+    result = setstropt(&data->set.str[STRING_SERVICE_NAME],
+                       va_arg(param, char *));
+    break;
+
 #endif
 
   case CURLOPT_HEADERDATA:
@@ -1536,7 +1582,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      * FILE pointer to read the file to be uploaded from. Or possibly
      * used as argument to the read callback.
      */
-    data->set.in = va_arg(param, void *);
+    data->set.in_set = va_arg(param, void *);
     break;
   case CURLOPT_INFILESIZE:
     /*
@@ -1664,7 +1710,7 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
 
   case CURLOPT_XOAUTH2_BEARER:
     /*
-     * XOAUTH2 bearer token to use in the operation
+     * OAuth 2.0 bearer token to use in the operation
      */
     result = setstropt(&data->set.str[STRING_BEARER],
                        va_arg(param, char *));
@@ -1831,11 +1877,11 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     /*
      * Read data callback
      */
-    data->set.fread_func = va_arg(param, curl_read_callback);
-    if(!data->set.fread_func) {
+    data->set.fread_func_set = va_arg(param, curl_read_callback);
+    if(!data->set.fread_func_set) {
       data->set.is_fread_set = 0;
       /* When set to NULL, reset to our internal default function */
-      data->set.fread_func = (curl_read_callback)fread;
+      data->set.fread_func_set = (curl_read_callback)fread;
     }
     else
       data->set.is_fread_set = 1;
@@ -1997,6 +2043,17 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
 
     data->set.ssl.verifyhost = (0 != arg)?TRUE:FALSE;
     break;
+  case CURLOPT_SSL_VERIFYSTATUS:
+    /*
+     * Enable certificate status verifying.
+     */
+    if(!Curl_ssl_cert_status_request()) {
+      result = CURLE_NOT_BUILT_IN;
+      break;
+    }
+
+    data->set.ssl.verifystatus = (0 != va_arg(param, long))?TRUE:FALSE;
+    break;
   case CURLOPT_SSL_CTX_FUNCTION:
 #ifdef have_curlssl_ssl_ctx
     /*
@@ -2017,6 +2074,17 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     result = CURLE_NOT_BUILT_IN;
 #endif
     break;
+  case CURLOPT_SSL_FALSESTART:
+    /*
+     * Enable TLS false start.
+     */
+    if(!Curl_ssl_false_start()) {
+      result = CURLE_NOT_BUILT_IN;
+      break;
+    }
+
+    data->set.ssl.falsestart = (0 != va_arg(param, long))?TRUE:FALSE;
+    break;
   case CURLOPT_CERTINFO:
 #ifdef have_curlssl_certinfo
     data->set.ssl.certinfo = (0 != va_arg(param, long))?TRUE:FALSE;
@@ -2132,16 +2200,15 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
 
       data->share->dirty++;
 
-      if(data->share->hostcache) {
+      if(data->share->specifier & (1<< CURL_LOCK_DATA_DNS)) {
         /* use shared host cache */
-        data->dns.hostcache = data->share->hostcache;
+        data->dns.hostcache = &data->share->hostcache;
         data->dns.hostcachetype = HCACHE_SHARED;
       }
 #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
       if(data->share->cookies) {
         /* use shared cookie list, first free own one if any */
-        if(data->cookies)
-          Curl_cookie_cleanup(data->cookies);
+        Curl_cookie_cleanup(data->cookies);
         /* enable cookies since we now use a share that uses cookies! */
         data->cookies = data->share->cookies;
       }
@@ -2182,7 +2249,8 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
 
   case CURLOPT_SSL_OPTIONS:
     arg = va_arg(param, long);
-    data->set.ssl_enable_beast = arg&CURLSSLOPT_ALLOW_BEAST?TRUE:FALSE;
+    data->set.ssl_enable_beast = !!(arg & CURLSSLOPT_ALLOW_BEAST);
+    data->set.ssl_no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
     break;
 
 #endif
@@ -2388,6 +2456,12 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     data->set.redir_protocols = va_arg(param, long);
     break;
 
+  case CURLOPT_DEFAULT_PROTOCOL:
+    /* Set the protocol to use when the URL doesn't include any protocol */
+    result = setstropt(&data->set.str[STRING_DEFAULT_PROTOCOL],
+                       va_arg(param, char *));
+    break;
+
   case CURLOPT_MAIL_FROM:
     /* Set the SMTP mail originator */
     result = setstropt(&data->set.str[STRING_MAIL_FROM],
@@ -2593,6 +2667,35 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
     break;
 #endif
 
+  case CURLOPT_PATH_AS_IS:
+    data->set.path_as_is = (0 != va_arg(param, long))?TRUE:FALSE;
+    break;
+  case CURLOPT_PIPEWAIT:
+    data->set.pipewait = (0 != va_arg(param, long))?TRUE:FALSE;
+    break;
+  case CURLOPT_STREAM_WEIGHT:
+#ifndef USE_NGHTTP2
+    return CURLE_NOT_BUILT_IN;
+#else
+    arg = va_arg(param, long);
+    if((arg>=1) && (arg <= 256))
+      data->set.stream_weight = (int)arg;
+    break;
+#endif
+  case CURLOPT_STREAM_DEPENDS:
+  case CURLOPT_STREAM_DEPENDS_E:
+  {
+#ifndef USE_NGHTTP2
+    return CURLE_NOT_BUILT_IN;
+#else
+    struct SessionHandle *dep = va_arg(param, struct SessionHandle *);
+    if(dep && GOOD_EASY_HANDLE(dep)) {
+      data->set.stream_depends_on = dep;
+      data->set.stream_depends_e = (option == CURLOPT_STREAM_DEPENDS_E);
+    }
+    break;
+#endif
+  }
   default:
     /* unknown tag and its companion, just ignore: */
     result = CURLE_UNKNOWN_OPTION;
@@ -2632,7 +2735,7 @@ static void conn_free(struct connectdata *conn)
 
   Curl_safefree(conn->user);
   Curl_safefree(conn->passwd);
-  Curl_safefree(conn->xoauth2_bearer);
+  Curl_safefree(conn->oauth_bearer);
   Curl_safefree(conn->options);
   Curl_safefree(conn->proxyuser);
   Curl_safefree(conn->proxypasswd);
@@ -2705,29 +2808,13 @@ CURLcode Curl_disconnect(struct connectdata *conn, bool dead_connection)
   infof(data, "Closing connection %ld\n", conn->connection_id);
   Curl_conncache_remove_conn(data->state.conn_cache, conn);
 
-#if defined(USE_LIBIDN)
-  if(conn->host.encalloc)
-    idn_free(conn->host.encalloc); /* encoded host name buffer, must be freed
-                                      with idn_free() since this was allocated
-                                      by libidn */
-  if(conn->proxy.encalloc)
-    idn_free(conn->proxy.encalloc); /* encoded proxy name buffer, must be
-                                       freed with idn_free() since this was
-                                       allocated by libidn */
-#elif defined(USE_WIN32_IDN)
-  free(conn->host.encalloc); /* encoded host name buffer, must be freed with
-                                idn_free() since this was allocated by
-                                curl_win32_idn_to_ascii */
-  if(conn->proxy.encalloc)
-    free(conn->proxy.encalloc); /* encoded proxy name buffer, must be freed
-                                   with idn_free() since this was allocated by
-                                   curl_win32_idn_to_ascii */
-#endif
+  free_fixed_hostname(&conn->host);
+  free_fixed_hostname(&conn->proxy);
 
   Curl_ssl_close(conn, FIRSTSOCKET);
 
   /* Indicate to all handles on the pipe that we're dead */
-  if(Curl_multi_pipeline_enabled(data->multi)) {
+  if(Curl_pipeline_wanted(data->multi, CURLPIPE_ANY)) {
     signalPipeClose(conn->send_pipe, TRUE);
     signalPipeClose(conn->recv_pipe, TRUE);
   }
@@ -2755,44 +2842,45 @@ static bool SocketIsDead(curl_socket_t sock)
   return ret_val;
 }
 
+/*
+ * IsPipeliningPossible() returns TRUE if the options set would allow
+ * pipelining/multiplexing and the connection is using a HTTP protocol.
+ */
 static bool IsPipeliningPossible(const struct SessionHandle *handle,
                                  const struct connectdata *conn)
 {
-  if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
-     Curl_multi_pipeline_enabled(handle->multi) &&
-     (handle->set.httpreq == HTTPREQ_GET ||
-      handle->set.httpreq == HTTPREQ_HEAD) &&
-     handle->set.httpversion != CURL_HTTP_VERSION_1_0)
-    return TRUE;
+  /* If a HTTP protocol and pipelining is enabled */
+  if(conn->handler->protocol & PROTO_FAMILY_HTTP) {
+
+    if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) &&
+       (handle->set.httpversion != CURL_HTTP_VERSION_1_0) &&
+       (handle->set.httpreq == HTTPREQ_GET ||
+        handle->set.httpreq == HTTPREQ_HEAD))
+      /* didn't ask for HTTP/1.0 and a GET or HEAD */
+      return TRUE;
 
+    if(Curl_pipeline_wanted(handle->multi, CURLPIPE_MULTIPLEX) &&
+       (handle->set.httpversion >= CURL_HTTP_VERSION_2))
+      /* allows HTTP/2 */
+      return TRUE;
+  }
   return FALSE;
 }
 
-bool Curl_isPipeliningEnabled(const struct SessionHandle *handle)
-{
-  return Curl_multi_pipeline_enabled(handle->multi);
-}
-
-CURLcode Curl_addHandleToPipeline(struct SessionHandle *data,
-                                  struct curl_llist *pipeline)
-{
-  if(!Curl_llist_insert_next(pipeline, pipeline->tail, data))
-    return CURLE_OUT_OF_MEMORY;
-  return CURLE_OK;
-}
-
 int Curl_removeHandleFromPipeline(struct SessionHandle *handle,
                                   struct curl_llist *pipeline)
 {
-  struct curl_llist_element *curr;
+  if(pipeline) {
+    struct curl_llist_element *curr;
 
-  curr = pipeline->head;
-  while(curr) {
-    if(curr->ptr == handle) {
-      Curl_llist_remove(pipeline, curr, NULL);
-      return 1; /* we removed a handle */
+    curr = pipeline->head;
+    while(curr) {
+      if(curr->ptr == handle) {
+        Curl_llist_remove(pipeline, curr, NULL);
+        return 1; /* we removed a handle */
+      }
+      curr = curr->next;
     }
-    curr = curr->next;
   }
 
   return 0;
@@ -2828,15 +2916,14 @@ void Curl_getoff_all_pipelines(struct SessionHandle *data,
                                struct connectdata *conn)
 {
   bool recv_head = (conn->readchannel_inuse &&
-    (gethandleathead(conn->recv_pipe) == data)) ? TRUE : FALSE;
-
+                    Curl_recvpipe_head(data, conn));
   bool send_head = (conn->writechannel_inuse &&
-    (gethandleathead(conn->send_pipe) == data)) ? TRUE : FALSE;
+                    Curl_sendpipe_head(data, conn));
 
   if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && recv_head)
-    conn->readchannel_inuse = FALSE;
+    Curl_pipeline_leave_read(conn);
   if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head)
-    conn->writechannel_inuse = FALSE;
+    Curl_pipeline_leave_write(conn);
 }
 
 static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke)
@@ -2888,7 +2975,7 @@ find_oldest_idle_connection(struct SessionHandle *data)
 
   now = Curl_tvnow();
 
-  Curl_hash_start_iterate(bc->hash, &iter);
+  Curl_hash_start_iterate(&bc->hash, &iter);
 
   he = Curl_hash_next_element(&iter);
   while(he) {
@@ -3022,6 +3109,13 @@ static void prune_dead_connections(struct SessionHandle *data)
   }
 }
 
+
+static size_t max_pipeline_length(struct Curl_multi *multi)
+{
+  return multi ? multi->max_pipeline_length : 0;
+}
+
+
 /*
  * Given one filled in connection struct (named needle), this function should
  * detect if there already is one that has all the significant details
@@ -3038,17 +3132,27 @@ static bool
 ConnectionExists(struct SessionHandle *data,
                  struct connectdata *needle,
                  struct connectdata **usethis,
-                 bool *force_reuse)
+                 bool *force_reuse,
+                 bool *waitpipe)
 {
   struct connectdata *check;
   struct connectdata *chosen = 0;
+  bool foundPendingCandidate = FALSE;
   bool canPipeline = IsPipeliningPossible(data, needle);
-  bool wantNTLMhttp = ((data->state.authhost.want & CURLAUTH_NTLM) ||
-                       (data->state.authhost.want & CURLAUTH_NTLM_WB)) &&
-    (needle->handler->protocol & PROTO_FAMILY_HTTP) ? TRUE : FALSE;
   struct connectbundle *bundle;
 
+#ifdef USE_NTLM
+  bool wantNTLMhttp = ((data->state.authhost.want &
+                      (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
+                      (needle->handler->protocol & PROTO_FAMILY_HTTP));
+  bool wantProxyNTLMhttp = (needle->bits.proxy_user_passwd &&
+                           ((data->state.authproxy.want &
+                           (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
+                           (needle->handler->protocol & PROTO_FAMILY_HTTP)));
+#endif
+
   *force_reuse = FALSE;
+  *waitpipe = FALSE;
 
   /* We can't pipe if the site is blacklisted */
   if(canPipeline && Curl_pipeline_site_blacklisted(data, needle)) {
@@ -3057,28 +3161,49 @@ ConnectionExists(struct SessionHandle *data,
 
   /* Look up the bundle with all the connections to this
      particular host */
-  bundle = Curl_conncache_find_bundle(data->state.conn_cache,
-                                      needle->host.name);
+  bundle = Curl_conncache_find_bundle(needle, data->state.conn_cache);
   if(bundle) {
-    size_t max_pipe_len = Curl_multi_max_pipeline_length(data->multi);
+    /* Max pipe length is zero (unlimited) for multiplexed connections */
+    size_t max_pipe_len = (bundle->multiuse != BUNDLE_MULTIPLEX)?
+      max_pipeline_length(data->multi):0;
     size_t best_pipe_len = max_pipe_len;
     struct curl_llist_element *curr;
 
-    infof(data, "Found bundle for host %s: %p\n",
-          needle->host.name, (void *)bundle);
+    infof(data, "Found bundle for host %s: %p [%s]\n",
+          needle->host.name, (void *)bundle,
+          (bundle->multiuse== BUNDLE_PIPELINING?
+           "can pipeline":
+           (bundle->multiuse== BUNDLE_MULTIPLEX?
+            "can multiplex":"serially")));
 
     /* We can't pipe if we don't know anything about the server */
-    if(canPipeline && !bundle->server_supports_pipelining) {
-      infof(data, "Server doesn't support pipelining\n");
-      canPipeline = FALSE;
+    if(canPipeline) {
+      if(bundle->multiuse <= BUNDLE_UNKNOWN) {
+        if((bundle->multiuse == BUNDLE_UNKNOWN) && data->set.pipewait) {
+          infof(data, "Server doesn't support multi-use yet, wait\n");
+          *waitpipe = TRUE;
+          return FALSE; /* no re-use */
+        }
+
+        infof(data, "Server doesn't support multi-use (yet)\n");
+        canPipeline = FALSE;
+      }
+      if((bundle->multiuse == BUNDLE_PIPELINING) &&
+         !Curl_pipeline_wanted(data->multi, CURLPIPE_HTTP1)) {
+        /* not asked for, switch off */
+        infof(data, "Could pipeline, but not asked to!\n");
+        canPipeline = FALSE;
+      }
+      else if((bundle->multiuse == BUNDLE_MULTIPLEX) &&
+              !Curl_pipeline_wanted(data->multi, CURLPIPE_MULTIPLEX)) {
+        infof(data, "Could multiplex, but not asked to!\n");
+        canPipeline = FALSE;
+      }
     }
 
     curr = bundle->conn_list->head;
     while(curr) {
       bool match = FALSE;
-#if defined(USE_NTLM)
-      bool credentialsMatch = FALSE;
-#endif
       size_t pipeLen;
 
       /*
@@ -3094,16 +3219,19 @@ ConnectionExists(struct SessionHandle *data,
       pipeLen = check->send_pipe->size + check->recv_pipe->size;
 
       if(canPipeline) {
-        /* Make sure the pipe has only GET requests */
-        struct SessionHandle* sh = gethandleathead(check->send_pipe);
-        struct SessionHandle* rh = gethandleathead(check->recv_pipe);
-        if(sh) {
-          if(!IsPipeliningPossible(sh, check))
-            continue;
-        }
-        else if(rh) {
-          if(!IsPipeliningPossible(rh, check))
-            continue;
+
+        if(!check->bits.multiplex) {
+          /* If not multiplexing, make sure the pipe has only GET requests */
+          struct SessionHandle* sh = gethandleathead(check->send_pipe);
+          struct SessionHandle* rh = gethandleathead(check->recv_pipe);
+          if(sh) {
+            if(!IsPipeliningPossible(sh, check))
+              continue;
+          }
+          else if(rh) {
+            if(!IsPipeliningPossible(rh, check))
+              continue;
+          }
         }
       }
       else {
@@ -3126,6 +3254,8 @@ ConnectionExists(struct SessionHandle *data,
 
         if((check->sock[FIRSTSOCKET] == CURL_SOCKET_BAD) ||
            check->bits.close) {
+          if(!check->bits.close)
+            foundPendingCandidate = TRUE;
           /* Don't pick a connection that hasn't connected yet or that is going
              to get closed. */
           infof(data, "Connection #%ld isn't open enough, can't reuse\n",
@@ -3144,7 +3274,8 @@ ConnectionExists(struct SessionHandle *data,
       if((needle->handler->flags&PROTOPT_SSL) !=
          (check->handler->flags&PROTOPT_SSL))
         /* don't do mixed SSL and non-SSL connections */
-        if(!(needle->handler->protocol & check->handler->protocol))
+        if(get_protocol_family(check->handler->protocol) !=
+           needle->handler->protocol || !check->tls_upgraded)
           /* except protocols that have been upgraded via TLS */
           continue;
 
@@ -3183,18 +3314,14 @@ ConnectionExists(struct SessionHandle *data,
           continue;
       }
 
-      if((!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) ||
-         wantNTLMhttp) {
-        /* This protocol requires credentials per connection or is HTTP+NTLM,
+      if(!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) {
+        /* This protocol requires credentials per connection,
            so verify that we're using the same name and password as well */
         if(!strequal(needle->user, check->user) ||
            !strequal(needle->passwd, check->passwd)) {
           /* one of them was different */
           continue;
         }
-#if defined(USE_NTLM)
-        credentialsMatch = TRUE;
-#endif
       }
 
       if(!needle->bits.httpproxy || needle->handler->flags&PROTOPT_SSL ||
@@ -3203,14 +3330,16 @@ ConnectionExists(struct SessionHandle *data,
           Curl_raw_equal(needle->proxy.name, check->proxy.name) &&
           (needle->port == check->port))) {
         /* The requested connection does not use a HTTP proxy or it uses SSL or
-           it is a non-SSL protocol tunneled over the same http proxy name and
-           port number or it is a non-SSL protocol which is allowed to be
-           upgraded via TLS */
-
+           it is a non-SSL protocol tunneled over the same HTTP proxy name and
+           port number */
         if((Curl_raw_equal(needle->handler->scheme, check->handler->scheme) ||
-            needle->handler->protocol & check->handler->protocol) &&
+            (get_protocol_family(check->handler->protocol) ==
+             needle->handler->protocol && check->tls_upgraded)) &&
            Curl_raw_equal(needle->host.name, check->host.name) &&
            needle->remote_port == check->remote_port) {
+          /* The schemes match or the the protocol family is the same and the
+             previous connection was TLS upgraded, and the hostname and host
+             port match */
           if(needle->handler->flags & PROTOPT_SSL) {
             /* This is a SSL connection so verify that we're using the same
                SSL options as well */
@@ -3223,6 +3352,7 @@ ConnectionExists(struct SessionHandle *data,
               continue;
             }
             else if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete) {
+              foundPendingCandidate = TRUE;
               DEBUGF(infof(data,
                            "Connection #%ld has not started SSL connect, "
                            "can't reuse\n",
@@ -3253,20 +3383,43 @@ ConnectionExists(struct SessionHandle *data,
            possible. (Especially we must not reuse the same connection if
            partway through a handshake!) */
         if(wantNTLMhttp) {
-          if(credentialsMatch && check->ntlm.state != NTLMSTATE_NONE) {
-            chosen = check;
+          if(!strequal(needle->user, check->user) ||
+             !strequal(needle->passwd, check->passwd))
+            continue;
+        }
+        else if(check->ntlm.state != NTLMSTATE_NONE) {
+          /* Connection is using NTLM auth but we don't want NTLM */
+          continue;
+        }
+
+        /* Same for Proxy NTLM authentication */
+        if(wantProxyNTLMhttp) {
+          if(!strequal(needle->proxyuser, check->proxyuser) ||
+             !strequal(needle->proxypasswd, check->proxypasswd))
+            continue;
+        }
+        else if(check->proxyntlm.state != NTLMSTATE_NONE) {
+          /* Proxy connection is using NTLM auth but we don't want NTLM */
+          continue;
+        }
+
+        if(wantNTLMhttp || wantProxyNTLMhttp) {
+          /* Credentials are already checked, we can use this connection */
+          chosen = check;
 
+          if((wantNTLMhttp &&
+             (check->ntlm.state != NTLMSTATE_NONE)) ||
+              (wantProxyNTLMhttp &&
+               (check->proxyntlm.state != NTLMSTATE_NONE))) {
             /* We must use this connection, no other */
             *force_reuse = TRUE;
             break;
           }
-          else if(credentialsMatch)
-            /* this is a backup choice */
-            chosen = check;
+
+          /* Continue look up for a better connection */
           continue;
         }
 #endif
-
         if(canPipeline) {
           /* We can pipeline if we want to. Let's continue looking for
              the optimal connection to use, i.e the shortest pipe that is not
@@ -3279,19 +3432,42 @@ ConnectionExists(struct SessionHandle *data,
           }
 
           /* We can't use the connection if the pipe is full */
-          if(pipeLen >= max_pipe_len)
+          if(max_pipe_len && (pipeLen >= max_pipe_len)) {
+            infof(data, "Pipe is full, skip (%zu)\n", pipeLen);
             continue;
-
+          }
+#ifdef USE_NGHTTP2
+          /* If multiplexed, make sure we don't go over concurrency limit */
+          if(check->bits.multiplex) {
+            /* Multiplexed connections can only be HTTP/2 for now */
+            struct http_conn *httpc = &check->proto.httpc;
+            if(pipeLen >= httpc->settings.max_concurrent_streams) {
+              infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)\n",
+                    pipeLen);
+              continue;
+            }
+          }
+#endif
           /* We can't use the connection if the pipe is penalized */
-          if(Curl_pipeline_penalized(data, check))
+          if(Curl_pipeline_penalized(data, check)) {
+            infof(data, "Penalized, skip\n");
             continue;
+          }
 
-          if(pipeLen < best_pipe_len) {
-            /* This connection has a shorter pipe so far. We'll pick this
-               and continue searching */
+          if(max_pipe_len) {
+            if(pipeLen < best_pipe_len) {
+              /* This connection has a shorter pipe so far. We'll pick this
+                 and continue searching */
+              chosen = check;
+              best_pipe_len = pipeLen;
+              continue;
+            }
+          }
+          else {
+            /* When not pipelining (== multiplexed), we have a match here! */
             chosen = check;
-            best_pipe_len = pipeLen;
-            continue;
+            infof(data, "Multiplexed connection found!\n");
+            break;
           }
         }
         else {
@@ -3308,6 +3484,12 @@ ConnectionExists(struct SessionHandle *data,
     return TRUE; /* yes, we found one to use! */
   }
 
+  if(foundPendingCandidate && data->set.pipewait) {
+    infof(data,
+          "Found pending candidate for reuse and CURLOPT_PIPEWAIT is set\n");
+    *waitpipe = TRUE;
+  }
+
   return FALSE; /* no matching connecting exists */
 }
 
@@ -3343,20 +3525,6 @@ ConnectionDone(struct SessionHandle *data, struct connectdata *conn)
   return (conn_candidate == conn) ? FALSE : TRUE;
 }
 
-/*
- * The given input connection struct pointer is to be stored in the connection
- * cache. If the cache is already full, least interesting existing connection
- * (if any) gets closed.
- *
- * The given connection should be unique. That must've been checked prior to
- * this call.
- */
-static CURLcode ConnectionStore(struct SessionHandle *data,
-                                struct connectdata *conn)
-{
-  return Curl_conncache_add_conn(data->state.conn_cache, conn);
-}
-
 /* after a TCP connection to the proxy has been verified, this function does
    the next magic step.
 
@@ -3602,54 +3770,69 @@ static void fix_hostname(struct SessionHandle *data,
   host->dispname = host->name;
 
   len = strlen(host->name);
-  if(host->name[len-1] == '.')
+  if(len && (host->name[len-1] == '.'))
     /* strip off a single trailing dot if present, primarily for SNI but
        there's no use for it */
     host->name[len-1]=0;
 
+  /* Check name for non-ASCII and convert hostname to ACE form if we can */
   if(!is_ASCII_name(host->name)) {
 #ifdef USE_LIBIDN
-  /*************************************************************
-   * Check name for non-ASCII and convert hostname to ACE form.
-   *************************************************************/
-  if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) {
-    char *ace_hostname = NULL;
-    int rc = idna_to_ascii_lz(host->name, &ace_hostname, 0);
-    infof (data, "Input domain encoded as `%s'\n",
-           stringprep_locale_charset ());
-    if(rc != IDNA_SUCCESS)
-      infof(data, "Failed to convert %s to ACE; %s\n",
-            host->name, Curl_idn_strerror(conn,rc));
-    else {
-      /* tld_check_name() displays a warning if the host name contains
-         "illegal" characters for this TLD */
-      (void)tld_check_name(data, ace_hostname);
-
-      host->encalloc = ace_hostname;
-      /* change the name pointer to point to the encoded hostname */
-      host->name = host->encalloc;
+    if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) {
+      char *ace_hostname = NULL;
+
+      int rc = idna_to_ascii_lz(host->name, &ace_hostname, 0);
+      infof(data, "Input domain encoded as `%s'\n",
+            stringprep_locale_charset());
+      if(rc == IDNA_SUCCESS) {
+        /* tld_check_name() displays a warning if the host name contains
+           "illegal" characters for this TLD */
+        (void)tld_check_name(data, ace_hostname);
+
+        host->encalloc = ace_hostname;
+        /* change the name pointer to point to the encoded hostname */
+        host->name = host->encalloc;
+      }
+      else
+        infof(data, "Failed to convert %s to ACE; %s\n", host->name,
+              Curl_idn_strerror(conn, rc));
     }
-  }
 #elif defined(USE_WIN32_IDN)
-  /*************************************************************
-   * Check name for non-ASCII and convert hostname to ACE form.
-   *************************************************************/
     char *ace_hostname = NULL;
-    int rc = curl_win32_idn_to_ascii(host->name, &ace_hostname);
-    if(rc == 0)
-      infof(data, "Failed to convert %s to ACE;\n",
-            host->name);
-    else {
+
+    if(curl_win32_idn_to_ascii(host->name, &ace_hostname)) {
       host->encalloc = ace_hostname;
       /* change the name pointer to point to the encoded hostname */
       host->name = host->encalloc;
     }
+    else
+      infof(data, "Failed to convert %s to ACE;\n", host->name);
 #else
     infof(data, "IDN support not present, can't parse Unicode domains\n");
 #endif
   }
 }
 
+/*
+ * Frees data allocated by fix_hostname()
+ */
+static void free_fixed_hostname(struct hostname *host)
+{
+#if defined(USE_LIBIDN)
+  if(host->encalloc) {
+    idn_free(host->encalloc); /* must be freed with idn_free() since this was
+                                 allocated by libidn */
+    host->encalloc = NULL;
+  }
+#elif defined(USE_WIN32_IDN)
+  free(host->encalloc); /* must be freed withidn_free() since this was
+                           allocated by curl_win32_idn_to_ascii */
+  host->encalloc = NULL;
+#else
+  (void)host;
+#endif
+}
+
 static void llist_dtor(void *user, void *element)
 {
   (void)user;
@@ -3732,9 +3915,9 @@ static struct connectdata *allocate_conn(struct SessionHandle *data)
   conn->response_header = NULL;
 #endif
 
-  if(Curl_multi_pipeline_enabled(data->multi) &&
-      !conn->master_buffer) {
-    /* Allocate master_buffer to be used for pipelining */
+  if(Curl_pipeline_wanted(data->multi, CURLPIPE_HTTP1) &&
+     !conn->master_buffer) {
+    /* Allocate master_buffer to be used for HTTP/1 pipelining */
     conn->master_buffer = calloc(BUFSIZE, sizeof (char));
     if(!conn->master_buffer)
       goto error;
@@ -3773,9 +3956,9 @@ static struct connectdata *allocate_conn(struct SessionHandle *data)
   conn->send_pipe = NULL;
   conn->recv_pipe = NULL;
 
-  Curl_safefree(conn->master_buffer);
-  Curl_safefree(conn->localdev);
-  Curl_safefree(conn);
+  free(conn->master_buffer);
+  free(conn->localdev);
+  free(conn);
   return NULL;
 }
 
@@ -3937,27 +4120,30 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data,
       }
 
       /*
-       * Since there was no protocol part specified, we guess what protocol it
-       * is based on the first letters of the server name.
+       * Since there was no protocol part specified in the URL use the
+       * user-specified default protocol. If we weren't given a default make a
+       * guess by matching some protocols against the host's outermost
+       * sub-domain name. Finally if there was no match use HTTP.
        */
 
-      /* Note: if you add a new protocol, please update the list in
-       * lib/version.c too! */
-
-      if(checkprefix("FTP.", conn->host.name))
-        protop = "ftp";
-      else if(checkprefix("DICT.", conn->host.name))
-        protop = "DICT";
-      else if(checkprefix("LDAP.", conn->host.name))
-        protop = "LDAP";
-      else if(checkprefix("IMAP.", conn->host.name))
-        protop = "IMAP";
-      else if(checkprefix("SMTP.", conn->host.name))
-        protop = "smtp";
-      else if(checkprefix("POP3.", conn->host.name))
-        protop = "pop3";
-      else {
-        protop = "http";
+      protop = data->set.str[STRING_DEFAULT_PROTOCOL];
+      if(!protop) {
+        /* Note: if you add a new protocol, please update the list in
+         * lib/version.c too! */
+        if(checkprefix("FTP.", conn->host.name))
+          protop = "ftp";
+        else if(checkprefix("DICT.", conn->host.name))
+          protop = "DICT";
+        else if(checkprefix("LDAP.", conn->host.name))
+          protop = "LDAP";
+        else if(checkprefix("IMAP.", conn->host.name))
+          protop = "IMAP";
+        else if(checkprefix("SMTP.", conn->host.name))
+          protop = "smtp";
+        else if(checkprefix("POP3.", conn->host.name))
+          protop = "pop3";
+        else
+          protop = "http";
       }
 
       *prot_missing = TRUE; /* not given in URL */
@@ -4018,7 +4204,7 @@ static CURLcode parseurlandfillconn(struct SessionHandle *data,
     path[0] = '/';
     rebuild_url = TRUE;
   }
-  else {
+  else if(!data->set.path_as_is) {
     /* sanitise paths and remove ../ and ./ sequences according to RFC3986 */
     char *newp = Curl_dedotdotify(path);
     if(!newp)
@@ -4413,8 +4599,7 @@ static char *detect_proxy(struct connectdata *conn)
     }
   } /* if(!check_noproxy(conn->host.name, no_proxy)) - it wasn't specified
        non-proxy */
-  if(no_proxy)
-    free(no_proxy);
+  free(no_proxy);
 
 #else /* !CURL_DISABLE_HTTP */
 
@@ -4428,7 +4613,6 @@ static char *detect_proxy(struct connectdata *conn)
  * If this is supposed to use a proxy, we need to figure out the proxy
  * host name, so that we can re-use an existing connection
  * that may exist registered to the same proxy host.
- * proxy will be freed before this function returns.
  */
 static CURLcode parse_proxy(struct SessionHandle *data,
                             struct connectdata *conn, char *proxy)
@@ -4502,8 +4686,8 @@ static CURLcode parse_proxy(struct SessionHandle *data,
       }
     }
 
-    Curl_safefree(proxyuser);
-    Curl_safefree(proxypasswd);
+    free(proxyuser);
+    free(proxypasswd);
 
     if(result)
       return result;
@@ -4542,10 +4726,24 @@ static CURLcode parse_proxy(struct SessionHandle *data,
   /* Get port number off proxy.server.com:1080 */
   prox_portno = strchr(portptr, ':');
   if(prox_portno) {
+    char *endp = NULL;
+    long port = 0;
     *prox_portno = 0x0; /* cut off number from host name */
     prox_portno ++;
     /* now set the local port number */
-    conn->port = strtol(prox_portno, NULL, 10);
+    port = strtol(prox_portno, &endp, 10);
+    if((endp && *endp && (*endp != '/') && (*endp != ' ')) ||
+       (port >= 65536) ) {
+      /* meant to detect for example invalid IPv6 numerical addresses without
+         brackets: "2a00:fac0:a000::7:13". Accept a trailing slash only
+         because we then allow "URL style" with the number followed by a
+         slash, used in curl test cases already. Space is also an acceptable
+         terminating symbol. */
+      infof(data, "No valid port number in proxy string (%s)\n",
+            prox_portno);
+    }
+    else
+      conn->port = port;
   }
   else {
     if(proxyptr[0]=='/')
@@ -4715,9 +4913,9 @@ static CURLcode parse_url_login(struct SessionHandle *data,
 
   out:
 
-  Curl_safefree(userp);
-  Curl_safefree(passwdp);
-  Curl_safefree(optionsp);
+  free(userp);
+  free(passwdp);
+  free(optionsp);
 
   return result;
 }
@@ -4805,7 +5003,7 @@ static CURLcode parse_login_details(const char *login, const size_t len,
   if(!result && passwdp && plen) {
     pbuf = malloc(plen + 1);
     if(!pbuf) {
-      Curl_safefree(ubuf);
+      free(ubuf);
       result = CURLE_OUT_OF_MEMORY;
     }
   }
@@ -4814,8 +5012,8 @@ static CURLcode parse_login_details(const char *login, const size_t len,
   if(!result && optionsp && olen) {
     obuf = malloc(olen + 1);
     if(!obuf) {
-      Curl_safefree(pbuf);
-      Curl_safefree(ubuf);
+      free(pbuf);
+      free(ubuf);
       result = CURLE_OUT_OF_MEMORY;
     }
   }
@@ -5091,9 +5289,6 @@ static CURLcode resolve_server(struct SessionHandle *data,
     int rc;
     struct Curl_dns_entry *hostaddr;
 
-    /* set a pointer to the hostname we display */
-    fix_hostname(data, conn, &conn->host);
-
 #ifdef USE_UNIX_SOCKETS
     if(data->set.str[STRING_UNIX_SOCKET_PATH]) {
       /* Unix domain sockets are local. The host gets ignored, just use the
@@ -5143,9 +5338,6 @@ static CURLcode resolve_server(struct SessionHandle *data,
     else {
       /* This is a proxy that hasn't been resolved yet. */
 
-      /* IDN-fix the proxy name */
-      fix_hostname(data, conn, &conn->proxy);
-
       /* resolve proxy */
       rc = Curl_resolv_timeout(conn, conn->proxy.name, (int)conn->port,
                                &hostaddr, timeout_ms);
@@ -5177,8 +5369,8 @@ static CURLcode resolve_server(struct SessionHandle *data,
 static void reuse_conn(struct connectdata *old_conn,
                        struct connectdata *conn)
 {
-  if(old_conn->proxy.rawalloc)
-    free(old_conn->proxy.rawalloc);
+  free_fixed_hostname(&old_conn->proxy);
+  free(old_conn->proxy.rawalloc);
 
   /* free the SSL config struct from this connection struct as this was
      allocated in vain and is targeted for destruction */
@@ -5212,6 +5404,7 @@ static void reuse_conn(struct connectdata *old_conn,
 
   /* host can change, when doing keepalive with a proxy or if the case is
      different this time etc */
+  free_fixed_hostname(&conn->host);
   Curl_safefree(conn->host.rawalloc);
   conn->host=old_conn->host;
 
@@ -5266,8 +5459,9 @@ static CURLcode create_conn(struct SessionHandle *data,
   bool reuse;
   char *proxy = NULL;
   bool prot_missing = FALSE;
-  bool no_connections_available = FALSE;
+  bool connections_available = TRUE;
   bool force_reuse = FALSE;
+  bool waitpipe = FALSE;
   size_t max_host_connections = Curl_multi_max_host_connections(data->multi);
   size_t max_total_connections = Curl_multi_max_total_connections(data->multi);
 
@@ -5359,6 +5553,7 @@ static CURLcode create_conn(struct SessionHandle *data,
        we're gonna follow a Location: later or... then we need the protocol
        part added so that we have a valid URL. */
     char *reurl;
+    char *ch_lower;
 
     reurl = aprintf("%s://%s", conn->handler->scheme, data->change.url);
 
@@ -5367,6 +5562,10 @@ static CURLcode create_conn(struct SessionHandle *data,
       goto out;
     }
 
+    /* Change protocol prefix to lower-case */
+    for(ch_lower = reurl; *ch_lower != ':'; ch_lower++)
+      *ch_lower = (char)TOLOWER(*ch_lower);
+
     if(data->change.url_alloc) {
       Curl_safefree(data->change.url);
       data->change.url_alloc = FALSE;
@@ -5395,8 +5594,8 @@ static CURLcode create_conn(struct SessionHandle *data,
   }
 
   if(data->set.str[STRING_BEARER]) {
-    conn->xoauth2_bearer = strdup(data->set.str[STRING_BEARER]);
-    if(!conn->xoauth2_bearer) {
+    conn->oauth_bearer = strdup(data->set.str[STRING_BEARER]);
+    if(!conn->oauth_bearer) {
       result = CURLE_OUT_OF_MEMORY;
       goto out;
     }
@@ -5427,10 +5626,8 @@ static CURLcode create_conn(struct SessionHandle *data,
 
   if(data->set.str[STRING_NOPROXY] &&
      check_noproxy(conn->host.name, data->set.str[STRING_NOPROXY])) {
-    if(proxy) {
-      free(proxy);  /* proxy is in exception list */
-      proxy = NULL;
-    }
+    free(proxy);  /* proxy is in exception list */
+    proxy = NULL;
   }
   else if(!proxy)
     proxy = detect_proxy(conn);
@@ -5456,7 +5653,8 @@ static CURLcode create_conn(struct SessionHandle *data,
   if(proxy) {
     result = parse_proxy(data, conn, proxy);
 
-    Curl_safefree(proxy); /* parse_proxy copies the proxy string */
+    free(proxy); /* parse_proxy copies the proxy string */
+    proxy = NULL;
 
     if(result)
       goto out;
@@ -5477,8 +5675,10 @@ static CURLcode create_conn(struct SessionHandle *data,
       conn->bits.httpproxy = TRUE;
 #endif
     }
-    else
+    else {
       conn->bits.httpproxy = FALSE; /* not a HTTP proxy */
+      conn->bits.tunnel_proxy = FALSE; /* no tunneling if not HTTP */
+    }
     conn->bits.proxy = TRUE;
   }
   else {
@@ -5515,6 +5715,13 @@ static CURLcode create_conn(struct SessionHandle *data,
     goto out;
 
   /*************************************************************
+   * IDN-fix the hostnames
+   *************************************************************/
+  fix_hostname(data, conn, &conn->host);
+  if(conn->proxy.name && *conn->proxy.name)
+    fix_hostname(data, conn, &conn->proxy);
+
+  /*************************************************************
    * Setup internals depending on protocol. Needs to be done after
    * we figured out what/if proxy to use.
    *************************************************************/
@@ -5543,7 +5750,7 @@ static CURLcode create_conn(struct SessionHandle *data,
       conn->data = data;
       conn->bits.tcpconnect[FIRSTSOCKET] = TRUE; /* we are "connected */
 
-      ConnectionStore(data, conn);
+      Curl_conncache_add_conn(data->state.conn_cache, conn);
 
       /*
        * Setup whatever necessary for a resumed transfer
@@ -5561,7 +5768,7 @@ static CURLcode create_conn(struct SessionHandle *data,
     }
 
     /* since we skip do_init() */
-    do_init(conn);
+    Curl_init_do(data, conn);
 
     goto out;
   }
@@ -5608,7 +5815,7 @@ static CURLcode create_conn(struct SessionHandle *data,
   if(data->set.reuse_fresh && !data->state.this_is_a_follow)
     reuse = FALSE;
   else
-    reuse = ConnectionExists(data, conn, &conn_temp, &force_reuse);
+    reuse = ConnectionExists(data, conn, &conn_temp, &force_reuse, &waitpipe);
 
   /* If we found a reusable connection, we may still want to
      open a new connection if we are pipelining. */
@@ -5642,21 +5849,24 @@ static CURLcode create_conn(struct SessionHandle *data,
     conn = conn_temp;
     *in_connect = conn;
 
-    /* set a pointer to the hostname we display */
-    fix_hostname(data, conn, &conn->host);
-
-    infof(data, "Re-using existing connection! (#%ld) with host %s\n",
+    infof(data, "Re-using existing connection! (#%ld) with %s %s\n",
           conn->connection_id,
+          conn->bits.proxy?"proxy":"host",
           conn->proxy.name?conn->proxy.dispname:conn->host.dispname);
   }
   else {
     /* We have decided that we want a new connection. However, we may not
        be able to do that if we have reached the limit of how many
        connections we are allowed to open. */
-    struct connectbundle *bundle;
+    struct connectbundle *bundle = NULL;
+
+    if(waitpipe)
+      /* There is a connection that *might* become usable for pipelining
+         "soon", and we wait for that */
+      connections_available = FALSE;
+    else
+      bundle = Curl_conncache_find_bundle(conn, data->state.conn_cache);
 
-    bundle = Curl_conncache_find_bundle(data->state.conn_cache,
-                                        conn->host.name);
     if(max_host_connections > 0 && bundle &&
        (bundle->num_connections >= max_host_connections)) {
       struct connectdata *conn_candidate;
@@ -5669,11 +5879,15 @@ static CURLcode create_conn(struct SessionHandle *data,
         conn_candidate->data = data;
         (void)Curl_disconnect(conn_candidate, /* dead_connection */ FALSE);
       }
-      else
-        no_connections_available = TRUE;
+      else {
+        infof(data, "No more connections allowed to host: %d\n",
+              max_host_connections);
+        connections_available = FALSE;
+      }
     }
 
-    if(max_total_connections > 0 &&
+    if(connections_available &&
+       (max_total_connections > 0) &&
        (data->state.conn_cache->num_connections >= max_total_connections)) {
       struct connectdata *conn_candidate;
 
@@ -5685,12 +5899,13 @@ static CURLcode create_conn(struct SessionHandle *data,
         conn_candidate->data = data;
         (void)Curl_disconnect(conn_candidate, /* dead_connection */ FALSE);
       }
-      else
-        no_connections_available = TRUE;
+      else {
+        infof(data, "No connections available in cache\n");
+        connections_available = FALSE;
+      }
     }
 
-
-    if(no_connections_available) {
+    if(!connections_available) {
       infof(data, "No connections available.\n");
 
       conn_free(conn);
@@ -5704,7 +5919,7 @@ static CURLcode create_conn(struct SessionHandle *data,
        * This is a brand new connection, so let's store it in the connection
        * cache of ours!
        */
-      ConnectionStore(data, conn);
+      Curl_conncache_add_conn(data->state.conn_cache, conn);
     }
 
 #if defined(USE_NTLM)
@@ -5715,12 +5930,14 @@ static CURLcode create_conn(struct SessionHandle *data,
        data->state.authhost.done) {
       infof(data, "NTLM picked AND auth done set, clear picked!\n");
       data->state.authhost.picked = CURLAUTH_NONE;
+      data->state.authhost.done = FALSE;
     }
 
     if((data->state.authproxy.picked & (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
        data->state.authproxy.done) {
       infof(data, "NTLM-proxy picked AND auth done set, clear picked!\n");
       data->state.authproxy.picked = CURLAUTH_NONE;
+      data->state.authproxy.done = FALSE;
     }
 #endif
   }
@@ -5729,7 +5946,7 @@ static CURLcode create_conn(struct SessionHandle *data,
   conn->inuse = TRUE;
 
   /* Setup and init stuff before DO starts, in preparing for the transfer. */
-  do_init(conn);
+  Curl_init_do(data, conn);
 
   /*
    * Setup whatever necessary for a resumed transfer
@@ -5744,8 +5961,6 @@ static CURLcode create_conn(struct SessionHandle *data,
    * Inherit the proper values from the urldata struct AFTER we have arranged
    * the persistent connection stuff
    */
-  conn->fread_func = data->set.fread_func;
-  conn->fread_in = data->set.in;
   conn->seek_func = data->set.seek_func;
   conn->seek_client = data->set.seek_client;
 
@@ -5756,10 +5971,10 @@ static CURLcode create_conn(struct SessionHandle *data,
 
   out:
 
-  Curl_safefree(options);
-  Curl_safefree(passwd);
-  Curl_safefree(user);
-  Curl_safefree(proxy);
+  free(options);
+  free(passwd);
+  free(user);
+  free(proxy);
   return result;
 }
 
@@ -5903,37 +6118,19 @@ CURLcode Curl_done(struct connectdata **connp,
   conn = *connp;
   data = conn->data;
 
-  if(conn->bits.done)
+  DEBUGF(infof(data, "Curl_done\n"));
+
+  if(data->state.done)
     /* Stop if Curl_done() has already been called */
     return CURLE_OK;
 
   Curl_getoff_all_pipelines(data, conn);
 
-  if((conn->send_pipe->size + conn->recv_pipe->size != 0 &&
-      !data->set.reuse_forbid &&
-      !conn->bits.close))
-    /* Stop if pipeline is not empty and we do not have to close
-       connection. */
-    return CURLE_OK;
-
-  conn->bits.done = TRUE; /* called just now! */
-
   /* Cleanup possible redirect junk */
-  if(data->req.newurl) {
-    free(data->req.newurl);
-    data->req.newurl = NULL;
-  }
-  if(data->req.location) {
-    free(data->req.location);
-    data->req.location = NULL;
-  }
-
-  Curl_resolver_cancel(conn);
-
-  if(conn->dns_entry) {
-    Curl_resolv_unlock(data, conn->dns_entry); /* done with this */
-    conn->dns_entry = NULL;
-  }
+  free(data->req.newurl);
+  data->req.newurl = NULL;
+  free(data->req.location);
+  data->req.location = NULL;
 
   switch(status) {
   case CURLE_ABORTED_BY_CALLBACK:
@@ -5954,15 +6151,36 @@ CURLcode Curl_done(struct connectdata **connp,
   else
     result = status;
 
-  if(!result && Curl_pgrsDone(conn))
-    result = CURLE_ABORTED_BY_CALLBACK;
+  if(CURLE_ABORTED_BY_CALLBACK != result) {
+    /* avoid this if we already aborted by callback to avoid this calling
+       another callback */
+    CURLcode rc = Curl_pgrsDone(conn);
+    if(!result && rc)
+      result = CURLE_ABORTED_BY_CALLBACK;
+  }
+
+  if((!premature &&
+      conn->send_pipe->size + conn->recv_pipe->size != 0 &&
+      !data->set.reuse_forbid &&
+      !conn->bits.close)) {
+    /* Stop if pipeline is not empty and we do not have to close
+       connection. */
+    DEBUGF(infof(data, "Connection still in use, no more Curl_done now!\n"));
+    return CURLE_OK;
+  }
+
+  data->state.done = TRUE; /* called just now! */
+  Curl_resolver_cancel(conn);
+
+  if(conn->dns_entry) {
+    Curl_resolv_unlock(data, conn->dns_entry); /* done with this */
+    conn->dns_entry = NULL;
+  }
 
   /* if the transfer was completed in a paused state there can be buffered
      data left to write and then kill */
-  if(data->state.tempwrite) {
-    free(data->state.tempwrite);
-    data->state.tempwrite = NULL;
-  }
+  free(data->state.tempwrite);
+  data->state.tempwrite = NULL;
 
   /* if data->set.reuse_forbid is TRUE, it means the libcurl client has
      forced us to close this connection. This is ignored for requests taking
@@ -6016,20 +6234,24 @@ CURLcode Curl_done(struct connectdata **connp,
 }
 
 /*
- * do_init() inits the readwrite session. This is inited each time (in the DO
- * function before the protocol-specific DO functions are invoked) for a
- * transfer, sometimes multiple times on the same SessionHandle. Make sure
+ * Curl_init_do() inits the readwrite session. This is inited each time (in
+ * the DO function before the protocol-specific DO functions are invoked) for
+ * transfer, sometimes multiple times on the same SessionHandle. Make sure
  * nothing in here depends on stuff that are setup dynamically for the
  * transfer.
+ *
+ * Allow this function to get called with 'conn' set to NULL.
  */
 
-static CURLcode do_init(struct connectdata *conn)
+CURLcode Curl_init_do(struct SessionHandle *data, struct connectdata *conn)
 {
-  struct SessionHandle *data = conn->data;
   struct SingleRequest *k = &data->req;
 
-  conn->bits.done = FALSE; /* Curl_done() is not called yet */
-  conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */
+  if(conn)
+    conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to
+                                 * use */
+
+  data->state.done = FALSE; /* Curl_done() is not called yet */
   data->state.expect100header = FALSE;
 
   if(data->set.opt_no_body)
@@ -6140,3 +6362,113 @@ CURLcode Curl_do_more(struct connectdata *conn, int *complete)
 
   return result;
 }
+
+/*
+* get_protocol_family()
+*
+* This is used to return the protocol family for a given protocol.
+*
+* Parameters:
+*
+* protocol  [in]  - A single bit protocol identifier such as HTTP or HTTPS.
+*
+* Returns the family as a single bit protocol identifier.
+*/
+
+unsigned int get_protocol_family(unsigned int protocol)
+{
+  unsigned int family;
+
+  switch(protocol) {
+  case CURLPROTO_HTTP:
+  case CURLPROTO_HTTPS:
+    family = CURLPROTO_HTTP;
+    break;
+
+  case CURLPROTO_FTP:
+  case CURLPROTO_FTPS:
+    family = CURLPROTO_IMAP;
+    break;
+
+  case CURLPROTO_SCP:
+    family = CURLPROTO_SCP;
+    break;
+
+  case CURLPROTO_SFTP:
+    family = CURLPROTO_SFTP;
+    break;
+
+  case CURLPROTO_TELNET:
+    family = CURLPROTO_TELNET;
+    break;
+
+  case CURLPROTO_LDAP:
+  case CURLPROTO_LDAPS:
+    family = CURLPROTO_IMAP;
+    break;
+
+  case CURLPROTO_DICT:
+    family = CURLPROTO_DICT;
+    break;
+
+  case CURLPROTO_FILE:
+    family = CURLPROTO_FILE;
+    break;
+
+  case CURLPROTO_TFTP:
+    family = CURLPROTO_TFTP;
+    break;
+
+  case CURLPROTO_IMAP:
+  case CURLPROTO_IMAPS:
+    family = CURLPROTO_IMAP;
+    break;
+
+  case CURLPROTO_POP3:
+  case CURLPROTO_POP3S:
+    family = CURLPROTO_POP3;
+    break;
+
+  case CURLPROTO_SMTP:
+  case CURLPROTO_SMTPS:
+      family = CURLPROTO_SMTP;
+      break;
+
+  case CURLPROTO_RTSP:
+    family = CURLPROTO_RTSP;
+    break;
+
+  case CURLPROTO_RTMP:
+  case CURLPROTO_RTMPS:
+    family = CURLPROTO_RTMP;
+    break;
+
+  case CURLPROTO_RTMPT:
+  case CURLPROTO_RTMPTS:
+    family = CURLPROTO_RTMPT;
+    break;
+
+  case CURLPROTO_RTMPE:
+    family = CURLPROTO_RTMPE;
+    break;
+
+  case CURLPROTO_RTMPTE:
+    family = CURLPROTO_RTMPTE;
+    break;
+
+  case CURLPROTO_GOPHER:
+    family = CURLPROTO_GOPHER;
+    break;
+
+  case CURLPROTO_SMB:
+  case CURLPROTO_SMBS:
+    family = CURLPROTO_SMB;
+    break;
+
+  default:
+      family = 0;
+      break;
+  }
+
+  return family;
+}
index cd46a92..bb85e9b 100644 (file)
--- a/lib/url.h
+++ b/lib/url.h
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -27,6 +27,7 @@
  * Prototypes for library-wide functions provided by url.c
  */
 
+CURLcode Curl_init_do(struct SessionHandle *data, struct connectdata *conn);
 CURLcode Curl_open(struct SessionHandle **curl);
 CURLcode Curl_init_userdefined(struct UserDefined *set);
 CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
@@ -69,6 +70,9 @@ void Curl_close_connections(struct SessionHandle *data);
 #define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
 #define CURL_DEFAULT_SOCKS5_GSSAPI_SERVICE "rcmd" /* default socks5 gssapi
                                                      service */
+#define CURL_DEFAULT_PROXY_SERVICE_NAME "HTTP" /* default negotiate proxy
+                                                  service */
+#define CURL_DEFAULT_SERVICE_NAME "HTTP"  /* default negotiate service */
 
 CURLcode Curl_connected_proxy(struct connectdata *conn, int sockindex);
 
index 5f77470..f832ea8 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
 #include "cookie.h"
 #include "formdata.h"
 
-#ifdef USE_SSLEAY
 #ifdef USE_OPENSSL
-#include <openssl/rsa.h>
-#include <openssl/crypto.h>
-#include <openssl/x509.h>
-#include <openssl/pem.h>
 #include <openssl/ssl.h>
-#include <openssl/err.h>
 #ifdef HAVE_OPENSSL_ENGINE_H
 #include <openssl/engine.h>
 #endif
-#ifdef HAVE_OPENSSL_PKCS12_H
-#include <openssl/pkcs12.h>
-#endif
-#else /* SSLeay-style includes */
-#include <rsa.h>
-#include <crypto.h>
-#include <x509.h>
-#include <pem.h>
-#include <ssl.h>
-#include <err.h>
-#ifdef HAVE_OPENSSL_ENGINE_H
-#include <engine.h>
-#endif
-#ifdef HAVE_OPENSSL_PKCS12_H
-#include <pkcs12.h>
-#endif
 #endif /* USE_OPENSSL */
-#ifdef USE_GNUTLS
-#error Configuration error; cannot use GnuTLS *and* OpenSSL.
-#endif
-#endif /* USE_SSLEAY */
 
 #ifdef USE_GNUTLS
 #include <gnutls/gnutls.h>
 #endif
 
-#ifdef USE_POLARSSL
+#ifdef USE_MBEDTLS
+
+#include <mbedtls/ssl.h>
+#include <mbedtls/version.h>
+#include <mbedtls/entropy.h>
+#include <mbedtls/ctr_drbg.h>
+
+#elif defined USE_POLARSSL
+
 #include <polarssl/ssl.h>
 #include <polarssl/version.h>
 #if POLARSSL_VERSION_NUMBER<0x01010000
 #include <polarssl/entropy.h>
 #include <polarssl/ctr_drbg.h>
 #endif /* POLARSSL_VERSION_NUMBER<0x01010000 */
+
 #endif /* USE_POLARSSL */
 
 #ifdef USE_CYASSL
 #endif
 
 #ifdef USE_AXTLS
+#include <axTLS/config.h>
 #include <axTLS/ssl.h>
 #undef malloc
 #undef calloc
 #define HEADERSIZE 256
 
 #define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
+#define GOOD_EASY_HANDLE(x) \
+  ((x) && (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER))
 
 /* Some convenience macros to get the larger/smaller value out of two given.
    We prefix with CURL to prevent name collisions. */
@@ -288,25 +274,31 @@ struct ssl_connect_data {
      current state of the connection. */
   bool use;
   ssl_connection_state state;
-#ifdef USE_NGHTTP2
-  bool asked_for_h2;
-#endif
-#ifdef USE_SSLEAY
+  ssl_connect_state connecting_state;
+#if defined(USE_OPENSSL)
   /* these ones requires specific SSL-types */
   SSL_CTX* ctx;
   SSL*     handle;
   X509*    server_cert;
-  ssl_connect_state connecting_state;
-#endif /* USE_SSLEAY */
-#ifdef USE_GNUTLS
+#elif defined(USE_GNUTLS)
   gnutls_session_t session;
   gnutls_certificate_credentials_t cred;
 #ifdef USE_TLS_SRP
   gnutls_srp_client_credentials_t srp_client_cred;
 #endif
-  ssl_connect_state connecting_state;
-#endif /* USE_GNUTLS */
-#ifdef USE_POLARSSL
+#elif defined(USE_MBEDTLS)
+  mbedtls_ctr_drbg_context ctr_drbg;
+  mbedtls_entropy_context entropy;
+  mbedtls_ssl_context ssl;
+  mbedtls_ssl_session ssn;
+  int server_fd;
+  mbedtls_x509_crt cacert;
+  mbedtls_x509_crt clicert;
+  mbedtls_x509_crl crl;
+  mbedtls_pk_context pk;
+  mbedtls_ssl_config config;
+  const char *protocols[3];
+#elif defined(USE_POLARSSL)
   ctr_drbg_context ctr_drbg;
   entropy_context entropy;
   ssl_context ssl;
@@ -316,48 +308,40 @@ struct ssl_connect_data {
   x509_crt clicert;
   x509_crl crl;
   rsa_context rsa;
-  ssl_connect_state connecting_state;
-#endif /* USE_POLARSSL */
-#ifdef USE_CYASSL
+#elif defined(USE_CYASSL)
   SSL_CTX* ctx;
   SSL*     handle;
-  ssl_connect_state connecting_state;
-#endif /* USE_CYASSL */
-#ifdef USE_NSS
+#elif defined(USE_NSS)
   PRFileDesc *handle;
   char *client_nickname;
   struct SessionHandle *data;
   struct curl_llist *obj_list;
   PK11GenericObject *obj_clicert;
-  ssl_connect_state connecting_state;
-#endif /* USE_NSS */
-#ifdef USE_GSKIT
+#elif defined(USE_GSKIT)
   gsk_handle handle;
   int iocport;
-  ssl_connect_state connecting_state;
-#endif
-#ifdef USE_AXTLS
+#elif defined(USE_AXTLS)
   SSL_CTX* ssl_ctx;
   SSL*     ssl;
-  ssl_connect_state connecting_state;
-#endif /* USE_AXTLS */
-#ifdef USE_SCHANNEL
+#elif defined(USE_SCHANNEL)
   struct curl_schannel_cred *cred;
   struct curl_schannel_ctxt *ctxt;
   SecPkgContext_StreamSizes stream_sizes;
-  ssl_connect_state connecting_state;
   size_t encdata_length, decdata_length;
   size_t encdata_offset, decdata_offset;
   unsigned char *encdata_buffer, *decdata_buffer;
   unsigned long req_flags, ret_flags;
-#endif /* USE_SCHANNEL */
-#ifdef USE_DARWINSSL
+  CURLcode recv_unrecoverable_err; /* schannel_recv had an unrecoverable err */
+  bool recv_sspi_close_notify; /* true if connection closed by close_notify */
+  bool recv_connection_closed; /* true if connection closed, regardless how */
+#elif defined(USE_DARWINSSL)
   SSLContextRef ssl_ctx;
   curl_socket_t ssl_sockfd;
-  ssl_connect_state connecting_state;
   bool ssl_direction; /* true if writing, false if reading */
   size_t ssl_write_buffered_length;
-#endif /* USE_DARWINSSL */
+#elif defined(USE_SSL)
+#error "SSL backend specific information missing from ssl_connect_data"
+#endif
 };
 
 struct ssl_config_data {
@@ -366,6 +350,7 @@ struct ssl_config_data {
 
   bool verifypeer;       /* set TRUE if this is desired */
   bool verifyhost;       /* set TRUE if CN/SAN must match hostname */
+  bool verifystatus;     /* set TRUE if certificate status must be checked */
   char *CApath;          /* certificate dir (doesn't work on windows) */
   char *CAfile;          /* certificate to verify peer against */
   const char *CRLfile;   /* CRL to check certificate revocation */
@@ -378,6 +363,7 @@ struct ssl_config_data {
   void *fsslctxp;        /* parameter for call back */
   bool sessionid;        /* cache session IDs or not */
   bool certinfo;         /* gather lots of certificate info */
+  bool falsestart;
 
 #ifdef USE_TLS_SRP
   char *username; /* TLS username (for, e.g., SRP) */
@@ -542,11 +528,6 @@ struct ConnectBits {
                          requests */
   bool netrc;         /* name+password provided by netrc */
   bool userpwd_in_url; /* name+password found in url */
-
-  bool done;          /* set to FALSE when Curl_do() is called and set to TRUE
-                         when Curl_done() is called, to prevent Curl_done() to
-                         get invoked twice when the multi interface is
-                         used. */
   bool stream_was_rewound; /* Indicates that the stream was rewound after a
                               request read past the end of its response byte
                               boundary */
@@ -556,6 +537,7 @@ struct ConnectBits {
   bool bound; /* set true if bind() has already been done on this socket/
                  connection */
   bool type_set;  /* type= was used in the URL */
+  bool multiplex; /* connection is multiplexed */
 };
 
 struct hostname {
@@ -628,12 +610,6 @@ enum upgrade101 {
   UPGR101_WORKING             /* talking upgraded protocol */
 };
 
-enum negotiatenpn {
-  NPN_INIT,                   /* default state */
-  NPN_HTTP1_1,                /* HTTP/1.1 negotiated */
-  NPN_HTTP2                   /* HTTP2 (draft-xx) negotiated */
-};
-
 /*
  * Request specific data in the easy handle (SessionHandle).  Previously,
  * these members were on the connectdata struct but since a conn struct may
@@ -691,7 +667,6 @@ struct SingleRequest {
 #define IDENTITY 0              /* No encoding */
 #define DEFLATE 1               /* zlib deflate [RFC 1950 & 1951] */
 #define GZIP 2                  /* gzip algorithm [RFC 1952] */
-#define COMPRESS 3              /* Not handled, added for completeness */
 
 #ifdef HAVE_LIBZ
   zlibInitState zlib_init;      /* possible zlib init state;
@@ -925,7 +900,7 @@ struct connectdata {
   char *passwd;  /* password string, allocated */
   char *options; /* options string, allocated */
 
-  char *xoauth2_bearer; /* bearer token for xoauth2, allocated */
+  char *oauth_bearer; /* bearer token for OAuth 2.0, allocated */
 
   char *proxyuser;    /* proxy user name string, allocated */
   char *proxypasswd;  /* proxy password string, allocated */
@@ -946,6 +921,7 @@ struct connectdata {
 
   struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */
   struct ssl_config_data ssl_config;
+  bool tls_upgraded;
 
   struct ConnectBits bits;    /* various state-flags for this connection */
 
@@ -1024,10 +1000,6 @@ struct connectdata {
 
   /*************** Request - specific items ************/
 
-  /* previously this was in the urldata struct */
-  curl_read_callback fread_func; /* function that reads the input */
-  void *fread_in;           /* pointer to pass to the fread() above */
-
 #if defined(USE_NTLM)
   struct ntlmdata ntlm;     /* NTLM differs from other authentication schemes
                                because it authenticates connections, not
@@ -1095,7 +1067,7 @@ struct connectdata {
   } tunnel_state[2]; /* two separate ones to allow FTP */
   struct connectbundle *bundle; /* The bundle we are member of */
 
-  enum negotiatenpn negnpn;
+  int negnpn; /* APLN or NPN TLS negotiated protocol, CURL_HTTP_VERSION* */
 };
 
 /* The end of connectdata. */
@@ -1293,9 +1265,9 @@ struct UrlState {
   void *resolver; /* resolver state, if it is used in the URL state -
                      ares_channel f.e. */
 
-#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
+#if defined(USE_OPENSSL) && defined(HAVE_OPENSSL_ENGINE_H)
   ENGINE *engine;
-#endif /* USE_SSLEAY */
+#endif /* USE_OPENSSL */
   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 */
@@ -1341,6 +1313,20 @@ struct UrlState {
 
   curl_off_t infilesize; /* size of file to upload, -1 means unknown.
                             Copied from set.filesize at start of operation */
+
+  int drain; /* Increased when this stream has data to read, even if its
+                socket not necessarily is readable. Decreased when
+                checked. */
+  bool done; /* set to FALSE when Curl_do() is called and set to TRUE when
+                Curl_done() is called, to prevent Curl_done() to get invoked
+                twice when the multi interface is used. */
+
+  curl_read_callback fread_func; /* read callback/function */
+  void *in;                      /* CURLOPT_READDATA */
+
+  struct SessionHandle *stream_depends_on;
+  bool stream_depends_e; /* set or don't set the Exclusive bit */
+  int stream_weight;
 };
 
 
@@ -1379,6 +1365,7 @@ enum dupstring {
   STRING_COOKIE,          /* HTTP cookie string to send */
   STRING_COOKIEJAR,       /* dump all cookies to this file */
   STRING_CUSTOMREQUEST,   /* HTTP/FTP/RTSP request/method to use */
+  STRING_DEFAULT_PROTOCOL, /* Protocol to use when the URL doesn't specify */
   STRING_DEVICE,          /* local network interface/address to use */
   STRING_ENCODING,        /* Accept-Encoding string */
   STRING_FTP_ACCOUNT,     /* ftp account data */
@@ -1421,6 +1408,8 @@ enum dupstring {
 #endif
 #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
   STRING_SOCKS5_GSSAPI_SERVICE, /* GSSAPI service name */
+  STRING_PROXY_SERVICE_NAME, /* Proxy service name */
+  STRING_SERVICE_NAME,    /* Service name */
 #endif
   STRING_MAIL_FROM,
   STRING_MAIL_AUTH,
@@ -1453,8 +1442,8 @@ struct UserDefined {
   long proxyport; /* If non-zero, use this port number by default. If the
                      proxy string features a ":[port]" that one will override
                      this. */
-  void *out;         /* the fetched file goes here */
-  void *in;          /* the uploaded file is read from here */
+  void *out;         /* CURLOPT_WRITEDATA */
+  void *in_set;      /* CURLOPT_READDATA */
   void *writeheader; /* write the header to this if non-NULL */
   void *rtp_out;     /* write RTP to this if non-NULL */
   long use_port;     /* which port to use (when not using default) */
@@ -1479,7 +1468,7 @@ struct UserDefined {
   curl_write_callback fwrite_func;   /* function that stores the output */
   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 */
+  curl_read_callback fread_func_set; /* 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; /* OLD and deprecated progress callback  */
@@ -1511,7 +1500,8 @@ struct UserDefined {
   long connecttimeout;  /* in milliseconds, 0 means no timeout */
   long accepttimeout;   /* in milliseconds, 0 means no timeout */
   long server_response_timeout; /* in milliseconds, 0 means no timeout */
-  long tftp_blksize ; /* in bytes, 0 means use default */
+  long tftp_blksize;    /* in bytes, 0 means use default */
+  bool tftp_no_options; /* do not send TFTP options requests */
   curl_off_t filesize;  /* size of file to upload, -1 means unknown */
   long low_speed_limit; /* bytes/second */
   long low_speed_time;  /* number of seconds */
@@ -1608,6 +1598,7 @@ struct UserDefined {
   bool connect_only;     /* make connection, let application use the socket */
   bool ssl_enable_beast; /* especially allow this flaw for interoperability's
                             sake*/
+  bool ssl_no_revoke;    /* disable SSL certificate revocation checks */
   long ssh_auth_types;   /* allowed SSH auth types */
   bool http_te_skip;     /* pass the raw body data to the user, even when
                             transfer-encoded (chunked, compressed) */
@@ -1649,8 +1640,14 @@ struct UserDefined {
 
   bool ssl_enable_npn;  /* TLS NPN extension? */
   bool ssl_enable_alpn; /* TLS ALPN extension? */
-
+  bool path_as_is;      /* allow dotdots? */
+  bool pipewait;        /* wait for pipe/multiplex status before starting a
+                           new connection */
   long expect_100_timeout; /* in milliseconds */
+
+  struct SessionHandle *stream_depends_on;
+  bool stream_depends_e; /* set or don't set the Exclusive bit */
+  int stream_weight;
 };
 
 struct Names {
index 9ac9226..1292445 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -26,9 +26,7 @@
 #include "urldata.h"
 #include "vtls/vtls.h"
 #include "http2.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #ifdef USE_ARES
 #  if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
 #include <stringprep.h>
 #endif
 
+#ifdef USE_LIBPSL
+#include <libpsl.h>
+#endif
+
 #if defined(HAVE_ICONV) && defined(CURL_DOES_CONVERSIONS)
 #include <iconv.h>
 #endif
 #define CURL_LIBSSH2_VERSION LIBSSH2_VERSION
 #endif
 
+void Curl_version_init(void);
+
+/* For thread safety purposes this function is called by global_init so that
+   the static data in both version functions is initialized. */
+void Curl_version_init(void)
+{
+  curl_version();
+  curl_version_info(CURLVERSION_NOW);
+}
+
 char *curl_version(void)
 {
+  static bool initialized;
   static char version[200];
   char *ptr = version;
   size_t len;
   size_t left = sizeof(version);
 
+  if(initialized)
+    return version;
+
   strcpy(ptr, LIBCURL_NAME "/" LIBCURL_VERSION);
   len = strlen(ptr);
   left -= len;
@@ -102,6 +118,11 @@ char *curl_version(void)
     ptr += len;
   }
 #endif
+#ifdef USE_LIBPSL
+  len = snprintf(ptr, left, " libpsl/%s", psl_get_version());
+  left -= len;
+  ptr += len;
+#endif
 #ifdef USE_WIN32_IDN
   len = snprintf(ptr, left, " WinIDN");
   left -= len;
@@ -153,6 +174,7 @@ char *curl_version(void)
   }
 #endif
 
+  initialized = true;
   return version;
 }
 
@@ -299,6 +321,9 @@ static curl_version_info_data version_info = {
 #if defined(USE_UNIX_SOCKETS)
   | CURL_VERSION_UNIX_SOCKETS
 #endif
+#if defined(USE_LIBPSL)
+  | CURL_VERSION_PSL
+#endif
   ,
   NULL, /* ssl_version */
   0,    /* ssl_version_num, this is kept at zero */
@@ -313,12 +338,18 @@ static curl_version_info_data version_info = {
 
 curl_version_info_data *curl_version_info(CURLversion stamp)
 {
+  static bool initialized;
 #ifdef USE_LIBSSH2
   static char ssh_buffer[80];
 #endif
-
 #ifdef USE_SSL
   static char ssl_buffer[80];
+#endif
+
+  if(initialized)
+    return &version_info;
+
+#ifdef USE_SSL
   Curl_ssl_version(ssl_buffer, sizeof(ssl_buffer));
   version_info.ssl_version = ssl_buffer;
 #endif
@@ -360,5 +391,6 @@ curl_version_info_data *curl_version_info(CURLversion stamp)
 
   (void)stamp; /* avoid compiler warnings, we don't use this */
 
+  initialized = true;
   return &version_info;
 }
index 1b577b1..d9c5f99 100644 (file)
@@ -6,11 +6,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2010, DirecTV, Contact: Eric Hu, <ehu@directv.com>.
- * Copyright (C) 2010 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2010 - 2015, 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.
+ * are also available at https://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
@@ -29,6 +29,7 @@
 #include "curl_setup.h"
 
 #ifdef USE_AXTLS
+#include <axTLS/config.h>
 #include <axTLS/ssl.h>
 #include "axtls.h"
 
 #include "parsedate.h"
 #include "connect.h" /* for the connect timeout */
 #include "select.h"
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-#include "curl_memory.h"
+#include "curl_printf.h"
+#include "hostcheck.h"
 #include <unistd.h>
-/* The last #include file should be: */
+
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
-#include "hostcheck.h"
 
 
 /* Global axTLS init, called from Curl_ssl_init() */
@@ -463,9 +464,11 @@ Curl_axtls_connect(struct connectdata *conn,
                   int sockindex)
 
 {
+  struct SessionHandle *data = conn->data;
   CURLcode conn_step = connect_prep(conn, sockindex);
   int ssl_fcn_return;
   SSL *ssl = conn->ssl[sockindex].ssl;
+  long timeout_ms;
 
   if(conn_step != CURLE_OK) {
     Curl_axtls_close(conn, sockindex);
@@ -474,14 +477,23 @@ Curl_axtls_connect(struct connectdata *conn,
 
   /* Check to make sure handshake was ok. */
   while(ssl_handshake_status(ssl) != SSL_OK) {
+    /* check allowed time left */
+    timeout_ms = Curl_timeleft(data, NULL, TRUE);
+
+    if(timeout_ms < 0) {
+      /* no need to continue if time already is up */
+      failf(data, "SSL connection timeout");
+      return CURLE_OPERATION_TIMEDOUT;
+    }
+
     ssl_fcn_return = ssl_read(ssl, NULL);
     if(ssl_fcn_return < 0) {
       Curl_axtls_close(conn, sockindex);
       ssl_display_error(ssl_fcn_return); /* goes to stdout. */
       return map_error_to_curl(ssl_fcn_return);
     }
+    /* TODO: avoid polling */
     usleep(10000);
-    /* TODO: check for timeout as this could hang indefinitely otherwise */
   }
   infof (conn->data, "handshake completed successfully\n");
 
@@ -515,12 +527,6 @@ static ssize_t axtls_send(struct connectdata *conn,
   return rc;
 }
 
-void Curl_axtls_close_all(struct SessionHandle *data)
-{
-  (void)data;
-  infof(data, "  Curl_axtls_close_all\n");
-}
-
 void Curl_axtls_close(struct connectdata *conn, int sockindex)
 {
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
@@ -677,7 +683,7 @@ int Curl_axtls_random(struct SessionHandle *data,
      * race condition is that some global resources will leak. */
     RNG_initialize();
   }
-  get_random(length, entropy);
+  get_random((int)length, entropy);
   return 0;
 }
 
index 62b4ab0..b9d441f 100644 (file)
@@ -8,11 +8,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2010, DirecTV, Contact: Eric Hu <ehu@directv.com>
- * Copyright (C) 2010 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2010 - 2015, 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.
+ * are also available at https://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
@@ -35,10 +35,6 @@ CURLcode Curl_axtls_connect_nonblocking(
     int sockindex,
     bool *done);
 
-/* tell axTLS to close down all open information regarding connections (and
-   thus session ID caching etc) */
-void Curl_axtls_close_all(struct SessionHandle *data);
-
  /* close a SSL connection */
 void Curl_axtls_close(struct connectdata *conn, int sockindex);
 
@@ -50,13 +46,16 @@ int Curl_axtls_random(struct SessionHandle *data,
                       unsigned char *entropy,
                       size_t length);
 
+/* Set the API backend definition to axTLS */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_AXTLS
+
 /* API setup for axTLS */
 #define curlssl_init Curl_axtls_init
 #define curlssl_cleanup Curl_axtls_cleanup
 #define curlssl_connect Curl_axtls_connect
 #define curlssl_connect_nonblocking Curl_axtls_connect_nonblocking
 #define curlssl_session_free(x)  Curl_axtls_session_free(x)
-#define curlssl_close_all Curl_axtls_close_all
+#define curlssl_close_all(x) ((void)x)
 #define curlssl_close Curl_axtls_close
 #define curlssl_shutdown(x,y) Curl_axtls_shutdown(x,y)
 #define curlssl_set_engine(x,y) ((void)x, (void)y, CURLE_NOT_BUILT_IN)
@@ -66,7 +65,6 @@ int Curl_axtls_random(struct SessionHandle *data,
 #define curlssl_check_cxn(x) Curl_axtls_check_cxn(x)
 #define curlssl_data_pending(x,y) ((void)x, (void)y, 0)
 #define curlssl_random(x,y,z) Curl_axtls_random(x,y,z)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_AXTLS
 
 #endif /* USE_AXTLS */
 #endif /* HEADER_CURL_AXTLS_H */
index 3333fc3..f6b57af 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #ifdef USE_CYASSL
 
+#define WOLFSSL_OPTIONS_IGNORE_SYS
+/* CyaSSL's version.h, which should contain only the version, should come
+before all other CyaSSL includes and be immediately followed by build config
+aka options.h. https://curl.haxx.se/mail/lib-2015-04/0069.html */
+#include <cyassl/version.h>
+#if defined(HAVE_CYASSL_OPTIONS_H) && (LIBCYASSL_VERSION_HEX > 0x03004008)
+#if defined(CYASSL_API) || defined(WOLFSSL_API)
+/* Safety measure. If either is defined some API include was already included
+and that's a problem since options.h hasn't been included yet. */
+#error "CyaSSL API was included before the CyaSSL build options."
+#endif
+#include <cyassl/options.h>
+#endif
+
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
 #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"
+#include "x509asn1.h"
+#include "curl_printf.h"
 
 #include <cyassl/ssl.h>
 #ifdef HAVE_CYASSL_ERROR_SSL_H
 #include <cyassl/error.h>
 #endif
 #include <cyassl/ctaocrypt/random.h>
+#include <cyassl/ctaocrypt/sha256.h>
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
+#if LIBCYASSL_VERSION_HEX < 0x02007002 /* < 2.7.2 */
+#define CYASSL_MAX_ERROR_SZ 80
+#endif
+
 static Curl_recv cyassl_recv;
 static Curl_send cyassl_send;
 
@@ -82,42 +100,65 @@ static CURLcode
 cyassl_connect_step1(struct connectdata *conn,
                      int sockindex)
 {
+  char error_buffer[CYASSL_MAX_ERROR_SZ];
   struct SessionHandle *data = conn->data;
   struct ssl_connect_data* conssl = &conn->ssl[sockindex];
   SSL_METHOD* req_method = NULL;
   void* ssl_sessionid = NULL;
   curl_socket_t sockfd = conn->sock[sockindex];
+#ifdef HAVE_SNI
+  bool sni = FALSE;
+#define use_sni(x)  sni = (x)
+#else
+#define use_sni(x)  Curl_nop_stmt
+#endif
 
   if(conssl->state == ssl_connection_complete)
     return CURLE_OK;
 
-  /* CyaSSL doesn't support SSLv2 */
-  if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
-    failf(data, "CyaSSL does not support SSLv2");
-    return CURLE_SSL_CONNECT_ERROR;
-  }
-
   /* check to see if we've been told to use an explicit SSL/TLS version */
   switch(data->set.ssl.version) {
-  default:
   case CURL_SSLVERSION_DEFAULT:
   case CURL_SSLVERSION_TLSv1:
-    infof(data, "CyaSSL cannot be configured to use TLS 1.0-1.2, "
+#if LIBCYASSL_VERSION_HEX >= 0x03003000 /* >= 3.3.0 */
+    /* minimum protocol version is set later after the CTX object is created */
+    req_method = SSLv23_client_method();
+#else
+    infof(data, "CyaSSL <3.3.0 cannot be configured to use TLS 1.0-1.2, "
           "TLS 1.0 is used exclusively\n");
     req_method = TLSv1_client_method();
+#endif
+    use_sni(TRUE);
     break;
   case CURL_SSLVERSION_TLSv1_0:
     req_method = TLSv1_client_method();
+    use_sni(TRUE);
     break;
   case CURL_SSLVERSION_TLSv1_1:
     req_method = TLSv1_1_client_method();
+    use_sni(TRUE);
     break;
   case CURL_SSLVERSION_TLSv1_2:
     req_method = TLSv1_2_client_method();
+    use_sni(TRUE);
     break;
   case CURL_SSLVERSION_SSLv3:
+    /* before WolfSSL SSLv3 was enabled by default, and starting in WolfSSL
+       we check for its presence since it is built without it by default */
+#if !defined(WOLFSSL_VERSION) || defined(HAVE_WOLFSSLV3_CLIENT_METHOD)
     req_method = SSLv3_client_method();
+    use_sni(FALSE);
+#else
+    failf(data, "No support for SSLv3");
+    return CURLE_NOT_BUILT_IN;
+#endif
     break;
+  case CURL_SSLVERSION_SSLv2:
+    failf(data, "CyaSSL does not support SSLv2");
+    return CURLE_SSL_CONNECT_ERROR;
+  default:
+    failf(data, "Unrecognized parameter passed via CURLOPT_SSLVERSION");
+    return CURLE_SSL_CONNECT_ERROR;
   }
 
   if(!req_method) {
@@ -134,15 +175,36 @@ cyassl_connect_step1(struct connectdata *conn,
     return CURLE_OUT_OF_MEMORY;
   }
 
+  switch(data->set.ssl.version) {
+  case CURL_SSLVERSION_DEFAULT:
+  case CURL_SSLVERSION_TLSv1:
+#if LIBCYASSL_VERSION_HEX > 0x03004006 /* > 3.4.6 */
+    /* Versions 3.3.0 to 3.4.6 we know the minimum protocol version is whatever
+    minimum version of TLS was built in and at least TLS 1.0. For later library
+    versions that could change (eg TLS 1.0 built in but defaults to TLS 1.1) so
+    we have this short circuit evaluation to find the minimum supported TLS
+    version. We use wolfSSL_CTX_SetMinVersion and not CyaSSL_SetMinVersion
+    because only the former will work before the user's CTX callback is called.
+    */
+    if((wolfSSL_CTX_SetMinVersion(conssl->ctx, WOLFSSL_TLSV1) != 1) &&
+       (wolfSSL_CTX_SetMinVersion(conssl->ctx, WOLFSSL_TLSV1_1) != 1) &&
+       (wolfSSL_CTX_SetMinVersion(conssl->ctx, WOLFSSL_TLSV1_2) != 1)) {
+      failf(data, "SSL: couldn't set the minimum protocol version");
+      return CURLE_SSL_CONNECT_ERROR;
+    }
+#endif
+    break;
+  }
+
 #ifndef NO_FILESYSTEM
   /* load trusted cacert */
   if(data->set.str[STRING_SSL_CAFILE]) {
-    if(!SSL_CTX_load_verify_locations(conssl->ctx,
-                                      data->set.str[STRING_SSL_CAFILE],
-                                      data->set.str[STRING_SSL_CAPATH])) {
+    if(1 != SSL_CTX_load_verify_locations(conssl->ctx,
+                                          data->set.str[STRING_SSL_CAFILE],
+                                          data->set.str[STRING_SSL_CAPATH])) {
       if(data->set.ssl.verifypeer) {
         /* Fail if we insist on successfully verifying the server. */
-        failf(data,"error setting certificate verify locations:\n"
+        failf(data, "error setting certificate verify locations:\n"
               "  CAfile: %s\n  CApath: %s",
               data->set.str[STRING_SSL_CAFILE]?
               data->set.str[STRING_SSL_CAFILE]: "none",
@@ -188,11 +250,7 @@ cyassl_connect_step1(struct connectdata *conn,
       return CURLE_SSL_CONNECT_ERROR;
     }
   }
-#else
-  if(CyaSSL_no_filesystem_verify(conssl->ctx)!= SSL_SUCCESS) {
-    return CURLE_SSL_CONNECT_ERROR;
-  }
-#endif /* NO_FILESYSTEM */
+#endif /* !NO_FILESYSTEM */
 
   /* SSL always tries to verify the peer, this only says whether it should
    * fail to connect if the verification fails, or if it should continue
@@ -202,6 +260,46 @@ cyassl_connect_step1(struct connectdata *conn,
                      data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE,
                      NULL);
 
+#ifdef HAVE_SNI
+  if(sni) {
+    struct in_addr addr4;
+#ifdef ENABLE_IPV6
+    struct in6_addr addr6;
+#endif
+    size_t hostname_len = strlen(conn->host.name);
+    if((hostname_len < USHRT_MAX) &&
+       (0 == Curl_inet_pton(AF_INET, conn->host.name, &addr4)) &&
+#ifdef ENABLE_IPV6
+       (0 == Curl_inet_pton(AF_INET6, conn->host.name, &addr6)) &&
+#endif
+       (CyaSSL_CTX_UseSNI(conssl->ctx, CYASSL_SNI_HOST_NAME, conn->host.name,
+                          (unsigned short)hostname_len) != 1)) {
+      infof(data, "WARNING: failed to configure server name indication (SNI) "
+            "TLS extension\n");
+    }
+  }
+#endif
+
+  /* give application a chance to interfere with SSL set up. */
+  if(data->set.ssl.fsslctx) {
+    CURLcode result = CURLE_OK;
+    result = (*data->set.ssl.fsslctx)(data, conssl->ctx,
+                                      data->set.ssl.fsslctxp);
+    if(result) {
+      failf(data, "error signaled by ssl ctx callback");
+      return result;
+    }
+  }
+#ifdef NO_FILESYSTEM
+  else if(data->set.ssl.verifypeer) {
+    failf(data, "SSL: Certificates couldn't be loaded because CyaSSL was built"
+          " with \"no filesystem\". Either disable peer verification"
+          " (insecure) or if you are building an application with libcurl you"
+          " can load certificates via CURLOPT_SSL_CTX_FUNCTION.");
+    return CURLE_SSL_CONNECT_ERROR;
+  }
+#endif
+
   /* Let's make an SSL structure */
   if(conssl->handle)
     SSL_free(conssl->handle);
@@ -216,7 +314,7 @@ cyassl_connect_step1(struct connectdata *conn,
     /* we got a session id, use it! */
     if(!SSL_set_session(conssl->handle, ssl_sessionid)) {
       failf(data, "SSL: SSL_set_session failed: %s",
-            ERR_error_string(SSL_get_error(conssl->handle, 0),NULL));
+            ERR_error_string(SSL_get_error(conssl->handle, 0), error_buffer));
       return CURLE_SSL_CONNECT_ERROR;
     }
     /* Informational message */
@@ -242,9 +340,6 @@ cyassl_connect_step2(struct connectdata *conn,
   struct SessionHandle *data = conn->data;
   struct ssl_connect_data* conssl = &conn->ssl[sockindex];
 
-  infof(data, "CyaSSL: Connecting to %s:%d\n",
-        conn->host.name, conn->remote_port);
-
   conn->recv[sockindex] = cyassl_recv;
   conn->send[sockindex] = cyassl_send;
 
@@ -257,7 +352,7 @@ cyassl_connect_step2(struct connectdata *conn,
 
   ret = SSL_connect(conssl->handle);
   if(ret != 1) {
-    char error_buffer[80];
+    char error_buffer[CYASSL_MAX_ERROR_SZ];
     int  detail = SSL_get_error(conssl->handle, ret);
 
     if(SSL_ERROR_WANT_READ == detail) {
@@ -317,6 +412,51 @@ cyassl_connect_step2(struct connectdata *conn,
     }
   }
 
+  if(data->set.str[STRING_SSL_PINNEDPUBLICKEY]) {
+#if defined(HAVE_WOLFSSL_GET_PEER_CERTIFICATE) ||       \
+  defined(HAVE_CYASSL_GET_PEER_CERTIFICATE)
+    X509 *x509;
+    const char *x509_der;
+    int x509_der_len;
+    curl_X509certificate x509_parsed;
+    curl_asn1Element *pubkey;
+    CURLcode result;
+
+    x509 = SSL_get_peer_certificate(conssl->handle);
+    if(!x509) {
+      failf(data, "SSL: failed retrieving server certificate");
+      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    }
+
+    x509_der = (const char *)CyaSSL_X509_get_der(x509, &x509_der_len);
+    if(!x509_der) {
+      failf(data, "SSL: failed retrieving ASN.1 server certificate");
+      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    }
+
+    memset(&x509_parsed, 0, sizeof x509_parsed);
+    Curl_parseX509(&x509_parsed, x509_der, x509_der + x509_der_len);
+
+    pubkey = &x509_parsed.subjectPublicKeyInfo;
+    if(!pubkey->header || pubkey->end <= pubkey->header) {
+      failf(data, "SSL: failed retrieving public key from server certificate");
+      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    }
+
+    result = Curl_pin_peer_pubkey(data,
+                                  data->set.str[STRING_SSL_PINNEDPUBLICKEY],
+                                  (const unsigned char *)pubkey->header,
+                                  (size_t)(pubkey->end - pubkey->header));
+    if(result) {
+      failf(data, "SSL: public key does not match pinned public key!");
+      return result;
+    }
+#else
+    failf(data, "Library lacks pinning support built-in");
+    return CURLE_NOT_BUILT_IN;
+#endif
+  }
+
   conssl->connecting_state = ssl_connect_3;
   infof(data, "SSL connected\n");
 
@@ -369,7 +509,7 @@ static ssize_t cyassl_send(struct connectdata *conn,
                            size_t len,
                            CURLcode *curlcode)
 {
-  char error_buffer[80];
+  char error_buffer[CYASSL_MAX_ERROR_SZ];
   int  memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
   int  rc     = SSL_write(conn->ssl[sockindex].handle, mem, memlen);
 
@@ -393,11 +533,6 @@ static ssize_t cyassl_send(struct connectdata *conn,
   return rc;
 }
 
-void Curl_cyassl_close_all(struct SessionHandle *data)
-{
-  (void)data;
-}
-
 void Curl_cyassl_close(struct connectdata *conn, int sockindex)
 {
   struct ssl_connect_data *conssl = &conn->ssl[sockindex];
@@ -419,7 +554,7 @@ static ssize_t cyassl_recv(struct connectdata *conn,
                            size_t buffersize,
                            CURLcode *curlcode)
 {
-  char error_buffer[80];
+  char error_buffer[CYASSL_MAX_ERROR_SZ];
   int  buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
   int  nread    = SSL_read(conn->ssl[num].handle, buf, buffsize);
 
@@ -455,7 +590,9 @@ void Curl_cyassl_session_free(void *ptr)
 
 size_t Curl_cyassl_version(char *buffer, size_t size)
 {
-#ifdef CYASSL_VERSION
+#ifdef WOLFSSL_VERSION
+  return snprintf(buffer, size, "wolfSSL/%s", WOLFSSL_VERSION);
+#elif defined(CYASSL_VERSION)
   return snprintf(buffer, size, "CyaSSL/%s", CYASSL_VERSION);
 #else
   return snprintf(buffer, size, "CyaSSL/%s", "<1.8.8");
@@ -465,10 +602,7 @@ size_t Curl_cyassl_version(char *buffer, size_t size)
 
 int Curl_cyassl_init(void)
 {
-  if(CyaSSL_Init() == 0)
-    return 1;
-
-  return -1;
+  return (CyaSSL_Init() == SSL_SUCCESS);
 }
 
 
@@ -644,9 +778,23 @@ int Curl_cyassl_random(struct SessionHandle *data,
   (void)data;
   if(InitRng(&rng))
     return 1;
-  if(RNG_GenerateBlock(&rng, entropy, length))
+  if(length > UINT_MAX)
+    return 1;
+  if(RNG_GenerateBlock(&rng, entropy, (unsigned)length))
     return 1;
   return 0;
 }
 
+void Curl_cyassl_sha256sum(const unsigned char *tmp, /* input */
+                      size_t tmplen,
+                      unsigned char *sha256sum /* output */,
+                      size_t unused)
+{
+  Sha256 SHA256pw;
+  (void)unused;
+  InitSha256(&SHA256pw);
+  Sha256Update(&SHA256pw, tmp, (word32)tmplen);
+  Sha256Final(&SHA256pw, sha256sum);
+}
+
 #endif
index a691e16..52a5e15 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #ifdef USE_CYASSL
 
 CURLcode Curl_cyassl_connect(struct connectdata *conn, int sockindex);
-bool Curl_cyassl_data_pending(const struct connectdata* conn,int connindex);
+bool Curl_cyassl_data_pending(const struct connectdata* conn, int connindex);
 int Curl_cyassl_shutdown(struct connectdata* conn, int sockindex);
 
-/* tell CyaSSL to close down all open information regarding connections (and
-   thus session ID caching etc) */
-void Curl_cyassl_close_all(struct SessionHandle *data);
-
  /* close a SSL connection */
 void Curl_cyassl_close(struct connectdata *conn, int sockindex);
 
@@ -46,6 +42,16 @@ CURLcode Curl_cyassl_connect_nonblocking(struct connectdata *conn,
 int Curl_cyassl_random(struct SessionHandle *data,
                        unsigned char *entropy,
                        size_t length);
+void Curl_cyassl_sha256sum(const unsigned char *tmp, /* input */
+                     size_t tmplen,
+                     unsigned char *sha256sum, /* output */
+                     size_t unused);
+
+/* Set the API backend definition to Schannel */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_CYASSL
+
+/* this backend supports CURLOPT_SSL_CTX_* */
+#define have_curlssl_ssl_ctx 1
 
 /* API setup for CyaSSL */
 #define curlssl_init Curl_cyassl_init
@@ -53,7 +59,7 @@ int Curl_cyassl_random(struct SessionHandle *data,
 #define curlssl_connect Curl_cyassl_connect
 #define curlssl_connect_nonblocking Curl_cyassl_connect_nonblocking
 #define curlssl_session_free(x)  Curl_cyassl_session_free(x)
-#define curlssl_close_all Curl_cyassl_close_all
+#define curlssl_close_all(x) ((void)x)
 #define curlssl_close Curl_cyassl_close
 #define curlssl_shutdown(x,y) Curl_cyassl_shutdown(x,y)
 #define curlssl_set_engine(x,y) ((void)x, (void)y, CURLE_NOT_BUILT_IN)
@@ -63,7 +69,7 @@ int Curl_cyassl_random(struct SessionHandle *data,
 #define curlssl_check_cxn(x) ((void)x, -1)
 #define curlssl_data_pending(x,y) Curl_cyassl_data_pending(x,y)
 #define curlssl_random(x,y,z) Curl_cyassl_random(x,y,z)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_CYASSL
+#define curlssl_sha256sum(a,b,c,d) Curl_cyassl_sha256sum(a,b,c,d)
 
 #endif /* USE_CYASSL */
 #endif /* HEADER_CURL_CYASSL_H */
similarity index 99%
rename from lib/vtls/curl_darwinssl.c
rename to lib/vtls/darwinssl.c
index c056198..ed587eb 100644 (file)
@@ -10,7 +10,7 @@
  *
  * 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.
+ * are also available at https://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
 #include "connect.h"
 #include "select.h"
 #include "vtls.h"
-#include "curl_darwinssl.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "darwinssl.h"
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -1461,9 +1459,12 @@ static CURLcode darwinssl_connect_step1(struct connectdata *conn,
 #if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
   /* We want to enable 1/n-1 when using a CBC cipher unless the user
      specifically doesn't want us doing that: */
-  if(SSLSetSessionOption != NULL)
+  if(SSLSetSessionOption != NULL) {
     SSLSetSessionOption(connssl->ssl_ctx, kSSLSessionOptionSendOneByteRecord,
                       !data->set.ssl_enable_beast);
+    SSLSetSessionOption(connssl->ssl_ctx, kSSLSessionOptionFalseStart,
+                      data->set.ssl.falsestart); /* false start support */
+  }
 #endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */
 
   /* Check if there's a cached ID we can/should use here! */
@@ -2229,12 +2230,6 @@ void Curl_darwinssl_close(struct connectdata *conn, int sockindex)
   connssl->ssl_sockfd = 0;
 }
 
-void Curl_darwinssl_close_all(struct SessionHandle *data)
-{
-  /* SecureTransport doesn't separate sessions from contexts, so... */
-  (void)data;
-}
-
 int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex)
 {
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
@@ -2372,6 +2367,14 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
   (void)CC_MD5(tmp, (CC_LONG)tmplen, md5sum);
 }
 
+bool Curl_darwinssl_false_start(void) {
+#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
+  if(SSLSetSessionOption != NULL)
+    return TRUE;
+#endif
+  return FALSE;
+}
+
 static ssize_t darwinssl_send(struct connectdata *conn,
                               int sockindex,
                               const void *mem,
similarity index 90%
rename from lib/vtls/curl_darwinssl.h
rename to lib/vtls/darwinssl.h
index 7c80edf..8b185b6 100644 (file)
@@ -8,11 +8,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, 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.
+ * are also available at https://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
@@ -32,9 +32,6 @@ CURLcode Curl_darwinssl_connect_nonblocking(struct connectdata *conn,
                                             int sockindex,
                                             bool *done);
 
-/* this function doesn't actually do anything */
-void Curl_darwinssl_close_all(struct SessionHandle *data);
-
 /* close a SSL connection */
 void Curl_darwinssl_close(struct connectdata *conn, int sockindex);
 
@@ -51,6 +48,10 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
                            size_t tmplen,
                            unsigned char *md5sum, /* output */
                            size_t md5len);
+bool Curl_darwinssl_false_start(void);
+
+/* Set the API backend definition to SecureTransport */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_DARWINSSL
 
 /* API setup for SecureTransport */
 #define curlssl_init() (1)
@@ -58,7 +59,7 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
 #define curlssl_connect Curl_darwinssl_connect
 #define curlssl_connect_nonblocking Curl_darwinssl_connect_nonblocking
 #define curlssl_session_free(x) Curl_darwinssl_session_free(x)
-#define curlssl_close_all Curl_darwinssl_close_all
+#define curlssl_close_all(x) ((void)x)
 #define curlssl_close Curl_darwinssl_close
 #define curlssl_shutdown(x,y) 0
 #define curlssl_set_engine(x,y) ((void)x, (void)y, CURLE_NOT_BUILT_IN)
@@ -69,7 +70,7 @@ void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
 #define curlssl_data_pending(x,y) Curl_darwinssl_data_pending(x, y)
 #define curlssl_random(x,y,z) ((void)x, Curl_darwinssl_random(y,z))
 #define curlssl_md5sum(a,b,c,d) Curl_darwinssl_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_DARWINSSL
+#define curlssl_false_start() Curl_darwinssl_false_start()
 
 #endif /* USE_DARWINSSL */
 #endif /* HEADER_CURL_DARWINSSL_H */
index ac05f05..a9a8a91 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -74,9 +74,7 @@
 #include "select.h"
 #include "strequal.h"
 #include "x509asn1.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 
 #include "curl_memory.h"
 /* The last #include file should be: */
@@ -625,7 +623,7 @@ static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
     sni = (char *) NULL;
     break;
   case CURL_SSLVERSION_SSLv3:
-    protoflags = CURL_GSKPROTO_SSLV2_MASK;
+    protoflags = CURL_GSKPROTO_SSLV3_MASK;
     sni = (char *) NULL;
     break;
   case CURL_SSLVERSION_TLSv1:
@@ -876,7 +874,7 @@ static CURLcode gskit_connect_step3(struct connectdata *conn, int sockindex)
       return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
     Curl_parseX509(&x509, cert, certend);
     p = &x509.subjectPublicKeyInfo;
-    result = Curl_pin_peer_pubkey(ptr, p->header, p->end - p->header);
+    result = Curl_pin_peer_pubkey(data, ptr, p->header, p->end - p->header);
     if(result) {
       failf(data, "SSL: public key does not match pinned public key!");
       return result;
@@ -986,13 +984,6 @@ void Curl_gskit_close(struct connectdata *conn, int sockindex)
 }
 
 
-void Curl_gskit_close_all(struct SessionHandle *data)
-{
-  /* Unimplemented. */
-  (void) data;
-}
-
-
 int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
 {
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
index baec823..41483cb 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #ifdef USE_GSKIT
 int Curl_gskit_init(void);
 void Curl_gskit_cleanup(void);
-CURLcode Curl_gskit_connect(struct connectdata * conn, int sockindex);
-CURLcode Curl_gskit_connect_nonblocking(struct connectdata * conn,
-                                        int sockindex, bool * done);
+CURLcode Curl_gskit_connect(struct connectdata *conn, int sockindex);
+CURLcode Curl_gskit_connect_nonblocking(struct connectdata *conn,
+                                        int sockindex, bool *done);
 void Curl_gskit_close(struct connectdata *conn, int sockindex);
-void Curl_gskit_close_all(struct SessionHandle * data);
-int Curl_gskit_shutdown(struct connectdata * conn, int sockindex);
+int Curl_gskit_shutdown(struct connectdata *conn, int sockindex);
 
-size_t Curl_gskit_version(char * buffer, size_t size);
-int Curl_gskit_check_cxn(struct connectdata * cxn);
+size_t Curl_gskit_version(char *buffer, size_t size);
+int Curl_gskit_check_cxn(struct connectdata *cxn);
+
+/* Set the API backend definition to GSKit */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_GSKIT
 
 /* this backend supports CURLOPT_CERTINFO */
 #define have_curlssl_certinfo 1
@@ -53,7 +55,7 @@ int Curl_gskit_check_cxn(struct connectdata * cxn);
 
 /*  No session handling for GSKit */
 #define curlssl_session_free(x) Curl_nop_stmt
-#define curlssl_close_all Curl_gskit_close_all
+#define curlssl_close_all(x) ((void)x)
 #define curlssl_close Curl_gskit_close
 #define curlssl_shutdown(x,y) Curl_gskit_shutdown(x,y)
 #define curlssl_set_engine(x,y) CURLE_NOT_BUILT_IN
@@ -63,7 +65,7 @@ int Curl_gskit_check_cxn(struct connectdata * cxn);
 #define curlssl_check_cxn(x) Curl_gskit_check_cxn(x)
 #define curlssl_data_pending(x,y) 0
 #define curlssl_random(x,y,z) -1
-#define CURL_SSL_BACKEND CURLSSLBACKEND_GSKIT
+
 #endif /* USE_GSKIT */
 
 #endif /* HEADER_CURL_GSKIT_H */
index 5d4e48a..1fef54b 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -39,6 +39,7 @@
 #ifdef USE_GNUTLS_NETTLE
 #include <gnutls/crypto.h>
 #include <nettle/md5.h>
+#include <nettle/sha2.h>
 #else
 #include <gcrypt.h>
 #endif
 #include "select.h"
 #include "rawstr.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "x509asn1.h"
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
 
 /*
  Some hackish cast macros based on:
- http://library.gnome.org/devel/glib/unstable/glib-Type-Conversion-Macros.html
+ https://developer.gnome.org/glib/unstable/glib-Type-Conversion-Macros.html
 */
 #ifndef GNUTLS_POINTER_TO_INT_CAST
 #define GNUTLS_POINTER_TO_INT_CAST(p) ((int) (long) (p))
@@ -92,14 +92,23 @@ static bool gtls_inited = FALSE;
 #    define GNUTLS_MAPS_WINSOCK_ERRORS 1
 #  endif
 
-#  ifdef USE_NGHTTP2
-#    undef HAS_ALPN
-#    if (GNUTLS_VERSION_NUMBER >= 0x030200)
-#      define HAS_ALPN
-#    endif
+#  if (GNUTLS_VERSION_NUMBER >= 0x030200)
+#    define HAS_ALPN
+#  endif
+
+#  if (GNUTLS_VERSION_NUMBER >= 0x03020d)
+#    define HAS_OCSP
+#  endif
+
+#  if (GNUTLS_VERSION_NUMBER >= 0x030306)
+#    define HAS_CAPATH
 #  endif
 #endif
 
+#ifdef HAS_OCSP
+# include <gnutls/ocsp.h>
+#endif
+
 /*
  * Custom push and pull callback functions used by GNU TLS to read and write
  * to the socket.  These functions are simple wrappers to send() and recv()
@@ -204,7 +213,7 @@ static void showtime(struct SessionHandle *data,
 
   snprintf(data->state.buffer,
            BUFSIZE,
-           "\t %s: %s, %02d %s %4d %02d:%02d:%02d GMT\n",
+           "\t %s: %s, %02d %s %4d %02d:%02d:%02d GMT",
            text,
            Curl_wkday[tm->tm_wday?tm->tm_wday-1:6],
            tm->tm_mday,
@@ -223,7 +232,7 @@ static gnutls_datum_t load_file (const char *file)
   long filelen;
   void *ptr;
 
-  if(!(f = fopen(file, "r")))
+  if(!(f = fopen(file, "rb")))
     return loaded_file;
   if(fseek(f, 0, SEEK_END) != 0
      || (filelen = ftell(f)) < 0
@@ -319,7 +328,8 @@ static CURLcode handshake(struct connectdata *conn,
       if(strerr == NULL)
         strerr = gnutls_strerror(rc);
 
-      failf(data, "gnutls_handshake() warning: %s", strerr);
+      infof(data, "gnutls_handshake() warning: %s\n", strerr);
+      continue;
     }
     else if(rc < 0) {
       const char *strerr = NULL;
@@ -392,10 +402,6 @@ gtls_connect_step1(struct connectdata *conn,
   const char* prioritylist;
   const char *err = NULL;
 #endif
-#ifdef HAS_ALPN
-  int protocols_size = 2;
-  gnutls_datum_t protocols[2];
-#endif
 
   if(conn->ssl[sockindex].state == ssl_connection_complete)
     /* to make us tolerant against being called more than once for the
@@ -463,6 +469,32 @@ gtls_connect_step1(struct connectdata *conn,
             rc, data->set.ssl.CAfile);
   }
 
+#ifdef HAS_CAPATH
+  if(data->set.ssl.CApath) {
+    /* set the trusted CA cert directory */
+    rc = gnutls_certificate_set_x509_trust_dir(conn->ssl[sockindex].cred,
+                                                data->set.ssl.CApath,
+                                                GNUTLS_X509_FMT_PEM);
+    if(rc < 0) {
+      infof(data, "error reading ca cert file %s (%s)\n",
+            data->set.ssl.CAfile, gnutls_strerror(rc));
+      if(data->set.ssl.verifypeer)
+        return CURLE_SSL_CACERT_BADFILE;
+    }
+    else
+      infof(data, "found %d certificates in %s\n",
+            rc, data->set.ssl.CApath);
+  }
+#endif
+
+#ifdef CURL_CA_FALLBACK
+  /* use system ca certificate store as fallback */
+  if(data->set.ssl.verifypeer &&
+     !(data->set.ssl.CAfile || data->set.ssl.CApath)) {
+    gnutls_certificate_set_x509_system_trust(conn->ssl[sockindex].cred);
+  }
+#endif
+
   if(data->set.ssl.CRLfile) {
     /* set the CRL list file */
     rc = gnutls_certificate_set_x509_crl_file(conn->ssl[sockindex].cred,
@@ -609,33 +641,67 @@ gtls_connect_step1(struct connectdata *conn,
 #endif
 
 #ifdef HAS_ALPN
-  if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
-    if(data->set.ssl_enable_alpn) {
-      protocols[0].data = NGHTTP2_PROTO_VERSION_ID;
-      protocols[0].size = NGHTTP2_PROTO_VERSION_ID_LEN;
-      protocols[1].data = ALPN_HTTP_1_1;
-      protocols[1].size = ALPN_HTTP_1_1_LENGTH;
-      gnutls_alpn_set_protocols(session, protocols, protocols_size, 0);
-      infof(data, "ALPN, offering %s, %s\n", NGHTTP2_PROTO_VERSION_ID,
-            ALPN_HTTP_1_1);
-      connssl->asked_for_h2 = TRUE;
-    }
-    else {
-      infof(data, "SSL, can't negotiate HTTP/2.0 without ALPN\n");
+  if(data->set.ssl_enable_alpn) {
+    int cur = 0;
+    gnutls_datum_t protocols[2];
+
+#ifdef USE_NGHTTP2
+    if(data->set.httpversion >= CURL_HTTP_VERSION_2) {
+      protocols[cur].data = (unsigned char *)NGHTTP2_PROTO_VERSION_ID;
+      protocols[cur].size = NGHTTP2_PROTO_VERSION_ID_LEN;
+      cur++;
+      infof(data, "ALPN, offering %s\n", NGHTTP2_PROTO_VERSION_ID);
     }
+#endif
+
+    protocols[cur].data = (unsigned char *)ALPN_HTTP_1_1;
+    protocols[cur].size = ALPN_HTTP_1_1_LENGTH;
+    cur++;
+    infof(data, "ALPN, offering %s\n", ALPN_HTTP_1_1);
+
+    gnutls_alpn_set_protocols(session, protocols, cur, 0);
   }
 #endif
 
   if(data->set.str[STRING_CERT]) {
-    if(gnutls_certificate_set_x509_key_file(
-         conn->ssl[sockindex].cred,
-         data->set.str[STRING_CERT],
-         data->set.str[STRING_KEY] ?
-         data->set.str[STRING_KEY] : data->set.str[STRING_CERT],
-         do_file_type(data->set.str[STRING_CERT_TYPE]) ) !=
-       GNUTLS_E_SUCCESS) {
-      failf(data, "error reading X.509 key or certificate file");
+    if(data->set.str[STRING_KEY_PASSWD]) {
+#if HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2
+      const unsigned int supported_key_encryption_algorithms =
+        GNUTLS_PKCS_USE_PKCS12_3DES | GNUTLS_PKCS_USE_PKCS12_ARCFOUR |
+        GNUTLS_PKCS_USE_PKCS12_RC2_40 | GNUTLS_PKCS_USE_PBES2_3DES |
+        GNUTLS_PKCS_USE_PBES2_AES_128 | GNUTLS_PKCS_USE_PBES2_AES_192 |
+        GNUTLS_PKCS_USE_PBES2_AES_256;
+      rc = gnutls_certificate_set_x509_key_file2(
+           conn->ssl[sockindex].cred,
+           data->set.str[STRING_CERT],
+           data->set.str[STRING_KEY] ?
+           data->set.str[STRING_KEY] : data->set.str[STRING_CERT],
+           do_file_type(data->set.str[STRING_CERT_TYPE]),
+           data->set.str[STRING_KEY_PASSWD],
+           supported_key_encryption_algorithms);
+      if(rc != GNUTLS_E_SUCCESS) {
+        failf(data,
+              "error reading X.509 potentially-encrypted key file: %s",
+              gnutls_strerror(rc));
+        return CURLE_SSL_CONNECT_ERROR;
+      }
+#else
+      failf(data, "gnutls lacks support for encrypted key files");
       return CURLE_SSL_CONNECT_ERROR;
+#endif
+    }
+    else {
+      rc = gnutls_certificate_set_x509_key_file(
+           conn->ssl[sockindex].cred,
+           data->set.str[STRING_CERT],
+           data->set.str[STRING_KEY] ?
+           data->set.str[STRING_KEY] : data->set.str[STRING_CERT],
+           do_file_type(data->set.str[STRING_CERT_TYPE]) );
+      if(rc != GNUTLS_E_SUCCESS) {
+        failf(data, "error reading X.509 key or certificate file: %s",
+              gnutls_strerror(rc));
+        return CURLE_SSL_CONNECT_ERROR;
+      }
     }
   }
 
@@ -644,13 +710,21 @@ gtls_connect_step1(struct connectdata *conn,
   if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
     rc = gnutls_credentials_set(session, GNUTLS_CRD_SRP,
                                 conn->ssl[sockindex].srp_client_cred);
-    if(rc != GNUTLS_E_SUCCESS)
+    if(rc != GNUTLS_E_SUCCESS) {
       failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc));
+      return CURLE_SSL_CONNECT_ERROR;
+    }
   }
   else
 #endif
+  {
     rc = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
                                 conn->ssl[sockindex].cred);
+    if(rc != GNUTLS_E_SUCCESS) {
+      failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc));
+      return CURLE_SSL_CONNECT_ERROR;
+    }
+  }
 
   /* set the connection handle (file descriptor for the socket) */
   gnutls_transport_set_ptr(session,
@@ -663,6 +737,16 @@ gtls_connect_step1(struct connectdata *conn,
   /* lowat must be set to zero when using custom push and pull functions. */
   gnutls_transport_set_lowat(session, 0);
 
+#ifdef HAS_OCSP
+  if(data->set.ssl.verifystatus) {
+    rc = gnutls_ocsp_status_request_enable_client(session, NULL, 0, NULL);
+    if(rc != GNUTLS_E_SUCCESS) {
+      failf(data, "gnutls_ocsp_status_request_enable_client() failed: %d", rc);
+      return CURLE_SSL_CONNECT_ERROR;
+    }
+  }
+#endif
+
   /* This might be a reconnect, so we check for a session ID in the cache
      to speed up things */
 
@@ -677,7 +761,8 @@ gtls_connect_step1(struct connectdata *conn,
   return CURLE_OK;
 }
 
-static CURLcode pkp_pin_peer_pubkey(gnutls_x509_crt_t cert,
+static CURLcode pkp_pin_peer_pubkey(struct SessionHandle *data,
+                                    gnutls_x509_crt_t cert,
                                     const char *pinnedpubkey)
 {
   /* Scratch */
@@ -722,7 +807,7 @@ static CURLcode pkp_pin_peer_pubkey(gnutls_x509_crt_t cert,
     /* End Gyrations */
 
     /* The one good exit point */
-    result = Curl_pin_peer_pubkey(pinnedpubkey, buff1, len1);
+    result = Curl_pin_peer_pubkey(data, pinnedpubkey, buff1, len1);
   } while(0);
 
   if(NULL != key)
@@ -742,8 +827,8 @@ gtls_connect_step3(struct connectdata *conn,
 {
   unsigned int cert_list_size;
   const gnutls_datum_t *chainp;
-  unsigned int verify_status;
-  gnutls_x509_crt_t x509_cert,x509_issuer;
+  unsigned int verify_status = 0;
+  gnutls_x509_crt_t x509_cert, x509_issuer;
   gnutls_datum_t issuerp;
   char certbuf[256] = ""; /* big enough? */
   size_t size;
@@ -761,6 +846,16 @@ gtls_connect_step3(struct connectdata *conn,
 #endif
   CURLcode result = CURLE_OK;
 
+  gnutls_protocol_t version = gnutls_protocol_get_version(session);
+
+  /* the name of the cipher suite used, e.g. ECDHE_RSA_AES_256_GCM_SHA384. */
+  ptr = gnutls_cipher_suite_get_name(gnutls_kx_get(session),
+                                     gnutls_cipher_get(session),
+                                     gnutls_mac_get(session));
+
+  infof(data, "SSL connection using %s / %s\n",
+        gnutls_protocol_get_name(version), ptr);
+
   /* This function will return the peer's raw certificate (chain) as sent by
      the peer. These certificates are in raw format (DER encoded for
      X.509). In case of a X.509 then a certificate list may be present. The
@@ -791,6 +886,23 @@ gtls_connect_step3(struct connectdata *conn,
     infof(data, "\t common name: WARNING couldn't obtain\n");
   }
 
+  if(data->set.ssl.certinfo && chainp) {
+    unsigned int i;
+
+    result = Curl_ssl_init_certinfo(data, cert_list_size);
+    if(result)
+      return result;
+
+    for(i = 0; i < cert_list_size; i++) {
+      const char *beg = (const char *) chainp[i].data;
+      const char *end = beg + chainp[i].size;
+
+      result = Curl_extract_certinfo(conn, i, beg, end);
+      if(result)
+        return result;
+    }
+  }
+
   if(data->set.ssl.verifypeer) {
     /* This function will try to verify the peer's certificate and return its
        status (trusted, invalid etc.). The value of status should be one or
@@ -822,6 +934,111 @@ gtls_connect_step3(struct connectdata *conn,
   else
     infof(data, "\t server certificate verification SKIPPED\n");
 
+#ifdef HAS_OCSP
+  if(data->set.ssl.verifystatus) {
+    if(gnutls_ocsp_status_request_is_checked(session, 0) == 0) {
+      gnutls_datum_t status_request;
+      gnutls_ocsp_resp_t ocsp_resp;
+
+      gnutls_ocsp_cert_status_t status;
+      gnutls_x509_crl_reason_t reason;
+
+      rc = gnutls_ocsp_status_request_get(session, &status_request);
+
+      infof(data, "\t server certificate status verification FAILED\n");
+
+      if(rc == GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE) {
+        failf(data, "No OCSP response received");
+        return CURLE_SSL_INVALIDCERTSTATUS;
+      }
+
+      if(rc < 0) {
+        failf(data, "Invalid OCSP response received");
+        return CURLE_SSL_INVALIDCERTSTATUS;
+      }
+
+      gnutls_ocsp_resp_init(&ocsp_resp);
+
+      rc = gnutls_ocsp_resp_import(ocsp_resp, &status_request);
+      if(rc < 0) {
+        failf(data, "Invalid OCSP response received");
+        return CURLE_SSL_INVALIDCERTSTATUS;
+      }
+
+      rc = gnutls_ocsp_resp_get_single(ocsp_resp, 0, NULL, NULL, NULL, NULL,
+                                       &status, NULL, NULL, NULL, &reason);
+
+      switch(status) {
+      case GNUTLS_OCSP_CERT_GOOD:
+        break;
+
+      case GNUTLS_OCSP_CERT_REVOKED: {
+        const char *crl_reason;
+
+        switch(reason) {
+          default:
+          case GNUTLS_X509_CRLREASON_UNSPECIFIED:
+            crl_reason = "unspecified reason";
+            break;
+
+          case GNUTLS_X509_CRLREASON_KEYCOMPROMISE:
+            crl_reason = "private key compromised";
+            break;
+
+          case GNUTLS_X509_CRLREASON_CACOMPROMISE:
+            crl_reason = "CA compromised";
+            break;
+
+          case GNUTLS_X509_CRLREASON_AFFILIATIONCHANGED:
+            crl_reason = "affiliation has changed";
+            break;
+
+          case GNUTLS_X509_CRLREASON_SUPERSEDED:
+            crl_reason = "certificate superseded";
+            break;
+
+          case GNUTLS_X509_CRLREASON_CESSATIONOFOPERATION:
+            crl_reason = "operation has ceased";
+            break;
+
+          case GNUTLS_X509_CRLREASON_CERTIFICATEHOLD:
+            crl_reason = "certificate is on hold";
+            break;
+
+          case GNUTLS_X509_CRLREASON_REMOVEFROMCRL:
+            crl_reason = "will be removed from delta CRL";
+            break;
+
+          case GNUTLS_X509_CRLREASON_PRIVILEGEWITHDRAWN:
+            crl_reason = "privilege withdrawn";
+            break;
+
+          case GNUTLS_X509_CRLREASON_AACOMPROMISE:
+            crl_reason = "AA compromised";
+            break;
+        }
+
+        failf(data, "Server certificate was revoked: %s", crl_reason);
+        break;
+      }
+
+      default:
+      case GNUTLS_OCSP_CERT_UNKNOWN:
+        failf(data, "Server certificate status is unknown");
+        break;
+      }
+
+      gnutls_ocsp_resp_deinit(ocsp_resp);
+
+      return CURLE_SSL_INVALIDCERTSTATUS;
+    }
+    else
+      infof(data, "\t server certificate status verification OK\n");
+  }
+  else
+    infof(data, "\t server certificate status verification SKIPPED\n");
+#endif
+
   /* initialize an X.509 certificate structure. */
   gnutls_x509_crt_init(&x509_cert);
 
@@ -834,7 +1051,7 @@ gtls_connect_step3(struct connectdata *conn,
     gnutls_x509_crt_init(&x509_issuer);
     issuerp = load_file(data->set.ssl.issuercert);
     gnutls_x509_crt_import(x509_issuer, &issuerp, GNUTLS_X509_FMT_PEM);
-    rc = gnutls_x509_crt_check_issuer(x509_cert,x509_issuer);
+    rc = gnutls_x509_crt_check_issuer(x509_cert, x509_issuer);
     gnutls_x509_crt_deinit(x509_issuer);
     unload_file(issuerp);
     if(rc <= 0) {
@@ -843,7 +1060,7 @@ gtls_connect_step3(struct connectdata *conn,
       gnutls_x509_crt_deinit(x509_cert);
       return CURLE_SSL_ISSUER_ERROR;
     }
-    infof(data,"\t server certificate issuer check OK (Issuer Cert: %s)\n",
+    infof(data, "\t server certificate issuer check OK (Issuer Cert: %s)\n",
           data->set.ssl.issuercert?data->set.ssl.issuercert:"none");
   }
 
@@ -973,7 +1190,7 @@ gtls_connect_step3(struct connectdata *conn,
 
   ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY];
   if(ptr) {
-    result = pkp_pin_peer_pubkey(x509_cert, ptr);
+    result = pkp_pin_peer_pubkey(data, x509_cert, ptr);
     if(result != CURLE_OK) {
       failf(data, "SSL: public key does not match pinned public key!");
       gnutls_x509_crt_deinit(x509_cert);
@@ -983,7 +1200,6 @@ gtls_connect_step3(struct connectdata *conn,
 
   /* Show:
 
-  - ciphers used
   - subject
   - start date
   - expire date
@@ -1023,14 +1239,6 @@ gtls_connect_step3(struct connectdata *conn,
   /* the *_get_name() says "NULL" if GNUTLS_COMP_NULL is returned */
   infof(data, "\t compression: %s\n", ptr);
 
-  /* the name of the cipher used. ie 3DES. */
-  ptr = gnutls_cipher_get_name(gnutls_cipher_get(session));
-  infof(data, "\t cipher: %s\n", ptr);
-
-  /* the MAC algorithms name. ie SHA1 */
-  ptr = gnutls_mac_get_name(gnutls_mac_get(session));
-  infof(data, "\t MAC: %s\n", ptr);
-
 #ifdef HAS_ALPN
   if(data->set.ssl_enable_alpn) {
     rc = gnutls_alpn_get_selected_protocol(session, &proto);
@@ -1038,19 +1246,21 @@ gtls_connect_step3(struct connectdata *conn,
       infof(data, "ALPN, server accepted to use %.*s\n", proto.size,
           proto.data);
 
+#ifdef USE_NGHTTP2
       if(proto.size == NGHTTP2_PROTO_VERSION_ID_LEN &&
-        memcmp(NGHTTP2_PROTO_VERSION_ID, proto.data,
-        NGHTTP2_PROTO_VERSION_ID_LEN) == 0) {
-        conn->negnpn = NPN_HTTP2;
+         !memcmp(NGHTTP2_PROTO_VERSION_ID, proto.data,
+                 NGHTTP2_PROTO_VERSION_ID_LEN)) {
+        conn->negnpn = CURL_HTTP_VERSION_2;
       }
-      else if(proto.size == ALPN_HTTP_1_1_LENGTH && memcmp(ALPN_HTTP_1_1,
-          proto.data, ALPN_HTTP_1_1_LENGTH) == 0) {
-        conn->negnpn = NPN_HTTP1_1;
+      else
+#endif
+      if(proto.size == ALPN_HTTP_1_1_LENGTH &&
+         !memcmp(ALPN_HTTP_1_1, proto.data, ALPN_HTTP_1_1_LENGTH)) {
+        conn->negnpn = CURL_HTTP_VERSION_1_1;
       }
     }
-    else if(connssl->asked_for_h2) {
+    else
       infof(data, "ALPN, server did not agree to a protocol\n");
-    }
   }
 #endif
 
@@ -1182,12 +1392,6 @@ static ssize_t gtls_send(struct connectdata *conn,
   return rc;
 }
 
-void Curl_gtls_close_all(struct SessionHandle *data)
-{
-  /* FIX: make the OpenSSL code more generic and use parts of it here */
-  (void)data;
-}
-
 static void close_one(struct connectdata *conn,
                       int idx)
 {
@@ -1392,4 +1596,32 @@ void Curl_gtls_md5sum(unsigned char *tmp, /* input */
 #endif
 }
 
+void Curl_gtls_sha256sum(const unsigned char *tmp, /* input */
+                      size_t tmplen,
+                      unsigned char *sha256sum, /* output */
+                      size_t sha256len)
+{
+#if defined(USE_GNUTLS_NETTLE)
+  struct sha256_ctx SHA256pw;
+  sha256_init(&SHA256pw);
+  sha256_update(&SHA256pw, (unsigned int)tmplen, tmp);
+  sha256_digest(&SHA256pw, (unsigned int)sha256len, sha256sum);
+#elif defined(USE_GNUTLS)
+  gcry_md_hd_t SHA256pw;
+  gcry_md_open(&SHA256pw, GCRY_MD_SHA256, 0);
+  gcry_md_write(SHA256pw, tmp, tmplen);
+  memcpy(sha256sum, gcry_md_read (SHA256pw, 0), sha256len);
+  gcry_md_close(SHA256pw);
+#endif
+}
+
+bool Curl_gtls_cert_status_request(void)
+{
+#ifdef HAS_OCSP
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
+
 #endif /* USE_GNUTLS */
index 12460be..965f7cf 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -35,10 +35,6 @@ 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) */
-void Curl_gtls_close_all(struct SessionHandle *data);
-
  /* close a SSL connection */
 void Curl_gtls_close(struct connectdata *conn, int sockindex);
 
@@ -52,6 +48,21 @@ void Curl_gtls_md5sum(unsigned char *tmp, /* input */
                       size_t tmplen,
                       unsigned char *md5sum, /* output */
                       size_t md5len);
+void Curl_gtls_sha256sum(const unsigned char *tmp, /* input */
+                      size_t tmplen,
+                      unsigned char *sha256sum, /* output */
+                      size_t sha256len);
+
+bool Curl_gtls_cert_status_request(void);
+
+/* Set the API backend definition to GnuTLS */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_GNUTLS
+
+/* this backend supports the CAPATH option */
+#define have_curlssl_ca_path 1
+
+/* this backend supports CURLOPT_CERTINFO */
+#define have_curlssl_certinfo 1
 
 /* API setup for GnuTLS */
 #define curlssl_init Curl_gtls_init
@@ -59,7 +70,7 @@ void Curl_gtls_md5sum(unsigned char *tmp, /* input */
 #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_all(x) ((void)x)
 #define curlssl_close Curl_gtls_close
 #define curlssl_shutdown(x,y) Curl_gtls_shutdown(x,y)
 #define curlssl_set_engine(x,y) ((void)x, (void)y, CURLE_NOT_BUILT_IN)
@@ -70,7 +81,8 @@ void Curl_gtls_md5sum(unsigned char *tmp, /* input */
 #define curlssl_data_pending(x,y) ((void)x, (void)y, 0)
 #define curlssl_random(x,y,z) Curl_gtls_random(x,y,z)
 #define curlssl_md5sum(a,b,c,d) Curl_gtls_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_GNUTLS
+#define curlssl_sha256sum(a,b,c,d) Curl_gtls_sha256sum(a,b,c,d)
+#define curlssl_cert_status_request() Curl_gtls_cert_status_request()
 
 #endif /* USE_GNUTLS */
 #endif /* HEADER_CURL_GTLS_H */
diff --git a/lib/vtls/mbedtls.c b/lib/vtls/mbedtls.c
new file mode 100644 (file)
index 0000000..f0900a5
--- /dev/null
@@ -0,0 +1,871 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
+ * Copyright (C) 2012 - 2016, 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 https://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 mbedTSL-specific code for the TLS/SSL layer. No code
+ * but vtls.c should ever call or use these functions.
+ *
+ */
+
+#include "curl_setup.h"
+
+#ifdef USE_MBEDTLS
+
+#include <mbedtls/net.h>
+#include <mbedtls/ssl.h>
+#include <mbedtls/certs.h>
+#include <mbedtls/x509.h>
+#include <mbedtls/version.h>
+
+#include <mbedtls/error.h>
+#include <mbedtls/entropy.h>
+#include <mbedtls/ctr_drbg.h>
+#include <mbedtls/sha256.h>
+
+#include "urldata.h"
+#include "sendf.h"
+#include "inet_pton.h"
+#include "mbedtls.h"
+#include "vtls.h"
+#include "parsedate.h"
+#include "connect.h" /* for the connect timeout */
+#include "select.h"
+#include "rawstr.h"
+#include "polarssl_threadlock.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"
+
+/* apply threading? */
+#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
+#define THREADING_SUPPORT
+#endif
+
+#if defined(THREADING_SUPPORT)
+static mbedtls_entropy_context entropy;
+
+static int  entropy_init_initialized  = 0;
+
+/* start of entropy_init_mutex() */
+static void entropy_init_mutex(mbedtls_entropy_context *ctx)
+{
+  /* lock 0 = entropy_init_mutex() */
+  Curl_polarsslthreadlock_lock_function(0);
+  if(entropy_init_initialized == 0) {
+    mbedtls_entropy_init(ctx);
+    entropy_init_initialized = 1;
+  }
+  Curl_polarsslthreadlock_unlock_function(0);
+}
+/* end of entropy_init_mutex() */
+
+/* start of entropy_func_mutex() */
+static int entropy_func_mutex(void *data, unsigned char *output, size_t len)
+{
+  int ret;
+  /* lock 1 = entropy_func_mutex() */
+  Curl_polarsslthreadlock_lock_function(1);
+  ret = mbedtls_entropy_func(data, output, len);
+  Curl_polarsslthreadlock_unlock_function(1);
+
+  return ret;
+}
+/* end of entropy_func_mutex() */
+
+#endif /* THREADING_SUPPORT */
+
+/* Define this to enable lots of debugging for mbedTLS */
+#undef MBEDTLS_DEBUG
+
+#ifdef MBEDTLS_DEBUG
+static void mbedtls_debug(void *context, int level, const char *line)
+{
+  struct SessionHandle *data = NULL;
+
+  if(!context)
+    return;
+
+  data = (struct SessionHandle *)context;
+
+  infof(data, "%s", line);
+  (void) level;
+}
+#else
+#endif
+
+/* ALPN for http2? */
+#ifdef USE_NGHTTP2
+#  undef HAS_ALPN
+#  ifdef MBEDTLS_SSL_ALPN
+#    define HAS_ALPN
+#  endif
+#endif
+
+
+/*
+ *  profile
+ */
+const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_fr =
+{
+  /* Hashes from SHA-1 and above */
+  MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) |
+  MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_RIPEMD160 ) |
+  MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA224 ) |
+  MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) |
+  MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) |
+  MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA512 ),
+  0xFFFFFFF, /* Any PK alg    */
+  0xFFFFFFF, /* Any curve     */
+  1024,      /* RSA min key len */
+};
+
+/* See https://tls.mbed.org/discussions/generic/
+   howto-determine-exact-buffer-len-for-mbedtls_pk_write_pubkey_der
+*/
+#define RSA_PUB_DER_MAX_BYTES   (38 + 2 * MBEDTLS_MPI_MAX_SIZE)
+#define ECP_PUB_DER_MAX_BYTES   (30 + 2 * MBEDTLS_ECP_MAX_BYTES)
+
+#define PUB_DER_MAX_BYTES   (RSA_PUB_DER_MAX_BYTES > ECP_PUB_DER_MAX_BYTES ? \
+                             RSA_PUB_DER_MAX_BYTES : ECP_PUB_DER_MAX_BYTES)
+
+static Curl_recv mbedtls_recv;
+static Curl_send mbedtls_send;
+
+static CURLcode
+mbedtls_connect_step1(struct connectdata *conn,
+                      int sockindex)
+{
+  struct SessionHandle *data = conn->data;
+  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
+
+  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 errorbuf[128];
+  errorbuf[0]=0;
+
+  /* mbedTLS only supports SSLv3 and TLSv1 */
+  if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
+    failf(data, "mbedTLS does not support SSLv2");
+    return CURLE_SSL_CONNECT_ERROR;
+  }
+  else if(data->set.ssl.version == CURL_SSLVERSION_SSLv3)
+    sni = FALSE; /* SSLv3 has no SNI */
+
+#ifdef THREADING_SUPPORT
+  entropy_init_mutex(&entropy);
+  mbedtls_ctr_drbg_init(&connssl->ctr_drbg);
+
+  ret = mbedtls_ctr_drbg_seed(&connssl->ctr_drbg, entropy_func_mutex,
+                              &entropy, connssl->ssn.id,
+                              connssl->ssn.id_len);
+  if(ret) {
+#ifdef MBEDTLS_ERROR_C
+    mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+    failf(data, "Failed - mbedTLS: ctr_drbg_init returned (-0x%04X) %s\n",
+          -ret, errorbuf);
+  }
+#else
+  mbedtls_entropy_init(&connssl->entropy);
+  mbedtls_ctr_drbg_init(&connssl->ctr_drbg);
+
+  ret = mbedtls_ctr_drbg_seed(&connssl->ctr_drbg, mbedtls_entropy_func,
+                              &connssl->entropy, connssl->ssn.id,
+                              connssl->ssn.id_len);
+  if(ret) {
+#ifdef MBEDTLS_ERROR_C
+    mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+    failf(data, "Failed - mbedTLS: ctr_drbg_init returned (-0x%04X) %s\n",
+          -ret, errorbuf);
+  }
+#endif /* THREADING_SUPPORT */
+
+  /* Load the trusted CA */
+  mbedtls_x509_crt_init(&connssl->cacert);
+
+  if(data->set.str[STRING_SSL_CAFILE]) {
+    ret = mbedtls_x509_crt_parse_file(&connssl->cacert,
+                                      data->set.str[STRING_SSL_CAFILE]);
+
+    if(ret<0) {
+#ifdef MBEDTLS_ERROR_C
+      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+      failf(data, "Error reading ca cert file %s - mbedTLS: (-0x%04X) %s",
+            data->set.str[STRING_SSL_CAFILE], -ret, errorbuf);
+
+      if(data->set.ssl.verifypeer)
+        return CURLE_SSL_CACERT_BADFILE;
+    }
+  }
+
+  if(data->set.str[STRING_SSL_CAPATH]) {
+    ret = mbedtls_x509_crt_parse_path(&connssl->cacert,
+                                      data->set.str[STRING_SSL_CAPATH]);
+
+    if(ret<0) {
+#ifdef MBEDTLS_ERROR_C
+      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+      failf(data, "Error reading ca cert path %s - mbedTLS: (-0x%04X) %s",
+            data->set.str[STRING_SSL_CAPATH], -ret, errorbuf);
+
+      if(data->set.ssl.verifypeer)
+        return CURLE_SSL_CACERT_BADFILE;
+    }
+  }
+
+  /* Load the client certificate */
+  mbedtls_x509_crt_init(&connssl->clicert);
+
+  if(data->set.str[STRING_CERT]) {
+    ret = mbedtls_x509_crt_parse_file(&connssl->clicert,
+                                      data->set.str[STRING_CERT]);
+
+    if(ret) {
+#ifdef MBEDTLS_ERROR_C
+      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+      failf(data, "Error reading client cert file %s - mbedTLS: (-0x%04X) %s",
+            data->set.str[STRING_CERT], -ret, errorbuf);
+
+      return CURLE_SSL_CERTPROBLEM;
+    }
+  }
+
+  /* Load the client private key */
+  mbedtls_pk_init(&connssl->pk);
+
+  if(data->set.str[STRING_KEY]) {
+    ret = mbedtls_pk_parse_keyfile(&connssl->pk, data->set.str[STRING_KEY],
+                                   data->set.str[STRING_KEY_PASSWD]);
+    if(ret == 0 && !mbedtls_pk_can_do(&connssl->pk, MBEDTLS_PK_RSA))
+      ret = MBEDTLS_ERR_PK_TYPE_MISMATCH;
+
+    if(ret) {
+#ifdef MBEDTLS_ERROR_C
+      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+      failf(data, "Error reading private key %s - mbedTLS: (-0x%04X) %s",
+            data->set.str[STRING_KEY], -ret, errorbuf);
+
+      return CURLE_SSL_CERTPROBLEM;
+    }
+  }
+
+  /* Load the CRL */
+  mbedtls_x509_crl_init(&connssl->crl);
+
+  if(data->set.str[STRING_SSL_CRLFILE]) {
+    ret = mbedtls_x509_crl_parse_file(&connssl->crl,
+                                      data->set.str[STRING_SSL_CRLFILE]);
+
+    if(ret) {
+#ifdef MBEDTLS_ERROR_C
+      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+      failf(data, "Error reading CRL file %s - mbedTLS: (-0x%04X) %s",
+            data->set.str[STRING_SSL_CRLFILE], -ret, errorbuf);
+
+      return CURLE_SSL_CRL_BADFILE;
+    }
+  }
+
+  infof(data, "mbedTLS: Connecting to %s:%d\n",
+        conn->host.name, conn->remote_port);
+
+  mbedtls_ssl_config_init(&connssl->config);
+
+  mbedtls_ssl_init(&connssl->ssl);
+  if(mbedtls_ssl_setup(&connssl->ssl, &connssl->config)) {
+    failf(data, "mbedTLS: ssl_init failed");
+    return CURLE_SSL_CONNECT_ERROR;
+  }
+  ret = mbedtls_ssl_config_defaults(&connssl->config,
+                                    MBEDTLS_SSL_IS_CLIENT,
+                                    MBEDTLS_SSL_TRANSPORT_STREAM,
+                                    MBEDTLS_SSL_PRESET_DEFAULT);
+  if(ret) {
+    failf(data, "mbedTLS: ssl_config failed");
+    return CURLE_SSL_CONNECT_ERROR;
+  }
+
+  /* new profile with RSA min key len = 1024 ... */
+  mbedtls_ssl_conf_cert_profile( &connssl->config,
+                                 &mbedtls_x509_crt_profile_fr);
+
+  switch(data->set.ssl.version) {
+  case CURL_SSLVERSION_DEFAULT:
+  case CURL_SSLVERSION_TLSv1:
+    mbedtls_ssl_conf_min_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_1);
+    infof(data, "mbedTLS: Set min SSL version to TLS 1.0\n");
+    break;
+  case CURL_SSLVERSION_SSLv3:
+    mbedtls_ssl_conf_min_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_0);
+    mbedtls_ssl_conf_max_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_0);
+    infof(data, "mbedTLS: Set SSL version to SSLv3\n");
+    break;
+  case CURL_SSLVERSION_TLSv1_0:
+    mbedtls_ssl_conf_min_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_1);
+    mbedtls_ssl_conf_max_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_1);
+    infof(data, "mbedTLS: Set SSL version to TLS 1.0\n");
+    break;
+  case CURL_SSLVERSION_TLSv1_1:
+    mbedtls_ssl_conf_min_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_2);
+    mbedtls_ssl_conf_max_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_2);
+    infof(data, "mbedTLS: Set SSL version to TLS 1.1\n");
+    break;
+  case CURL_SSLVERSION_TLSv1_2:
+    mbedtls_ssl_conf_min_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_3);
+    mbedtls_ssl_conf_max_version(&connssl->config, MBEDTLS_SSL_MAJOR_VERSION_3,
+                                 MBEDTLS_SSL_MINOR_VERSION_3);
+    infof(data, "mbedTLS: Set SSL version to TLS 1.2\n");
+    break;
+  default:
+    failf(data, "mbedTLS: Unsupported SSL protocol version");
+    return CURLE_SSL_CONNECT_ERROR;
+  }
+
+  mbedtls_ssl_conf_authmode(&connssl->config, MBEDTLS_SSL_VERIFY_OPTIONAL);
+
+  mbedtls_ssl_conf_rng(&connssl->config, mbedtls_ctr_drbg_random,
+                       &connssl->ctr_drbg);
+  mbedtls_ssl_set_bio(&connssl->ssl, &conn->sock[sockindex],
+                      mbedtls_net_send,
+                      mbedtls_net_recv,
+                      NULL /*  rev_timeout() */);
+
+  mbedtls_ssl_conf_ciphersuites(&connssl->config,
+                                mbedtls_ssl_list_ciphersuites());
+  if(!Curl_ssl_getsessionid(conn, &old_session, &old_session_size)) {
+    memcpy(&connssl->ssn, old_session, old_session_size);
+    infof(data, "mbedTLS re-using session\n");
+  }
+
+  mbedtls_ssl_set_session(&connssl->ssl,
+                          &connssl->ssn);
+
+  mbedtls_ssl_conf_ca_chain(&connssl->config,
+                            &connssl->cacert,
+                            &connssl->crl);
+
+  if(data->set.str[STRING_KEY]) {
+    mbedtls_ssl_conf_own_cert(&connssl->config,
+                              &connssl->clicert, &connssl->pk);
+  }
+  if(!Curl_inet_pton(AF_INET, conn->host.name, &addr) &&
+#ifdef ENABLE_IPV6
+     !Curl_inet_pton(AF_INET6, conn->host.name, &addr) &&
+#endif
+     sni && mbedtls_ssl_set_hostname(&connssl->ssl, conn->host.name)) {
+    infof(data, "WARNING: failed to configure "
+          "server name indication (SNI) TLS extension\n");
+  }
+
+#ifdef HAS_ALPN
+  if(data->set.ssl_enable_alpn) {
+    const char **p = &connssl->protocols[0];
+#ifdef USE_NGHTTP2
+    if(data->set.httpversion >= CURL_HTTP_VERSION_2)
+      *p++ = NGHTTP2_PROTO_VERSION_ID;
+#endif
+    *p++ = ALPN_HTTP_1_1;
+    *p = NULL;
+    /* this function doesn't clone the protocols array, which is why we need
+       to keep it around */
+    if(mbedtls_ssl_conf_alpn_protocols(&connssl->config,
+                                       &connssl->protocols[0])) {
+      failf(data, "Failed setting ALPN protocols");
+      return CURLE_SSL_CONNECT_ERROR;
+    }
+    for(p = &connssl->protocols[0]; *p; ++p)
+      infof(data, "ALPN, offering %s\n", *p);
+  }
+#endif
+
+#ifdef MBEDTLS_DEBUG
+  mbedtls_ssl_conf_dbg(&connssl->ssl, mbedtls_debug, data);
+#endif
+
+  connssl->connecting_state = ssl_connect_2;
+
+  return CURLE_OK;
+}
+
+static CURLcode
+mbedtls_connect_step2(struct connectdata *conn,
+                      int sockindex)
+{
+  int ret;
+  struct SessionHandle *data = conn->data;
+  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
+  const mbedtls_x509_crt *peercert;
+
+#ifdef HAS_ALPN
+  const char* next_protocol;
+#endif
+
+  char errorbuf[128];
+  errorbuf[0] = 0;
+
+  conn->recv[sockindex] = mbedtls_recv;
+  conn->send[sockindex] = mbedtls_send;
+
+  ret = mbedtls_ssl_handshake(&connssl->ssl);
+
+  if(ret == MBEDTLS_ERR_SSL_WANT_READ) {
+    connssl->connecting_state = ssl_connect_2_reading;
+    return CURLE_OK;
+  }
+  else if(ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
+    connssl->connecting_state = ssl_connect_2_writing;
+    return CURLE_OK;
+  }
+  else if(ret) {
+#ifdef MBEDTLS_ERROR_C
+    mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* MBEDTLS_ERROR_C */
+    failf(data, "ssl_handshake returned - mbedTLS: (-0x%04X) %s",
+          -ret, errorbuf);
+    return CURLE_SSL_CONNECT_ERROR;
+  }
+
+  infof(data, "mbedTLS: Handshake complete, cipher is %s\n",
+        mbedtls_ssl_get_ciphersuite(&conn->ssl[sockindex].ssl)
+    );
+
+  ret = mbedtls_ssl_get_verify_result(&conn->ssl[sockindex].ssl);
+
+  if(ret && data->set.ssl.verifypeer) {
+    if(ret & MBEDTLS_X509_BADCERT_EXPIRED)
+      failf(data, "Cert verify failed: BADCERT_EXPIRED");
+
+    if(ret & MBEDTLS_X509_BADCERT_REVOKED) {
+      failf(data, "Cert verify failed: BADCERT_REVOKED");
+      return CURLE_SSL_CACERT;
+    }
+
+    if(ret & MBEDTLS_X509_BADCERT_CN_MISMATCH)
+      failf(data, "Cert verify failed: BADCERT_CN_MISMATCH");
+
+    if(ret & MBEDTLS_X509_BADCERT_NOT_TRUSTED)
+      failf(data, "Cert verify failed: BADCERT_NOT_TRUSTED");
+
+    return CURLE_PEER_FAILED_VERIFICATION;
+  }
+
+  peercert = mbedtls_ssl_get_peer_cert(&connssl->ssl);
+
+  if(peercert && data->set.verbose) {
+    const size_t bufsize = 16384;
+    char *buffer = malloc(bufsize);
+
+    if(!buffer)
+      return CURLE_OUT_OF_MEMORY;
+
+    if(mbedtls_x509_crt_info(buffer, bufsize, "* ", peercert) > 0)
+      infof(data, "Dumping cert info:\n%s\n", buffer);
+    else
+      infof(data, "Unable to dump certificate information.\n");
+
+    free(buffer);
+  }
+
+  if(data->set.str[STRING_SSL_PINNEDPUBLICKEY]) {
+    int size;
+    CURLcode result;
+    mbedtls_x509_crt *p;
+    unsigned char pubkey[PUB_DER_MAX_BYTES];
+
+    if(!peercert || !peercert->raw.p || !peercert->raw.len) {
+      failf(data, "Failed due to missing peer certificate");
+      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    }
+
+    p = calloc(1, sizeof(*p));
+
+    if(!p)
+      return CURLE_OUT_OF_MEMORY;
+
+    mbedtls_x509_crt_init(p);
+
+    /* Make a copy of our const peercert because mbedtls_pk_write_pubkey_der
+       needs a non-const key, for now.
+       https://github.com/ARMmbed/mbedtls/issues/396 */
+    if(mbedtls_x509_crt_parse_der(p, peercert->raw.p, peercert->raw.len)) {
+      failf(data, "Failed copying peer certificate");
+      mbedtls_x509_crt_free(p);
+      free(p);
+      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    }
+
+    size = mbedtls_pk_write_pubkey_der(&p->pk, pubkey, PUB_DER_MAX_BYTES);
+
+    if(size <= 0) {
+      failf(data, "Failed copying public key from peer certificate");
+      mbedtls_x509_crt_free(p);
+      free(p);
+      return CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+    }
+
+    /* mbedtls_pk_write_pubkey_der writes data at the end of the buffer. */
+    result = Curl_pin_peer_pubkey(data,
+                                  data->set.str[STRING_SSL_PINNEDPUBLICKEY],
+                                  &pubkey[PUB_DER_MAX_BYTES - size], size);
+    if(result) {
+      mbedtls_x509_crt_free(p);
+      free(p);
+      return result;
+    }
+
+    mbedtls_x509_crt_free(p);
+    free(p);
+  }
+
+#ifdef HAS_ALPN
+  if(data->set.ssl_enable_alpn) {
+    next_protocol = mbedtls_ssl_get_alpn_protocol(&connssl->ssl);
+
+    if(next_protocol) {
+      infof(data, "ALPN, server accepted to use %s\n", next_protocol);
+#ifdef USE_NGHTTP2
+      if(!strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
+                  NGHTTP2_PROTO_VERSION_ID_LEN) &&
+         !next_protocol[NGHTTP2_PROTO_VERSION_ID_LEN]) {
+        conn->negnpn = CURL_HTTP_VERSION_2;
+      }
+      else
+#endif
+        if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH) &&
+           !next_protocol[ALPN_HTTP_1_1_LENGTH]) {
+          conn->negnpn = CURL_HTTP_VERSION_1_1;
+        }
+    }
+    else {
+      infof(data, "ALPN, server did not agree to a protocol\n");
+    }
+  }
+#endif
+
+  connssl->connecting_state = ssl_connect_3;
+  infof(data, "SSL connected\n");
+
+  return CURLE_OK;
+}
+
+static CURLcode
+mbedtls_connect_step3(struct connectdata *conn,
+                      int sockindex)
+{
+  CURLcode retcode = CURLE_OK;
+  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+  struct SessionHandle *data = conn->data;
+  void *old_ssl_sessionid = NULL;
+  mbedtls_ssl_session *our_ssl_sessionid = &conn->ssl[sockindex].ssn;
+  int incache;
+
+  DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
+
+  /* Save the current session data for possible re-use */
+  incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL));
+  if(incache) {
+    if(old_ssl_sessionid != our_ssl_sessionid) {
+      infof(data, "old SSL session ID is stale, removing\n");
+      Curl_ssl_delsessionid(conn, old_ssl_sessionid);
+      incache = FALSE;
+    }
+  }
+  if(!incache) {
+    void *new_session = malloc(sizeof(mbedtls_ssl_session));
+
+    if(new_session) {
+      memcpy(new_session, our_ssl_sessionid,
+             sizeof(mbedtls_ssl_session));
+
+      retcode = Curl_ssl_addsessionid(conn, new_session,
+                                      sizeof(mbedtls_ssl_session));
+    }
+    else {
+      retcode = CURLE_OUT_OF_MEMORY;
+    }
+
+    if(retcode) {
+      failf(data, "failed to store ssl session");
+      return retcode;
+    }
+  }
+
+  connssl->connecting_state = ssl_connect_done;
+
+  return CURLE_OK;
+}
+
+static ssize_t mbedtls_send(struct connectdata *conn,
+                            int sockindex,
+                            const void *mem,
+                            size_t len,
+                            CURLcode *curlcode)
+{
+  int ret = -1;
+
+  ret = mbedtls_ssl_write(&conn->ssl[sockindex].ssl,
+                          (unsigned char *)mem, len);
+
+  if(ret < 0) {
+    *curlcode = (ret == MBEDTLS_ERR_SSL_WANT_WRITE) ?
+      CURLE_AGAIN : CURLE_SEND_ERROR;
+    ret = -1;
+  }
+
+  return ret;
+}
+
+void Curl_mbedtls_close_all(struct SessionHandle *data)
+{
+  (void)data;
+}
+
+void Curl_mbedtls_close(struct connectdata *conn, int sockindex)
+{
+  mbedtls_pk_free(&conn->ssl[sockindex].pk);
+  mbedtls_x509_crt_free(&conn->ssl[sockindex].clicert);
+  mbedtls_x509_crt_free(&conn->ssl[sockindex].cacert);
+  mbedtls_x509_crl_free(&conn->ssl[sockindex].crl);
+  mbedtls_ssl_config_free(&conn->ssl[sockindex].config);
+  mbedtls_ssl_free(&conn->ssl[sockindex].ssl);
+  mbedtls_ctr_drbg_free(&conn->ssl[sockindex].ctr_drbg);
+#ifndef THREADING_SUPPORT
+  mbedtls_entropy_free(&conn->ssl[sockindex].entropy);
+#endif /* THREADING_SUPPORT */
+}
+
+static ssize_t mbedtls_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 = mbedtls_ssl_read(&conn->ssl[num].ssl, (unsigned char *)buf,
+                         buffersize);
+
+  if(ret <= 0) {
+    if(ret == MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY)
+      return 0;
+
+    *curlcode = (ret == MBEDTLS_ERR_SSL_WANT_READ) ?
+      CURLE_AGAIN : CURLE_RECV_ERROR;
+    return -1;
+  }
+
+  len = ret;
+
+  return len;
+}
+
+void Curl_mbedtls_session_free(void *ptr)
+{
+  free(ptr);
+}
+
+size_t Curl_mbedtls_version(char *buffer, size_t size)
+{
+  unsigned int version = mbedtls_version_get_number();
+  return snprintf(buffer, size, "mbedTLS/%d.%d.%d", version>>24,
+                  (version>>16)&0xff, (version>>8)&0xff);
+}
+
+static CURLcode
+mbedtls_connect_common(struct connectdata *conn,
+                       int sockindex,
+                       bool nonblocking,
+                       bool *done)
+{
+  CURLcode retcode;
+  struct SessionHandle *data = conn->data;
+  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
+  curl_socket_t sockfd = conn->sock[sockindex];
+  long timeout_ms;
+  int what;
+
+  /* check if the connection has already been established */
+  if(ssl_connection_complete == connssl->state) {
+    *done = TRUE;
+    return CURLE_OK;
+  }
+
+  if(ssl_connect_1==connssl->connecting_state) {
+    /* Find out how much more time we're allowed */
+    timeout_ms = Curl_timeleft(data, NULL, TRUE);
+
+    if(timeout_ms < 0) {
+      /* no need to continue if time already is up */
+      failf(data, "SSL connection timeout");
+      return CURLE_OPERATION_TIMEDOUT;
+    }
+    retcode = mbedtls_connect_step1(conn, sockindex);
+    if(retcode)
+      return retcode;
+  }
+
+  while(ssl_connect_2 == connssl->connecting_state ||
+        ssl_connect_2_reading == connssl->connecting_state ||
+        ssl_connect_2_writing == connssl->connecting_state) {
+
+    /* check allowed time left */
+    timeout_ms = Curl_timeleft(data, NULL, TRUE);
+
+    if(timeout_ms < 0) {
+      /* no need to continue if time already is up */
+      failf(data, "SSL connection timeout");
+      return CURLE_OPERATION_TIMEDOUT;
+    }
+
+    /* 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 : 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) {
+          *done = FALSE;
+          return CURLE_OK;
+        }
+        else {
+          /* timeout */
+          failf(data, "SSL connection timeout");
+          return CURLE_OPERATION_TIMEDOUT;
+        }
+      }
+      /* socket is readable or writable */
+    }
+
+    /* Run transaction, and return to the caller if it failed or if
+     * this connection is part of a multi handle 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 = mbedtls_connect_step2(conn, sockindex);
+    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. */
+
+  if(ssl_connect_3==connssl->connecting_state) {
+    retcode = mbedtls_connect_step3(conn, sockindex);
+    if(retcode)
+      return retcode;
+  }
+
+  if(ssl_connect_done==connssl->connecting_state) {
+    connssl->state = ssl_connection_complete;
+    conn->recv[sockindex] = mbedtls_recv;
+    conn->send[sockindex] = mbedtls_send;
+    *done = TRUE;
+  }
+  else
+    *done = FALSE;
+
+  /* Reset our connect state machine */
+  connssl->connecting_state = ssl_connect_1;
+
+  return CURLE_OK;
+}
+
+CURLcode
+Curl_mbedtls_connect_nonblocking(struct connectdata *conn,
+                                 int sockindex,
+                                 bool *done)
+{
+  return mbedtls_connect_common(conn, sockindex, TRUE, done);
+}
+
+
+CURLcode
+Curl_mbedtls_connect(struct connectdata *conn,
+                     int sockindex)
+{
+  CURLcode retcode;
+  bool done = FALSE;
+
+  retcode = mbedtls_connect_common(conn, sockindex, FALSE, &done);
+  if(retcode)
+    return retcode;
+
+  DEBUGASSERT(done);
+
+  return CURLE_OK;
+}
+
+/*
+ * return 0 error initializing SSL
+ * return 1 SSL initialized successfully
+ */
+int mbedtls_init(void)
+{
+  return Curl_polarsslthreadlock_thread_setup();
+}
+
+void mbedtls_cleanup(void)
+{
+  (void)Curl_polarsslthreadlock_thread_cleanup();
+}
+
+#endif /* USE_MBEDTLS */
diff --git a/lib/vtls/mbedtls.h b/lib/vtls/mbedtls.h
new file mode 100644 (file)
index 0000000..fcf483f
--- /dev/null
@@ -0,0 +1,75 @@
+#ifndef HEADER_CURL_MBEDTLS_H
+#define HEADER_CURL_MBEDTLS_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2012 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * 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 https://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_setup.h"
+
+#ifdef USE_MBEDTLS
+
+/* Called on first use mbedTLS, setup threading if supported */
+int  mbedtls_init(void);
+void mbedtls_cleanup(void);
+
+
+CURLcode Curl_mbedtls_connect(struct connectdata *conn, int sockindex);
+
+CURLcode Curl_mbedtls_connect_nonblocking(struct connectdata *conn,
+                                           int sockindex,
+                                           bool *done);
+
+/* tell mbedTLS to close down all open information regarding connections (and
+   thus session ID caching etc) */
+void Curl_mbedtls_close_all(struct SessionHandle *data);
+
+ /* close a SSL connection */
+void Curl_mbedtls_close(struct connectdata *conn, int sockindex);
+
+void Curl_mbedtls_session_free(void *ptr);
+size_t Curl_mbedtls_version(char *buffer, size_t size);
+int Curl_mbedtls_shutdown(struct connectdata *conn, int sockindex);
+
+/* API setup for mbedTLS */
+#define curlssl_init() mbedtls_init()
+#define curlssl_cleanup() mbedtls_cleanup()
+#define curlssl_connect Curl_mbedtls_connect
+#define curlssl_connect_nonblocking Curl_mbedtls_connect_nonblocking
+#define curlssl_session_free(x)  Curl_mbedtls_session_free(x)
+#define curlssl_close_all Curl_mbedtls_close_all
+#define curlssl_close Curl_mbedtls_close
+#define curlssl_shutdown(x,y) 0
+#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
+#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
+#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
+#define curlssl_version Curl_mbedtls_version
+#define curlssl_check_cxn(x) (x=x, -1)
+#define curlssl_data_pending(x,y) (x=x, y=y, 0)
+#define CURL_SSL_BACKEND CURLSSLBACKEND_MBEDTLS
+#define curlssl_sha256sum(a,b,c,d) mbedtls_sha256(a,b,c,0)
+
+/* This might cause libcurl to use a weeker random!
+   TODO: implement proper use of Polarssl's CTR-DRBG or HMAC-DRBG and use that
+*/
+#define curlssl_random(x,y,z) (x=x, y=y, z=z, CURLE_NOT_BUILT_IN)
+
+#endif /* USE_MBEDTLS */
+#endif /* HEADER_CURL_MBEDTLS_H */
index dd83a9d..3922d9c 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "select.h"
 #include "vtls.h"
 #include "llist.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "nssg.h"
 #include <nspr.h>
 #include <nss.h>
 #include <base64.h>
 #include <cert.h>
 #include <prerror.h>
+#include <keyhi.h>        /* for SECKEY_DestroyPublicKey() */
+
+#define NSSVERNUM ((NSS_VMAJOR<<16)|(NSS_VMINOR<<8)|NSS_VPATCH)
+
+#if NSSVERNUM >= 0x030f00 /* 3.15.0 */
+#include <ocsp.h>
+#endif
 
-#include "curl_memory.h"
 #include "rawstr.h"
 #include "warnless.h"
 #include "x509asn1.h"
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #define SSL_DIR "/etc/pki/nssdb"
@@ -207,16 +211,22 @@ static SECStatus set_ciphers(struct SessionHandle *data, PRFileDesc * model,
   PRBool found;
   char *cipher;
 
+  /* use accessors to avoid dynamic linking issues after an update of NSS */
+  const PRUint16 num_implemented_ciphers = SSL_GetNumImplementedCiphers();
+  const PRUint16 *implemented_ciphers = SSL_GetImplementedCiphers();
+  if(!implemented_ciphers)
+    return SECFailure;
+
   /* First disable all ciphers. This uses a different max value in case
    * NSS adds more ciphers later we don't want them available by
    * accident
    */
-  for(i=0; i<SSL_NumImplementedCiphers; i++) {
-    SSL_CipherPrefSet(model, SSL_ImplementedCiphers[i], PR_FALSE);
+  for(i = 0; i < num_implemented_ciphers; i++) {
+    SSL_CipherPrefSet(model, implemented_ciphers[i], PR_FALSE);
   }
 
   /* Set every entry in our list to false */
-  for(i=0; i<NUM_OF_CIPHERS; i++) {
+  for(i = 0; i < NUM_OF_CIPHERS; i++) {
     cipher_state[i] = PR_FALSE;
   }
 
@@ -265,21 +275,21 @@ static SECStatus set_ciphers(struct SessionHandle *data, PRFileDesc * model,
 }
 
 /*
- * Get the number of ciphers that are enabled. We use this to determine
+ * Return true if at least one cipher-suite is enabled. Used to determine
  * if we need to call NSS_SetDomesticPolicy() to enable the default ciphers.
  */
-static int num_enabled_ciphers(void)
+static bool any_cipher_enabled(void)
 {
-  PRInt32 policy = 0;
-  int count = 0;
   unsigned int i;
 
   for(i=0; i<NUM_OF_CIPHERS; i++) {
+    PRInt32 policy = 0;
     SSL_CipherPolicyGet(cipherlist[i].num, &policy);
     if(policy)
-      count++;
+      return TRUE;
   }
-  return count;
+
+  return FALSE;
 }
 
 /*
@@ -318,8 +328,8 @@ static char* dup_nickname(struct SessionHandle *data, enum dupstring cert_kind)
     /* no such file exists, use the string as nickname */
     return strdup(str);
 
-  /* search the last slash; we require at least one slash in a file name */
-  n = strrchr(str, '/');
+  /* search the first slash; we require at least one slash in a file name */
+  n = strchr(str, '/');
   if(!n) {
     infof(data, "warning: certificate file name \"%s\" handled as nickname; "
           "please use \"./%s\" to force file name\n", str, str);
@@ -639,6 +649,34 @@ static SECStatus nss_auth_cert_hook(void *arg, PRFileDesc *fd, PRBool checksig,
                                     PRBool isServer)
 {
   struct connectdata *conn = (struct connectdata *)arg;
+
+#ifdef SSL_ENABLE_OCSP_STAPLING
+  if(conn->data->set.ssl.verifystatus) {
+    SECStatus cacheResult;
+
+    const SECItemArray *csa = SSL_PeerStapledOCSPResponses(fd);
+    if(!csa) {
+      failf(conn->data, "Invalid OCSP response");
+      return SECFailure;
+    }
+
+    if(csa->len == 0) {
+      failf(conn->data, "No OCSP response received");
+      return SECFailure;
+    }
+
+    cacheResult = CERT_CacheOCSPResponseFromSideChannel(
+      CERT_GetDefaultCertDB(), SSL_PeerCertificate(fd),
+      PR_Now(), &csa->items[0], arg
+    );
+
+    if(cacheResult != SECSuccess) {
+      failf(conn->data, "Invalid OCSP response");
+      return cacheResult;
+    }
+  }
+#endif
+
   if(!conn->data->set.ssl.verifypeer) {
     infof(conn->data, "skipping SSL peer certificate verification\n");
     return SECSuccess;
@@ -652,7 +690,6 @@ static SECStatus nss_auth_cert_hook(void *arg, PRFileDesc *fd, PRBool checksig,
  */
 static void HandshakeCallback(PRFileDesc *sock, void *arg)
 {
-#ifdef USE_NGHTTP2
   struct connectdata *conn = (struct connectdata*) arg;
   unsigned int buflenmax = 50;
   unsigned char buf[50];
@@ -668,8 +705,7 @@ static void HandshakeCallback(PRFileDesc *sock, void *arg)
     switch(state) {
     case SSL_NEXT_PROTO_NO_SUPPORT:
     case SSL_NEXT_PROTO_NO_OVERLAP:
-      if(connssl->asked_for_h2)
-        infof(conn->data, "TLS, neither ALPN nor NPN succeeded\n");
+      infof(conn->data, "ALPN/NPN, server did not agree to a protocol\n");
       return;
 #ifdef SSL_ENABLE_ALPN
     case SSL_NEXT_PROTO_SELECTED:
@@ -681,22 +717,80 @@ static void HandshakeCallback(PRFileDesc *sock, void *arg)
       break;
     }
 
+#ifdef USE_NGHTTP2
     if(buflen == NGHTTP2_PROTO_VERSION_ID_LEN &&
-       memcmp(NGHTTP2_PROTO_VERSION_ID, buf, NGHTTP2_PROTO_VERSION_ID_LEN)
-       == 0) {
-      conn->negnpn = NPN_HTTP2;
+       !memcmp(NGHTTP2_PROTO_VERSION_ID, buf, NGHTTP2_PROTO_VERSION_ID_LEN)) {
+      conn->negnpn = CURL_HTTP_VERSION_2;
     }
-    else if(buflen == ALPN_HTTP_1_1_LENGTH && memcmp(ALPN_HTTP_1_1, buf,
-                                                     ALPN_HTTP_1_1_LENGTH)) {
-      conn->negnpn = NPN_HTTP1_1;
+    else
+#endif
+    if(buflen == ALPN_HTTP_1_1_LENGTH &&
+       !memcmp(ALPN_HTTP_1_1, buf, ALPN_HTTP_1_1_LENGTH)) {
+      conn->negnpn = CURL_HTTP_VERSION_1_1;
     }
   }
-#else
-  (void)sock;
-  (void)arg;
-#endif
 }
 
+#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
+static SECStatus CanFalseStartCallback(PRFileDesc *sock, void *client_data,
+                                       PRBool *canFalseStart)
+{
+  struct connectdata *conn = client_data;
+  struct SessionHandle *data = conn->data;
+
+  SSLChannelInfo channelInfo;
+  SSLCipherSuiteInfo cipherInfo;
+
+  SECStatus rv;
+  PRBool negotiatedExtension;
+
+  *canFalseStart = PR_FALSE;
+
+  if(SSL_GetChannelInfo(sock, &channelInfo, sizeof(channelInfo)) != SECSuccess)
+    return SECFailure;
+
+  if(SSL_GetCipherSuiteInfo(channelInfo.cipherSuite, &cipherInfo,
+                            sizeof(cipherInfo)) != SECSuccess)
+    return SECFailure;
+
+  /* Prevent version downgrade attacks from TLS 1.2, and avoid False Start for
+   * TLS 1.3 and later. See https://bugzilla.mozilla.org/show_bug.cgi?id=861310
+   */
+  if(channelInfo.protocolVersion != SSL_LIBRARY_VERSION_TLS_1_2)
+    goto end;
+
+  /* Only allow ECDHE key exchange algorithm.
+   * See https://bugzilla.mozilla.org/show_bug.cgi?id=952863 */
+  if(cipherInfo.keaType != ssl_kea_ecdh)
+    goto end;
+
+  /* Prevent downgrade attacks on the symmetric cipher. We do not allow CBC
+   * mode due to BEAST, POODLE, and other attacks on the MAC-then-Encrypt
+   * design. See https://bugzilla.mozilla.org/show_bug.cgi?id=1109766 */
+  if(cipherInfo.symCipher != ssl_calg_aes_gcm)
+    goto end;
+
+  /* Enforce ALPN or NPN to do False Start, as an indicator of server
+   * compatibility. */
+  rv = SSL_HandshakeNegotiatedExtension(sock, ssl_app_layer_protocol_xtn,
+                                        &negotiatedExtension);
+  if(rv != SECSuccess || !negotiatedExtension) {
+    rv = SSL_HandshakeNegotiatedExtension(sock, ssl_next_proto_nego_xtn,
+                                          &negotiatedExtension);
+  }
+
+  if(rv != SECSuccess || !negotiatedExtension)
+    goto end;
+
+  *canFalseStart = PR_TRUE;
+
+  infof(data, "Trying TLS False Start\n");
+
+end:
+  return SECSuccess;
+}
+#endif
+
 static void display_cert_info(struct SessionHandle *data,
                               CERTCertificate *cert)
 {
@@ -830,18 +924,12 @@ static SECStatus BadCertHandler(void *arg, PRFileDesc *sock)
 static SECStatus check_issuer_cert(PRFileDesc *sock,
                                    char *issuer_nickname)
 {
-  CERTCertificate *cert,*cert_issuer,*issuer;
+  CERTCertificate *cert, *cert_issuer, *issuer;
   SECStatus res=SECSuccess;
   void *proto_win = NULL;
 
-  /*
-    PRArenaPool   *tmpArena = NULL;
-    CERTAuthKeyID *authorityKeyID = NULL;
-    SECITEM       *caname = NULL;
-  */
-
   cert = SSL_PeerCertificate(sock);
-  cert_issuer = CERT_FindCertIssuer(cert,PR_Now(),certUsageObjectSigner);
+  cert_issuer = CERT_FindCertIssuer(cert, PR_Now(), certUsageObjectSigner);
 
   proto_win = SSL_RevealPinArg(sock);
   issuer = PK11_FindCertFromNickname(issuer_nickname, proto_win);
@@ -858,6 +946,52 @@ static SECStatus check_issuer_cert(PRFileDesc *sock,
   return res;
 }
 
+static CURLcode cmp_peer_pubkey(struct ssl_connect_data *connssl,
+                                const char *pinnedpubkey)
+{
+  CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+  struct SessionHandle *data = connssl->data;
+  CERTCertificate *cert;
+
+  if(!pinnedpubkey)
+    /* no pinned public key specified */
+    return CURLE_OK;
+
+  /* get peer certificate */
+  cert = SSL_PeerCertificate(connssl->handle);
+  if(cert) {
+    /* extract public key from peer certificate */
+    SECKEYPublicKey *pubkey = CERT_ExtractPublicKey(cert);
+    if(pubkey) {
+      /* encode the public key as DER */
+      SECItem *cert_der = PK11_DEREncodePublicKey(pubkey);
+      if(cert_der) {
+        /* compare the public key with the pinned public key */
+        result = Curl_pin_peer_pubkey(data, pinnedpubkey, cert_der->data,
+                                      cert_der->len);
+        SECITEM_FreeItem(cert_der, PR_TRUE);
+      }
+      SECKEY_DestroyPublicKey(pubkey);
+    }
+    CERT_DestroyCertificate(cert);
+  }
+
+  /* report the resulting status */
+  switch(result) {
+  case CURLE_OK:
+    infof(data, "pinned public key verified successfully!\n");
+    break;
+  case CURLE_SSL_PINNEDPUBKEYNOTMATCH:
+    failf(data, "failed to verify pinned public key");
+    break;
+  default:
+    /* OOM, etc. */
+    break;
+  }
+
+  return result;
+}
+
 /**
  *
  * Callback to pick the SSL client certificate.
@@ -999,6 +1133,7 @@ static PRStatus nspr_io_close(PRFileDesc *fd)
   return close_fn(fd);
 }
 
+/* data might be NULL */
 static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)
 {
   NSSInitParameters initparams;
@@ -1036,6 +1171,7 @@ static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)
   return CURLE_SSL_CACERT_BADFILE;
 }
 
+/* data might be NULL */
 static CURLcode nss_init(struct SessionHandle *data)
 {
   char *cert_dir;
@@ -1086,7 +1222,7 @@ static CURLcode nss_init(struct SessionHandle *data)
   if(result)
     return result;
 
-  if(num_enabled_ciphers() == 0)
+  if(!any_cipher_enabled())
     NSS_SetDomesticPolicy();
 
   initialized = 1;
@@ -1114,12 +1250,14 @@ int Curl_nss_init(void)
   return 1;
 }
 
+/* data might be NULL */
 CURLcode Curl_nss_force_init(struct SessionHandle *data)
 {
   CURLcode result;
   if(!nss_initlock) {
-    failf(data, "unable to initialize NSS, curl_global_init() should have "
-                "been called with CURL_GLOBAL_SSL or CURL_GLOBAL_ALL");
+    if(data)
+      failf(data, "unable to initialize NSS, curl_global_init() should have "
+                  "been called with CURL_GLOBAL_SSL or CURL_GLOBAL_ALL");
     return CURLE_FAILED_INIT;
   }
 
@@ -1210,10 +1348,8 @@ void Curl_nss_close(struct connectdata *conn, int sockindex)
        * authentication data from a previous connection. */
       SSL_InvalidateSession(connssl->handle);
 
-    if(connssl->client_nickname != NULL) {
-      free(connssl->client_nickname);
-      connssl->client_nickname = NULL;
-    }
+    free(connssl->client_nickname);
+    connssl->client_nickname = NULL;
     /* destroy all NSS objects in order to avoid failure of NSS shutdown */
     Curl_llist_destroy(connssl->obj_list, NULL);
     connssl->obj_list = NULL;
@@ -1224,15 +1360,6 @@ void Curl_nss_close(struct connectdata *conn, int sockindex)
   }
 }
 
-/*
- * This function is called when the 'data' struct is going away. Close
- * down everything and free all resources!
- */
-void Curl_nss_close_all(struct SessionHandle *data)
-{
-  (void)data;
-}
-
 /* return true if NSS can provide error code (and possibly msg) for the
    error */
 static bool is_nss_error(CURLcode err)
@@ -1429,16 +1556,6 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     SSL_LIBRARY_VERSION_TLS_1_0   /* max */
   };
 
-#ifdef USE_NGHTTP2
-#if defined(SSL_ENABLE_NPN) || defined(SSL_ENABLE_ALPN)
-  unsigned int alpn_protos_len = NGHTTP2_PROTO_VERSION_ID_LEN +
-      ALPN_HTTP_1_1_LENGTH + 2;
-  unsigned char alpn_protos[NGHTTP2_PROTO_VERSION_ID_LEN + ALPN_HTTP_1_1_LENGTH
-      + 2];
-  int cur = 0;
-#endif
-#endif
-
   connssl->data = data;
 
   /* list of all NSS objects we need to destroy in Curl_nss_close() */
@@ -1618,51 +1735,73 @@ static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
     SSL_SetPKCS11PinArg(connssl->handle, data->set.str[STRING_KEY_PASSWD]);
   }
 
-#ifdef USE_NGHTTP2
-  if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
+#ifdef SSL_ENABLE_OCSP_STAPLING
+  if(data->set.ssl.verifystatus) {
+    if(SSL_OptionSet(connssl->handle, SSL_ENABLE_OCSP_STAPLING, PR_TRUE)
+        != SECSuccess)
+      goto error;
+  }
+#endif
+
 #ifdef SSL_ENABLE_NPN
-    if(data->set.ssl_enable_npn) {
-      if(SSL_OptionSet(connssl->handle, SSL_ENABLE_NPN, PR_TRUE) != SECSuccess)
-        goto error;
-    }
+  if(SSL_OptionSet(connssl->handle, SSL_ENABLE_NPN, data->set.ssl_enable_npn
+        ? PR_TRUE : PR_FALSE) != SECSuccess)
+    goto error;
 #endif
 
 #ifdef SSL_ENABLE_ALPN
-    if(data->set.ssl_enable_alpn) {
-      if(SSL_OptionSet(connssl->handle, SSL_ENABLE_ALPN, PR_TRUE)
-          != SECSuccess)
-        goto error;
-    }
+  if(SSL_OptionSet(connssl->handle, SSL_ENABLE_ALPN, data->set.ssl_enable_alpn
+        ? PR_TRUE : PR_FALSE) != SECSuccess)
+    goto error;
+#endif
+
+#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
+  if(data->set.ssl.falsestart) {
+    if(SSL_OptionSet(connssl->handle, SSL_ENABLE_FALSE_START, PR_TRUE)
+        != SECSuccess)
+      goto error;
+
+    if(SSL_SetCanFalseStartCallback(connssl->handle, CanFalseStartCallback,
+        conn) != SECSuccess)
+      goto error;
+  }
 #endif
 
 #if defined(SSL_ENABLE_NPN) || defined(SSL_ENABLE_ALPN)
-    if(data->set.ssl_enable_npn || data->set.ssl_enable_alpn) {
-      alpn_protos[cur] = NGHTTP2_PROTO_VERSION_ID_LEN;
-      cur++;
-      memcpy(&alpn_protos[cur], NGHTTP2_PROTO_VERSION_ID,
+  if(data->set.ssl_enable_npn || data->set.ssl_enable_alpn) {
+    int cur = 0;
+    unsigned char protocols[128];
+
+#ifdef USE_NGHTTP2
+    if(data->set.httpversion >= CURL_HTTP_VERSION_2) {
+      protocols[cur++] = NGHTTP2_PROTO_VERSION_ID_LEN;
+      memcpy(&protocols[cur], NGHTTP2_PROTO_VERSION_ID,
           NGHTTP2_PROTO_VERSION_ID_LEN);
       cur += NGHTTP2_PROTO_VERSION_ID_LEN;
-      alpn_protos[cur] = ALPN_HTTP_1_1_LENGTH;
-      cur++;
-      memcpy(&alpn_protos[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
-
-      if(SSL_SetNextProtoNego(connssl->handle, alpn_protos, alpn_protos_len)
-          != SECSuccess)
-        goto error;
-      connssl->asked_for_h2 = TRUE;
-    }
-    else {
-      infof(data, "SSL, can't negotiate HTTP/2.0 with neither NPN nor ALPN\n");
     }
 #endif
+    protocols[cur++] = ALPN_HTTP_1_1_LENGTH;
+    memcpy(&protocols[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
+    cur += ALPN_HTTP_1_1_LENGTH;
+
+    if(SSL_SetNextProtoNego(connssl->handle, protocols, cur) != SECSuccess)
+      goto error;
   }
 #endif
 
 
   /* Force handshake on next I/O */
-  SSL_ResetHandshake(connssl->handle, /* asServer */ PR_FALSE);
+  if(SSL_ResetHandshake(connssl->handle, /* asServer */ PR_FALSE)
+      != SECSuccess)
+    goto error;
+
+  /* propagate hostname to the TLS layer */
+  if(SSL_SetURL(connssl->handle, conn->host.name) != SECSuccess)
+    goto error;
 
-  SSL_SetURL(connssl->handle, conn->host.name);
+  /* prevent NSS from re-using the session for a different hostname */
+  if(SSL_SetSockPeerID(connssl->handle, conn->host.name) != SECSuccess)
+    goto error;
 
   return CURLE_OK;
 
@@ -1715,7 +1854,7 @@ static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
     }
 
     if(SECFailure == ret) {
-      infof(data,"SSL certificate issuer check failed\n");
+      infof(data, "SSL certificate issuer check failed\n");
       result = CURLE_SSL_ISSUER_ERROR;
       goto error;
     }
@@ -1724,6 +1863,11 @@ static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
     }
   }
 
+  result = cmp_peer_pubkey(connssl, data->set.str[STRING_SSL_PINNEDPUBLICKEY]);
+  if(result)
+    /* status already printed */
+    goto error;
+
   return CURLE_OK;
 
 error:
@@ -1870,6 +2014,7 @@ size_t Curl_nss_version(char *buffer, size_t size)
   return snprintf(buffer, size, "NSS/%s", NSS_VERSION);
 }
 
+/* data might be NULL */
 int Curl_nss_seed(struct SessionHandle *data)
 {
   /* make sure that NSS is initialized */
@@ -1881,14 +2026,11 @@ int Curl_nss_random(struct SessionHandle *data,
                     unsigned char *entropy,
                     size_t length)
 {
-  if(data)
-    Curl_nss_seed(data);  /* Initiate the seed if not already done */
+  Curl_nss_seed(data);  /* Initiate the seed if not already done */
 
-  if(SECSuccess != PK11_GenerateRandom(entropy, curlx_uztosi(length))) {
-    /* no way to signal a failure from here, we have to abort */
-    failf(data, "PK11_GenerateRandom() failed, calling abort()...");
-    abort();
-  }
+  if(SECSuccess != PK11_GenerateRandom(entropy, curlx_uztosi(length)))
+    /* signal a failure */
+    return -1;
 
   return 0;
 }
@@ -1906,4 +2048,34 @@ void Curl_nss_md5sum(unsigned char *tmp, /* input */
   PK11_DestroyContext(MD5pw, PR_TRUE);
 }
 
+void Curl_nss_sha256sum(const unsigned char *tmp, /* input */
+                     size_t tmplen,
+                     unsigned char *sha256sum, /* output */
+                     size_t sha256len)
+{
+  PK11Context *SHA256pw = PK11_CreateDigestContext(SEC_OID_SHA256);
+  unsigned int SHA256out;
+
+  PK11_DigestOp(SHA256pw, tmp, curlx_uztoui(tmplen));
+  PK11_DigestFinal(SHA256pw, sha256sum, &SHA256out, curlx_uztoui(sha256len));
+  PK11_DestroyContext(SHA256pw, PR_TRUE);
+}
+
+bool Curl_nss_cert_status_request(void)
+{
+#ifdef SSL_ENABLE_OCSP_STAPLING
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
+
+bool Curl_nss_false_start(void) {
+#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
+
 #endif /* USE_NSS */
index 74840e8..601168c 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -37,10 +37,6 @@ CURLcode Curl_nss_connect_nonblocking(struct connectdata *conn,
 /* close a SSL connection */
 void Curl_nss_close(struct connectdata *conn, int sockindex);
 
-/* tell NSS to close down all open information regarding connections (and
-   thus session ID caching etc) */
-void Curl_nss_close_all(struct SessionHandle *data);
-
 int Curl_nss_init(void);
 void Curl_nss_cleanup(void);
 
@@ -60,6 +56,18 @@ void Curl_nss_md5sum(unsigned char *tmp, /* input */
                      unsigned char *md5sum, /* output */
                      size_t md5len);
 
+void Curl_nss_sha256sum(const unsigned char *tmp, /* input */
+                     size_t tmplen,
+                     unsigned char *sha256sum, /* output */
+                     size_t sha256len);
+
+bool Curl_nss_cert_status_request(void);
+
+bool Curl_nss_false_start(void);
+
+/* Set the API backend definition to NSS */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_NSS
+
 /* this backend supports the CAPATH option */
 #define have_curlssl_ca_path 1
 
@@ -74,7 +82,7 @@ void Curl_nss_md5sum(unsigned char *tmp, /* input */
 
 /* NSS has its own session ID cache */
 #define curlssl_session_free(x) Curl_nop_stmt
-#define curlssl_close_all Curl_nss_close_all
+#define curlssl_close_all(x) ((void)x)
 #define curlssl_close Curl_nss_close
 /* NSS has no shutdown function provided and thus always fail */
 #define curlssl_shutdown(x,y) ((void)x, (void)y, 1)
@@ -86,7 +94,9 @@ void Curl_nss_md5sum(unsigned char *tmp, /* input */
 #define curlssl_data_pending(x,y) ((void)x, (void)y, 0)
 #define curlssl_random(x,y,z) Curl_nss_random(x,y,z)
 #define curlssl_md5sum(a,b,c,d) Curl_nss_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_NSS
+#define curlssl_sha256sum(a,b,c,d) Curl_nss_sha256sum(a,b,c,d)
+#define curlssl_cert_status_request() Curl_nss_cert_status_request()
+#define curlssl_false_start() Curl_nss_false_start()
 
 #endif /* USE_NSS */
 #endif /* HEADER_CURL_NSSG_H */
index a68d88e..cbf2d21 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -32,6 +32,8 @@
 
 #include "curl_setup.h"
 
+#ifdef USE_OPENSSL
+
 #ifdef HAVE_LIMITS_H
 #include <limits.h>
 #endif
 #include "vtls.h"
 #include "rawstr.h"
 #include "hostcheck.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#ifdef USE_SSLEAY
-
-#ifdef USE_OPENSSL
+#include <openssl/ssl.h>
 #include <openssl/rand.h>
 #include <openssl/x509v3.h>
 #include <openssl/dsa.h>
 #include <openssl/md5.h>
 #include <openssl/conf.h>
 #include <openssl/bn.h>
-#else
-#include <rand.h>
-#include <x509v3.h>
-#include <md5.h>
+#include <openssl/rsa.h>
+
+#ifdef HAVE_OPENSSL_PKCS12_H
+#include <openssl/pkcs12.h>
+#endif
+
+#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_OCSP)
+#include <openssl/ocsp.h>
 #endif
 
 #include "warnless.h"
-#include "curl_memory.h"
 #include "non-ascii.h" /* for Curl_convert_from_utf8 prototype */
 
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 #ifndef OPENSSL_VERSION_NUMBER
 #error "OPENSSL_VERSION_NUMBER not defined"
 #endif
 
-#if OPENSSL_VERSION_NUMBER >= 0x0090581fL
-#define HAVE_SSL_GET1_SESSION 1
-#else
-#undef HAVE_SSL_GET1_SESSION
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00904100L
-#define HAVE_USERDATA_IN_PWD_CALLBACK 1
-#else
-#undef HAVE_USERDATA_IN_PWD_CALLBACK
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00907001L
-/* ENGINE_load_private_key() takes four arguments */
-#define HAVE_ENGINE_LOAD_FOUR_ARGS
+#if defined(HAVE_OPENSSL_ENGINE_H)
 #include <openssl/ui.h>
-#else
-/* ENGINE_load_private_key() takes three arguments */
-#undef HAVE_ENGINE_LOAD_FOUR_ARGS
-#endif
-
-#if (OPENSSL_VERSION_NUMBER >= 0x00903001L) && defined(HAVE_OPENSSL_PKCS12_H)
-/* OpenSSL has PKCS 12 support */
-#define HAVE_PKCS12_SUPPORT
-#else
-/* OpenSSL/SSLEay does not have PKCS12 support */
-#undef HAVE_PKCS12_SUPPORT
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00906001L
-#define HAVE_ERR_ERROR_STRING_N 1
 #endif
 
 #if OPENSSL_VERSION_NUMBER >= 0x00909000L
 #define SSL_METHOD_QUAL
 #endif
 
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
-/* 0.9.6 didn't have X509_STORE_set_flags() */
-#define HAVE_X509_STORE_SET_FLAGS 1
-#else
-#define X509_STORE_set_flags(x,y) Curl_nop_stmt
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
 #define HAVE_ERR_REMOVE_THREAD_STATE 1
+#if (OPENSSL_VERSION_NUMBER >= 0x10100004L)
+/* OpenSSL 1.1.0-pre4 removed the argument! */
+#define HAVE_ERR_REMOVE_THREAD_STATE_NOARG 1
+#endif
 #endif
 
 #if !defined(HAVE_SSLV2_CLIENT_METHOD) || \
 #define OPENSSL_NO_SSL2
 #endif
 
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && /* OpenSSL 1.1.0+ */ \
+  !defined(LIBRESSL_VERSION_NUMBER)
+#define SSLeay_add_ssl_algorithms() SSL_library_init()
+#define SSLEAY_VERSION_NUMBER OPENSSL_VERSION_NUMBER
+#define HAVE_X509_GET0_EXTENSIONS 1 /* added in 1.1.0 -pre1 */
+#define HAVE_OPAQUE_EVP_PKEY 1 /* since 1.1.0 -pre3 */
+#endif
+
+#if (OPENSSL_VERSION_NUMBER >= 0x1000200fL) && /* 1.0.2 or later */ \
+  !defined(LIBRESSL_VERSION_NUMBER)
+#define HAVE_X509_GET0_SIGNATURE 1
+#endif
+
+#if (OPENSSL_VERSION_NUMBER < 0x0090808fL)
+/* not present in older OpenSSL */
+#define OPENSSL_load_builtin_modules(x)
+#endif
+
+#if defined(LIBRESSL_VERSION_NUMBER)
+#define OSSL_PACKAGE "LibreSSL"
+#elif defined(OPENSSL_IS_BORINGSSL)
+#define OSSL_PACKAGE "BoringSSL"
+#else
+#define OSSL_PACKAGE "OpenSSL"
+#endif
+
 /*
  * Number of bytes to read from the random number seed file. This must be
  * a finite value (because some entropy "files" like /dev/urandom have
  */
 #define RAND_LOAD_LENGTH 1024
 
-#ifndef HAVE_USERDATA_IN_PWD_CALLBACK
-static char global_passwd[64];
-#endif
-
-static int passwd_callback(char *buf, int num, int encrypting
-#ifdef HAVE_USERDATA_IN_PWD_CALLBACK
-                           /* This was introduced in 0.9.4, we can set this
-                              using SSL_CTX_set_default_passwd_cb_userdata()
-                              */
-                           , void *global_passwd
-#endif
-                           )
+static int passwd_callback(char *buf, int num, int encrypting,
+                           void *global_passwd)
 {
   DEBUGASSERT(0 == encrypting);
 
@@ -261,7 +247,7 @@ static int ossl_seed(struct SessionHandle *data)
   return nread;
 }
 
-static int Curl_ossl_seed(struct SessionHandle *data)
+static void Curl_ossl_seed(struct SessionHandle *data)
 {
   /* we have the "SSL is seeded" boolean static to prevent multiple
      time-consuming seedings in vain */
@@ -272,10 +258,8 @@ static int Curl_ossl_seed(struct SessionHandle *data)
     ossl_seed(data);
     ssl_seeded = TRUE;
   }
-  return 0;
 }
 
-
 #ifndef SSL_FILETYPE_ENGINE
 #define SSL_FILETYPE_ENGINE 42
 #endif
@@ -297,7 +281,7 @@ static int do_file_type(const char *type)
   return -1;
 }
 
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_LOAD_FOUR_ARGS)
+#if defined(HAVE_OPENSSL_ENGINE_H)
 /*
  * Supply default password to the engine user interface conversation.
  * The password is passed by OpenSSL engine from ENGINE_load_private_key()
@@ -357,37 +341,24 @@ int cert_stuff(struct connectdata *conn,
     int cert_done = 0;
 
     if(data->set.str[STRING_KEY_PASSWD]) {
-#ifndef HAVE_USERDATA_IN_PWD_CALLBACK
-      /*
-       * If password has been given, we store that in the global
-       * area (*shudder*) for a while:
-       */
-      size_t len = strlen(data->set.str[STRING_KEY_PASSWD]);
-      if(len < sizeof(global_passwd))
-        memcpy(global_passwd, data->set.str[STRING_KEY_PASSWD], len+1);
-      else
-        global_passwd[0] = '\0';
-#else
-      /*
-       * We set the password in the callback userdata
-       */
+      /* set the password in the callback userdata */
       SSL_CTX_set_default_passwd_cb_userdata(ctx,
                                              data->set.str[STRING_KEY_PASSWD]);
-#endif
       /* Set passwd callback: */
       SSL_CTX_set_default_passwd_cb(ctx, passwd_callback);
     }
 
 
-#define SSL_CLIENT_CERT_ERR \
-    "unable to use client certificate (no key found or wrong pass phrase?)"
-
     switch(file_type) {
     case SSL_FILETYPE_PEM:
       /* SSL_CTX_use_certificate_chain_file() only works on PEM files */
       if(SSL_CTX_use_certificate_chain_file(ctx,
                                             cert_file) != 1) {
-        failf(data, SSL_CLIENT_CERT_ERR);
+        failf(data,
+              "could not load PEM client certificate, " OSSL_PACKAGE
+              " error %s, "
+              "(no key found, wrong pass phrase, or wrong file format?)",
+              ERR_error_string(ERR_get_error(), NULL) );
         return 0;
       }
       break;
@@ -399,7 +370,11 @@ int cert_stuff(struct connectdata *conn,
       if(SSL_CTX_use_certificate_file(ctx,
                                       cert_file,
                                       file_type) != 1) {
-        failf(data, SSL_CLIENT_CERT_ERR);
+        failf(data,
+              "could not load ASN1 client certificate, " OSSL_PACKAGE
+              " error %s, "
+              "(no key found, wrong pass phrase, or wrong file format?)",
+              ERR_error_string(ERR_get_error(), NULL) );
         return 0;
       }
       break;
@@ -458,14 +433,13 @@ int cert_stuff(struct connectdata *conn,
 
     case SSL_FILETYPE_PKCS12:
     {
-#ifdef HAVE_PKCS12_SUPPORT
+#ifdef HAVE_OPENSSL_PKCS12_H
       FILE *f;
       PKCS12 *p12;
       EVP_PKEY *pri;
       STACK_OF(X509) *ca = NULL;
-      int i;
 
-      f = fopen(cert_file,"rb");
+      f = fopen(cert_file, "rb");
       if(!f) {
         failf(data, "could not open PKCS12 file '%s'", cert_file);
         return 0;
@@ -474,7 +448,7 @@ int cert_stuff(struct connectdata *conn,
       fclose(f);
 
       if(!p12) {
-        failf(data, "error reading PKCS12 file '%s'", cert_file );
+        failf(data, "error reading PKCS12 file '%s'", cert_file);
         return 0;
       }
 
@@ -483,7 +457,8 @@ int cert_stuff(struct connectdata *conn,
       if(!PKCS12_parse(p12, data->set.str[STRING_KEY_PASSWD], &pri, &x509,
                        &ca)) {
         failf(data,
-              "could not parse PKCS12 file, check password, OpenSSL error %s",
+              "could not parse PKCS12 file, check password, " OSSL_PACKAGE
+              " error %s",
               ERR_error_string(ERR_get_error(), NULL) );
         PKCS12_free(p12);
         return 0;
@@ -492,7 +467,10 @@ int cert_stuff(struct connectdata *conn,
       PKCS12_free(p12);
 
       if(SSL_CTX_use_certificate(ctx, x509) != 1) {
-        failf(data, SSL_CLIENT_CERT_ERR);
+        failf(data,
+              "could not load PKCS12 client certificate, " OSSL_PACKAGE
+              " error %s",
+              ERR_error_string(ERR_get_error(), NULL) );
         goto fail;
       }
 
@@ -508,8 +486,8 @@ int cert_stuff(struct connectdata *conn,
         goto fail;
       }
       /* Set Certificate Verification chain */
-      if(ca && sk_X509_num(ca)) {
-        for(i = 0; i < sk_X509_num(ca); i++) {
+      if(ca) {
+        while(sk_X509_num(ca)) {
           /*
            * Note that sk_X509_pop() is used below to make sure the cert is
            * removed from the stack properly before getting passed to
@@ -519,6 +497,7 @@ int cert_stuff(struct connectdata *conn,
            */
           X509 *x = sk_X509_pop(ca);
           if(!SSL_CTX_add_extra_chain_cert(ctx, x)) {
+            X509_free(x);
             failf(data, "cannot add certificate to certificate chain");
             goto fail;
           }
@@ -572,28 +551,23 @@ int cert_stuff(struct connectdata *conn,
       {                         /* XXXX still needs some work */
         EVP_PKEY *priv_key = NULL;
         if(data->state.engine) {
-#ifdef HAVE_ENGINE_LOAD_FOUR_ARGS
           UI_METHOD *ui_method =
             UI_create_method((char *)"cURL user interface");
           if(!ui_method) {
-            failf(data, "unable do create OpenSSL user-interface method");
+            failf(data, "unable do create " OSSL_PACKAGE
+                  " user-interface method");
             return 0;
           }
           UI_method_set_opener(ui_method, UI_method_get_opener(UI_OpenSSL()));
           UI_method_set_closer(ui_method, UI_method_get_closer(UI_OpenSSL()));
           UI_method_set_reader(ui_method, ssl_ui_reader);
           UI_method_set_writer(ui_method, ssl_ui_writer);
-#endif
           /* the typecast below was added to please mingw32 */
           priv_key = (EVP_PKEY *)
-            ENGINE_load_private_key(data->state.engine,key_file,
-#ifdef HAVE_ENGINE_LOAD_FOUR_ARGS
+            ENGINE_load_private_key(data->state.engine, key_file,
                                     ui_method,
-#endif
                                     data->set.str[STRING_KEY_PASSWD]);
-#ifdef HAVE_ENGINE_LOAD_FOUR_ARGS
           UI_destroy_method(ui_method);
-#endif
           if(!priv_key) {
             failf(data, "failed to load private key from crypto engine");
             return 0;
@@ -628,7 +602,7 @@ int cert_stuff(struct connectdata *conn,
 
     ssl=SSL_new(ctx);
     if(!ssl) {
-      failf(data,"unable to create an SSL structure");
+      failf(data, "unable to create an SSL structure");
       return 0;
     }
 
@@ -638,7 +612,7 @@ int cert_stuff(struct connectdata *conn,
        leak memory as the previous version: */
     if(x509) {
       EVP_PKEY *pktmp = X509_get_pubkey(x509);
-      EVP_PKEY_copy_parameters(pktmp,SSL_get_privatekey(ssl));
+      EVP_PKEY_copy_parameters(pktmp, SSL_get_privatekey(ssl));
       EVP_PKEY_free(pktmp);
     }
 
@@ -654,10 +628,6 @@ int cert_stuff(struct connectdata *conn,
       failf(data, "Private key does not match the certificate public key");
       return 0;
     }
-#ifndef HAVE_USERDATA_IN_PWD_CALLBACK
-    /* erase it now */
-    memset(global_passwd, 0, sizeof(global_passwd));
-#endif
   }
   return 1;
 }
@@ -692,36 +662,17 @@ static int x509_name_oneline(X509_NAME *a, char *buf, size_t size)
 #endif
 }
 
-static
-int cert_verify_callback(int ok, X509_STORE_CTX *ctx)
-{
-  X509 *err_cert;
-  char buf[256];
-
-  err_cert=X509_STORE_CTX_get_current_cert(ctx);
-  (void)x509_name_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf));
-  return ok;
-}
-
 /* Return error string for last OpenSSL error
  */
 static char *SSL_strerror(unsigned long error, char *buf, size_t size)
 {
-#ifdef HAVE_ERR_ERROR_STRING_N
   /* OpenSSL 0.9.6 and later has a function named
-     ERRO_error_string_n() that takes the size of the buffer as a
+     ERR_error_string_n() that takes the size of the buffer as a
      third argument */
   ERR_error_string_n(error, buf, size);
-#else
-  (void) size;
-  ERR_error_string(error, buf);
-#endif
   return buf;
 }
 
-#endif /* USE_SSLEAY */
-
-#ifdef USE_SSLEAY
 /**
  * Global SSL init
  *
@@ -730,20 +681,12 @@ static char *SSL_strerror(unsigned long error, char *buf, size_t size)
  */
 int Curl_ossl_init(void)
 {
+  OPENSSL_load_builtin_modules();
+
 #ifdef HAVE_ENGINE_LOAD_BUILTIN_ENGINES
   ENGINE_load_builtin_engines();
 #endif
 
-  /* Lets get nice error messages */
-  SSL_load_error_strings();
-
-  /* Init the global ciphers and digests */
-  if(!SSLeay_add_ssl_algorithms())
-    return 0;
-
-  OpenSSL_add_all_algorithms();
-
-
   /* OPENSSL_config(NULL); is "strongly recommended" to use but unfortunately
      that function makes an exit() call on wrongly formatted config files
      which makes it hard to use in some situations. OPENSSL_config() itself
@@ -756,16 +699,21 @@ int Curl_ossl_init(void)
 #define CONF_MFLAGS_DEFAULT_SECTION 0x0
 #endif
 
-  (void)CONF_modules_load_file(NULL, NULL,
-                               CONF_MFLAGS_DEFAULT_SECTION|
-                               CONF_MFLAGS_IGNORE_MISSING_FILE);
+  CONF_modules_load_file(NULL, NULL,
+                         CONF_MFLAGS_DEFAULT_SECTION|
+                         CONF_MFLAGS_IGNORE_MISSING_FILE);
 
-  return 1;
-}
+  /* Lets get nice error messages */
+  SSL_load_error_strings();
 
-#endif /* USE_SSLEAY */
+  /* Init the global ciphers and digests */
+  if(!SSLeay_add_ssl_algorithms())
+    return 0;
 
-#ifdef USE_SSLEAY
+  OpenSSL_add_all_algorithms();
+
+  return 1;
+}
 
 /* Global cleanup */
 void Curl_ossl_cleanup(void)
@@ -787,11 +735,16 @@ void Curl_ossl_cleanup(void)
   ERR_free_strings();
 
   /* Free thread local error state, destroying hash upon zero refcount */
-#ifdef HAVE_ERR_REMOVE_THREAD_STATE
+#ifdef HAVE_ERR_REMOVE_THREAD_STATE_NOARG
+  ERR_remove_thread_state();
+#elif defined(HAVE_ERR_REMOVE_THREAD_STATE)
   ERR_remove_thread_state(NULL);
 #else
   ERR_remove_state(0);
 #endif
+
+  /* Free all memory allocated by all configuration modules */
+  CONF_modules_free();
 }
 
 /*
@@ -821,7 +774,7 @@ int Curl_ossl_check_cxn(struct connectdata *conn)
  */
 CURLcode Curl_ossl_set_engine(struct SessionHandle *data, const char *engine)
 {
-#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
+#if defined(USE_OPENSSL) && defined(HAVE_OPENSSL_ENGINE_H)
   ENGINE *e;
 
 #if OPENSSL_VERSION_NUMBER >= 0x00909000L
@@ -869,7 +822,7 @@ CURLcode Curl_ossl_set_engine_default(struct SessionHandle *data)
 #ifdef HAVE_OPENSSL_ENGINE_H
   if(data->state.engine) {
     if(ENGINE_set_default(data->state.engine, ENGINE_METHOD_ALL) > 0) {
-      infof(data,"set default crypto engine '%s'\n",
+      infof(data, "set default crypto engine '%s'\n",
             ENGINE_get_id(data->state.engine));
     }
     else {
@@ -889,7 +842,7 @@ CURLcode Curl_ossl_set_engine_default(struct SessionHandle *data)
 struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data)
 {
   struct curl_slist *list = NULL;
-#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
+#if defined(USE_OPENSSL) && defined(HAVE_OPENSSL_ENGINE_H)
   struct curl_slist *beg;
   ENGINE *e;
 
@@ -985,7 +938,7 @@ int Curl_ossl_shutdown(struct connectdata *conn, int sockindex)
         default:
           /* openssl/ssl.h says "look at error stack/return value/errno" */
           sslerror = ERR_get_error();
-          failf(conn->data, "SSL read: %s, errno %d",
+          failf(conn->data, OSSL_PACKAGE " SSL read: %s, errno %d",
                 ERR_error_string(sslerror, buf),
                 SOCKERRNO);
           done = 1;
@@ -1051,49 +1004,6 @@ void Curl_ossl_close_all(struct SessionHandle *data)
 #endif
 }
 
-static int asn1_output(const ASN1_UTCTIME *tm,
-                       char *buf,
-                       size_t sizeofbuf)
-{
-  const char *asn1_string;
-  int gmt=FALSE;
-  int i;
-  int year=0,month=0,day=0,hour=0,minute=0,second=0;
-
-  i=tm->length;
-  asn1_string=(const char *)tm->data;
-
-  if(i < 10)
-    return 1;
-  if(asn1_string[i-1] == 'Z')
-    gmt=TRUE;
-  for(i=0; i<10; i++)
-    if((asn1_string[i] > '9') || (asn1_string[i] < '0'))
-      return 2;
-
-  year= (asn1_string[0]-'0')*10+(asn1_string[1]-'0');
-  if(year < 50)
-    year+=100;
-
-  month= (asn1_string[2]-'0')*10+(asn1_string[3]-'0');
-  if((month > 12) || (month < 1))
-    return 3;
-
-  day= (asn1_string[4]-'0')*10+(asn1_string[5]-'0');
-  hour= (asn1_string[6]-'0')*10+(asn1_string[7]-'0');
-  minute=  (asn1_string[8]-'0')*10+(asn1_string[9]-'0');
-
-  if((asn1_string[10] >= '0') && (asn1_string[10] <= '9') &&
-     (asn1_string[11] >= '0') && (asn1_string[11] <= '9'))
-    second= (asn1_string[10]-'0')*10+(asn1_string[11]-'0');
-
-  snprintf(buf, sizeofbuf,
-           "%04d-%02d-%02d %02d:%02d:%02d %s",
-           year+1900, month, day, hour, minute, second, (gmt?"GMT":""));
-
-  return 0;
-}
-
 /* ====================================================== */
 
 
@@ -1120,8 +1030,7 @@ static int asn1_output(const ASN1_UTCTIME *tm,
 */
 static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
 {
-  int matched = -1; /* -1 is no alternative match yet, 1 means match and 0
-                       means mismatch */
+  bool matched = FALSE;
   int target = GEN_DNS; /* target type, GEN_DNS or GEN_IPADD */
   size_t addrlen = 0;
   struct SessionHandle *data = conn->data;
@@ -1158,7 +1067,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
     numalts = sk_GENERAL_NAME_num(altnames);
 
     /* loop through all alternatives while none has matched */
-    for(i=0; (i<numalts) && (matched != 1); i++) {
+    for(i=0; (i<numalts) && !matched; i++) {
       /* get a handle to alternative name number i */
       const GENERAL_NAME *check = sk_GENERAL_NAME_value(altnames, i);
 
@@ -1183,19 +1092,23 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
           if((altlen == strlen(altptr)) &&
              /* if this isn't true, there was an embedded zero in the name
                 string and we cannot match it. */
-             Curl_cert_hostcheck(altptr, conn->host.name))
-            matched = 1;
-          else
-            matched = 0;
+             Curl_cert_hostcheck(altptr, conn->host.name)) {
+            matched = TRUE;
+            infof(data,
+                  " subjectAltName: host \"%s\" matched cert's \"%s\"\n",
+                  conn->host.dispname, altptr);
+          }
           break;
 
         case GEN_IPADD: /* IP address comparison */
           /* compare alternative IP address if the data chunk is the same size
              our server IP address is */
-          if((altlen == addrlen) && !memcmp(altptr, &addr, altlen))
-            matched = 1;
-          else
-            matched = 0;
+          if((altlen == addrlen) && !memcmp(altptr, &addr, altlen)) {
+            matched = TRUE;
+            infof(data,
+                  " subjectAltName: host \"%s\" matched cert's IP address!\n",
+                  conn->host.dispname);
+          }
           break;
         }
       }
@@ -1203,13 +1116,13 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
     GENERAL_NAMES_free(altnames);
   }
 
-  if(matched == 1)
-    /* an alternative name matched the server hostname */
-    infof(data, "\t subjectAltName: %s matched\n", conn->host.dispname);
-  else if(matched == 0) {
-    /* an alternative name field existed, but didn't match and then
-       we MUST fail */
-    infof(data, "\t subjectAltName does not match %s\n", conn->host.dispname);
+  if(matched)
+    /* an alternative name matched */
+    ;
+  else if(altnames) {
+    /* an alternative name field existed, but didn't match and then we MUST
+       fail */
+    infof(data, " subjectAltName does not match %s\n", conn->host.dispname);
     failf(data, "SSL: no alternative certificate subject name matches "
           "target host name '%s'", conn->host.dispname);
     result = CURLE_PEER_FAILED_VERIFICATION;
@@ -1217,14 +1130,14 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
   else {
     /* we have to look to the last occurrence of a commonName in the
        distinguished one to get the most significant one. */
-    int j,i=-1 ;
+    int j, i=-1;
 
-/* The following is done because of a bug in 0.9.6b */
+    /* The following is done because of a bug in 0.9.6b */
 
     unsigned char *nulstr = (unsigned char *)"";
     unsigned char *peer_CN = nulstr;
 
-    X509_NAME *name = X509_get_subject_name(server_cert) ;
+    X509_NAME *name = X509_get_subject_name(server_cert);
     if(name)
       while((j = X509_NAME_get_index_by_NID(name, NID_commonName, i))>=0)
         i=j;
@@ -1234,7 +1147,8 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
        UTF8 etc. */
 
     if(i>=0) {
-      ASN1_STRING *tmp = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name,i));
+      ASN1_STRING *tmp =
+        X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name, i));
 
       /* In OpenSSL 0.9.7d and earlier, ASN1_STRING_to_UTF8 fails if the input
          is already UTF-8 encoded. We check for this case and copy the raw
@@ -1290,7 +1204,7 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
       result = CURLE_PEER_FAILED_VERIFICATION;
     }
     else {
-      infof(data, "\t common name: %s (matched)\n", peer_CN);
+      infof(data, " common name: %s (matched)\n", peer_CN);
     }
     if(peer_CN)
       OPENSSL_free(peer_CN);
@@ -1298,7 +1212,136 @@ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert)
 
   return result;
 }
-#endif /* USE_SSLEAY */
+
+#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
+    !defined(OPENSSL_NO_OCSP)
+static CURLcode verifystatus(struct connectdata *conn,
+                             struct ssl_connect_data *connssl)
+{
+  int i, ocsp_status;
+  const unsigned char *p;
+  CURLcode result = CURLE_OK;
+  struct SessionHandle *data = conn->data;
+
+  OCSP_RESPONSE *rsp = NULL;
+  OCSP_BASICRESP *br = NULL;
+  X509_STORE     *st = NULL;
+  STACK_OF(X509) *ch = NULL;
+
+  long len = SSL_get_tlsext_status_ocsp_resp(connssl->handle, &p);
+
+  if(!p) {
+    failf(data, "No OCSP response received");
+    result = CURLE_SSL_INVALIDCERTSTATUS;
+    goto end;
+  }
+
+  rsp = d2i_OCSP_RESPONSE(NULL, &p, len);
+  if(!rsp) {
+    failf(data, "Invalid OCSP response");
+    result = CURLE_SSL_INVALIDCERTSTATUS;
+    goto end;
+  }
+
+  ocsp_status = OCSP_response_status(rsp);
+  if(ocsp_status != OCSP_RESPONSE_STATUS_SUCCESSFUL) {
+    failf(data, "Invalid OCSP response status: %s (%d)",
+          OCSP_response_status_str(ocsp_status), ocsp_status);
+    result = CURLE_SSL_INVALIDCERTSTATUS;
+    goto end;
+  }
+
+  br = OCSP_response_get1_basic(rsp);
+  if(!br) {
+    failf(data, "Invalid OCSP response");
+    result = CURLE_SSL_INVALIDCERTSTATUS;
+    goto end;
+  }
+
+  ch = SSL_get_peer_cert_chain(connssl->handle);
+  st = SSL_CTX_get_cert_store(connssl->ctx);
+
+#if ((OPENSSL_VERSION_NUMBER <= 0x1000201fL) /* Fixed after 1.0.2a */ || \
+     defined(LIBRESSL_VERSION_NUMBER))
+  /* The authorized responder cert in the OCSP response MUST be signed by the
+     peer cert's issuer (see RFC6960 section 4.2.2.2). If that's a root cert,
+     no problem, but if it's an intermediate cert OpenSSL has a bug where it
+     expects this issuer to be present in the chain embedded in the OCSP
+     response. So we add it if necessary. */
+
+  /* First make sure the peer cert chain includes both a peer and an issuer,
+     and the OCSP response contains a responder cert. */
+  if(sk_X509_num(ch) >= 2 && sk_X509_num(br->certs) >= 1) {
+    X509 *responder = sk_X509_value(br->certs, sk_X509_num(br->certs) - 1);
+
+    /* Find issuer of responder cert and add it to the OCSP response chain */
+    for(i = 0; i < sk_X509_num(ch); i++) {
+      X509 *issuer = sk_X509_value(ch, i);
+      if(X509_check_issued(issuer, responder) == X509_V_OK) {
+        if(!OCSP_basic_add1_cert(br, issuer)) {
+          failf(data, "Could not add issuer cert to OCSP response");
+          result = CURLE_SSL_INVALIDCERTSTATUS;
+          goto end;
+        }
+      }
+    }
+  }
+#endif
+
+  if(OCSP_basic_verify(br, ch, st, 0) <= 0) {
+    failf(data, "OCSP response verification failed");
+    result = CURLE_SSL_INVALIDCERTSTATUS;
+    goto end;
+  }
+
+  for(i = 0; i < OCSP_resp_count(br); i++) {
+    int cert_status, crl_reason;
+    OCSP_SINGLERESP *single = NULL;
+
+    ASN1_GENERALIZEDTIME *rev, *thisupd, *nextupd;
+
+    single = OCSP_resp_get0(br, i);
+    if(!single)
+      continue;
+
+    cert_status = OCSP_single_get0_status(single, &crl_reason, &rev,
+                                          &thisupd, &nextupd);
+
+    if(!OCSP_check_validity(thisupd, nextupd, 300L, -1L)) {
+      failf(data, "OCSP response has expired");
+      result = CURLE_SSL_INVALIDCERTSTATUS;
+      goto end;
+    }
+
+    infof(data, "SSL certificate status: %s (%d)\n",
+          OCSP_cert_status_str(cert_status), cert_status);
+
+    switch(cert_status) {
+      case V_OCSP_CERTSTATUS_GOOD:
+        break;
+
+      case V_OCSP_CERTSTATUS_REVOKED:
+        result = CURLE_SSL_INVALIDCERTSTATUS;
+
+        failf(data, "SSL certificate revocation reason: %s (%d)",
+              OCSP_crl_reason_str(crl_reason), crl_reason);
+        goto end;
+
+      case V_OCSP_CERTSTATUS_UNKNOWN:
+        result = CURLE_SSL_INVALIDCERTSTATUS;
+        goto end;
+    }
+  }
+
+end:
+  if(br) OCSP_BASICRESP_free(br);
+  OCSP_RESPONSE_free(rsp);
+
+  return result;
+}
+#endif
+
+#endif /* USE_OPENSSL */
 
 /* The SSL_CTRL_SET_MSG_CALLBACK doesn't exist in ancient OpenSSL versions
    and thus this cannot be done there. */
@@ -1339,8 +1382,12 @@ static const char *ssl_msg_type(int ssl_ver, int msg)
         return "Client hello";
       case SSL3_MT_SERVER_HELLO:
         return "Server hello";
+#ifdef SSL3_MT_NEWSESSION_TICKET
+      case SSL3_MT_NEWSESSION_TICKET:
+        return "Newsession Ticket";
+#endif
       case SSL3_MT_CERTIFICATE:
-        return "CERT";
+        return "Certificate";
       case SSL3_MT_SERVER_KEY_EXCHANGE:
         return "Server key exchange";
       case SSL3_MT_CLIENT_KEY_EXCHANGE:
@@ -1353,6 +1400,10 @@ static const char *ssl_msg_type(int ssl_ver, int msg)
         return "CERT verify";
       case SSL3_MT_FINISHED:
         return "Finished";
+#ifdef SSL3_MT_CERTIFICATE_STATUS
+      case SSL3_MT_CERTIFICATE_STATUS:
+        return "Certificate Status";
+#endif
     }
   }
   return "Unknown";
@@ -1360,12 +1411,22 @@ static const char *ssl_msg_type(int ssl_ver, int msg)
 
 static const char *tls_rt_type(int type)
 {
-  return (
-    type == SSL3_RT_CHANGE_CIPHER_SPEC ? "TLS change cipher, " :
-    type == SSL3_RT_ALERT              ? "TLS alert, "         :
-    type == SSL3_RT_HANDSHAKE          ? "TLS handshake, "     :
-    type == SSL3_RT_APPLICATION_DATA   ? "TLS app data, "      :
-                                         "TLS Unknown, ");
+  switch(type) {
+#ifdef SSL3_RT_HEADER
+  case SSL3_RT_HEADER:
+    return "TLS header";
+#endif
+  case SSL3_RT_CHANGE_CIPHER_SPEC:
+    return "TLS change cipher";
+  case SSL3_RT_ALERT:
+    return "TLS alert";
+  case SSL3_RT_HANDSHAKE:
+    return "TLS handshake";
+  case SSL3_RT_APPLICATION_DATA:
+    return "TLS app data";
+  default:
+    return "TLS Unknown";
+  }
 }
 
 
@@ -1373,15 +1434,16 @@ static const char *tls_rt_type(int type)
  * Our callback from the SSL/TLS layers.
  */
 static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
-                          const void *buf, size_t len, const SSL *ssl,
-                          struct connectdata *conn)
+                          const void *buf, size_t len, SSL *ssl,
+                          void *userp)
 {
   struct SessionHandle *data;
   const char *msg_name, *tls_rt_name;
   char ssl_buf[1024];
   char unknown[32];
   int msg_type, txt_len;
-  const char *verstr;
+  const char *verstr = NULL;
+  struct connectdata *conn = userp;
 
   if(!conn || !conn->data || !conn->data->set.fdebug ||
      (direction != 0 && direction != 1))
@@ -1390,8 +1452,8 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
   data = conn->data;
 
   switch(ssl_ver) {
-#ifdef SSL2_VERSION_MAJOR /* removed in recent versions */
-  case SSL2_VERSION_MAJOR:
+#ifdef SSL2_VERSION /* removed in recent versions */
+  case SSL2_VERSION:
     verstr = "SSLv2";
     break;
 #endif
@@ -1413,29 +1475,36 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
     verstr = "TLSv1.2";
     break;
 #endif
+  case 0:
+    break;
   default:
     snprintf(unknown, sizeof(unknown), "(%x)", ssl_ver);
     verstr = unknown;
     break;
   }
 
-  ssl_ver >>= 8; /* check the upper 8 bits only below */
+  if(ssl_ver) {
+    /* the info given when the version is zero is not that useful for us */
 
-  /* SSLv2 doesn't seem to have TLS record-type headers, so OpenSSL
-   * always pass-up content-type as 0. But the interesting message-type
-   * is at 'buf[0]'.
-   */
-  if(ssl_ver == SSL3_VERSION_MAJOR && content_type != 0)
-    tls_rt_name = tls_rt_type(content_type);
-  else
-    tls_rt_name = "";
+    ssl_ver >>= 8; /* check the upper 8 bits only below */
 
-  msg_type = *(char*)buf;
-  msg_name = ssl_msg_type(ssl_ver, msg_type);
+    /* SSLv2 doesn't seem to have TLS record-type headers, so OpenSSL
+     * always pass-up content-type as 0. But the interesting message-type
+     * is at 'buf[0]'.
+     */
+    if(ssl_ver == SSL3_VERSION_MAJOR && content_type)
+      tls_rt_name = tls_rt_type(content_type);
+    else
+      tls_rt_name = "";
 
-  txt_len = snprintf(ssl_buf, sizeof(ssl_buf), "%s, %s%s (%d):\n",
-                     verstr, tls_rt_name, msg_name, msg_type);
-  Curl_debug(data, CURLINFO_TEXT, ssl_buf, (size_t)txt_len, NULL);
+    msg_type = *(char*)buf;
+    msg_name = ssl_msg_type(ssl_ver, msg_type);
+
+    txt_len = snprintf(ssl_buf, sizeof(ssl_buf), "%s (%s), %s, %s (%d):\n",
+                       verstr, direction?"OUT":"IN",
+                       tls_rt_name, msg_name, msg_type);
+    Curl_debug(data, CURLINFO_TEXT, ssl_buf, (size_t)txt_len, NULL);
+  }
 
   Curl_debug(data, (direction == 1) ? CURLINFO_SSL_DATA_OUT :
              CURLINFO_SSL_DATA_IN, (char *)buf, len, NULL);
@@ -1443,7 +1512,7 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
 }
 #endif
 
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
 /* ====================================================== */
 
 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
@@ -1452,8 +1521,6 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
 #  define use_sni(x)  Curl_nop_stmt
 #endif
 
-#ifdef USE_NGHTTP2
-
 /* Check for OpenSSL 1.0.2 which has ALPN support. */
 #undef HAS_ALPN
 #if OPENSSL_VERSION_NUMBER >= 0x10002000L \
@@ -1475,6 +1542,23 @@ static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
  * in is a list of lenght prefixed strings. this function has to select
  * the protocol we want to use from the list and write its string into out.
  */
+
+static int
+select_next_protocol(unsigned char **out, unsigned char *outlen,
+                     const unsigned char *in, unsigned int inlen,
+                     const char *key, unsigned int keylen)
+{
+  unsigned int i;
+  for(i = 0; i + keylen <= inlen; i += in[i] + 1) {
+    if(memcmp(&in[i + 1], key, keylen) == 0) {
+      *out = (unsigned char *) &in[i + 1];
+      *outlen = in[i];
+      return 0;
+    }
+  }
+  return -1;
+}
+
 static int
 select_next_proto_cb(SSL *ssl,
                      unsigned char **out, unsigned char *outlen,
@@ -1482,40 +1566,43 @@ select_next_proto_cb(SSL *ssl,
                      void *arg)
 {
   struct connectdata *conn = (struct connectdata*) arg;
-  int retval = nghttp2_select_next_protocol(out, outlen, in, inlen);
 
   (void)ssl;
 
-  if(retval == 1) {
+#ifdef USE_NGHTTP2
+  if(conn->data->set.httpversion >= CURL_HTTP_VERSION_2 &&
+     !select_next_protocol(out, outlen, in, inlen, NGHTTP2_PROTO_VERSION_ID,
+                           NGHTTP2_PROTO_VERSION_ID_LEN)) {
     infof(conn->data, "NPN, negotiated HTTP2 (%s)\n",
           NGHTTP2_PROTO_VERSION_ID);
-    conn->negnpn = NPN_HTTP2;
+    conn->negnpn = CURL_HTTP_VERSION_2;
+    return SSL_TLSEXT_ERR_OK;
   }
-  else if(retval == 0) {
+#endif
+
+  if(!select_next_protocol(out, outlen, in, inlen, ALPN_HTTP_1_1,
+                           ALPN_HTTP_1_1_LENGTH)) {
     infof(conn->data, "NPN, negotiated HTTP1.1\n");
-    conn->negnpn = NPN_HTTP1_1;
-  }
-  else {
-    infof(conn->data, "NPN, no overlap, use HTTP1.1\n",
-          NGHTTP2_PROTO_VERSION_ID);
-    *out = (unsigned char*)"http/1.1";
-    *outlen = sizeof("http/1.1") - 1;
-    conn->negnpn = NPN_HTTP1_1;
+    conn->negnpn = CURL_HTTP_VERSION_1_1;
+    return SSL_TLSEXT_ERR_OK;
   }
 
+  infof(conn->data, "NPN, no overlap, use HTTP1.1\n");
+  *out = (unsigned char *)ALPN_HTTP_1_1;
+  *outlen = ALPN_HTTP_1_1_LENGTH;
+  conn->negnpn = CURL_HTTP_VERSION_1_1;
+
   return SSL_TLSEXT_ERR_OK;
 }
 #endif /* HAS_NPN */
 
-#endif /* USE_NGHTTP2 */
-
 static const char *
-get_ssl_version_txt(SSL_SESSION *session)
+get_ssl_version_txt(SSL *ssl)
 {
-  if(!session)
+  if(!ssl)
     return "";
 
-  switch(session->ssl_version) {
+  switch(SSL_version(ssl)) {
 #if OPENSSL_VERSION_NUMBER >= 0x1000100FL
   case TLS1_2_VERSION:
     return "TLSv1.2";
@@ -1551,9 +1638,6 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   struct in_addr addr;
 #endif
 #endif
-#ifdef HAS_ALPN
-  unsigned char protocols[128];
-#endif
 
   DEBUGASSERT(ssl_connect_1 == connssl->connecting_state);
 
@@ -1572,12 +1656,17 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   case CURL_SSLVERSION_TLSv1_1:
   case CURL_SSLVERSION_TLSv1_2:
     /* it will be handled later with the context options */
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && \
+    !defined(LIBRESSL_VERSION_NUMBER)
+    req_method = TLS_client_method();
+#else
     req_method = SSLv23_client_method();
+#endif
     use_sni(TRUE);
     break;
   case CURL_SSLVERSION_SSLv2:
 #ifdef OPENSSL_NO_SSL2
-    failf(data, "OpenSSL was built without SSLv2 support");
+    failf(data, OSSL_PACKAGE " was built without SSLv2 support");
     return CURLE_NOT_BUILT_IN;
 #else
 #ifdef USE_TLS_SRP
@@ -1589,6 +1678,10 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     break;
 #endif
   case CURL_SSLVERSION_SSLv3:
+#ifdef OPENSSL_NO_SSL3_METHOD
+    failf(data, OSSL_PACKAGE " was built without SSLv3 support");
+    return CURLE_NOT_BUILT_IN;
+#else
 #ifdef USE_TLS_SRP
     if(data->set.ssl.authtype == CURL_TLSAUTH_SRP)
       return CURLE_SSL_CONNECT_ERROR;
@@ -1596,6 +1689,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     req_method = SSLv3_client_method();
     use_sni(FALSE);
     break;
+#endif
   }
 
   if(connssl->ctx)
@@ -1614,16 +1708,9 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 
 #ifdef SSL_CTRL_SET_MSG_CALLBACK
   if(data->set.fdebug && data->set.verbose) {
-    /* the SSL trace callback is only used for verbose logging so we only
-       inform about failures of setting it */
-    if(!SSL_CTX_callback_ctrl(connssl->ctx, SSL_CTRL_SET_MSG_CALLBACK,
-                               (void (*)(void))ssl_tls_trace)) {
-      infof(data, "SSL: couldn't set callback!\n");
-    }
-    else if(!SSL_CTX_ctrl(connssl->ctx, SSL_CTRL_SET_MSG_CALLBACK_ARG, 0,
-                          conn)) {
-      infof(data, "SSL: couldn't set callback argument!\n");
-    }
+    /* the SSL trace callback is only used for verbose logging */
+    SSL_CTX_set_msg_callback(connssl->ctx, ssl_tls_trace);
+    SSL_CTX_set_msg_callback_arg(connssl->ctx, conn);
   }
 #endif
 
@@ -1636,7 +1723,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 
      The "-no_ticket" option was introduced in Openssl0.9.8j. It's a flag to
      disable "rfc4507bis session ticket support".  rfc4507bis was later turned
-     into the proper RFC5077 it seems: http://tools.ietf.org/html/rfc5077
+     into the proper RFC5077 it seems: https://tools.ietf.org/html/rfc5077
 
      The enabled extension concerns the session management. I wonder how often
      libcurl stops a connection and then resumes a TLS session. also, sending
@@ -1656,7 +1743,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
      this option regardless of OpenSSL version and SSL_OP_ALL definition.
 
      OpenSSL added a work-around for a SSL 3.0/TLS 1.0 CBC vulnerability
-     (http://www.openssl.org/~bodo/tls-cbc.txt). In 0.9.6e they added a bit to
+     (https://www.openssl.org/~bodo/tls-cbc.txt). In 0.9.6e they added a bit to
      SSL_OP_ALL that _disables_ that work-around despite the fact that
      SSL_OP_ALL is documented to do "rather harmless" workarounds. In order to
      keep the secure work-around, the SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS bit
@@ -1749,36 +1836,36 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
 
   SSL_CTX_set_options(connssl->ctx, ctx_options);
 
-#ifdef USE_NGHTTP2
-  if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
 #ifdef HAS_NPN
-    if(data->set.ssl_enable_npn) {
-      SSL_CTX_set_next_proto_select_cb(connssl->ctx, select_next_proto_cb,
-                                       conn);
-    }
+  if(data->set.ssl_enable_npn)
+    SSL_CTX_set_next_proto_select_cb(connssl->ctx, select_next_proto_cb, conn);
 #endif
 
 #ifdef HAS_ALPN
-    if(data->set.ssl_enable_alpn) {
-      protocols[0] = NGHTTP2_PROTO_VERSION_ID_LEN;
-      memcpy(&protocols[1], NGHTTP2_PROTO_VERSION_ID,
-          NGHTTP2_PROTO_VERSION_ID_LEN);
-
-      protocols[NGHTTP2_PROTO_VERSION_ID_LEN+1] = ALPN_HTTP_1_1_LENGTH;
-      memcpy(&protocols[NGHTTP2_PROTO_VERSION_ID_LEN+2], ALPN_HTTP_1_1,
-          ALPN_HTTP_1_1_LENGTH);
+  if(data->set.ssl_enable_alpn) {
+    int cur = 0;
+    unsigned char protocols[128];
 
-      /* expects length prefixed preference ordered list of protocols in wire
-       * format
-       */
-      SSL_CTX_set_alpn_protos(connssl->ctx, protocols,
-          NGHTTP2_PROTO_VERSION_ID_LEN + ALPN_HTTP_1_1_LENGTH + 2);
+#ifdef USE_NGHTTP2
+    if(data->set.httpversion >= CURL_HTTP_VERSION_2) {
+      protocols[cur++] = NGHTTP2_PROTO_VERSION_ID_LEN;
 
-      infof(data, "ALPN, offering %s, %s\n", NGHTTP2_PROTO_VERSION_ID,
-            ALPN_HTTP_1_1);
-      connssl->asked_for_h2 = TRUE;
+      memcpy(&protocols[cur], NGHTTP2_PROTO_VERSION_ID,
+          NGHTTP2_PROTO_VERSION_ID_LEN);
+      cur += NGHTTP2_PROTO_VERSION_ID_LEN;
+      infof(data, "ALPN, offering %s\n", NGHTTP2_PROTO_VERSION_ID);
     }
 #endif
+
+    protocols[cur++] = ALPN_HTTP_1_1_LENGTH;
+    memcpy(&protocols[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
+    cur += ALPN_HTTP_1_1_LENGTH;
+    infof(data, "ALPN, offering %s\n", ALPN_HTTP_1_1);
+
+    /* expects length prefixed preference ordered list of protocols in wire
+     * format
+     */
+    SSL_CTX_set_alpn_protos(connssl->ctx, protocols, cur);
   }
 #endif
 
@@ -1801,6 +1888,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     failf(data, "failed setting cipher list: %s", ciphers);
     return CURLE_SSL_CIPHER;
   }
+  infof(data, "Cipher selection: %s\n", ciphers);
 
 #ifdef USE_TLS_SRP
   if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
@@ -1810,7 +1898,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
       failf(data, "Unable to set SRP user name");
       return CURLE_BAD_FUNCTION_ARGUMENT;
     }
-    if(!SSL_CTX_set_srp_password(connssl->ctx,data->set.ssl.password)) {
+    if(!SSL_CTX_set_srp_password(connssl->ctx, data->set.ssl.password)) {
       failf(data, "failed setting SRP password");
       return CURLE_BAD_FUNCTION_ARGUMENT;
     }
@@ -1832,7 +1920,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
                                        data->set.str[STRING_SSL_CAPATH])) {
       if(data->set.ssl.verifypeer) {
         /* Fail if we insist on successfully verifying the server. */
-        failf(data,"error setting certificate verify locations:\n"
+        failf(data, "error setting certificate verify locations:\n"
               "  CAfile: %s\n  CApath: %s",
               data->set.str[STRING_SSL_CAFILE]?
               data->set.str[STRING_SSL_CAFILE]: "none",
@@ -1859,6 +1947,13 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
           data->set.str[STRING_SSL_CAPATH] ? data->set.str[STRING_SSL_CAPATH]:
           "none");
   }
+#ifdef CURL_CA_FALLBACK
+  else if(data->set.ssl.verifypeer) {
+    /* verfying the peer without any CA certificates won't
+       work so use openssl's built in default as fallback */
+    SSL_CTX_set_default_verify_paths(connssl->ctx);
+  }
+#endif
 
   if(data->set.str[STRING_SSL_CRLFILE]) {
     /* tell SSL where to find CRL file that is used to check certificate
@@ -1866,9 +1961,9 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     lookup=X509_STORE_add_lookup(SSL_CTX_get_cert_store(connssl->ctx),
                                  X509_LOOKUP_file());
     if(!lookup ||
-       (!X509_load_crl_file(lookup,data->set.str[STRING_SSL_CRLFILE],
+       (!X509_load_crl_file(lookup, data->set.str[STRING_SSL_CRLFILE],
                             X509_FILETYPE_PEM)) ) {
-      failf(data,"error loading CRL file: %s",
+      failf(data, "error loading CRL file: %s",
             data->set.str[STRING_SSL_CRLFILE]);
       return CURLE_SSL_CRL_BADFILE;
     }
@@ -1883,20 +1978,34 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
           data->set.str[STRING_SSL_CRLFILE]: "none");
   }
 
+  /* Try building a chain using issuers in the trusted store first to avoid
+  problems with server-sent legacy intermediates.
+  Newer versions of OpenSSL do alternate chain checking by default which
+  gives us the same fix without as much of a performance hit (slight), so we
+  prefer that if available.
+  https://rt.openssl.org/Ticket/Display.html?id=3621&user=guest&pass=guest
+  */
+#if defined(X509_V_FLAG_TRUSTED_FIRST) && !defined(X509_V_FLAG_NO_ALT_CHAINS)
+  if(data->set.ssl.verifypeer) {
+    X509_STORE_set_flags(SSL_CTX_get_cert_store(connssl->ctx),
+                         X509_V_FLAG_TRUSTED_FIRST);
+  }
+#endif
+
   /* SSL always tries to verify the peer, this only says whether it should
    * fail to connect if the verification fails, or if it should continue
    * anyway. In the latter case the result of the verification is checked with
    * SSL_get_verify_result() below. */
   SSL_CTX_set_verify(connssl->ctx,
                      data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE,
-                     cert_verify_callback);
+                     NULL);
 
   /* give application a chance to interfere with SSL set up. */
   if(data->set.ssl.fsslctx) {
     result = (*data->set.ssl.fsslctx)(data, connssl->ctx,
                                       data->set.ssl.fsslctxp);
     if(result) {
-      failf(data,"error signaled by ssl ctx callback");
+      failf(data, "error signaled by ssl ctx callback");
       return result;
     }
   }
@@ -1909,6 +2018,13 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     failf(data, "SSL: couldn't create a context (handle)!");
     return CURLE_OUT_OF_MEMORY;
   }
+
+#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
+    !defined(OPENSSL_NO_OCSP)
+  if(data->set.ssl.verifystatus)
+    SSL_set_tlsext_status_type(connssl->handle, TLSEXT_STATUSTYPE_ocsp);
+#endif
+
   SSL_set_connect_state(connssl->handle);
 
   connssl->server_cert = 0x0;
@@ -1929,7 +2045,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
     /* we got a session id, use it! */
     if(!SSL_set_session(connssl->handle, ssl_sessionid)) {
       failf(data, "SSL: SSL_set_session failed: %s",
-            ERR_error_string(ERR_get_error(),NULL));
+            ERR_error_string(ERR_get_error(), NULL));
       return CURLE_SSL_CONNECT_ERROR;
     }
     /* Informational message */
@@ -1939,7 +2055,7 @@ static CURLcode ossl_connect_step1(struct connectdata *conn, int sockindex)
   /* pass the raw socket into the SSL layers */
   if(!SSL_set_fd(connssl->handle, (int)sockfd)) {
     failf(data, "SSL: SSL_set_fd failed: %s",
-          ERR_error_string(ERR_get_error(),NULL));
+          ERR_error_string(ERR_get_error(), NULL));
     return CURLE_SSL_CONNECT_ERROR;
   }
 
@@ -1978,32 +2094,26 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
     else {
       /* untreated error */
       unsigned long errdetail;
-      char error_buffer[256]; /* OpenSSL documents that this must be at least
-                                 256 bytes long. */
+      char error_buffer[256]=""; /* OpenSSL documents that this must be at
+                                    least 256 bytes long. */
       CURLcode result;
-      const char *cert_problem = NULL;
       long lerr;
+      int lib;
+      int reason;
+
+      /* the connection failed, we're not waiting for anything else. */
+      connssl->connecting_state = ssl_connect_2;
 
-      connssl->connecting_state = ssl_connect_2; /* the connection failed,
-                                                    we're not waiting for
-                                                    anything else. */
-
-      errdetail = ERR_get_error(); /* Gets the earliest error code from the
-                                      thread's error queue and removes the
-                                      entry. */
-
-      switch(errdetail) {
-      case 0x1407E086:
-        /* 1407E086:
-           SSL routines:
-           SSL2_SET_CERTIFICATE:
-           certificate verify failed */
-        /* fall-through */
-      case 0x14090086:
-        /* 14090086:
-           SSL routines:
-           SSL3_GET_SERVER_CERTIFICATE:
-           certificate verify failed */
+      /* Get the earliest error code from the thread's error queue and removes
+         the entry. */
+      errdetail = ERR_get_error();
+
+      /* Extract which lib and reason */
+      lib = ERR_GET_LIB(errdetail);
+      reason = ERR_GET_REASON(errdetail);
+
+      if((lib == ERR_LIB_SSL) &&
+         (reason == SSL_R_CERTIFICATE_VERIFY_FAILED)) {
         result = CURLE_SSL_CACERT;
 
         lerr = SSL_get_verify_result(connssl->handle);
@@ -2013,14 +2123,13 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
                    X509_verify_cert_error_string(lerr));
         }
         else
-          cert_problem = "SSL certificate problem, verify that the CA cert is"
-            " OK.";
-
-        break;
-      default:
+          /* strcpy() is fine here as long as the string fits within
+             error_buffer */
+          strcpy(error_buffer, "SSL certificate verification failed");
+      }
+      else {
         result = CURLE_SSL_CONNECT_ERROR;
         SSL_strerror(errdetail, error_buffer, sizeof(error_buffer));
-        break;
       }
 
       /* detail is already set to the SSL error above */
@@ -2036,7 +2145,7 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
       }
 
       /* Could be a CERT problem */
-      failf(data, "%s%s", cert_problem ? cert_problem : "", error_buffer);
+      failf(data, "%s", error_buffer);
 
       return result;
     }
@@ -2047,7 +2156,7 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
 
     /* Informational message */
     infof(data, "SSL connection using %s / %s\n",
-          get_ssl_version_txt(SSL_get_session(connssl->handle)),
+          get_ssl_version_txt(connssl->handle),
           SSL_get_cipher(connssl->handle));
 
 #ifdef HAS_ALPN
@@ -2061,18 +2170,19 @@ static CURLcode ossl_connect_step2(struct connectdata *conn, int sockindex)
       if(len != 0) {
         infof(data, "ALPN, server accepted to use %.*s\n", len, neg_protocol);
 
+#ifdef USE_NGHTTP2
         if(len == NGHTTP2_PROTO_VERSION_ID_LEN &&
-           memcmp(NGHTTP2_PROTO_VERSION_ID, neg_protocol, len) == 0) {
-          conn->negnpn = NPN_HTTP2;
+           !memcmp(NGHTTP2_PROTO_VERSION_ID, neg_protocol, len)) {
+          conn->negnpn = CURL_HTTP_VERSION_2;
         }
-        else if(len ==
-                ALPN_HTTP_1_1_LENGTH && memcmp(ALPN_HTTP_1_1,
-                                               neg_protocol,
-                                               ALPN_HTTP_1_1_LENGTH) == 0) {
-          conn->negnpn = NPN_HTTP1_1;
+        else
+#endif
+        if(len == ALPN_HTTP_1_1_LENGTH &&
+           !memcmp(ALPN_HTTP_1_1, neg_protocol, ALPN_HTTP_1_1_LENGTH)) {
+          conn->negnpn = CURL_HTTP_VERSION_1_1;
         }
       }
-      else if(connssl->asked_for_h2)
+      else
         infof(data, "ALPN, server did not agree to a protocol\n");
     }
 #endif
@@ -2096,43 +2206,34 @@ static int asn1_object_dump(ASN1_OBJECT *a, char *buf, size_t len)
   return 0;
 }
 
+#define push_certinfo(_label, _num) \
+do {                              \
+  long info_len = BIO_get_mem_data(mem, &ptr); \
+  Curl_ssl_push_certinfo_len(data, _num, _label, ptr, info_len); \
+  if(1!=BIO_reset(mem))                                          \
+    break;                                                       \
+} WHILE_FALSE
+
 static void pubkey_show(struct SessionHandle *data,
+                        BIO *mem,
                         int num,
                         const char *type,
                         const char *name,
-                        unsigned char *raw,
-                        int len)
+                        BIGNUM *bn)
 {
-  size_t left;
-  int i;
+  char *ptr;
   char namebuf[32];
-  char *buffer;
-
-  left = len*3 + 1;
-  buffer = malloc(left);
-  if(buffer) {
-    char *ptr=buffer;
-    snprintf(namebuf, sizeof(namebuf), "%s(%s)", type, name);
-    for(i=0; i< len; i++) {
-      snprintf(ptr, left, "%02x:", raw[i]);
-      ptr += 3;
-      left -= 3;
-    }
-    infof(data, "   %s: %s\n", namebuf, buffer);
-    Curl_ssl_push_certinfo(data, num, namebuf, buffer);
-    free(buffer);
-  }
+
+  snprintf(namebuf, sizeof(namebuf), "%s(%s)", type, name);
+
+  BN_print(mem, bn);
+  push_certinfo(namebuf, num);
 }
 
 #define print_pubkey_BN(_type, _name, _num)    \
 do {                              \
-  if(pubkey->pkey._type->_name) { \
-    int len = BN_num_bytes(pubkey->pkey._type->_name);  \
-    if(len < CERTBUFFERSIZE) {                                    \
-      BN_bn2bin(pubkey->pkey._type->_name, (unsigned char*)bufp); \
-      bufp[len] = 0;                                                    \
-      pubkey_show(data, _num, #_type, #_name, (unsigned char*)bufp, len); \
-    } \
+  if(_type->_name) { \
+    pubkey_show(data, mem, _num, #_type, #_name, _type->_name); \
   } \
 } WHILE_FALSE
 
@@ -2143,11 +2244,11 @@ static int X509V3_ext(struct SessionHandle *data,
   int i;
   size_t j;
 
-  if(sk_X509_EXTENSION_num(exts) <= 0)
+  if((int)sk_X509_EXTENSION_num(exts) <= 0)
     /* no extensions, bail out */
     return 1;
 
-  for(i=0; i<sk_X509_EXTENSION_num(exts); i++) {
+  for(i=0; i < (int)sk_X509_EXTENSION_num(exts); i++) {
     ASN1_OBJECT *obj;
     X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i);
     BUF_MEM *biomem;
@@ -2163,18 +2264,12 @@ static int X509V3_ext(struct SessionHandle *data,
 
     asn1_object_dump(obj, namebuf, sizeof(namebuf));
 
-    infof(data, "%s: %s\n", namebuf,
-          X509_EXTENSION_get_critical(ext)?"(critical)":"");
-
     if(!X509V3_EXT_print(bio_out, ext, 0, 0))
-      M_ASN1_OCTET_STRING_print(bio_out, ext->value);
+      ASN1_STRING_print(bio_out, (ASN1_STRING *)X509_EXTENSION_get_data(ext));
 
     BIO_get_mem_ptr(bio_out, &biomem);
 
-    /* biomem->length bytes at biomem->data, this little loop here is only
-       done for the infof() call, we send the "raw" data to the certinfo
-       function */
-    for(j=0; j<(size_t)biomem->length; j++) {
+    for(j = 0; j < (size_t)biomem->length; j++) {
       const char *sep="";
       if(biomem->data[j] == '\n') {
         sep=", ";
@@ -2186,7 +2281,6 @@ static int X509V3_ext(struct SessionHandle *data,
         ptr+=snprintf(ptr, sizeof(buf)-(ptr-buf), "%s%c", sep,
                       biomem->data[j]);
     }
-    infof(data, "  %s\n", buf);
 
     Curl_ssl_push_certinfo(data, certnum, namebuf, buf);
 
@@ -2196,46 +2290,6 @@ static int X509V3_ext(struct SessionHandle *data,
   return 0; /* all is fine */
 }
 
-
-static void X509_signature(struct SessionHandle *data,
-                           int numcert,
-                           ASN1_STRING *sig)
-{
-  char buf[1024];
-  char *ptr = buf;
-  int i;
-
-  for(i=0; i<sig->length; i++)
-    ptr+=snprintf(ptr, sizeof(buf)-(ptr-buf), "%02x:", sig->data[i]);
-
-  infof(data, " Signature: %s\n", buf);
-  Curl_ssl_push_certinfo(data, numcert, "Signature", buf);
-}
-
-static void dumpcert(struct SessionHandle *data, X509 *x, int numcert)
-{
-  BIO *bio_out = BIO_new(BIO_s_mem());
-  BUF_MEM *biomem;
-
-  /* this outputs the cert in this 64 column wide style with newlines and
-     -----BEGIN CERTIFICATE----- texts and more */
-  PEM_write_bio_X509(bio_out, x);
-
-  BIO_get_mem_ptr(bio_out, &biomem);
-
-  Curl_ssl_push_certinfo_len(data, numcert,
-                             "Cert", biomem->data, biomem->length);
-
-  BIO_free(bio_out);
-}
-
-/*
- * This size was previously 512 which has been reported "too small" without
- * any specifics, so it was enlarged to allow more data to get shown uncut.
- * The "perfect" size is yet to figure out.
- */
-#define CERTBUFFERSIZE 8192
-
 static CURLcode get_cert_chain(struct connectdata *conn,
                                struct ssl_connect_data *connssl)
 
@@ -2243,17 +2297,12 @@ static CURLcode get_cert_chain(struct connectdata *conn,
   CURLcode result;
   STACK_OF(X509) *sk;
   int i;
-  char *bufp;
   struct SessionHandle *data = conn->data;
   int numcerts;
-
-  bufp = malloc(CERTBUFFERSIZE);
-  if(!bufp)
-    return CURLE_OUT_OF_MEMORY;
+  BIO *mem;
 
   sk = SSL_get_peer_cert_chain(connssl->handle);
   if(!sk) {
-    free(bufp);
     return CURLE_OUT_OF_MEMORY;
   }
 
@@ -2261,104 +2310,93 @@ static CURLcode get_cert_chain(struct connectdata *conn,
 
   result = Curl_ssl_init_certinfo(data, numcerts);
   if(result) {
-    free(bufp);
     return result;
   }
 
-  infof(data, "--- Certificate chain\n");
-  for(i=0; i<numcerts; i++) {
-    long value;
-    ASN1_INTEGER *num;
-    ASN1_TIME *certdate;
+  mem = BIO_new(BIO_s_mem());
 
-    /* get the certs in "importance order" */
-#if 0
-    X509 *x = sk_X509_value(sk, numcerts - i - 1);
-#else
+  for(i = 0; i < numcerts; i++) {
+    ASN1_INTEGER *num;
     X509 *x = sk_X509_value(sk, i);
-#endif
-
-    X509_CINF *cinf;
     EVP_PKEY *pubkey=NULL;
     int j;
     char *ptr;
+    ASN1_BIT_STRING *psig;
 
-    (void)x509_name_oneline(X509_get_subject_name(x), bufp, CERTBUFFERSIZE);
-    infof(data, "%2d Subject: %s\n", i, bufp);
-    Curl_ssl_push_certinfo(data, i, "Subject", bufp);
+    X509_NAME_print_ex(mem, X509_get_subject_name(x), 0, XN_FLAG_ONELINE);
+    push_certinfo("Subject", i);
 
-    (void)x509_name_oneline(X509_get_issuer_name(x), bufp, CERTBUFFERSIZE);
-    infof(data, "   Issuer: %s\n", bufp);
-    Curl_ssl_push_certinfo(data, i, "Issuer", bufp);
+    X509_NAME_print_ex(mem, X509_get_issuer_name(x), 0, XN_FLAG_ONELINE);
+    push_certinfo("Issuer", i);
 
-    value = X509_get_version(x);
-    infof(data, "   Version: %lu (0x%lx)\n", value+1, value);
-    snprintf(bufp, CERTBUFFERSIZE, "%lx", value);
-    Curl_ssl_push_certinfo(data, i, "Version", bufp); /* hex */
+    BIO_printf(mem, "%lx", X509_get_version(x));
+    push_certinfo("Version", i);
 
-    num=X509_get_serialNumber(x);
-    if(num->length <= 4) {
-      value = ASN1_INTEGER_get(num);
-      infof(data,"   Serial Number: %ld (0x%lx)\n", value, value);
-      snprintf(bufp, CERTBUFFERSIZE, "%lx", value);
-    }
-    else {
-      int left = CERTBUFFERSIZE;
-
-      ptr = bufp;
-      *ptr++ = 0;
-      if(num->type == V_ASN1_NEG_INTEGER)
-        *ptr++='-';
-
-      for(j=0; (j<num->length) && (left>=4); j++) {
-        /* TODO: length restrictions */
-        snprintf(ptr, 3, "%02x%c",num->data[j],
-                 ((j+1 == num->length)?'\n':':'));
-        ptr += 3;
-        left-=4;
-      }
-      if(num->length)
-        infof(data,"   Serial Number: %s\n", bufp);
-      else
-        bufp[0]=0;
-    }
-    if(bufp[0])
-      Curl_ssl_push_certinfo(data, i, "Serial Number", bufp); /* hex */
+    num = X509_get_serialNumber(x);
+    if(num->type == V_ASN1_NEG_INTEGER)
+      BIO_puts(mem, "-");
+    for(j = 0; j < num->length; j++)
+      BIO_printf(mem, "%02x", num->data[j]);
+    push_certinfo("Serial Number", i);
 
-    cinf = x->cert_info;
+#if defined(HAVE_X509_GET0_SIGNATURE) && defined(HAVE_X509_GET0_EXTENSIONS)
+    {
+      X509_ALGOR *palg;
+      ASN1_STRING *a = ASN1_STRING_new();
+      if(a) {
+        X509_get0_signature(&psig, &palg, x);
+        X509_signature_print(mem, palg, a);
+        ASN1_STRING_free(a);
+      }
+      i2a_ASN1_OBJECT(mem, palg->algorithm);
+      push_certinfo("Public Key Algorithm", i);
 
-    j = asn1_object_dump(cinf->signature->algorithm, bufp, CERTBUFFERSIZE);
-    if(!j) {
-      infof(data, "   Signature Algorithm: %s\n", bufp);
-      Curl_ssl_push_certinfo(data, i, "Signature Algorithm", bufp);
+      X509V3_ext(data, i, X509_get0_extensions(x));
     }
+#else
+    {
+      /* before OpenSSL 1.0.2 */
+      X509_CINF *cinf = x->cert_info;
 
-    certdate = X509_get_notBefore(x);
-    asn1_output(certdate, bufp, CERTBUFFERSIZE);
-    infof(data, "   Start date: %s\n", bufp);
-    Curl_ssl_push_certinfo(data, i, "Start date", bufp);
+      i2a_ASN1_OBJECT(mem, cinf->signature->algorithm);
+      push_certinfo("Signature Algorithm", i);
 
-    certdate = X509_get_notAfter(x);
-    asn1_output(certdate, bufp, CERTBUFFERSIZE);
-    infof(data, "   Expire date: %s\n", bufp);
-    Curl_ssl_push_certinfo(data, i, "Expire date", bufp);
+      i2a_ASN1_OBJECT(mem, cinf->key->algor->algorithm);
+      push_certinfo("Public Key Algorithm", i);
 
-    j = asn1_object_dump(cinf->key->algor->algorithm, bufp, CERTBUFFERSIZE);
-    if(!j) {
-      infof(data, "   Public Key Algorithm: %s\n", bufp);
-      Curl_ssl_push_certinfo(data, i, "Public Key Algorithm", bufp);
+      X509V3_ext(data, i, cinf->extensions);
+
+      psig = x->signature;
     }
+#endif
+
+    ASN1_TIME_print(mem, X509_get_notBefore(x));
+    push_certinfo("Start date", i);
+
+    ASN1_TIME_print(mem, X509_get_notAfter(x));
+    push_certinfo("Expire date", i);
 
     pubkey = X509_get_pubkey(x);
     if(!pubkey)
       infof(data, "   Unable to load public key\n");
     else {
-      switch(pubkey->type) {
+      int pktype;
+#ifdef HAVE_OPAQUE_EVP_PKEY
+      pktype = EVP_PKEY_id(pubkey);
+#else
+      pktype = pubkey->type;
+#endif
+      switch(pktype) {
       case EVP_PKEY_RSA:
-        infof(data,  "   RSA Public Key (%d bits)\n",
-              BN_num_bits(pubkey->pkey.rsa->n));
-        snprintf(bufp, CERTBUFFERSIZE, "%d", BN_num_bits(pubkey->pkey.rsa->n));
-        Curl_ssl_push_certinfo(data, i, "RSA Public Key", bufp);
+      {
+        RSA *rsa;
+#ifdef HAVE_OPAQUE_EVP_PKEY
+        rsa = EVP_PKEY_get0_RSA(pubkey);
+#else
+        rsa = pubkey->pkey.rsa;
+#endif
+        BIO_printf(mem, "%d", BN_num_bits(rsa->n));
+        push_certinfo("RSA Public Key", i);
 
         print_pubkey_BN(rsa, n, i);
         print_pubkey_BN(rsa, e, i);
@@ -2369,19 +2407,36 @@ static CURLcode get_cert_chain(struct connectdata *conn,
         print_pubkey_BN(rsa, dmq1, i);
         print_pubkey_BN(rsa, iqmp, i);
         break;
+      }
       case EVP_PKEY_DSA:
+      {
+        DSA *dsa;
+#ifdef HAVE_OPAQUE_EVP_PKEY
+        dsa = EVP_PKEY_get0_DSA(pubkey);
+#else
+        dsa = pubkey->pkey.dsa;
+#endif
         print_pubkey_BN(dsa, p, i);
         print_pubkey_BN(dsa, q, i);
         print_pubkey_BN(dsa, g, i);
         print_pubkey_BN(dsa, priv_key, i);
         print_pubkey_BN(dsa, pub_key, i);
         break;
+      }
       case EVP_PKEY_DH:
+      {
+        DH *dh;
+#ifdef HAVE_OPAQUE_EVP_PKEY
+        dh = EVP_PKEY_get0_DH(pubkey);
+#else
+        dh = pubkey->pkey.dh;
+#endif
         print_pubkey_BN(dh, p, i);
         print_pubkey_BN(dh, g, i);
         print_pubkey_BN(dh, priv_key, i);
         print_pubkey_BN(dh, pub_key, i);
         break;
+      }
 #if 0
       case EVP_PKEY_EC: /* symbol not present in OpenSSL 0.9.6 */
         /* left TODO */
@@ -2391,14 +2446,15 @@ static CURLcode get_cert_chain(struct connectdata *conn,
       EVP_PKEY_free(pubkey);
     }
 
-    X509V3_ext(data, i, cinf->extensions);
+    for(j = 0; j < psig->length; j++)
+      BIO_printf(mem, "%02x:", psig->data[j]);
+    push_certinfo("Signature", i);
 
-    X509_signature(data, i, x->signature);
-
-    dumpcert(data, x, i);
+    PEM_write_bio_X509(mem, x);
+    push_certinfo("Cert", i);
   }
 
-  free(bufp);
+  BIO_free(mem);
 
   return CURLE_OK;
 }
@@ -2407,7 +2463,8 @@ static CURLcode get_cert_chain(struct connectdata *conn,
  * Heavily modified from:
  * https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#OpenSSL
  */
-static CURLcode pkp_pin_peer_pubkey(X509* cert, const char *pinnedpubkey)
+static CURLcode pkp_pin_peer_pubkey(struct SessionHandle *data, X509* cert,
+                                    const char *pinnedpubkey)
 {
   /* Scratch */
   int len1 = 0, len2 = 0;
@@ -2427,23 +2484,23 @@ static CURLcode pkp_pin_peer_pubkey(X509* cert, const char *pinnedpubkey)
     /* Begin Gyrations to get the subjectPublicKeyInfo     */
     /* Thanks to Viktor Dukhovni on the OpenSSL mailing list */
 
-    /* http://groups.google.com/group/mailing.openssl.users/browse_thread
+    /* https://groups.google.com/group/mailing.openssl.users/browse_thread
      /thread/d61858dae102c6c7 */
     len1 = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), NULL);
     if(len1 < 1)
       break; /* failed */
 
-    /* http://www.openssl.org/docs/crypto/buffer.html */
+    /* https://www.openssl.org/docs/crypto/buffer.html */
     buff1 = temp = OPENSSL_malloc(len1);
     if(!buff1)
       break; /* failed */
 
-    /* http://www.openssl.org/docs/crypto/d2i_X509.html */
+    /* https://www.openssl.org/docs/crypto/d2i_X509.html */
     len2 = i2d_X509_PUBKEY(X509_get_X509_PUBKEY(cert), &temp);
 
     /*
      * These checks are verifying we got back the same values as when we
-     * sized the buffer.Its pretty weak since they should always be the
+     * sized the buffer. It's pretty weak since they should always be the
      * same. But it gives us something to test.
      */
     if((len1 != len2) || !temp || ((temp - buff1) != len1))
@@ -2452,10 +2509,10 @@ static CURLcode pkp_pin_peer_pubkey(X509* cert, const char *pinnedpubkey)
     /* End Gyrations */
 
     /* The one good exit point */
-    result = Curl_pin_peer_pubkey(pinnedpubkey, buff1, len1);
+    result = Curl_pin_peer_pubkey(data, pinnedpubkey, buff1, len1);
   } while(0);
 
-  /* http://www.openssl.org/docs/crypto/buffer.html */
+  /* https://www.openssl.org/docs/crypto/buffer.html */
   if(buff1)
     OPENSSL_free(buff1);
 
@@ -2476,13 +2533,13 @@ static CURLcode servercert(struct connectdata *conn,
 {
   CURLcode result = CURLE_OK;
   int rc;
-  long lerr;
-  ASN1_TIME *certdate;
+  long lerr, len;
   struct SessionHandle *data = conn->data;
   X509 *issuer;
   FILE *fp;
   char *buffer = data->state.buffer;
   const char *ptr;
+  BIO *mem = BIO_new(BIO_s_mem());
 
   if(data->set.ssl.certinfo)
     /* we've been asked to gather certificate info! */
@@ -2490,8 +2547,10 @@ static CURLcode servercert(struct connectdata *conn,
 
   connssl->server_cert = SSL_get_peer_certificate(connssl->handle);
   if(!connssl->server_cert) {
-    if(strict)
-      failf(data, "SSL: couldn't get peer certificate!");
+    if(!strict)
+      return CURLE_OK;
+
+    failf(data, "SSL: couldn't get peer certificate!");
     return CURLE_PEER_FAILED_VERIFICATION;
   }
 
@@ -2499,15 +2558,19 @@ static CURLcode servercert(struct connectdata *conn,
 
   rc = x509_name_oneline(X509_get_subject_name(connssl->server_cert),
                          buffer, BUFSIZE);
-  infof(data, "\t subject: %s\n", rc?"[NONE]":buffer);
+  infof(data, " subject: %s\n", rc?"[NONE]":buffer);
+
+  ASN1_TIME_print(mem, X509_get_notBefore(connssl->server_cert));
+  len = BIO_get_mem_data(mem, (char **) &ptr);
+  infof(data, " start date: %.*s\n", len, ptr);
+  rc = BIO_reset(mem);
 
-  certdate = X509_get_notBefore(connssl->server_cert);
-  asn1_output(certdate, buffer, BUFSIZE);
-  infof(data, "\t start date: %s\n", buffer);
+  ASN1_TIME_print(mem, X509_get_notAfter(connssl->server_cert));
+  len = BIO_get_mem_data(mem, (char **) &ptr);
+  infof(data, " expire date: %.*s\n", len, ptr);
+  rc = BIO_reset(mem);
 
-  certdate = X509_get_notAfter(connssl->server_cert);
-  asn1_output(certdate, buffer, BUFSIZE);
-  infof(data, "\t expire date: %s\n", buffer);
+  BIO_free(mem);
 
   if(data->set.ssl.verifyhost) {
     result = verifyhost(conn, connssl->server_cert);
@@ -2526,14 +2589,14 @@ static CURLcode servercert(struct connectdata *conn,
     result = CURLE_SSL_CONNECT_ERROR;
   }
   else {
-    infof(data, "\t issuer: %s\n", buffer);
+    infof(data, " issuer: %s\n", buffer);
 
     /* We could do all sorts of certificate verification stuff here before
        deallocating the certificate. */
 
     /* e.g. match issuer name with provided issuer certificate */
     if(data->set.str[STRING_SSL_ISSUERCERT]) {
-      fp = fopen(data->set.str[STRING_SSL_ISSUERCERT], "r");
+      fp = fopen(data->set.str[STRING_SSL_ISSUERCERT], FOPEN_READTEXT);
       if(!fp) {
         if(strict)
           failf(data, "SSL: Unable to open issuer cert (%s)",
@@ -2556,7 +2619,7 @@ static CURLcode servercert(struct connectdata *conn,
 
       fclose(fp);
 
-      if(X509_check_issued(issuer,connssl->server_cert) != X509_V_OK) {
+      if(X509_check_issued(issuer, connssl->server_cert) != X509_V_OK) {
         if(strict)
           failf(data, "SSL: Certificate issuer check failed (%s)",
                 data->set.str[STRING_SSL_ISSUERCERT]);
@@ -2566,7 +2629,7 @@ static CURLcode servercert(struct connectdata *conn,
         return CURLE_SSL_ISSUER_ERROR;
       }
 
-      infof(data, "\t SSL certificate issuer check ok (%s)\n",
+      infof(data, " SSL certificate issuer check ok (%s)\n",
             data->set.str[STRING_SSL_ISSUERCERT]);
       X509_free(issuer);
     }
@@ -2584,17 +2647,33 @@ static CURLcode servercert(struct connectdata *conn,
         result = CURLE_PEER_FAILED_VERIFICATION;
       }
       else
-        infof(data, "\t SSL certificate verify result: %s (%ld),"
+        infof(data, " SSL certificate verify result: %s (%ld),"
               " continuing anyway.\n",
               X509_verify_cert_error_string(lerr), lerr);
     }
     else
-      infof(data, "\t SSL certificate verify ok.\n");
+      infof(data, " SSL certificate verify ok.\n");
   }
 
+#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
+    !defined(OPENSSL_NO_OCSP)
+  if(data->set.ssl.verifystatus) {
+    result = verifystatus(conn, connssl);
+    if(result) {
+      X509_free(connssl->server_cert);
+      connssl->server_cert = NULL;
+      return result;
+    }
+  }
+#endif
+
+  if(!strict)
+    /* when not strict, we don't bother about the verify cert problems */
+    result = CURLE_OK;
+
   ptr = data->set.str[STRING_SSL_PINNEDPUBLICKEY];
   if(!result && ptr) {
-    result = pkp_pin_peer_pubkey(connssl->server_cert, ptr);
+    result = pkp_pin_peer_pubkey(data, connssl->server_cert, ptr);
     if(result)
       failf(data, "SSL: public key does not match pinned public key!");
   }
@@ -2617,25 +2696,11 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
 
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
 
-#ifdef HAVE_SSL_GET1_SESSION
   our_ssl_sessionid = SSL_get1_session(connssl->handle);
 
-  /* SSL_get1_session() will increment the reference
-     count and the session will stay in memory until explicitly freed with
-     SSL_SESSION_free(3), regardless of its state.
-     This function was introduced in openssl 0.9.5a. */
-#else
-  our_ssl_sessionid = SSL_get_session(connssl->handle);
-
-  /* if SSL_get1_session() is unavailable, use SSL_get_session().
-     This is an inferior option because the session can be flushed
-     at any time by openssl. It is included only so curl compiles
-     under versions of openssl < 0.9.5a.
-
-     WARNING: How curl behaves if it's session is flushed is
-     untested.
-  */
-#endif
+  /* SSL_get1_session() will increment the reference count and the session
+     will stay in memory until explicitly freed with SSL_SESSION_free(3),
+     regardless of its state. */
 
   incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL));
   if(incache) {
@@ -2654,7 +2719,6 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
       return result;
     }
   }
-#ifdef HAVE_SSL_GET1_SESSION
   else {
     /* Session was incache, so refcount already incremented earlier.
      * Avoid further increments with each SSL_get1_session() call.
@@ -2662,7 +2726,6 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
      */
     SSL_SESSION_free(our_ssl_sessionid);
   }
-#endif
 
   /*
    * We check certificates to authenticate the server; otherwise we risk
@@ -2671,10 +2734,8 @@ static CURLcode ossl_connect_step3(struct connectdata *conn, int sockindex)
    * operations.
    */
 
-  if(!data->set.ssl.verifypeer && !data->set.ssl.verifyhost)
-    (void)servercert(conn, connssl, FALSE);
-  else
-    result = servercert(conn, connssl, TRUE);
+  result = servercert(conn, connssl,
+                      (data->set.ssl.verifypeer || data->set.ssl.verifyhost));
 
   if(!result)
     connssl->connecting_state = ssl_connect_done;
@@ -2912,7 +2973,7 @@ static ssize_t ossl_recv(struct connectdata *conn, /* connection data */
     default:
       /* openssl/ssl.h for SSL_ERROR_SYSCALL says "look at error stack/return
          value/errno" */
-      /* http://www.openssl.org/docs/crypto/ERR_get_error.html */
+      /* https://www.openssl.org/docs/crypto/ERR_get_error.html */
       sslerror = ERR_get_error();
       if((nread < 0) || sslerror) {
         /* If the return code was negative or there actually is an error in the
@@ -2930,90 +2991,50 @@ static ssize_t ossl_recv(struct connectdata *conn, /* connection data */
 
 size_t Curl_ossl_version(char *buffer, size_t size)
 {
-#ifdef YASSL_VERSION
-  /* yassl provides an OpenSSL API compatibility layer so it looks identical
-     to OpenSSL in all other aspects */
-  return snprintf(buffer, size, "yassl/%s", YASSL_VERSION);
-#else /* YASSL_VERSION */
-
-#if(SSLEAY_VERSION_NUMBER >= 0x905000)
-  {
-    char sub[3];
-    unsigned long ssleay_value;
-    sub[2]='\0';
-    sub[1]='\0';
-    ssleay_value=SSLeay();
-    if(ssleay_value < 0x906000) {
-      ssleay_value=SSLEAY_VERSION_NUMBER;
-      sub[0]='\0';
-    }
-    else {
-      if(ssleay_value&0xff0) {
-        int minor_ver = (ssleay_value >> 4) & 0xff;
-        if(minor_ver > 26) {
-          /* handle extended version introduced for 0.9.8za */
-          sub[1] = (char) ((minor_ver - 1) % 26 + 'a' + 1);
-          sub[0] = 'z';
-        }
-        else {
-          sub[0]=(char)(((ssleay_value>>4)&0xff) + 'a' -1);
-        }
-      }
-      else
-        sub[0]='\0';
-    }
-
-    return snprintf(buffer, size, "%s/%lx.%lx.%lx%s",
 #ifdef OPENSSL_IS_BORINGSSL
-                    "BoringSSL"
-#else
-#ifdef LIBRESSL_VERSION_NUMBER
-                    "LibreSSL"
-#else
-                    "OpenSSL"
-#endif
-#endif
-                    , (ssleay_value>>28)&0xf,
-                    (ssleay_value>>20)&0xff,
-                    (ssleay_value>>12)&0xff,
-                    sub);
+  return snprintf(buffer, size, OSSL_PACKAGE);
+#else /* OPENSSL_IS_BORINGSSL */
+  char sub[3];
+  unsigned long ssleay_value;
+  sub[2]='\0';
+  sub[1]='\0';
+  ssleay_value=SSLeay();
+  if(ssleay_value < 0x906000) {
+    ssleay_value=SSLEAY_VERSION_NUMBER;
+    sub[0]='\0';
   }
-
-#else /* SSLEAY_VERSION_NUMBER is less than 0.9.5 */
-
-#if(SSLEAY_VERSION_NUMBER >= 0x900000)
-  return snprintf(buffer, size, "OpenSSL/%lx.%lx.%lx",
-                  (SSLEAY_VERSION_NUMBER>>28)&0xff,
-                  (SSLEAY_VERSION_NUMBER>>20)&0xff,
-                  (SSLEAY_VERSION_NUMBER>>12)&0xf);
-
-#else /* (SSLEAY_VERSION_NUMBER >= 0x900000) */
-  {
-    char sub[2];
-    sub[1]='\0';
-    if(SSLEAY_VERSION_NUMBER&0x0f) {
-      sub[0]=(SSLEAY_VERSION_NUMBER&0x0f) + 'a' -1;
+  else {
+    if(ssleay_value&0xff0) {
+      int minor_ver = (ssleay_value >> 4) & 0xff;
+      if(minor_ver > 26) {
+        /* handle extended version introduced for 0.9.8za */
+        sub[1] = (char) ((minor_ver - 1) % 26 + 'a' + 1);
+        sub[0] = 'z';
+      }
+      else {
+        sub[0]=(char)(((ssleay_value>>4)&0xff) + 'a' -1);
+      }
     }
     else
       sub[0]='\0';
-
-    return snprintf(buffer, size, "SSL/%x.%x.%x%s",
-                    (SSLEAY_VERSION_NUMBER>>12)&0xff,
-                    (SSLEAY_VERSION_NUMBER>>8)&0xf,
-                    (SSLEAY_VERSION_NUMBER>>4)&0xf, sub);
   }
-#endif /* (SSLEAY_VERSION_NUMBER >= 0x900000) */
-#endif /* SSLEAY_VERSION_NUMBER is less than 0.9.5 */
 
-#endif /* YASSL_VERSION */
+  return snprintf(buffer, size, "%s/%lx.%lx.%lx%s",
+                  OSSL_PACKAGE,
+                  (ssleay_value>>28)&0xf,
+                  (ssleay_value>>20)&0xff,
+                  (ssleay_value>>12)&0xff,
+                  sub);
+#endif /* OPENSSL_IS_BORINGSSL */
 }
 
 /* can be called with data == NULL */
 int Curl_ossl_random(struct SessionHandle *data, unsigned char *entropy,
                      size_t length)
 {
-  if(data)
+  if(data) {
     Curl_ossl_seed(data); /* Initiate the seed if not already done */
+  }
   RAND_bytes(entropy, curlx_uztosi(length));
   return 0; /* 0 as in no problem */
 }
@@ -3029,4 +3050,28 @@ void Curl_ossl_md5sum(unsigned char *tmp, /* input */
   MD5_Update(&MD5pw, tmp, tmplen);
   MD5_Final(md5sum, &MD5pw);
 }
-#endif /* USE_SSLEAY */
+
+#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
+void Curl_ossl_sha256sum(const unsigned char *tmp, /* input */
+                      size_t tmplen,
+                      unsigned char *sha256sum /* output */,
+                      size_t unused)
+{
+  SHA256_CTX SHA256pw;
+  (void)unused;
+  SHA256_Init(&SHA256pw);
+  SHA256_Update(&SHA256pw, tmp, tmplen);
+  SHA256_Final(sha256sum, &SHA256pw);
+}
+#endif
+
+bool Curl_ossl_cert_status_request(void)
+{
+#if (OPENSSL_VERSION_NUMBER >= 0x0090808fL) && !defined(OPENSSL_NO_TLSEXT) && \
+    !defined(OPENSSL_NO_OCSP)
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
+#endif /* USE_OPENSSL */
index 9f5f3a2..c8e32af 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -24,7 +24,7 @@
 
 #include "curl_setup.h"
 
-#ifdef USE_SSLEAY
+#ifdef USE_OPENSSL
 /*
  * This header should only be needed to get included by vtls.c and openssl.c
  */
@@ -72,6 +72,15 @@ void Curl_ossl_md5sum(unsigned char *tmp, /* input */
                       size_t tmplen,
                       unsigned char *md5sum /* output */,
                       size_t unused);
+void Curl_ossl_sha256sum(const unsigned char *tmp, /* input */
+                      size_t tmplen,
+                      unsigned char *sha256sum /* output */,
+                      size_t unused);
+
+bool Curl_ossl_cert_status_request(void);
+
+/* Set the API backend definition to OpenSSL */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_OPENSSL
 
 /* this backend supports the CAPATH option */
 #define have_curlssl_ca_path 1
@@ -99,9 +108,13 @@ void Curl_ossl_md5sum(unsigned char *tmp, /* input */
 #define curlssl_data_pending(x,y) Curl_ossl_data_pending(x,y)
 #define curlssl_random(x,y,z) Curl_ossl_random(x,y,z)
 #define curlssl_md5sum(a,b,c,d) Curl_ossl_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_OPENSSL
+#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL) && !defined(OPENSSL_NO_SHA256)
+#define curlssl_sha256sum(a,b,c,d) Curl_ossl_sha256sum(a,b,c,d)
+#endif
+#define curlssl_cert_status_request() Curl_ossl_cert_status_request()
 
-#define DEFAULT_CIPHER_SELECTION "ALL!EXPORT!EXPORT40!EXPORT56!aNULL!LOW!RC4"
+#define DEFAULT_CIPHER_SELECTION \
+  "ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH"
 
-#endif /* USE_SSLEAY */
+#endif /* USE_OPENSSL */
 #endif /* HEADER_CURL_SSLUSE_H */
index 05fcfc2..fcce60f 100644 (file)
@@ -5,12 +5,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2012 - 2014, 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.
+ * are also available at https://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
@@ -55,9 +55,7 @@
 #include "select.h"
 #include "rawstr.h"
 #include "polarssl_threadlock.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -76,12 +74,12 @@ static int  entropy_init_initialized  = 0;
 static void entropy_init_mutex(entropy_context *ctx)
 {
   /* lock 0 = entropy_init_mutex() */
-  polarsslthreadlock_lock_function(0);
+  Curl_polarsslthreadlock_lock_function(0);
   if(entropy_init_initialized == 0) {
     entropy_init(ctx);
     entropy_init_initialized = 1;
   }
-  polarsslthreadlock_unlock_function(0);
+  Curl_polarsslthreadlock_unlock_function(0);
 }
 /* end of entropy_init_mutex() */
 
@@ -90,9 +88,9 @@ static int entropy_func_mutex(void *data, unsigned char *output, size_t len)
 {
     int ret;
     /* lock 1 = entropy_func_mutex() */
-    polarsslthreadlock_lock_function(1);
+    Curl_polarsslthreadlock_lock_function(1);
     ret = entropy_func(data, output, len);
-    polarsslthreadlock_unlock_function(1);
+    Curl_polarsslthreadlock_unlock_function(1);
 
     return ret;
 }
@@ -120,11 +118,8 @@ static void polarssl_debug(void *context, int level, const char *line)
 #endif
 
 /* ALPN for http2? */
-#ifdef USE_NGHTTP2
-#  undef HAS_ALPN
-#  ifdef POLARSSL_SSL_ALPN
-#    define HAS_ALPN
-#  endif
+#ifdef POLARSSL_SSL_ALPN
+#  define HAS_ALPN
 #endif
 
 static Curl_recv polarssl_recv;
@@ -289,27 +284,36 @@ polarssl_connect_step1(struct connectdata *conn,
   switch(data->set.ssl.version) {
   default:
   case CURL_SSLVERSION_DEFAULT:
+  case CURL_SSLVERSION_TLSv1:
     ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
                         SSL_MINOR_VERSION_1);
     break;
   case CURL_SSLVERSION_SSLv3:
     ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
                         SSL_MINOR_VERSION_0);
+    ssl_set_max_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
+                        SSL_MINOR_VERSION_0);
     infof(data, "PolarSSL: Forced min. SSL Version to be SSLv3\n");
     break;
   case CURL_SSLVERSION_TLSv1_0:
     ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
                         SSL_MINOR_VERSION_1);
+    ssl_set_max_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
+                        SSL_MINOR_VERSION_1);
     infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.0\n");
     break;
   case CURL_SSLVERSION_TLSv1_1:
     ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
                         SSL_MINOR_VERSION_2);
+    ssl_set_max_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
+                        SSL_MINOR_VERSION_2);
     infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.1\n");
     break;
   case CURL_SSLVERSION_TLSv1_2:
     ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
                         SSL_MINOR_VERSION_3);
+    ssl_set_max_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
+                        SSL_MINOR_VERSION_3);
     infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.2\n");
     break;
   }
@@ -350,16 +354,23 @@ polarssl_connect_step1(struct connectdata *conn,
   }
 
 #ifdef HAS_ALPN
-  if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
-    if(data->set.ssl_enable_alpn) {
-      static const char* protocols[] = {
-        NGHTTP2_PROTO_VERSION_ID, ALPN_HTTP_1_1, NULL
-      };
-      ssl_set_alpn_protocols(&connssl->ssl, protocols);
-      infof(data, "ALPN, offering %s, %s\n", protocols[0],
-            protocols[1]);
-      connssl->asked_for_h2 = TRUE;
+  if(data->set.ssl_enable_alpn) {
+    static const char* protocols[3];
+    int cur = 0;
+
+#ifdef USE_NGHTTP2
+    if(data->set.httpversion >= CURL_HTTP_VERSION_2) {
+      protocols[cur++] = NGHTTP2_PROTO_VERSION_ID;
+      infof(data, "ALPN, offering %s\n", NGHTTP2_PROTO_VERSION_ID);
     }
+#endif
+
+    protocols[cur++] = ALPN_HTTP_1_1;
+    infof(data, "ALPN, offering %s\n", ALPN_HTTP_1_1);
+
+    protocols[cur] = NULL;
+
+    ssl_set_alpn_protocols(&connssl->ssl, protocols);
   }
 #endif
 
@@ -381,47 +392,37 @@ polarssl_connect_step2(struct connectdata *conn,
   struct ssl_connect_data* connssl = &conn->ssl[sockindex];
   char buffer[1024];
 
-#ifdef HAS_ALPN
-  const char* next_protocol;
-#endif
-
   char errorbuf[128];
   errorbuf[0] = 0;
 
   conn->recv[sockindex] = polarssl_recv;
   conn->send[sockindex] = polarssl_send;
 
-  for(;;) {
-    if(!(ret = ssl_handshake(&connssl->ssl)))
-      break;
-    else if(ret != POLARSSL_ERR_NET_WANT_READ &&
-            ret != POLARSSL_ERR_NET_WANT_WRITE) {
-#ifdef POLARSSL_ERROR_C
-     error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
-     failf(data, "ssl_handshake returned - PolarSSL: (-0x%04X) %s",
-                                                    -ret, errorbuf);
+  ret = ssl_handshake(&connssl->ssl);
 
-     return CURLE_SSL_CONNECT_ERROR;
-    }
-    else {
-      if(ret == POLARSSL_ERR_NET_WANT_READ) {
-        connssl->connecting_state = ssl_connect_2_reading;
-        return CURLE_OK;
-      }
-      if(ret == POLARSSL_ERR_NET_WANT_WRITE) {
-        connssl->connecting_state = ssl_connect_2_writing;
-        return CURLE_OK;
-      }
-      failf(data, "SSL_connect failed with error %d.", ret);
-      return CURLE_SSL_CONNECT_ERROR;
+  switch(ret) {
+  case 0:
+    break;
 
-    }
+  case POLARSSL_ERR_NET_WANT_READ:
+    connssl->connecting_state = ssl_connect_2_reading;
+    return CURLE_OK;
+
+  case POLARSSL_ERR_NET_WANT_WRITE:
+    connssl->connecting_state = ssl_connect_2_writing;
+    return CURLE_OK;
+
+  default:
+#ifdef POLARSSL_ERROR_C
+    error_strerror(ret, errorbuf, sizeof(errorbuf));
+#endif /* POLARSSL_ERROR_C */
+    failf(data, "ssl_handshake returned - PolarSSL: (-0x%04X) %s",
+          -ret, errorbuf);
+    return CURLE_SSL_CONNECT_ERROR;
   }
 
   infof(data, "PolarSSL: Handshake complete, cipher is %s\n",
-        ssl_get_ciphersuite(&conn->ssl[sockindex].ssl)
-    );
+        ssl_get_ciphersuite(&conn->ssl[sockindex].ssl) );
 
   ret = ssl_get_verify_result(&conn->ssl[sockindex].ssl);
 
@@ -454,22 +455,24 @@ polarssl_connect_step2(struct connectdata *conn,
 
 #ifdef HAS_ALPN
   if(data->set.ssl_enable_alpn) {
-    next_protocol = ssl_get_alpn_protocol(&connssl->ssl);
+    const char *next_protocol = ssl_get_alpn_protocol(&connssl->ssl);
 
     if(next_protocol != NULL) {
       infof(data, "ALPN, server accepted to use %s\n", next_protocol);
 
-      if(strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
+#ifdef USE_NGHTTP2
+      if(!strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
                   NGHTTP2_PROTO_VERSION_ID_LEN)) {
-        conn->negnpn = NPN_HTTP2;
+        conn->negnpn = CURL_HTTP_VERSION_2;
       }
-      else if(strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
-        conn->negnpn = NPN_HTTP1_1;
+      else
+#endif
+      if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
+        conn->negnpn = CURL_HTTP_VERSION_1_1;
       }
     }
-    else if(connssl->asked_for_h2) {
+    else
       infof(data, "ALPN, server did not agree to a protocol\n");
-    }
   }
 #endif
 
@@ -487,7 +490,7 @@ polarssl_connect_step3(struct connectdata *conn,
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   struct SessionHandle *data = conn->data;
   void *old_ssl_sessionid = NULL;
-  ssl_session *our_ssl_sessionid = &conn->ssl[sockindex].ssn ;
+  ssl_session *our_ssl_sessionid = &conn->ssl[sockindex].ssn;
   bool incache;
 
   DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
@@ -544,11 +547,6 @@ static ssize_t polarssl_send(struct connectdata *conn,
   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);
@@ -589,11 +587,15 @@ void Curl_polarssl_session_free(void *ptr)
   free(ptr);
 }
 
+/* 1.3.10 was the first rebranded version. All new releases (in 1.3 branch and
+   higher) will be mbed TLS branded.. */
+
 size_t Curl_polarssl_version(char *buffer, size_t size)
 {
   unsigned int version = version_get_number();
-  return snprintf(buffer, size, "PolarSSL/%d.%d.%d", version>>24,
-                  (version>>16)&0xff, (version>>8)&0xff);
+  return snprintf(buffer, size, "%s/%d.%d.%d",
+                  version >= 0x01030A00?"mbedTLS":"PolarSSL",
+                  version>>24, (version>>16)&0xff, (version>>8)&0xff);
 }
 
 static CURLcode
@@ -738,14 +740,14 @@ Curl_polarssl_connect(struct connectdata *conn,
  * return 0 error initializing SSL
  * return 1 SSL initialized successfully
  */
-int polarssl_init(void)
+int Curl_polarssl_init(void)
 {
-  return polarsslthreadlock_thread_setup();
+  return Curl_polarsslthreadlock_thread_setup();
 }
 
-void polarssl_cleanup(void)
+void Curl_polarssl_cleanup(void)
 {
-  (void)polarsslthreadlock_thread_cleanup();
+  (void)Curl_polarsslthreadlock_thread_cleanup();
 }
 
 #endif /* USE_POLARSSL */
index 57dfb67..1ab5a84 100644 (file)
@@ -7,12 +7,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2012 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2012 - 2014, 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.
+ * are also available at https://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
@@ -27,8 +27,8 @@
 #ifdef USE_POLARSSL
 
 /* Called on first use PolarSSL, setup threading if supported */
-int  polarssl_init(void);
-void polarssl_cleanup(void);
+int  Curl_polarssl_init(void);
+void Curl_polarssl_cleanup(void);
 
 
 CURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex);
@@ -37,10 +37,6 @@ CURLcode Curl_polarssl_connect_nonblocking(struct connectdata *conn,
                                            int sockindex,
                                            bool *done);
 
-/* 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);
 
@@ -48,16 +44,19 @@ 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);
 
+/* Set the API backend definition to PolarSSL */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_POLARSSL
+
 /* this backend supports the CAPATH option */
 #define have_curlssl_ca_path 1
 
 /* API setup for PolarSSL */
-#define curlssl_init() polarssl_init()
-#define curlssl_cleanup() polarssl_cleanup()
+#define curlssl_init() Curl_polarssl_init()
+#define curlssl_cleanup() Curl_polarssl_cleanup()
 #define curlssl_connect Curl_polarssl_connect
 #define curlssl_connect_nonblocking Curl_polarssl_connect_nonblocking
 #define curlssl_session_free(x)  Curl_polarssl_session_free(x)
-#define curlssl_close_all Curl_polarssl_close_all
+#define curlssl_close_all(x) ((void)x)
 #define curlssl_close Curl_polarssl_close
 #define curlssl_shutdown(x,y) 0
 #define curlssl_set_engine(x,y) ((void)x, (void)y, CURLE_NOT_BUILT_IN)
@@ -66,7 +65,6 @@ int Curl_polarssl_shutdown(struct connectdata *conn, int sockindex);
 #define curlssl_version Curl_polarssl_version
 #define curlssl_check_cxn(x) ((void)x, -1)
 #define curlssl_data_pending(x,y) ((void)x, (void)y, 0)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_POLARSSL
 
 /* This might cause libcurl to use a weeker random!
    TODO: implement proper use of Polarssl's CTR-DRBG or HMAC-DRBG and use that
index ad18715..3b0ebf8 100644 (file)
@@ -5,12 +5,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2013-2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2013, 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.
+ * are also available at https://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
@@ -22,7 +22,7 @@
  ***************************************************************************/
 #include "curl_setup.h"
 
-#if defined(USE_POLARSSL) && \
+#if (defined(USE_POLARSSL) || defined(USE_MBEDTLS)) && \
     (defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32))
 
 #if defined(USE_THREADS_POSIX)
 #endif
 
 #include "polarssl_threadlock.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -50,7 +47,7 @@
 /* This array will store all of the mutexes available to PolarSSL. */
 static POLARSSL_MUTEX_T *mutex_buf = NULL;
 
-int polarsslthreadlock_thread_setup(void)
+int Curl_polarsslthreadlock_thread_setup(void)
 {
   int i;
   int ret;
@@ -76,7 +73,7 @@ int polarsslthreadlock_thread_setup(void)
   return 1; /* OK */
 }
 
-int polarsslthreadlock_thread_cleanup(void)
+int Curl_polarsslthreadlock_thread_cleanup(void)
 {
   int i;
   int ret;
@@ -103,7 +100,7 @@ int polarsslthreadlock_thread_cleanup(void)
   return 1; /* OK */
 }
 
-int polarsslthreadlock_lock_function(int n)
+int Curl_polarsslthreadlock_lock_function(int n)
 {
   int ret;
 #ifdef HAVE_PTHREAD_H
@@ -128,7 +125,7 @@ int polarsslthreadlock_lock_function(int n)
   return 1; /* OK */
 }
 
-int polarsslthreadlock_unlock_function(int n)
+int Curl_polarsslthreadlock_unlock_function(int n)
 {
   int ret;
 #ifdef HAVE_PTHREAD_H
@@ -153,4 +150,4 @@ int polarsslthreadlock_unlock_function(int n)
   return 1; /* OK */
 }
 
-#endif /* USE_POLARSSL */
+#endif /* USE_POLARSSL || USE_MBEDTLS */
index b67b3f9..dda5359 100644 (file)
@@ -7,12 +7,12 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
+ * Copyright (C) 2013-2015, Daniel Stenberg, <daniel@haxx.se>, et al.
  * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2013, 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.
+ * are also available at https://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
@@ -24,7 +24,7 @@
  ***************************************************************************/
 #include "curl_setup.h"
 
-#ifdef USE_POLARSSL
+#if (defined USE_POLARSSL) || (defined USE_MBEDTLS)
 
 #if defined(USE_THREADS_POSIX)
 #  define POLARSSL_MUTEX_T       pthread_mutex_t
 
 #if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
 
-int polarsslthreadlock_thread_setup(void);
-int polarsslthreadlock_thread_cleanup(void);
-int polarsslthreadlock_lock_function(int n);
-int polarsslthreadlock_unlock_function(int n);
+int Curl_polarsslthreadlock_thread_setup(void);
+int Curl_polarsslthreadlock_thread_cleanup(void);
+int Curl_polarsslthreadlock_lock_function(int n);
+int Curl_polarsslthreadlock_unlock_function(int n);
 
 #else
 
-#define polarsslthreadlock_thread_setup() 1
-#define polarsslthreadlock_thread_cleanup() 1
-#define polarsslthreadlock_lock_function(x) 1
-#define polarsslthreadlock_unlock_function(x) 1
+#define Curl_polarsslthreadlock_thread_setup() 1
+#define Curl_polarsslthreadlock_thread_cleanup() 1
+#define Curl_polarsslthreadlock_lock_function(x) 1
+#define Curl_polarsslthreadlock_unlock_function(x) 1
 
 #endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */
 
similarity index 69%
rename from lib/vtls/curl_schannel.c
rename to lib/vtls/schannel.c
index b3fe526..7f7bd35 100644 (file)
@@ -5,13 +5,13 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 2012 - 2014, Marc Hoersken, <info@marc-hoersken.de>
+ * Copyright (C) 2012 - 2015, Marc Hoersken, <info@marc-hoersken.de>
  * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, 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.
+ * are also available at https://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
  * Thanks for code and inspiration!
  */
 
-/*
- * TODO list for TLS/SSL implementation:
- * - implement client certificate authentication
- * - implement custom server certificate validation
- * - implement cipher/algorithm option
- *
- * Related articles on MSDN:
- * - Getting a Certificate for Schannel
- *   http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
- * - Specifying Schannel Ciphers and Cipher Strengths
- *   http://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx
- */
-
 #include "curl_setup.h"
 
 #ifdef USE_SCHANNEL
@@ -60,7 +47,7 @@
 #endif
 
 #include "curl_sspi.h"
-#include "curl_schannel.h"
+#include "schannel.h"
 #include "vtls.h"
 #include "sendf.h"
 #include "connect.h" /* for the connect timeout */
 #include "inet_pton.h" /* for IP addr SNI check */
 #include "curl_multibyte.h"
 #include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -121,7 +105,7 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   struct in6_addr addr6;
 #endif
   TCHAR *host_name;
-  CURLcode code;
+  CURLcode result;
 
   infof(data, "schannel: SSL/TLS connection with %s port %hu (step 1/3)\n",
         conn->host.name, conn->remote_port);
@@ -141,66 +125,78 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
       /* certificate validation on CE doesn't seem to work right; we'll
          do it following a more manual process. */
       schannel_cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION |
-                              SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
-                              SCH_CRED_IGNORE_REVOCATION_OFFLINE;
+        SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
+        SCH_CRED_IGNORE_REVOCATION_OFFLINE;
 #else
-      schannel_cred.dwFlags = SCH_CRED_AUTO_CRED_VALIDATION |
-                              SCH_CRED_REVOCATION_CHECK_CHAIN;
+      schannel_cred.dwFlags = SCH_CRED_AUTO_CRED_VALIDATION;
+      if(data->set.ssl_no_revoke)
+        schannel_cred.dwFlags |= SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
+                                 SCH_CRED_IGNORE_REVOCATION_OFFLINE;
+      else
+        schannel_cred.dwFlags |= SCH_CRED_REVOCATION_CHECK_CHAIN;
 #endif
-      infof(data, "schannel: checking server certificate revocation\n");
+      if(data->set.ssl_no_revoke)
+        infof(data, "schannel: disabled server certificate revocation "
+                    "checks\n");
+      else
+        infof(data, "schannel: checking server certificate revocation\n");
     }
     else {
       schannel_cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION |
-                              SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
-                              SCH_CRED_IGNORE_REVOCATION_OFFLINE;
-      infof(data, "schannel: disable server certificate revocation checks\n");
+        SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
+        SCH_CRED_IGNORE_REVOCATION_OFFLINE;
+      infof(data, "schannel: disabled server certificate revocation checks\n");
     }
 
     if(!data->set.ssl.verifyhost) {
       schannel_cred.dwFlags |= SCH_CRED_NO_SERVERNAME_CHECK;
       infof(data, "schannel: verifyhost setting prevents Schannel from "
-                  "comparing the supplied target name with the subject "
-                  "names in server certificates. Also disables SNI.\n");
+            "comparing the supplied target name with the subject "
+            "names in server certificates. Also disables SNI.\n");
     }
 
     switch(data->set.ssl.version) {
-      default:
-      case CURL_SSLVERSION_DEFAULT:
-      case CURL_SSLVERSION_TLSv1:
-        schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT |
-                                              SP_PROT_TLS1_1_CLIENT |
-                                              SP_PROT_TLS1_2_CLIENT;
-        break;
-      case CURL_SSLVERSION_TLSv1_0:
-        schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT;
-        break;
-      case CURL_SSLVERSION_TLSv1_1:
-        schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_1_CLIENT;
-        break;
-      case CURL_SSLVERSION_TLSv1_2:
-        schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT;
-        break;
-      case CURL_SSLVERSION_SSLv3:
-        schannel_cred.grbitEnabledProtocols = SP_PROT_SSL3_CLIENT;
-        break;
-      case CURL_SSLVERSION_SSLv2:
-        schannel_cred.grbitEnabledProtocols = SP_PROT_SSL2_CLIENT;
-        break;
+    default:
+    case CURL_SSLVERSION_DEFAULT:
+    case CURL_SSLVERSION_TLSv1:
+      schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT |
+        SP_PROT_TLS1_1_CLIENT |
+        SP_PROT_TLS1_2_CLIENT;
+      break;
+    case CURL_SSLVERSION_TLSv1_0:
+      schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT;
+      break;
+    case CURL_SSLVERSION_TLSv1_1:
+      schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_1_CLIENT;
+      break;
+    case CURL_SSLVERSION_TLSv1_2:
+      schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT;
+      break;
+    case CURL_SSLVERSION_SSLv3:
+      schannel_cred.grbitEnabledProtocols = SP_PROT_SSL3_CLIENT;
+      break;
+    case CURL_SSLVERSION_SSLv2:
+      schannel_cred.grbitEnabledProtocols = SP_PROT_SSL2_CLIENT;
+      break;
     }
 
     /* allocate memory for the re-usable credential handle */
     connssl->cred = (struct curl_schannel_cred *)
-                     malloc(sizeof(struct curl_schannel_cred));
+      malloc(sizeof(struct curl_schannel_cred));
     if(!connssl->cred) {
       failf(data, "schannel: unable to allocate memory");
       return CURLE_OUT_OF_MEMORY;
     }
     memset(connssl->cred, 0, sizeof(struct curl_schannel_cred));
 
-    /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa374716.aspx */
-    sspi_status = s_pSecFn->AcquireCredentialsHandle(NULL, (TCHAR *)UNISP_NAME,
-      SECPKG_CRED_OUTBOUND, NULL, &schannel_cred, NULL, NULL,
-      &connssl->cred->cred_handle, &connssl->cred->time_stamp);
+    /* https://msdn.microsoft.com/en-us/library/windows/desktop/aa374716.aspx
+       */
+    sspi_status =
+      s_pSecFn->AcquireCredentialsHandle(NULL, (TCHAR *)UNISP_NAME,
+                                         SECPKG_CRED_OUTBOUND, NULL,
+                                         &schannel_cred, NULL, NULL,
+                                         &connssl->cred->cred_handle,
+                                         &connssl->cred->time_stamp);
 
     if(sspi_status != SEC_E_OK) {
       if(sspi_status == SEC_E_WRONG_PRINCIPAL)
@@ -229,12 +225,12 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
 
   /* setup request flags */
   connssl->req_flags = ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT |
-                       ISC_REQ_CONFIDENTIALITY | ISC_REQ_ALLOCATE_MEMORY |
-                       ISC_REQ_STREAM;
+    ISC_REQ_CONFIDENTIALITY | ISC_REQ_ALLOCATE_MEMORY |
+    ISC_REQ_STREAM;
 
   /* allocate memory for the security context handle */
   connssl->ctxt = (struct curl_schannel_ctxt *)
-                   malloc(sizeof(struct curl_schannel_ctxt));
+    malloc(sizeof(struct curl_schannel_ctxt));
   if(!connssl->ctxt) {
     failf(data, "schannel: unable to allocate memory");
     return CURLE_OUT_OF_MEMORY;
@@ -245,7 +241,7 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   if(!host_name)
     return CURLE_OUT_OF_MEMORY;
 
-  /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx */
+  /* https://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx */
 
   sspi_status = s_pSecFn->InitializeSecurityContext(
     &connssl->cred->cred_handle, NULL, host_name,
@@ -269,10 +265,10 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
         "sending %lu bytes...\n", outbuf.cbBuffer);
 
   /* send initial handshake data which is now stored in output buffer */
-  code = Curl_write_plain(conn, conn->sock[sockindex], outbuf.pvBuffer,
-                          outbuf.cbBuffer, &written);
+  result = Curl_write_plain(conn, conn->sock[sockindex], outbuf.pvBuffer,
+                            outbuf.cbBuffer, &written);
   s_pSecFn->FreeContextBuffer(outbuf.pvBuffer);
-  if((code != CURLE_OK) || (outbuf.cbBuffer != (size_t)written)) {
+  if((result != CURLE_OK) || (outbuf.cbBuffer != (size_t) written)) {
     failf(data, "schannel: failed to send initial handshake data: "
           "sent %zd of %lu bytes", written, outbuf.cbBuffer);
     return CURLE_SSL_CONNECT_ERROR;
@@ -281,6 +277,10 @@ schannel_connect_step1(struct connectdata *conn, int sockindex)
   infof(data, "schannel: sent initial handshake data: "
         "sent %zd bytes\n", written);
 
+  connssl->recv_unrecoverable_err = CURLE_OK;
+  connssl->recv_sspi_close_notify = false;
+  connssl->recv_connection_closed = false;
+
   /* continue to second handshake step */
   connssl->connecting_state = ssl_connect_2;
 
@@ -296,13 +296,13 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   unsigned char *reallocated_buffer;
   size_t reallocated_length;
-  SecBuffer outbuf[2];
+  SecBuffer outbuf[3];
   SecBufferDesc outbuf_desc;
   SecBuffer inbuf[2];
   SecBufferDesc inbuf_desc;
   SECURITY_STATUS sspi_status = SEC_E_OK;
   TCHAR *host_name;
-  CURLcode code;
+  CURLcode result;
   bool doread;
 
   doread = (connssl->connecting_state != ssl_connect_2_writing) ? TRUE : FALSE;
@@ -313,6 +313,17 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
   if(!connssl->cred || !connssl->ctxt)
     return CURLE_SSL_CONNECT_ERROR;
 
+  /* buffer to store previously received and decrypted data */
+  if(connssl->decdata_buffer == NULL) {
+    connssl->decdata_offset = 0;
+    connssl->decdata_length = CURL_SCHANNEL_BUFFER_INIT_SIZE;
+    connssl->decdata_buffer = malloc(connssl->decdata_length);
+    if(connssl->decdata_buffer == NULL) {
+      failf(data, "schannel: unable to allocate memory");
+      return CURLE_OUT_OF_MEMORY;
+    }
+  }
+
   /* buffer to store previously received and encrypted data */
   if(connssl->encdata_buffer == NULL) {
     connssl->encdata_offset = 0;
@@ -329,7 +340,7 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
      CURL_SCHANNEL_BUFFER_FREE_SIZE) {
     /* increase internal encrypted data buffer */
     reallocated_length = connssl->encdata_offset +
-                         CURL_SCHANNEL_BUFFER_FREE_SIZE;
+      CURL_SCHANNEL_BUFFER_FREE_SIZE;
     reallocated_buffer = realloc(connssl->encdata_buffer,
                                  reallocated_length);
 
@@ -346,18 +357,20 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
   for(;;) {
     if(doread) {
       /* read encrypted handshake data from socket */
-      code = Curl_read_plain(conn->sock[sockindex],
-                (char *) (connssl->encdata_buffer + connssl->encdata_offset),
-                          connssl->encdata_length - connssl->encdata_offset,
-                          &nread);
-      if(code == CURLE_AGAIN) {
+      result = Curl_read_plain(conn->sock[sockindex],
+                               (char *) (connssl->encdata_buffer +
+                                         connssl->encdata_offset),
+                               connssl->encdata_length -
+                               connssl->encdata_offset,
+                               &nread);
+      if(result == CURLE_AGAIN) {
         if(connssl->connecting_state != ssl_connect_2_writing)
           connssl->connecting_state = ssl_connect_2_reading;
         infof(data, "schannel: failed to receive handshake, "
               "need more data\n");
         return CURLE_OK;
       }
-      else if((code != CURLE_OK) || (nread == 0)) {
+      else if((result != CURLE_OK) || (nread == 0)) {
         failf(data, "schannel: failed to receive handshake, "
               "SSL/TLS connection failed");
         return CURLE_SSL_CONNECT_ERROR;
@@ -368,7 +381,7 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
     }
 
     infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
-        connssl->encdata_offset, connssl->encdata_length);
+          connssl->encdata_offset, connssl->encdata_length);
 
     /* setup input buffers */
     InitSecBuffer(&inbuf[0], SECBUFFER_TOKEN, malloc(connssl->encdata_offset),
@@ -379,7 +392,8 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
     /* setup output buffers */
     InitSecBuffer(&outbuf[0], SECBUFFER_TOKEN, NULL, 0);
     InitSecBuffer(&outbuf[1], SECBUFFER_ALERT, NULL, 0);
-    InitSecBufferDesc(&outbuf_desc, outbuf, 2);
+    InitSecBuffer(&outbuf[2], SECBUFFER_EMPTY, NULL, 0);
+    InitSecBufferDesc(&outbuf_desc, outbuf, 3);
 
     if(inbuf[0].pvBuffer == NULL) {
       failf(data, "schannel: unable to allocate memory");
@@ -394,8 +408,8 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
     if(!host_name)
       return CURLE_OUT_OF_MEMORY;
 
-    /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx */
-
+    /* https://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx
+       */
     sspi_status = s_pSecFn->InitializeSecurityContext(
       &connssl->cred->cred_handle, &connssl->ctxt->ctxt_handle,
       host_name, connssl->req_flags, 0, 0, &inbuf_desc, 0, NULL,
@@ -413,19 +427,31 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
       return CURLE_OK;
     }
 
+    /* If the server has requested a client certificate, attempt to continue
+       the handshake without one. This will allow connections to servers which
+       request a client certificate but do not require it. */
+    if(sspi_status == SEC_I_INCOMPLETE_CREDENTIALS &&
+       !(connssl->req_flags & ISC_REQ_USE_SUPPLIED_CREDS)) {
+      connssl->req_flags |= ISC_REQ_USE_SUPPLIED_CREDS;
+      connssl->connecting_state = ssl_connect_2_writing;
+      infof(data, "schannel: a client certificate has been requested\n");
+      return CURLE_OK;
+    }
+
     /* check if the handshake needs to be continued */
     if(sspi_status == SEC_I_CONTINUE_NEEDED || sspi_status == SEC_E_OK) {
-      for(i = 0; i < 2; i++) {
+      for(i = 0; i < 3; i++) {
         /* search for handshake tokens that need to be send */
         if(outbuf[i].BufferType == SECBUFFER_TOKEN && outbuf[i].cbBuffer > 0) {
           infof(data, "schannel: sending next handshake data: "
                 "sending %lu bytes...\n", outbuf[i].cbBuffer);
 
           /* send handshake token to server */
-          code = Curl_write_plain(conn, conn->sock[sockindex],
-                                  outbuf[i].pvBuffer, outbuf[i].cbBuffer,
-                                  &written);
-          if((code != CURLE_OK) || (outbuf[i].cbBuffer != (size_t)written)) {
+          result = Curl_write_plain(conn, conn->sock[sockindex],
+                                    outbuf[i].pvBuffer, outbuf[i].cbBuffer,
+                                    &written);
+          if((result != CURLE_OK) ||
+             (outbuf[i].cbBuffer != (size_t) written)) {
             failf(data, "schannel: failed to send next handshake data: "
                   "sent %zd of %lu bytes", written, outbuf[i].cbBuffer);
             return CURLE_SSL_CONNECT_ERROR;
@@ -452,21 +478,21 @@ schannel_connect_step2(struct connectdata *conn, int sockindex)
     if(inbuf[1].BufferType == SECBUFFER_EXTRA && inbuf[1].cbBuffer > 0) {
       infof(data, "schannel: encrypted data length: %lu\n", inbuf[1].cbBuffer);
       /*
-         There are two cases where we could be getting extra data here:
-         1) If we're renegotiating a connection and the handshake is already
-            complete (from the server perspective), it can encrypted app data
-            (not handshake data) in an extra buffer at this point.
-         2) (sspi_status == SEC_I_CONTINUE_NEEDED) We are negotiating a
-            connection and this extra data is part of the handshake.
-            We should process the data immediately; waiting for the socket to
-            be ready may fail since the server is done sending handshake data.
-       */
+        There are two cases where we could be getting extra data here:
+        1) If we're renegotiating a connection and the handshake is already
+        complete (from the server perspective), it can encrypted app data
+        (not handshake data) in an extra buffer at this point.
+        2) (sspi_status == SEC_I_CONTINUE_NEEDED) We are negotiating a
+        connection and this extra data is part of the handshake.
+        We should process the data immediately; waiting for the socket to
+        be ready may fail since the server is done sending handshake data.
+      */
       /* check if the remaining data is less than the total amount
          and therefore begins after the already processed data */
       if(connssl->encdata_offset > inbuf[1].cbBuffer) {
         memmove(connssl->encdata_buffer,
                 (connssl->encdata_buffer + connssl->encdata_offset) -
-                  inbuf[1].cbBuffer, inbuf[1].cbBuffer);
+                inbuf[1].cbBuffer, inbuf[1].cbBuffer);
         connssl->encdata_offset = inbuf[1].cbBuffer;
         if(sspi_status == SEC_I_CONTINUE_NEEDED) {
           doread = FALSE;
@@ -691,14 +717,14 @@ schannel_send(struct connectdata *conn, int sockindex,
   SecBuffer outbuf[4];
   SecBufferDesc outbuf_desc;
   SECURITY_STATUS sspi_status = SEC_E_OK;
-  CURLcode code;
+  CURLcode result;
 
   /* check if the maximum stream sizes were queried */
   if(connssl->stream_sizes.cbMaximumMessage == 0) {
     sspi_status = s_pSecFn->QueryContextAttributes(
-                              &connssl->ctxt->ctxt_handle,
-                              SECPKG_ATTR_STREAM_SIZES,
-                              &connssl->stream_sizes);
+      &connssl->ctxt->ctxt_handle,
+      SECPKG_ATTR_STREAM_SIZES,
+      &connssl->stream_sizes);
     if(sspi_status != SEC_E_OK) {
       *err = CURLE_SEND_ERROR;
       return -1;
@@ -713,7 +739,7 @@ schannel_send(struct connectdata *conn, int sockindex,
 
   /* calculate the complete message length and allocate a buffer for it */
   data_len = connssl->stream_sizes.cbHeader + len +
-              connssl->stream_sizes.cbTrailer;
+    connssl->stream_sizes.cbTrailer;
   data = (unsigned char *) malloc(data_len);
   if(data == NULL) {
     *err = CURLE_OUT_OF_MEMORY;
@@ -734,7 +760,7 @@ schannel_send(struct connectdata *conn, int sockindex,
   /* copy data into output buffer */
   memcpy(outbuf[1].pvBuffer, buf, len);
 
-  /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375390.aspx */
+  /* https://msdn.microsoft.com/en-us/library/windows/desktop/aa375390.aspx */
   sspi_status = s_pSecFn->EncryptMessage(&connssl->ctxt->ctxt_handle, 0,
                                          &outbuf_desc, 0);
 
@@ -746,19 +772,19 @@ schannel_send(struct connectdata *conn, int sockindex,
     len = outbuf[0].cbBuffer + outbuf[1].cbBuffer + outbuf[2].cbBuffer;
 
     /*
-       It's important to send the full message which includes the header,
-       encrypted payload, and trailer.  Until the client receives all the
-       data a coherent message has not been delivered and the client
-       can't read any of it.
-
-       If we wanted to buffer the unwritten encrypted bytes, we would
-       tell the client that all data it has requested to be sent has been
-       sent. The unwritten encrypted bytes would be the first bytes to
-       send on the next invocation.
-       Here's the catch with this - if we tell the client that all the
-       bytes have been sent, will the client call this method again to
-       send the buffered data?  Looking at who calls this function, it
-       seems the answer is NO.
+      It's important to send the full message which includes the header,
+      encrypted payload, and trailer.  Until the client receives all the
+      data a coherent message has not been delivered and the client
+      can't read any of it.
+
+      If we wanted to buffer the unwritten encrypted bytes, we would
+      tell the client that all data it has requested to be sent has been
+      sent. The unwritten encrypted bytes would be the first bytes to
+      send on the next invocation.
+      Here's the catch with this - if we tell the client that all the
+      bytes have been sent, will the client call this method again to
+      send the buffered data?  Looking at who calls this function, it
+      seems the answer is NO.
     */
 
     /* send entire message or fail */
@@ -797,12 +823,12 @@ schannel_send(struct connectdata *conn, int sockindex,
       }
       /* socket is writable */
 
-      code = Curl_write_plain(conn, conn->sock[sockindex], data + written,
-                              len - written, &this_write);
-      if(code == CURLE_AGAIN)
+      result = Curl_write_plain(conn, conn->sock[sockindex], data + written,
+                                len - written, &this_write);
+      if(result == CURLE_AGAIN)
         continue;
-      else if(code != CURLE_OK) {
-        *err = code;
+      else if(result != CURLE_OK) {
+        *err = result;
         written = -1;
         break;
       }
@@ -832,8 +858,7 @@ schannel_recv(struct connectdata *conn, int sockindex,
               char *buf, size_t len, CURLcode *err)
 {
   size_t size = 0;
-  ssize_t nread = 0, ret = -1;
-  CURLcode result;
+  ssize_t nread = -1;
   struct SessionHandle *data = conn->data;
   struct ssl_connect_data *connssl = &conn->ssl[sockindex];
   unsigned char *reallocated_buffer;
@@ -842,72 +867,103 @@ schannel_recv(struct connectdata *conn, int sockindex,
   SecBuffer inbuf[4];
   SecBufferDesc inbuf_desc;
   SECURITY_STATUS sspi_status = SEC_E_OK;
+  /* we want the length of the encrypted buffer to be at least large enough
+     that it can hold all the bytes requested and some TLS record overhead. */
+  size_t min_encdata_length = len + CURL_SCHANNEL_BUFFER_FREE_SIZE;
+
+  /****************************************************************************
+   * Don't return or set connssl->recv_unrecoverable_err unless in the cleanup.
+   * The pattern for return error is set *err, optional infof, goto cleanup.
+   *
+   * Our priority is to always return as much decrypted data to the caller as
+   * possible, even if an error occurs. The state of the decrypted buffer must
+   * always be valid. Transfer of decrypted data to the caller's buffer is
+   * handled in the cleanup.
+   */
 
   infof(data, "schannel: client wants to read %zu bytes\n", len);
   *err = CURLE_OK;
 
-  /* buffer to store previously received and decrypted data */
-  if(connssl->decdata_buffer == NULL) {
-    connssl->decdata_offset = 0;
-    connssl->decdata_length = CURL_SCHANNEL_BUFFER_INIT_SIZE;
-    connssl->decdata_buffer = malloc(connssl->decdata_length);
-    if(connssl->decdata_buffer == NULL) {
-      failf(data, "schannel: unable to allocate memory");
-      *err = CURLE_OUT_OF_MEMORY;
-      return -1;
-    }
+  if(len && len <= connssl->decdata_offset) {
+    infof(data, "schannel: enough decrypted data is already available\n");
+    goto cleanup;
   }
+  else if(connssl->recv_unrecoverable_err) {
+    *err = connssl->recv_unrecoverable_err;
+    infof(data, "schannel: an unrecoverable error occurred in a prior call\n");
+    goto cleanup;
+  }
+  else if(connssl->recv_sspi_close_notify) {
+    /* once a server has indicated shutdown there is no more encrypted data */
+    infof(data, "schannel: server indicated shutdown in a prior call\n");
+    goto cleanup;
+  }
+  else if(!len) {
+    /* It's debatable what to return when !len. Regardless we can't return
+    immediately because there may be data to decrypt (in the case we want to
+    decrypt all encrypted cached data) so handle !len later in cleanup.
+    */
+    ; /* do nothing */
+  }
+  else if(!connssl->recv_connection_closed) {
+    /* increase enc buffer in order to fit the requested amount of data */
+    size = connssl->encdata_length - connssl->encdata_offset;
+    if(size < CURL_SCHANNEL_BUFFER_FREE_SIZE ||
+       connssl->encdata_length < min_encdata_length) {
+      reallocated_length = connssl->encdata_offset +
+                           CURL_SCHANNEL_BUFFER_FREE_SIZE;
+      if(reallocated_length < min_encdata_length) {
+        reallocated_length = min_encdata_length;
+      }
+      reallocated_buffer = realloc(connssl->encdata_buffer,
+                                   reallocated_length);
+      if(reallocated_buffer == NULL) {
+        *err = CURLE_OUT_OF_MEMORY;
+        failf(data, "schannel: unable to re-allocate memory");
+        goto cleanup;
+      }
 
-  /* increase buffer in order to fit the requested amount of data */
-  if(connssl->encdata_length - connssl->encdata_offset <
-     CURL_SCHANNEL_BUFFER_FREE_SIZE || connssl->encdata_length < len) {
-    /* increase internal encrypted data buffer */
-    reallocated_length = connssl->encdata_offset +
-                         CURL_SCHANNEL_BUFFER_FREE_SIZE;
-    /* make sure that the requested amount of data fits */
-    if(reallocated_length < len) {
-      reallocated_length = len;
-    }
-    reallocated_buffer = realloc(connssl->encdata_buffer,
-                                 reallocated_length);
-
-    if(reallocated_buffer == NULL) {
-      failf(data, "schannel: unable to re-allocate memory");
-      *err = CURLE_OUT_OF_MEMORY;
-      return -1;
-    }
-    else {
       connssl->encdata_buffer = reallocated_buffer;
       connssl->encdata_length = reallocated_length;
+      size = connssl->encdata_length - connssl->encdata_offset;
+      infof(data, "schannel: encdata_buffer resized %zu\n",
+            connssl->encdata_length);
     }
-  }
 
-  /* read encrypted data from socket */
-  infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
-        connssl->encdata_offset, connssl->encdata_length);
-  size = connssl->encdata_length - connssl->encdata_offset;
-  if(size > 0) {
+    infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
+          connssl->encdata_offset, connssl->encdata_length);
+
+    /* read encrypted data from socket */
     *err = Curl_read_plain(conn->sock[sockindex],
-                  (char *) (connssl->encdata_buffer + connssl->encdata_offset),
+                           (char *)(connssl->encdata_buffer +
+                                    connssl->encdata_offset),
                            size, &nread);
-    /* check for received data */
-    if(*err != CURLE_OK)
-      ret = -1;
-    else {
-      if(nread > 0)
-        /* increase encrypted data buffer offset */
-        connssl->encdata_offset += nread;
-      ret = nread;
+    if(*err) {
+      nread = -1;
+      if(*err == CURLE_AGAIN)
+        infof(data, "schannel: Curl_read_plain returned CURLE_AGAIN\n");
+      else if(*err == CURLE_RECV_ERROR)
+        infof(data, "schannel: Curl_read_plain returned CURLE_RECV_ERROR\n");
+      else
+        infof(data, "schannel: Curl_read_plain returned error %d\n", *err);
+    }
+    else if(nread == 0) {
+      connssl->recv_connection_closed = true;
+      infof(data, "schannel: server closed the connection\n");
+    }
+    else if(nread > 0) {
+      connssl->encdata_offset += (size_t)nread;
+      infof(data, "schannel: encrypted data got %zd\n", nread);
     }
-    infof(data, "schannel: encrypted data got %zd\n", ret);
   }
 
   infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
         connssl->encdata_offset, connssl->encdata_length);
 
-  /* check if we still have some data in our buffers */
+  /* decrypt loop */
   while(connssl->encdata_offset > 0 && sspi_status == SEC_E_OK &&
-        connssl->decdata_offset < len) {
+        (!len || connssl->decdata_offset < len ||
+         connssl->recv_connection_closed)) {
     /* prepare data buffer for DecryptMessage call */
     InitSecBuffer(&inbuf[0], SECBUFFER_DATA, connssl->encdata_buffer,
                   curlx_uztoul(connssl->encdata_offset));
@@ -916,24 +972,17 @@ schannel_recv(struct connectdata *conn, int sockindex,
     InitSecBuffer(&inbuf[1], SECBUFFER_EMPTY, NULL, 0);
     InitSecBuffer(&inbuf[2], SECBUFFER_EMPTY, NULL, 0);
     InitSecBuffer(&inbuf[3], SECBUFFER_EMPTY, NULL, 0);
-
     InitSecBufferDesc(&inbuf_desc, inbuf, 4);
 
-    /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375348.aspx */
+    /* https://msdn.microsoft.com/en-us/library/windows/desktop/aa375348.aspx
+       */
     sspi_status = s_pSecFn->DecryptMessage(&connssl->ctxt->ctxt_handle,
                                            &inbuf_desc, 0, NULL);
 
-    /* check if we need more data */
-    if(sspi_status == SEC_E_INCOMPLETE_MESSAGE) {
-      infof(data, "schannel: failed to decrypt data, need more data\n");
-      *err = CURLE_AGAIN;
-      return -1;
-    }
-
     /* check if everything went fine (server may want to renegotiate
        or shutdown the connection context) */
     if(sspi_status == SEC_E_OK || sspi_status == SEC_I_RENEGOTIATE ||
-                                  sspi_status == SEC_I_CONTEXT_EXPIRED) {
+       sspi_status == SEC_I_CONTEXT_EXPIRED) {
       /* check for successfully decrypted data, even before actual
          renegotiation or shutdown of the connection context */
       if(inbuf[1].BufferType == SECBUFFER_DATA) {
@@ -953,21 +1002,18 @@ schannel_recv(struct connectdata *conn, int sockindex,
           }
           reallocated_buffer = realloc(connssl->decdata_buffer,
                                        reallocated_length);
-
           if(reallocated_buffer == NULL) {
-            failf(data, "schannel: unable to re-allocate memory");
             *err = CURLE_OUT_OF_MEMORY;
-            return -1;
-          }
-          else {
-            connssl->decdata_buffer = reallocated_buffer;
-            connssl->decdata_length = reallocated_length;
+            failf(data, "schannel: unable to re-allocate memory");
+            goto cleanup;
           }
+          connssl->decdata_buffer = reallocated_buffer;
+          connssl->decdata_length = reallocated_length;
         }
 
         /* copy decrypted data to internal buffer */
         size = inbuf[1].cbBuffer;
-        if(size > 0) {
+        if(size) {
           memcpy(connssl->decdata_buffer + connssl->decdata_offset,
                  inbuf[1].pvBuffer, size);
           connssl->decdata_offset += size;
@@ -985,83 +1031,167 @@ schannel_recv(struct connectdata *conn, int sockindex,
 
         /* check if the remaining data is less than the total amount
          * and therefore begins after the already processed data
-        */
+         */
         if(connssl->encdata_offset > inbuf[3].cbBuffer) {
           /* move remaining encrypted data forward to the beginning of
              buffer */
           memmove(connssl->encdata_buffer,
                   (connssl->encdata_buffer + connssl->encdata_offset) -
-                    inbuf[3].cbBuffer, inbuf[3].cbBuffer);
+                  inbuf[3].cbBuffer, inbuf[3].cbBuffer);
           connssl->encdata_offset = inbuf[3].cbBuffer;
         }
 
         infof(data, "schannel: encrypted data cached: offset %zu length %zu\n",
               connssl->encdata_offset, connssl->encdata_length);
       }
-      else{
+      else {
         /* reset encrypted buffer offset, because there is no data remaining */
         connssl->encdata_offset = 0;
       }
-    }
-
-    /* check if server wants to renegotiate the connection context */
-    if(sspi_status == SEC_I_RENEGOTIATE) {
-      infof(data, "schannel: remote party requests SSL/TLS renegotiation\n");
 
-      /* begin renegotiation */
-      infof(data, "schannel: renegotiating SSL/TLS connection\n");
-      connssl->state = ssl_connection_negotiating;
-      connssl->connecting_state = ssl_connect_2_writing;
-      result = schannel_connect_common(conn, sockindex, FALSE, &done);
-      if(result)
-        *err = result;
-      else {
-        infof(data, "schannel: SSL/TLS connection renegotiated\n");
+      /* check if server wants to renegotiate the connection context */
+      if(sspi_status == SEC_I_RENEGOTIATE) {
+        infof(data, "schannel: remote party requests renegotiation\n");
+        if(*err && *err != CURLE_AGAIN) {
+          infof(data, "schannel: can't renogotiate, an error is pending\n");
+          goto cleanup;
+        }
+        if(connssl->encdata_offset) {
+          *err = CURLE_RECV_ERROR;
+          infof(data, "schannel: can't renogotiate, "
+                      "encrypted data available\n");
+          goto cleanup;
+        }
+        /* begin renegotiation */
+        infof(data, "schannel: renegotiating SSL/TLS connection\n");
+        connssl->state = ssl_connection_negotiating;
+        connssl->connecting_state = ssl_connect_2_writing;
+        *err = schannel_connect_common(conn, sockindex, FALSE, &done);
+        if(*err) {
+          infof(data, "schannel: renegotiation failed\n");
+          goto cleanup;
+        }
         /* now retry receiving data */
-        return schannel_recv(conn, sockindex, buf, len, err);
+        sspi_status = SEC_E_OK;
+        infof(data, "schannel: SSL/TLS connection renegotiated\n");
+        continue;
+      }
+      /* check if the server closed the connection */
+      else if(sspi_status == SEC_I_CONTEXT_EXPIRED) {
+        /* In Windows 2000 SEC_I_CONTEXT_EXPIRED (close_notify) is not
+           returned so we have to work around that in cleanup. */
+        connssl->recv_sspi_close_notify = true;
+        if(!connssl->recv_connection_closed) {
+          connssl->recv_connection_closed = true;
+          infof(data, "schannel: server closed the connection\n");
+        }
+        goto cleanup;
       }
     }
+    else if(sspi_status == SEC_E_INCOMPLETE_MESSAGE) {
+      if(!*err)
+        *err = CURLE_AGAIN;
+      infof(data, "schannel: failed to decrypt data, need more data\n");
+      goto cleanup;
+    }
+    else {
+      *err = CURLE_RECV_ERROR;
+      infof(data, "schannel: failed to read data from server: %s\n",
+            Curl_sspi_strerror(conn, sspi_status));
+      goto cleanup;
+    }
   }
 
+  infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
+        connssl->encdata_offset, connssl->encdata_length);
+
   infof(data, "schannel: decrypted data buffer: offset %zu length %zu\n",
         connssl->decdata_offset, connssl->decdata_length);
 
-  /* copy requested decrypted data to supplied buffer */
+cleanup:
+  /* Warning- there is no guarantee the encdata state is valid at this point */
+  infof(data, "schannel: schannel_recv cleanup\n");
+
+  /* Error if the connection has closed without a close_notify.
+  Behavior here is a matter of debate. We don't want to be vulnerable to a
+  truncation attack however there's some browser precedent for ignoring the
+  close_notify for compatibility reasons.
+  Additionally, Windows 2000 (v5.0) is a special case since it seems it doesn't
+  return close_notify. In that case if the connection was closed we assume it
+  was graceful (close_notify) since there doesn't seem to be a way to tell.
+  */
+  if(len && !connssl->decdata_offset && connssl->recv_connection_closed &&
+     !connssl->recv_sspi_close_notify) {
+    bool isWin2k = FALSE;
+
+#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
+    (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
+    OSVERSIONINFO osver;
+
+    memset(&osver, 0, sizeof(osver));
+    osver.dwOSVersionInfoSize = sizeof(osver);
+
+    /* Find out the Windows version */
+    if(GetVersionEx(&osver)) {
+      /* Verify the version number is 5.0 */
+      if(osver.dwMajorVersion == 5 && osver.dwMinorVersion == 0)
+        isWin2k = TRUE;
+    }
+#else
+    ULONGLONG cm;
+    OSVERSIONINFOEX osver;
+
+    memset(&osver, 0, sizeof(osver));
+    osver.dwOSVersionInfoSize = sizeof(osver);
+    osver.dwMajorVersion = 5;
+
+    cm = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_MINORVERSION, VER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
+    cm = VerSetConditionMask(cm, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL);
+
+    if(VerifyVersionInfo(&osver, (VER_MAJORVERSION | VER_MINORVERSION |
+                                  VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR),
+                         cm))
+      isWin2k = TRUE;
+#endif
+
+    if(isWin2k && sspi_status == SEC_E_OK)
+      connssl->recv_sspi_close_notify = true;
+    else {
+      *err = CURLE_RECV_ERROR;
+      infof(data, "schannel: server closed abruptly (missing close_notify)\n");
+    }
+  }
+
+  /* Any error other than CURLE_AGAIN is an unrecoverable error. */
+  if(*err && *err != CURLE_AGAIN)
+      connssl->recv_unrecoverable_err = *err;
+
   size = len < connssl->decdata_offset ? len : connssl->decdata_offset;
-  if(size > 0) {
+  if(size) {
     memcpy(buf, connssl->decdata_buffer, size);
-    ret = size;
-
-    /* move remaining decrypted data forward to the beginning of buffer */
     memmove(connssl->decdata_buffer, connssl->decdata_buffer + size,
             connssl->decdata_offset - size);
     connssl->decdata_offset -= size;
 
-    infof(data, "schannel: decrypted data returned %zd\n", size);
+    infof(data, "schannel: decrypted data returned %zu\n", size);
     infof(data, "schannel: decrypted data buffer: offset %zu length %zu\n",
           connssl->decdata_offset, connssl->decdata_length);
-  }
-  else
-    ret = 0;
-
-  /* check if the server closed the connection */
-  if(ret <= 0 && ( /* special check for Windows 2000 Professional */
-      sspi_status == SEC_I_CONTEXT_EXPIRED || (sspi_status == SEC_E_OK &&
-        connssl->encdata_offset > 0 && connssl->encdata_buffer[0] == 0x15))) {
-    infof(data, "schannel: server closed the connection\n");
     *err = CURLE_OK;
-    return 0;
+    return (ssize_t)size;
   }
 
-  /* check if something went wrong and we need to return an error */
-  if(ret < 0 && sspi_status != SEC_E_OK) {
-    infof(data, "schannel: failed to read data from server: %s\n",
-          Curl_sspi_strerror(conn, sspi_status));
-    *err = CURLE_RECV_ERROR;
-    return -1;
-  }
+  if(!*err && !connssl->recv_connection_closed)
+      *err = CURLE_AGAIN;
+
+  /* It's debatable what to return when !len. We could return whatever error we
+  got from decryption but instead we override here so the return is consistent.
+  */
+  if(!len)
+    *err = CURLE_OK;
 
-  return ret;
+  return *err ? -1 : 0;
 }
 
 CURLcode
@@ -1106,7 +1236,7 @@ void Curl_schannel_close(struct connectdata *conn, int sockindex)
 
 int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
 {
-  /* See http://msdn.microsoft.com/en-us/library/windows/desktop/aa380138.aspx
+  /* See https://msdn.microsoft.com/en-us/library/windows/desktop/aa380138.aspx
    * Shutting Down an Schannel Connection
    */
   struct SessionHandle *data = conn->data;
@@ -1121,7 +1251,7 @@ int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
     SECURITY_STATUS sspi_status;
     SecBuffer outbuf;
     SecBufferDesc outbuf_desc;
-    CURLcode code;
+    CURLcode result;
     TCHAR *host_name;
     DWORD dwshut = SCHANNEL_SHUTDOWN;
 
@@ -1144,31 +1274,31 @@ int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
     InitSecBufferDesc(&outbuf_desc, &outbuf, 1);
 
     sspi_status = s_pSecFn->InitializeSecurityContext(
-         &connssl->cred->cred_handle,
-         &connssl->ctxt->ctxt_handle,
-         host_name,
-         connssl->req_flags,
-         0,
-         0,
-         NULL,
-         0,
-         &connssl->ctxt->ctxt_handle,
-         &outbuf_desc,
-         &connssl->ret_flags,
-         &connssl->ctxt->time_stamp);
+      &connssl->cred->cred_handle,
+      &connssl->ctxt->ctxt_handle,
+      host_name,
+      connssl->req_flags,
+      0,
+      0,
+      NULL,
+      0,
+      &connssl->ctxt->ctxt_handle,
+      &outbuf_desc,
+      &connssl->ret_flags,
+      &connssl->ctxt->time_stamp);
 
     Curl_unicodefree(host_name);
 
     if((sspi_status == SEC_E_OK) || (sspi_status == SEC_I_CONTEXT_EXPIRED)) {
       /* send close message which is in output buffer */
       ssize_t written;
-      code = Curl_write_plain(conn, conn->sock[sockindex], outbuf.pvBuffer,
-                              outbuf.cbBuffer, &written);
+      result = Curl_write_plain(conn, conn->sock[sockindex], outbuf.pvBuffer,
+                                outbuf.cbBuffer, &written);
 
       s_pSecFn->FreeContextBuffer(outbuf.pvBuffer);
-      if((code != CURLE_OK) || (outbuf.cbBuffer != (size_t)written)) {
+      if((result != CURLE_OK) || (outbuf.cbBuffer != (size_t) written)) {
         infof(data, "schannel: failed to send close msg: %s"
-              " (bytes written: %zd)\n", curl_easy_strerror(code), written);
+              " (bytes written: %zd)\n", curl_easy_strerror(result), written);
       }
     }
   }
@@ -1218,9 +1348,14 @@ void Curl_schannel_session_free(void *ptr)
 {
   struct curl_schannel_cred *cred = ptr;
 
-  if(cred && cred->cached && cred->refcount == 0) {
-    s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
-    Curl_safefree(cred);
+  if(cred && cred->cached) {
+    if(cred->refcount == 0) {
+      s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
+      Curl_safefree(cred);
+    }
+    else {
+      cred->cached = FALSE;
+    }
   }
 }
 
@@ -1288,7 +1423,8 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
                                 NULL,
                                 pCertContextServer->hCertStore,
                                 &ChainPara,
-                                0,
+                                (data->set.ssl_no_revoke ? 0 :
+                                 CERT_CHAIN_REVOCATION_CHECK_CHAIN),
                                 NULL,
                                 &pChainContext)) {
       failf(data, "schannel: CertGetCertificateChain failed: %s",
@@ -1299,21 +1435,24 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
 
     if(result == CURLE_OK) {
       CERT_SIMPLE_CHAIN *pSimpleChain = pChainContext->rgpChain[0];
-      DWORD dwTrustErrorMask = ~(DWORD)(CERT_TRUST_IS_NOT_TIME_NESTED|
-                                 CERT_TRUST_REVOCATION_STATUS_UNKNOWN);
+      DWORD dwTrustErrorMask = ~(DWORD)(CERT_TRUST_IS_NOT_TIME_NESTED);
       dwTrustErrorMask &= pSimpleChain->TrustStatus.dwErrorStatus;
       if(dwTrustErrorMask) {
-        if(dwTrustErrorMask & CERT_TRUST_IS_PARTIAL_CHAIN)
+        if(dwTrustErrorMask & CERT_TRUST_IS_REVOKED)
+          failf(data, "schannel: CertGetCertificateChain trust error"
+                " CERT_TRUST_IS_REVOKED");
+        else if(dwTrustErrorMask & CERT_TRUST_IS_PARTIAL_CHAIN)
           failf(data, "schannel: CertGetCertificateChain trust error"
-                      " CERT_TRUST_IS_PARTIAL_CHAIN");
-        if(dwTrustErrorMask & CERT_TRUST_IS_UNTRUSTED_ROOT)
+                " CERT_TRUST_IS_PARTIAL_CHAIN");
+        else if(dwTrustErrorMask & CERT_TRUST_IS_UNTRUSTED_ROOT)
           failf(data, "schannel: CertGetCertificateChain trust error"
-                      " CERT_TRUST_IS_UNTRUSTED_ROOT");
-        if(dwTrustErrorMask & CERT_TRUST_IS_NOT_TIME_VALID)
+                " CERT_TRUST_IS_UNTRUSTED_ROOT");
+        else if(dwTrustErrorMask & CERT_TRUST_IS_NOT_TIME_VALID)
           failf(data, "schannel: CertGetCertificateChain trust error"
-                      " CERT_TRUST_IS_NOT_TIME_VALID");
-        failf(data, "schannel: CertGetCertificateChain error mask: 0x%08x",
-              dwTrustErrorMask);
+                " CERT_TRUST_IS_NOT_TIME_VALID");
+        else
+          failf(data, "schannel: CertGetCertificateChain error mask: 0x%08x",
+                dwTrustErrorMask);
         result = CURLE_PEER_FAILED_VERIFICATION;
       }
     }
@@ -1329,6 +1468,14 @@ static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
       cert_hostname.const_tchar_ptr = cert_hostname_buff;
       hostname.tchar_ptr = Curl_convert_UTF8_to_tchar(conn->host.name);
 
+      /* TODO: Fix this for certificates with multiple alternative names.
+      Right now we're only asking for the first preferred alternative name.
+      Instead we'd need to do all via CERT_NAME_SEARCH_ALL_NAMES_FLAG
+      (if WinCE supports that?) and run this section in a loop for each.
+      https://msdn.microsoft.com/en-us/library/windows/desktop/aa376086.aspx
+      curl: (51) schannel: CertGetNameString() certificate hostname
+      (.google.com) did not match connection (google.com)
+      */
       len = CertGetNameString(pCertContextServer,
                               CERT_NAME_DNS_TYPE,
                               0,
similarity index 94%
rename from lib/vtls/curl_schannel.h
rename to lib/vtls/schannel.h
index 11e83f9..a314b34 100644 (file)
@@ -8,11 +8,11 @@
  *                             \___|\___/|_| \_\_____|
  *
  * Copyright (C) 2012, Marc Hoersken, <info@marc-hoersken.de>, et al.
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 2012 - 2015, 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.
+ * are also available at https://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
@@ -72,6 +72,7 @@
 #define SECBUFFER_ALERT                 17
 #endif
 
+/* Both schannel buffer sizes must be > 0 */
 #define CURL_SCHANNEL_BUFFER_INIT_SIZE   4096
 #define CURL_SCHANNEL_BUFFER_FREE_SIZE   1024
 
@@ -93,6 +94,9 @@ size_t Curl_schannel_version(char *buffer, size_t size);
 
 int Curl_schannel_random(unsigned char *entropy, size_t length);
 
+/* Set the API backend definition to Schannel */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_SCHANNEL
+
 /* API setup for Schannel */
 #define curlssl_init Curl_schannel_init
 #define curlssl_cleanup Curl_schannel_cleanup
@@ -108,7 +112,6 @@ int Curl_schannel_random(unsigned char *entropy, size_t length);
 #define curlssl_version Curl_schannel_version
 #define curlssl_check_cxn(x) ((void)x, -1)
 #define curlssl_data_pending Curl_schannel_data_pending
-#define CURL_SSL_BACKEND CURLSSLBACKEND_SCHANNEL
 #define curlssl_random(x,y,z) ((void)x, Curl_schannel_random(y,z))
 
 #endif /* USE_SCHANNEL */
index a53ff4a..36465a7 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -41,7 +41,7 @@
    defines/macros #defined by the lib-specific header files.
 
    "SSL/TLS Strong Encryption: An Introduction"
-   http://httpd.apache.org/docs-2.0/ssl/ssl_intro.html
+   https://httpd.apache.org/docs/2.0/ssl/ssl_intro.html
 */
 
 #include "curl_setup.h"
 #include "sendf.h"
 #include "rawstr.h"
 #include "url.h"
-#include "curl_memory.h"
 #include "progress.h"
 #include "share.h"
 #include "timeval.h"
 #include "curl_md5.h"
 #include "warnless.h"
 #include "curl_base64.h"
+#include "curl_printf.h"
 
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
+/* The last #include files should be: */
+#include "curl_memory.h"
 #include "memdebug.h"
 
 /* convenience macro to check if this handle is using a shared SSL session */
@@ -278,10 +276,25 @@ void Curl_ssl_cleanup(void)
   }
 }
 
+static bool ssl_prefs_check(struct SessionHandle *data)
+{
+  /* check for CURLOPT_SSLVERSION invalid parameter value */
+  if((data->set.ssl.version < 0)
+     || (data->set.ssl.version >= CURL_SSLVERSION_LAST)) {
+    failf(data, "Unrecognized parameter value passed via CURLOPT_SSLVERSION");
+    return FALSE;
+  }
+  return TRUE;
+}
+
 CURLcode
 Curl_ssl_connect(struct connectdata *conn, int sockindex)
 {
   CURLcode result;
+
+  if(!ssl_prefs_check(conn->data))
+    return CURLE_SSL_CONNECT_ERROR;
+
   /* mark this is being ssl-enabled from here on. */
   conn->ssl[sockindex].use = TRUE;
   conn->ssl[sockindex].state = ssl_connection_negotiating;
@@ -299,6 +312,10 @@ Curl_ssl_connect_nonblocking(struct connectdata *conn, int sockindex,
                              bool *done)
 {
   CURLcode result;
+
+  if(!ssl_prefs_check(conn->data))
+    return CURLE_SSL_CONNECT_ERROR;
+
   /* mark this is being ssl requested from here on. */
   conn->ssl[sockindex].use = TRUE;
 #ifdef curlssl_connect_nonblocking
@@ -465,9 +482,8 @@ CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
   store->sessionid = ssl_sessionid;
   store->idsize = idsize;
   store->age = *general_age;    /* set current age */
-  if(store->name)
     /* free it if there's one already present */
-    free(store->name);
+  free(store->name);
   store->name = clone_host;               /* clone host name */
   store->remote_port = conn->remote_port; /* port number */
 
@@ -749,7 +765,8 @@ static CURLcode pubkey_pem_to_der(const char *pem,
  * Generic pinned public key check.
  */
 
-CURLcode Curl_pin_peer_pubkey(const char *pinnedpubkey,
+CURLcode Curl_pin_peer_pubkey(struct SessionHandle *data,
+                              const char *pinnedpubkey,
                               const unsigned char *pubkey, size_t pubkeylen)
 {
   FILE *fp;
@@ -758,12 +775,80 @@ CURLcode Curl_pin_peer_pubkey(const char *pinnedpubkey,
   size_t size, pem_len;
   CURLcode pem_read;
   CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;
+#ifdef curlssl_sha256sum
+  CURLcode encode;
+  size_t encodedlen, pinkeylen;
+  char *encoded, *pinkeycopy, *begin_pos, *end_pos;
+  unsigned char *sha256sumdigest = NULL;
+#endif
 
   /* if a path wasn't specified, don't pin */
   if(!pinnedpubkey)
     return CURLE_OK;
   if(!pubkey || !pubkeylen)
     return result;
+
+#ifdef curlssl_sha256sum
+  /* only do this if pinnedpubkey starts with "sha256//", length 8 */
+  if(strncmp(pinnedpubkey, "sha256//", 8) == 0) {
+    /* compute sha256sum of public key */
+    sha256sumdigest = malloc(SHA256_DIGEST_LENGTH);
+    if(!sha256sumdigest)
+      return CURLE_OUT_OF_MEMORY;
+    curlssl_sha256sum(pubkey, pubkeylen,
+                      sha256sumdigest, SHA256_DIGEST_LENGTH);
+    encode = Curl_base64_encode(data, (char *)sha256sumdigest,
+                                SHA256_DIGEST_LENGTH, &encoded, &encodedlen);
+    Curl_safefree(sha256sumdigest);
+
+    if(encode)
+      return encode;
+
+    infof(data, "\t public key hash: sha256//%s\n", encoded);
+
+    /* it starts with sha256//, copy so we can modify it */
+    pinkeylen = strlen(pinnedpubkey) + 1;
+    pinkeycopy = malloc(pinkeylen);
+    if(!pinkeycopy) {
+      Curl_safefree(encoded);
+      return CURLE_OUT_OF_MEMORY;
+    }
+    memcpy(pinkeycopy, pinnedpubkey, pinkeylen);
+    /* point begin_pos to the copy, and start extracting keys */
+    begin_pos = pinkeycopy;
+    do {
+      end_pos = strstr(begin_pos, ";sha256//");
+      /*
+       * if there is an end_pos, null terminate,
+       * otherwise it'll go to the end of the original string
+       */
+      if(end_pos)
+        end_pos[0] = '\0';
+
+      /* compare base64 sha256 digests, 8 is the length of "sha256//" */
+      if(encodedlen == strlen(begin_pos + 8) &&
+         !memcmp(encoded, begin_pos + 8, encodedlen)) {
+        result = CURLE_OK;
+        break;
+      }
+
+      /*
+       * change back the null-terminator we changed earlier,
+       * and look for next begin
+       */
+      if(end_pos) {
+        end_pos[0] = ';';
+        begin_pos = strstr(end_pos, "sha256//");
+      }
+    } while(end_pos && begin_pos);
+    Curl_safefree(encoded);
+    Curl_safefree(pinkeycopy);
+    return result;
+  }
+#else
+  (void)data;
+#endif
+
   fp = fopen(pinnedpubkey, "rb");
   if(!fp)
     return result;
@@ -830,10 +915,11 @@ CURLcode Curl_pin_peer_pubkey(const char *pinnedpubkey,
   return result;
 }
 
-void Curl_ssl_md5sum(unsigned char *tmp, /* input */
-                     size_t tmplen,
-                     unsigned char *md5sum, /* output */
-                     size_t md5len)
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+CURLcode Curl_ssl_md5sum(unsigned char *tmp, /* input */
+                         size_t tmplen,
+                         unsigned char *md5sum, /* output */
+                         size_t md5len)
 {
 #ifdef curlssl_md5sum
   curlssl_md5sum(tmp, tmplen, md5sum, md5len);
@@ -843,9 +929,37 @@ void Curl_ssl_md5sum(unsigned char *tmp, /* input */
   (void) md5len;
 
   MD5pw = Curl_MD5_init(Curl_DIGEST_MD5);
+  if(!MD5pw)
+    return CURLE_OUT_OF_MEMORY;
   Curl_MD5_update(MD5pw, tmp, curlx_uztoui(tmplen));
   Curl_MD5_final(MD5pw, md5sum);
 #endif
+  return CURLE_OK;
+}
+#endif
+
+/*
+ * Check whether the SSL backend supports the status_request extension.
+ */
+bool Curl_ssl_cert_status_request(void)
+{
+#ifdef curlssl_cert_status_request
+  return curlssl_cert_status_request();
+#else
+  return FALSE;
+#endif
+}
+
+/*
+ * Check whether the SSL backend supports false start.
+ */
+bool Curl_ssl_false_start(void)
+{
+#ifdef curlssl_false_start
+  return curlssl_false_start();
+#else
+  return FALSE;
+#endif
 }
 
 #endif /* USE_SSL */
index 19ef1cd..b6c66bf 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -30,8 +30,9 @@
 #include "polarssl.h"       /* PolarSSL versions */
 #include "axtls.h"          /* axTLS versions */
 #include "cyassl.h"         /* CyaSSL versions */
-#include "curl_schannel.h"  /* Schannel SSPI version */
-#include "curl_darwinssl.h" /* SecureTransport (Darwin) version */
+#include "schannel.h"       /* Schannel SSPI version */
+#include "darwinssl.h"      /* SecureTransport (Darwin) version */
+#include "mbedtls.h"        /* mbedTLS versions */
 
 #ifndef MAX_PINNED_PUBKEY_SIZE
 #define MAX_PINNED_PUBKEY_SIZE 1048576 /* 1MB */
 #define MD5_DIGEST_LENGTH 16 /* fixed size */
 #endif
 
-/* see http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-04 */
+#ifndef SHA256_DIGEST_LENGTH
+#define SHA256_DIGEST_LENGTH 32 /* fixed size */
+#endif
+
+/* see https://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-04 */
 #define ALPN_HTTP_1_1_LENGTH 8
 #define ALPN_HTTP_1_1 "http/1.1"
 
@@ -108,17 +113,25 @@ void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid);
    in */
 int Curl_ssl_random(struct SessionHandle *data, unsigned char *buffer,
                     size_t length);
-void Curl_ssl_md5sum(unsigned char *tmp, /* input */
-                     size_t tmplen,
-                     unsigned char *md5sum, /* output */
-                     size_t md5len);
+CURLcode Curl_ssl_md5sum(unsigned char *tmp, /* input */
+                         size_t tmplen,
+                         unsigned char *md5sum, /* output */
+                         size_t md5len);
 /* Check pinned public key. */
-CURLcode Curl_pin_peer_pubkey(const char *pinnedpubkey,
+CURLcode Curl_pin_peer_pubkey(struct SessionHandle *data,
+                              const char *pinnedpubkey,
                               const unsigned char *pubkey, size_t pubkeylen);
 
+bool Curl_ssl_cert_status_request(void);
+
+bool Curl_ssl_false_start(void);
+
 #define SSL_SHUTDOWN_TIMEOUT 10000 /* ms */
 
 #else
+/* Set the API backend definition to none */
+#define CURL_SSL_BACKEND CURLSSLBACKEND_NONE
+
 /* When SSL support is not present, just define away these function calls */
 #define Curl_ssl_init() 1
 #define Curl_ssl_cleanup() Curl_nop_stmt
@@ -139,7 +152,8 @@ CURLcode Curl_pin_peer_pubkey(const char *pinnedpubkey,
 #define Curl_ssl_connect_nonblocking(x,y,z) CURLE_NOT_BUILT_IN
 #define Curl_ssl_kill_session(x) Curl_nop_stmt
 #define Curl_ssl_random(x,y,z) ((void)x, CURLE_NOT_BUILT_IN)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_NONE
+#define Curl_ssl_cert_status_request() FALSE
+#define Curl_ssl_false_start() FALSE
 #endif
 
 #endif /* HEADER_CURL_VTLS_H */
index 8c130d3..ed06c99 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index ad77d3c..499d0a0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 7130d5e..2163073 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "wildcard.h"
 #include "llist.h"
 #include "fileinfo.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -62,15 +59,10 @@ void Curl_wildcard_dtor(struct WildcardData *wc)
     wc->filelist = NULL;
   }
 
-  if(wc->path) {
-    free(wc->path);
-    wc->path = NULL;
-  }
-
-  if(wc->pattern) {
-    free(wc->pattern);
-    wc->pattern = NULL;
-  }
+  free(wc->path);
+  wc->path = NULL;
+  free(wc->pattern);
+  wc->pattern = NULL;
 
   wc->customptr = NULL;
   wc->state = CURLWC_INIT;
index 16c80ec..7d66992 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index af08cee..dbe57c7 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -22,7 +22,8 @@
 
 #include "curl_setup.h"
 
-#if defined(USE_GSKIT) || defined(USE_NSS)
+#if defined(USE_GSKIT) || defined(USE_NSS) || defined(USE_GNUTLS) || \
+    defined(USE_CYASSL)
 
 #include <curl/curl.h>
 #include "urldata.h"
 #include "inet_pton.h"
 #include "curl_base64.h"
 #include "x509asn1.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
+#include "curl_printf.h"
 #include "curl_memory.h"
 /* The last #include file should be: */
 #include "memdebug.h"
@@ -212,7 +210,6 @@ static const char * octet2str(const char * beg, const char * end)
 }
 
 static const char * bit2str(const char * beg, const char * end)
-
 {
   /* Convert an ASN.1 bit string to a printable string.
      Return the dynamically allocated string, or NULL if an error occurs. */
@@ -301,8 +298,10 @@ utf8asn1str(char * * to, int type, const char * from, const char * end)
       case 4:
         wc = (wc << 8) | *(const unsigned char *) from++;
         wc = (wc << 8) | *(const unsigned char *) from++;
+        /* fallthrough */
       case 2:
         wc = (wc << 8) | *(const unsigned char *) from++;
+        /* fallthrough */
       default: /* case 1: */
         wc = (wc << 8) | *(const unsigned char *) from++;
       }
@@ -540,8 +539,6 @@ static const char * UTime2str(const char * beg, const char * end)
 
 const char * Curl_ASN1tostr(curl_asn1Element * elem, int type)
 {
-  static const char zero = '\0';
-
   /* Convert an ASN.1 element to a printable string.
      Return the dynamically allocated string, or NULL if an error occurs. */
 
@@ -562,7 +559,7 @@ const char * Curl_ASN1tostr(curl_asn1Element * elem, int type)
   case CURL_ASN1_OCTET_STRING:
     return octet2str(elem->beg, elem->end);
   case CURL_ASN1_NULL:
-    return strdup(&zero);
+    return strdup("");
   case CURL_ASN1_OBJECT_IDENTIFIER:
     return OID2str(elem->beg, elem->end, TRUE);
   case CURL_ASN1_UTC_TIME:
@@ -824,7 +821,7 @@ static void do_pubkey(struct SessionHandle * data, int certnum,
     /* Compute key length. */
     for(q = elem.beg; !*q && q < elem.end; q++)
       ;
-    len = (elem.end - q) * 8;
+    len = (unsigned long)((elem.end - q) * 8);
     if(len)
       for(i = *(unsigned char *) q; !(i & 0x80); i <<= 1)
         len--;
@@ -1027,7 +1024,7 @@ CURLcode Curl_extract_certinfo(struct connectdata * conn,
   return CURLE_OK;
 }
 
-#endif /* USE_GSKIT or USE_NSS */
+#endif /* USE_GSKIT or USE_NSS or USE_GNUTLS or USE_CYASSL */
 
 #if defined(USE_GSKIT)
 
@@ -1064,7 +1061,6 @@ CURLcode Curl_verifyhost(struct connectdata * conn,
   curl_asn1Element elem;
   curl_asn1Element ext;
   curl_asn1Element name;
-  int i;
   const char * p;
   const char * q;
   char * dnsname;
@@ -1113,17 +1109,13 @@ CURLcode Curl_verifyhost(struct connectdata * conn,
         q = Curl_getASN1Element(&name, q, elem.end);
         switch (name.tag) {
         case 2: /* DNS name. */
-          i = 0;
           len = utf8asn1str(&dnsname, CURL_ASN1_IA5_STRING,
                             name.beg, name.end);
-          if(len > 0)
-            if(strlen(dnsname) == (size_t) len)
-              i = Curl_cert_hostcheck((const char *) dnsname, conn->host.name);
-          if(dnsname)
-            free(dnsname);
-          if(!i)
-            return CURLE_PEER_FAILED_VERIFICATION;
-          matched = i;
+          if(len > 0 && (size_t)len == strlen(dnsname))
+            matched = Curl_cert_hostcheck(dnsname, conn->host.name);
+          else
+            matched = 0;
+          free(dnsname);
           break;
 
         case 7: /* IP address. */
index 075c424..e6a1e24 100644 (file)
@@ -8,11 +8,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -25,7 +25,8 @@
 
 #include "curl_setup.h"
 
-#if defined(USE_GSKIT) || defined(USE_NSS)
+#if defined(USE_GSKIT) || defined(USE_NSS) || defined(USE_GNUTLS) || \
+    defined(USE_CYASSL)
 
 #include "urldata.h"
 
@@ -127,5 +128,5 @@ CURLcode Curl_extract_certinfo(struct connectdata * conn, int certnum,
 CURLcode Curl_verifyhost(struct connectdata * conn,
                          const char * beg, const char * end);
 
-#endif /* USE_GSKIT or USE_NSS */
+#endif /* USE_GSKIT or USE_NSS or USE_GNUTLS or USE_CYASSL */
 #endif /* HEADER_CURL_X509ASN1_H */
index fdfaec9..feea1cd 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -31,7 +31,7 @@ supported_protocols="@SUPPORT_PROTOCOLS@"
 supported_features="@SUPPORT_FEATURES@"
 
 Name: libcurl
-URL: http://curl.haxx.se/
+URL: https://curl.haxx.se/
 Description: Library to transfer files with ftp, http, etc.
 Version: @CURLVERSION@
 Libs: -L${libdir} -lcurl
index bffda54..147d758 100644 (file)
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,9 +1,12 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+##               by inline-source v2014-01-03.01
 
-# libtool (GNU libtool) 2.4.2
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-2015 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.
 
 # 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.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# 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
-#       --no-quiet, --no-silent
-#                            print informational messages (default)
-#       --no-warn            don't display warning messages
-#       --tag=TAG            use configuration variables from tag TAG
-#   -v, --verbose            print more informational messages than default
-#       --no-verbose         don't print the extra informational messages
-#       --version            print version information
-#   -h, --help, --help-all   print short, long, or detailed 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.  When passed as first option,
-# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that.
-# 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.4.2 Debian-2.4.2-1.11
-#         automake:    $automake_version
-#         autoconf:    $autoconf_version
-#
-# Report bugs to <bug-libtool@gnu.org>.
-# GNU libtool home page: <http://www.gnu.org/software/libtool/>.
-# General help using GNU software: <http://www.gnu.org/gethelp/>.
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION="2.4.2 Debian-2.4.2-1.11"
-TIMESTAMP=""
-package_revision=1.3337
+VERSION="2.4.6 Debian-2.4.6-0.1"
+package_revision=2.4.6
 
-# Be Bourne compatible
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 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.
+
+# 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 3 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES 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, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+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
+  # 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
+  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
-
-# A function that is used when there is no print builtin or printf.
-func_fallback_echo ()
-{
-  eval 'cat <<_LTECHO_EOF
-$1
-_LTECHO_EOF'
-}
 
-# NLS nuisances: We save the old values to restore during execute mode.
-lt_user_locale=
-lt_safe_locale=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_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\"
+  eval "if test set = \"\${$_G_var+set}\"; then
+          save_$_G_var=\$$_G_var
+          $_G_var=C
+         export $_G_var
+         _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+         _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
        fi"
 done
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
 
-$lt_unset CDPATH
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp       $nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
 
-# 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"
 
 
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+    test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+    _G_progs_list=$1
+    _G_check_func=$2
+    _G_PATH=${3-"$PATH"}
+
+    _G_path_prog_max=0
+    _G_path_prog_found=false
+    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+    for _G_dir in $_G_PATH; do
+      IFS=$_G_save_IFS
+      test -z "$_G_dir" && _G_dir=.
+      for _G_prog_name in $_G_progs_list; do
+        for _exeext in '' .EXE; do
+          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+          func_executable_p "$_G_path_prog" || continue
+          case `"$_G_path_prog" --version 2>&1` in
+            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+            *)     $_G_check_func $_G_path_prog
+                  func_path_progs_result=$func_check_prog_result
+                  ;;
+          esac
+          $_G_path_prog_found && break 3
+        done
+      done
+    done
+    IFS=$_G_save_IFS
+    test -z "$func_path_progs_result" && {
+      echo "no acceptable sed could be found in \$PATH" >&2
+      exit 1
+    }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+  for _G_i in 1 2 3 4 5 6 7; do
+    _G_sed_script=$_G_sed_script$nl$_G_sed_script
+  done
+  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+  _G_sed_script=
+
+  func_check_prog_sed ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo '' >> conftest.nl
+      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+  rm -f conftest.sed
+  SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+  func_check_prog_grep ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    _G_path_prog_max=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo 'GREP' >> conftest.nl
+      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+  GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables.  These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
 
 : ${CP="cp -f"}
-test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
 : ${MAKE="make"}
 : ${MKDIR="mkdir"}
 : ${MV="mv -f"}
 : ${RM="rm -f"}
 : ${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 file append nondir_replacement
-# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
-# otherwise set result to NONDIR_REPLACEMENT.
-func_dirname ()
-{
-    func_dirname_result=`$ECHO "${1}" | $SED "$dirname"`
-    if test "X$func_dirname_result" = "X${1}"; then
-      func_dirname_result="${3}"
-    else
-      func_dirname_result="$func_dirname_result${2}"
-    fi
-} # func_dirname may be replaced by extended shell implementation
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
 
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
 
-# func_basename file
-func_basename ()
-{
-    func_basename_result=`$ECHO "${1}" | $SED "$basename"`
-} # func_basename may be replaced by extended shell implementation
+# 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.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
-# 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 "${1}" | $SED -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 "${1}" | $SED -e "$basename"`
-} # func_dirname_and_basename may be replaced by extended shell implementation
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
 
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same.  If an odd number of '\' preceded a
+# '$' in input to sed_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 '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+  s/$_G_bs4/&\\
+/g
+  s/^$_G_bs2$_G_dollar/$_G_bs&/
+  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+  s/\n//g"
 
-# 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 "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-      *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
-    esac
-} # func_stripname may be replaced by extended shell implementation
 
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
 
-# These SED scripts presuppose an absolute path with a trailing slash.
-pathcar='s,^/\([^/]*\).*$,\1,'
-pathcdr='s,^/[^/]*,,'
-removedotparts=':dotsl
-               s@/\./@/@g
-               t dotsl
-               s,/\.$,/,'
-collapseslashes='s@/\{1,\}@/@g'
-finalslash='s,/*$,/,'
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
 
-# func_normal_abspath PATH
-# Remove doubled-up and trailing slashes, "." path components,
-# and cancel out any ".." path components in PATH after making
-# it an absolute path.
-#             value returned in "$func_normal_abspath_result"
-func_normal_abspath ()
-{
-  # Start from root dir and reassemble the path.
-  func_normal_abspath_result=
-  func_normal_abspath_tpath=$1
-  func_normal_abspath_altnamespace=
-  case $func_normal_abspath_tpath in
-    "")
-      # Empty path, that just means $cwd.
-      func_stripname '' '/' "`pwd`"
-      func_normal_abspath_result=$func_stripname_result
-      return
-    ;;
-    # The next three entries are used to spot a run of precisely
-    # two leading slashes without using negated character classes;
-    # we take advantage of case's first-match behaviour.
-    ///*)
-      # Unusual form of absolute path, do nothing.
-    ;;
-    //*)
-      # Not necessarily an ordinary path; POSIX reserves leading '//'
-      # and for example Cygwin uses it to access remote file shares
-      # over CIFS/SMB, so we conserve a leading double slash if found.
-      func_normal_abspath_altnamespace=/
-    ;;
-    /*)
-      # Absolute path, do nothing.
-    ;;
-    *)
-      # Relative path, prepend $cwd.
-      func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
-    ;;
-  esac
-  # Cancel out all the simple stuff to save iterations.  We also want
-  # the path to end with a slash for ease of parsing, so make sure
-  # there is one (and only one) here.
-  func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"`
-  while :; do
-    # Processed it all yet?
-    if test "$func_normal_abspath_tpath" = / ; then
-      # If we ascended to the root using ".." the result may be empty now.
-      if test -z "$func_normal_abspath_result" ; then
-        func_normal_abspath_result=/
-      fi
-      break
-    fi
-    func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcar"`
-    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
-        -e "$pathcdr"`
-    # Figure out what to do with it
-    case $func_normal_abspath_tcomponent in
-      "")
-        # Trailing empty path component, ignore it.
-      ;;
-      ..)
-        # Parent dir; strip last assembled component from result.
-        func_dirname "$func_normal_abspath_result"
-        func_normal_abspath_result=$func_dirname_result
-      ;;
-      *)
-        # Actual path component, append it.
-        func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent
-      ;;
-    esac
-  done
-  # Restore leading double-slash if one was found on entry.
-  func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
-}
+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.
 
-# func_relative_path SRCDIR DSTDIR
-# generates a relative path from SRCDIR to DSTDIR, with a trailing
-# slash if non-empty, suitable for immediately appending a filename
-# without needing to append a separator.
-#             value returned in "$func_relative_path_result"
-func_relative_path ()
-{
-  func_relative_path_result=
-  func_normal_abspath "$1"
-  func_relative_path_tlibdir=$func_normal_abspath_result
-  func_normal_abspath "$2"
-  func_relative_path_tbindir=$func_normal_abspath_result
-
-  # Ascend the tree starting from libdir
-  while :; do
-    # check if we have found a prefix of bindir
-    case $func_relative_path_tbindir in
-      $func_relative_path_tlibdir)
-        # found an exact match
-        func_relative_path_tcancelled=
-        break
-        ;;
-      $func_relative_path_tlibdir*)
-        # found a matching prefix
-        func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
-        func_relative_path_tcancelled=$func_stripname_result
-        if test -z "$func_relative_path_result"; then
-          func_relative_path_result=.
-        fi
-        break
-        ;;
-      *)
-        func_dirname $func_relative_path_tlibdir
-        func_relative_path_tlibdir=${func_dirname_result}
-        if test "x$func_relative_path_tlibdir" = x ; then
-          # Have to descend all the way to the root!
-          func_relative_path_result=../$func_relative_path_result
-          func_relative_path_tcancelled=$func_relative_path_tbindir
-          break
-        fi
-        func_relative_path_result=../$func_relative_path_result
-        ;;
-    esac
-  done
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
 
-  # Now calculate path; take care to avoid doubling-up slashes.
-  func_stripname '' '/' "$func_relative_path_result"
-  func_relative_path_result=$func_stripname_result
-  func_stripname '/' '/' "$func_relative_path_tcancelled"
-  if test "x$func_stripname_result" != x ; then
-    func_relative_path_result=${func_relative_path_result}/${func_stripname_result}
-  fi
+# By convention, finish your script with:
+#
+#    exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
 
-  # Normalisation. If bindir is libdir, return empty string,
-  # else relative path ending with a slash; either way, target
-  # file name can be directly appended.
-  if test ! -z "$func_relative_path_result"; then
-    func_stripname './' '' "$func_relative_path_result/"
-    func_relative_path_result=$func_stripname_result
-  fi
-}
+# 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:
-func_dirname_and_basename "$progpath"
-progname=$func_basename_result
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
 
-# Make sure we have an absolute path for reexecution:
+# Make sure we have an absolute progpath for reexecution:
 case $progpath in
   [\\/]*|[A-Za-z]:\\*) ;;
   *[\\/]*)
-     progdir=$func_dirname_result
+     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
      progdir=`cd "$progdir" && pwd`
-     progpath="$progdir/$progname"
+     progpath=$progdir/$progname
      ;;
   *)
-     save_IFS="$IFS"
+     _G_IFS=$IFS
      IFS=${PATH_SEPARATOR-:}
      for progdir in $PATH; do
-       IFS="$save_IFS"
+       IFS=$_G_IFS
        test -x "$progdir/$progname" && break
      done
-     IFS="$save_IFS"
+     IFS=$_G_IFS
      test -n "$progdir" || progdir=`pwd`
-     progpath="$progdir/$progname"
+     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'
 
-# Sed substitution that turns a string into a regex matching for the
-# string literally.
-sed_make_literal_regex='s,[].[^$\\*\/],\\&,g'
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
 
-# Sed substitution that converts a w32 file name or path
-# which contains forward slashes, into one that contains
-# (escaped) backslashes.  A very naive implementation.
-lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|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"
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
 
-# 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: ${opt_mode+$opt_mode: }$*"
-}
+# Categories 'all' and 'none' are always available.  Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
 
-# func_verbose arg...
-# Echo program name prefixed message in verbose mode only.
-func_verbose ()
-{
-    $opt_verbose && func_echo ${1+"$@"}
+# By default, display warnings according to 'opt_warning_types'.  Set
+# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
 
-    # 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:
-    :
-}
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
 
-# func_echo_all arg...
-# Invoke $ECHO with all args, space-separated.
-func_echo_all ()
-{
-    $ECHO "$*"
-}
 
-# func_error arg...
-# Echo program name prefixed message to standard error.
-func_error ()
-{
-    $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2
-}
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
 
-# func_warning arg...
-# Echo program name prefixed warning message to standard error.
-func_warning ()
-{
-    $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
 
-    # bash bug again:
-    :
-}
 
-# func_fatal_error arg...
-# Echo program name prefixed message to standard error, and exit.
-func_fatal_error ()
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
 {
-    func_error ${1+"$@"}
-    exit $EXIT_FAILURE
-}
+    $debug_cmd
+
+    test -t 1 && {
+      # COLORTERM and USE_ANSI_COLORS environment variables take
+      # precedence, because most terminfo databases neglect to describe
+      # whether color sequences are supported.
+      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+      if test 1 = "$USE_ANSI_COLORS"; then
+        # Standard ANSI escape sequences
+        tc_reset='\e[0m'
+        tc_bold='\e[1m';   tc_standout='\e[7m'
+        tc_red='\e[31m';   tc_green='\e[32m'
+        tc_blue='\e[34m';  tc_cyan='\e[36m'
+      else
+        # Otherwise trust the terminfo database after all.
+        test -n "`tput sgr0 2>/dev/null`" && {
+          tc_reset=`tput sgr0`
+          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+          tc_standout=$tc_bold
+          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+        }
+      fi
+    }
 
-# 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"
+    require_term_colors=:
 }
-help="Try \`$progname --help' for more information."  ## default
 
 
-# func_grep expression filename
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+  # We should try to minimise forks, especially on Windows where they are
+  # unreasonably slow, so skip the feature probes when bash or zsh are
+  # being used:
+  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+    : ${_G_HAVE_ARITH_OP="yes"}
+    : ${_G_HAVE_XSI_OPS="yes"}
+    # The += operator was introduced in bash 3.1
+    case $BASH_VERSION in
+      [12].* | 3.0 | 3.0*) ;;
+      *)
+        : ${_G_HAVE_PLUSEQ_OP="yes"}
+        ;;
+    esac
+  fi
+
+  # _G_HAVE_PLUSEQ_OP
+  # Can be empty, in which case the shell is probed, "yes" if += is
+  # useable or anything else if it does not work.
+  test -z "$_G_HAVE_PLUSEQ_OP" \
+    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+    && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_append ()
+  {
+    $debug_cmd
+
+    eval "$1+=\$2"
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_append ()
+  {
+    $debug_cmd
+
+    eval "$1=\$$1\$2"
+  }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+  eval 'func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
+  }'
+else
+  func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
+  }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE.  For example:
+#
+#   func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+    $debug_cmd
+
+    eval _G_current_value='`$ECHO $'$1'`'
+    _G_delim=`expr "$2" : '\(.\)'`
+
+    case $_G_delim$_G_current_value$_G_delim in
+      *"$2$_G_delim"*) ;;
+      *) func_append "$@" ;;
+    esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+  test -z "$_G_HAVE_ARITH_OP" \
+    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+    && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+  eval 'func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=$(( $* ))
+  }'
+else
+  func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=`expr "$@"`
+  }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  # If this shell supports suffix pattern removal, then use it to avoid
+  # forking. Hide the definitions single quotes in case the shell chokes
+  # on unsupported syntax...
+  _b='func_basename_result=${1##*/}'
+  _d='case $1 in
+        */*) func_dirname_result=${1%/*}$2 ;;
+        *  ) func_dirname_result=$3        ;;
+      esac'
+
+else
+  # ...otherwise fall back to using sed.
+  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
+      if test "X$func_dirname_result" = "X$1"; then
+        func_dirname_result=$3
+      else
+        func_append func_dirname_result "$2"
+      fi'
+fi
+
+eval 'func_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+    $debug_cmd
+
+    '"$_d"'
+}'
+
+
+# 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"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+    '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    _G_infix=$1; shift
+    _G_indent=$_G_infix
+    _G_prefix="$progname: $_G_infix: "
+    _G_message=$*
+
+    # Strip color escape sequences before counting printable length
+    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+    do
+      test -n "$_G_tc" && {
+        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+      }
+    done
+    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
+
+    func_echo_infix_1_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_infix_1_IFS
+      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+      _G_prefix=$_G_indent
+    done
+    IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    $debug_cmd
+
+    func_error "$*"
+    exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
 # Check whether EXPRESSION matches any line of FILENAME, without output.
 func_grep ()
 {
+    $debug_cmd
+
     $GREP "$1" "$2" >/dev/null 2>&1
 }
 
 
-# func_mkdir_p directory-path
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+  test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=${#1}
+  }'
+else
+  func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+  }
+fi
+
+
+# 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=
+    $debug_cmd
 
-    if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
+    _G_directory_path=$1
+    _G_dir_list=
 
-      # Protect directory names starting with `-'
-      case $my_directory_path in
-        -*) my_directory_path="./$my_directory_path" ;;
+    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+      # Protect directory names starting with '-'
+      case $_G_directory_path in
+        -*) _G_directory_path=./$_G_directory_path ;;
       esac
 
       # While some portion of DIR does not yet exist...
-      while test ! -d "$my_directory_path"; do
+      while test ! -d "$_G_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"
+        _G_dir_list=$_G_directory_path:$_G_dir_list
 
         # If the last portion added has no slash in it, the list is done
-        case $my_directory_path in */*) ;; *) break ;; esac
+        case $_G_directory_path in */*) ;; *) break ;; esac
 
         # ...otherwise throw away the child directory and loop
-        my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"`
+        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
       done
-      my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'`
+      _G_dir_list=`$ECHO "$_G_dir_list" | $SED '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
+      func_mkdir_p_IFS=$IFS; IFS=:
+      for _G_dir in $_G_dir_list; do
+       IFS=$func_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 || :
+        $MKDIR "$_G_dir" 2>/dev/null || :
       done
-      IFS="$save_mkdir_p_IFS"
+      IFS=$func_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'"
+      test -d "$_G_directory_path" || \
+        func_fatal_error "Failed to create '$1'"
     fi
 }
 
 
-# func_mktempdir [string]
+# func_mktempdir [BASENAME]
+# -------------------------
 # 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.
+# given, BASENAME is the basename for that directory.
 func_mktempdir ()
 {
-    my_template="${TMPDIR-/tmp}/${1-$progname}"
+    $debug_cmd
+
+    _G_template=${TMPDIR-/tmp}/${1-$progname}
 
-    if test "$opt_dry_run" = ":"; then
+    if test : = "$opt_dry_run"; then
       # Return a directory name, but don't create it in dry-run mode
-      my_tmpdir="${my_template}-$$"
+      _G_tmpdir=$_G_template-$$
     else
 
       # If mktemp works, use that first and foremost
-      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
+      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
 
-      if test ! -d "$my_tmpdir"; then
+      if test ! -d "$_G_tmpdir"; then
         # Failing that, at least try and use $RANDOM to avoid a race
-        my_tmpdir="${my_template}-${RANDOM-0}$$"
+        _G_tmpdir=$_G_template-${RANDOM-0}$$
 
-        save_mktempdir_umask=`umask`
+        func_mktempdir_umask=`umask`
         umask 0077
-        $MKDIR "$my_tmpdir"
-        umask $save_mktempdir_umask
+        $MKDIR "$_G_tmpdir"
+        umask $func_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'"
+      test -d "$_G_tmpdir" || \
+        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+    fi
+
+    $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+    $debug_cmd
+
+    # These SED scripts presuppose an absolute path with a trailing slash.
+    _G_pathcar='s|^/\([^/]*\).*$|\1|'
+    _G_pathcdr='s|^/[^/]*||'
+    _G_removedotparts=':dotsl
+               s|/\./|/|g
+               t dotsl
+               s|/\.$|/|'
+    _G_collapseslashes='s|/\{1,\}|/|g'
+    _G_finalslash='s|/*$|/|'
+
+    # Start from root dir and reassemble the path.
+    func_normal_abspath_result=
+    func_normal_abspath_tpath=$1
+    func_normal_abspath_altnamespace=
+    case $func_normal_abspath_tpath in
+      "")
+        # Empty path, that just means $cwd.
+        func_stripname '' '/' "`pwd`"
+        func_normal_abspath_result=$func_stripname_result
+        return
+        ;;
+      # The next three entries are used to spot a run of precisely
+      # two leading slashes without using negated character classes;
+      # we take advantage of case's first-match behaviour.
+      ///*)
+        # Unusual form of absolute path, do nothing.
+        ;;
+      //*)
+        # Not necessarily an ordinary path; POSIX reserves leading '//'
+        # and for example Cygwin uses it to access remote file shares
+        # over CIFS/SMB, so we conserve a leading double slash if found.
+        func_normal_abspath_altnamespace=/
+        ;;
+      /*)
+        # Absolute path, do nothing.
+        ;;
+      *)
+        # Relative path, prepend $cwd.
+        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+        ;;
+    esac
+
+    # Cancel out all the simple stuff to save iterations.  We also want
+    # the path to end with a slash for ease of parsing, so make sure
+    # there is one (and only one) here.
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+    while :; do
+      # Processed it all yet?
+      if test / = "$func_normal_abspath_tpath"; then
+        # If we ascended to the root using ".." the result may be empty now.
+        if test -z "$func_normal_abspath_result"; then
+          func_normal_abspath_result=/
+        fi
+        break
+      fi
+      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcar"`
+      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcdr"`
+      # Figure out what to do with it
+      case $func_normal_abspath_tcomponent in
+        "")
+          # Trailing empty path component, ignore it.
+          ;;
+        ..)
+          # Parent dir; strip last assembled component from result.
+          func_dirname "$func_normal_abspath_result"
+          func_normal_abspath_result=$func_dirname_result
+          ;;
+        *)
+          # Actual path component, append it.
+          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+          ;;
+      esac
+    done
+    # Restore leading double-slash if one was found on entry.
+    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+    $debug_cmd
+
+    $opt_quiet || 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_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+    $debug_cmd
+
+    func_relative_path_result=
+    func_normal_abspath "$1"
+    func_relative_path_tlibdir=$func_normal_abspath_result
+    func_normal_abspath "$2"
+    func_relative_path_tbindir=$func_normal_abspath_result
+
+    # Ascend the tree starting from libdir
+    while :; do
+      # check if we have found a prefix of bindir
+      case $func_relative_path_tbindir in
+        $func_relative_path_tlibdir)
+          # found an exact match
+          func_relative_path_tcancelled=
+          break
+          ;;
+        $func_relative_path_tlibdir*)
+          # found a matching prefix
+          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+          func_relative_path_tcancelled=$func_stripname_result
+          if test -z "$func_relative_path_result"; then
+            func_relative_path_result=.
+          fi
+          break
+          ;;
+        *)
+          func_dirname $func_relative_path_tlibdir
+          func_relative_path_tlibdir=$func_dirname_result
+          if test -z "$func_relative_path_tlibdir"; then
+            # Have to descend all the way to the root!
+            func_relative_path_result=../$func_relative_path_result
+            func_relative_path_tcancelled=$func_relative_path_tbindir
+            break
+          fi
+          func_relative_path_result=../$func_relative_path_result
+          ;;
+      esac
+    done
+
+    # Now calculate path; take care to avoid doubling-up slashes.
+    func_stripname '' '/' "$func_relative_path_result"
+    func_relative_path_result=$func_stripname_result
+    func_stripname '/' '/' "$func_relative_path_tcancelled"
+    if test -n "$func_stripname_result"; then
+      func_append func_relative_path_result "/$func_stripname_result"
+    fi
+
+    # Normalisation. If bindir is libdir, return '.' else relative path.
+    if test -n "$func_relative_path_result"; then
+      func_stripname './' '' "$func_relative_path_result"
+      func_relative_path_result=$func_stripname_result
     fi
 
-    $ECHO "$my_tmpdir"
+    test -n "$func_relative_path_result" || func_relative_path_result=.
+
+    :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
+func_quote_for_eval ()
+{
+    $debug_cmd
+
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
+        *[\\\`\"\$]*)
+         _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+       func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
+
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \  ]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
+          ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+         ;;
+      esac
+
+      if test -n "$func_quote_for_eval_result"; then
+       func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
+}
+
+
+# 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 ()
+{
+    $debug_cmd
+
+    case $1 in
+      *[\\\`\"]*)
+       _G_arg=`$ECHO "$1" | $SED \
+           -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        _G_arg=$1 ;;
+    esac
+
+    case $_G_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.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        _G_arg=\"$_G_arg\"
+        ;;
+    esac
+
+    func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# 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).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_stripname ()
+  {
+    $debug_cmd
+
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary variable first.
+    func_stripname_result=$3
+    func_stripname_result=${func_stripname_result#"$1"}
+    func_stripname_result=${func_stripname_result%"$2"}
+  }'
+else
+  func_stripname ()
+  {
+    $debug_cmd
+
+    case $2 in
+      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+    esac
+  }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet 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 ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
+
+    $opt_dry_run || {
+      eval "$_G_cmd"
+      _G_status=$?
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet 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 ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    $opt_quiet || {
+      func_quote_for_expand "$_G_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    $opt_dry_run || {
+      eval "$_G_user_locale
+           $_G_cmd"
+      _G_status=$?
+      eval "$_G_safe_locale"
+      if test 0 -ne "$_G_status"; then
+       eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+    $debug_cmd
+
+    case $1 in
+    [0-9]* | *[!a-zA-Z0-9_]*)
+      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+      ;;
+    * )
+      func_tr_sh_result=$1
+      ;;
+    esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $debug_cmd
+
+    $opt_verbose && func_echo "$*"
+
+    :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+    $debug_cmd
+
+    # CATEGORY must be in the warning_categories list!
+    case " $warning_categories " in
+      *" $1 "*) ;;
+      *) func_internal_error "invalid warning category '$1'" ;;
+    esac
+
+    _G_category=$1
+    shift
+
+    case " $opt_warning_types " in
+      *" $_G_category "*) $warning_func ${1+"$@"} ;;
+    esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+    $debug_cmd
+
+    printf '%s\n%s\n' "$1" "$2" \
+      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false.  Use it like this:
+#
+#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+    $debug_cmd
+
+    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 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.
+
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+#   #!/bin/sh
+#   . relative/path/to/funclib.sh
+#   . relative/path/to/options-parser
+#   scriptversion=1.0
+#   func_options ${1+"$@"}
+#   eval set dummy "$func_options_result"; shift
+#   ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'.  Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+       --debug        enable verbose shell tracing
+   -W, --warnings=CATEGORY
+                      report the warnings falling in CATEGORY [all]
+   -v, --verbose      verbosely report processing
+       --version      print version information and exit
+   -h, --help         print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+       'all'          show all warnings
+       'none'         turn off all the warnings
+       'error'        warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+    $debug_cmd
+
+    func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not accept hook functions." ;;
+    esac
+
+    eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+    $debug_cmd
+
+    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+    esac
+
+    eval _G_hook_fns=\$$1_hooks; shift
+
+    for _G_hook in $_G_hook_fns; do
+      eval $_G_hook '"$@"'
+
+      # store returned options list back into positional
+      # parameters for next 'cmd' execution.
+      eval _G_hook_result=\$${_G_hook}_result
+      eval set dummy "$_G_hook_result"; shift
+    done
+
+    func_quote_for_eval ${1+"$@"}
+    func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  Like this:
+#
+#    my_options_prep ()
+#    {
+#        $debug_cmd
+#
+#        # Extend the existing usage message.
+#        usage_message=$usage_message'
+#      -s, --silent       don'\''t print informational messages
+#    '
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_options_prep_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_options_prep my_options_prep
+#
+#
+#    my_silent_option ()
+#    {
+#        $debug_cmd
+#
+#        # Note that for efficiency, we parse as many options as we can
+#        # recognise in a loop before passing the remainder back to the
+#        # caller on the first unrecognised argument we encounter.
+#        while test $# -gt 0; do
+#          opt=$1; shift
+#          case $opt in
+#            --silent|-s) opt_silent=: ;;
+#            # Separate non-argument short options:
+#            -s*)         func_split_short_opt "$_G_opt"
+#                         set dummy "$func_split_short_opt_name" \
+#                             "-$func_split_short_opt_arg" ${1+"$@"}
+#                         shift
+#                         ;;
+#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
+#          esac
+#        done
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_silent_option_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_parse_options my_silent_option
+#
+#
+#    my_option_validation ()
+#    {
+#        $debug_cmd
+#
+#        $opt_silent && $opt_verbose && func_fatal_help "\
+#    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_option_validation_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse.  It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+    $debug_cmd
+
+    func_options_prep ${1+"$@"}
+    eval func_parse_options \
+        ${func_options_prep_result+"$func_options_prep_result"}
+    eval func_validate_options \
+        ${func_parse_options_result+"$func_parse_options_result"}
+
+    eval func_run_hooks func_options \
+        ${func_validate_options_result+"$func_validate_options_result"}
+
+    # save modified positional parameters for caller
+    func_options_result=$func_run_hooks_result
 }
 
 
-# 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 ()
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters.  If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
 {
-    case $1 in
-      *[\\\`\"\$]*)
-       func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;;
-      *)
-        func_quote_for_eval_unquoted_result="$1" ;;
-    esac
+    $debug_cmd
 
-    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
+    # Option defaults:
+    opt_verbose=false
+    opt_warning_types=
+
+    func_run_hooks func_options_prep ${1+"$@"}
+
+    # save modified positional parameters for caller
+    func_options_prep_result=$func_run_hooks_result
 }
 
 
-# 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 ()
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
 {
-    case $1 in
-      *[\\\`\"]*)
-       my_arg=`$ECHO "$1" | $SED \
-           -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
-      *)
-        my_arg="$1" ;;
-    esac
+    $debug_cmd
 
-    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_parse_options_result=
 
-    func_quote_for_expand_result="$my_arg"
-}
+    # this just eases exit handling
+    while test $# -gt 0; do
+      # Defer to hook functions for initial option parsing, so they
+      # get priority in the event of reusing an option name.
+      func_run_hooks func_parse_options ${1+"$@"}
 
+      # Adjust func_parse_options positional parameters to match
+      eval set dummy "$func_run_hooks_result"; shift
 
-# 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-:}"
+      # Break out of the loop if we already parsed every option.
+      test $# -gt 0 || break
 
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --debug|-x)   debug_cmd='set -x'
+                      func_echo "enabling shell trace mode"
+                      $debug_cmd
+                      ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                      set dummy --warnings none ${1+"$@"}
+                      shift
+                     ;;
 
-    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
+        --warnings|--warning|-W)
+                      test $# = 0 && func_missing_arg $_G_opt && break
+                      case " $warning_categories $1" in
+                        *" $1 "*)
+                          # trailing space prevents matching last $1 above
+                          func_append_uniq opt_warning_types " $1"
+                          ;;
+                        *all)
+                          opt_warning_types=$warning_categories
+                          ;;
+                        *none)
+                          opt_warning_types=none
+                          warning_func=:
+                          ;;
+                        *error)
+                          opt_warning_types=$warning_categories
+                          warning_func=func_fatal_error
+                          ;;
+                        *)
+                          func_fatal_error \
+                             "unsupported warning category: '$1'"
+                          ;;
+                      esac
+                      shift
+                      ;;
+
+        --verbose|-v) opt_verbose=: ;;
+        --version)    func_version ;;
+        -\?|-h)       func_usage ;;
+        --help)       func_help ;;
+
+       # Separate optargs to long options (plugins may need this):
+       --*=*)        func_split_equals "$_G_opt"
+                     set dummy "$func_split_equals_lhs" \
+                          "$func_split_equals_rhs" ${1+"$@"}
+                      shift
+                      ;;
+
+       # Separate optargs to short options:
+        -W*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        # Separate non-argument short options:
+        -\?*|-h*|-v*|-x*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "-$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        --)           break ;;
+        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+      esac
+    done
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    func_parse_options_result=$func_quote_for_eval_result
 }
 
 
-# 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 ()
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
 {
-    my_cmd="$1"
-    my_fail_exp="${2-:}"
+    $debug_cmd
 
-    ${opt_silent-false} || {
-      func_quote_for_expand "$my_cmd"
-      eval "func_echo $func_quote_for_expand_result"
-    }
+    # Display all warnings if -W was not given.
+    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
 
-    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_run_hooks func_validate_options ${1+"$@"}
 
-# func_tr_sh
-# Turn $1 into a string suitable for a shell variable name.
-# Result is stored in $func_tr_sh_result.  All characters
-# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
-# if $1 begins with a digit, a '_' is prepended as well.
-func_tr_sh ()
-{
-  case $1 in
-  [0-9]* | *[!a-zA-Z0-9_]*)
-    func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'`
-    ;;
-  * )
-    func_tr_sh_result=$1
-    ;;
-  esac
+    # Bail if the options were screwed!
+    $exit_cmd $EXIT_FAILURE
+
+    # save modified positional parameters for caller
+    func_validate_options_result=$func_run_hooks_result
 }
 
 
-# func_version
-# Echo version message to standard output and exit.
-func_version ()
-{
-    $opt_debug
 
-    $SED -n '/(C)/!b go
-       :more
-       /\./!{
-         N
-         s/\n# / /
-         b more
-       }
-       :go
-       /^# '$PROGRAM' (GNU /,/# warranty; / {
-        s/^# //
-       s/^# *$//
-        s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
-        p
-     }' < "$progpath"
-     exit $?
-}
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
 
-# func_usage
-# Echo short help message to standard output and exit.
-func_usage ()
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
 {
-    $opt_debug
+    $debug_cmd
 
-    $SED -n '/^# Usage:/,/^#  *.*--help/ {
-        s/^# //
-       s/^# *$//
-       s/\$progname/'$progname'/
-       p
-    }' < "$progpath"
-    echo
-    $ECHO "run \`$progname --help | more' for full usage"
-    exit $?
+    eval \$ECHO \""Usage: $usage"\"
+    eval \$ECHO \""$fatal_help"\"
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
 }
 
-# func_help [NOEXIT]
-# Echo long help message to standard output and exit,
-# unless 'noexit' is passed as argument.
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
 func_help ()
 {
-    $opt_debug
-
-    $SED -n '/^# Usage:/,/# Report bugs to/ {
-       :print
-        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-automake} --version) 2>/dev/null |$SED 1q`"'/
-       s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/
-       p
-       d
-     }
-     /^# .* home page:/b print
-     /^# General help using/b print
-     ' < "$progpath"
-    ret=$?
-    if test -z "$1"; then
-      exit $ret
-    fi
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message"
+    exit 0
 }
 
-# func_missing_arg argname
+
+# func_missing_arg ARGNAME
+# ------------------------
 # Echo program name prefixed message to standard error and set global
 # exit_cmd.
 func_missing_arg ()
 {
-    $opt_debug
+    $debug_cmd
 
-    func_error "missing argument for $1."
+    func_error "Missing argument for '$1'."
     exit_cmd=exit
 }
 
 
-# func_split_short_opt shortopt
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=${1%%=*}
+      func_split_equals_rhs=${1#*=}
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+      func_split_equals_rhs=
+      test "x$func_split_equals_lhs" = "x$1" \
+        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+  }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
 # Set func_split_short_opt_name and func_split_short_opt_arg shell
 # variables after splitting SHORTOPT after the 2nd character.
-func_split_short_opt ()
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_arg=${1#??}
+      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+  }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
 {
-    my_sed_short_opt='1s/^\(..\).*$/\1/;q'
-    my_sed_short_rest='1s/^..\(.*\)$/\1/;q'
+    $debug_cmd
 
-    func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"`
-    func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"`
-} # func_split_short_opt may be replaced by extended shell implementation
+    func_usage_message
+    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+    exit 0
+}
 
 
-# func_split_long_opt longopt
-# Set func_split_long_opt_name and func_split_long_opt_arg shell
-# variables after splitting LONGOPT at the `=' sign.
-func_split_long_opt ()
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
 {
-    my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q'
-    my_sed_long_arg='1s/^--[^=]*=//'
+    $debug_cmd
 
-    func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"`
-    func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"`
-} # func_split_long_opt may be replaced by extended shell implementation
+    eval \$ECHO \""Usage: $usage"\"
+    echo
+    $SED -n 's|^# ||
+        /^Written by/{
+          x;p;x
+        }
+       h
+       /^Written by/q' < "$progpath"
+    echo
+    eval \$ECHO \""$usage_message"\"
+}
 
-exit_cmd=:
 
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $debug_cmd
 
+    printf '%s\n' "$progname $scriptversion"
+    $SED -n '
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
+        }
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
+        }
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
 
+    exit $?
+}
 
 
-magic="%%%MAGIC variable%%%"
-magic_exe="%%%MAGIC EXE variable%%%"
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
 
-# Global variables.
-nonopt=
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
 
-# 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_append var value
-# Append VALUE to the end of shell variable VAR.
-func_append ()
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
 {
-    eval "${1}=\$${1}\${2}"
-} # func_append may be replaced by extended shell implementation
+    $debug_cmd
 
-# func_append_quoted var value
-# Quote VALUE and append to the end of shell variable VAR, separated
-# by a space.
-func_append_quoted ()
-{
-    func_quote_for_eval "${2}"
-    eval "${1}=\$${1}\\ \$func_quote_for_eval_result"
-} # func_append_quoted may be replaced by extended shell implementation
+    _G_message=$*
 
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
 
-# func_arith arithmetic-term...
-func_arith ()
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
 {
-    func_arith_result=`expr "${@}"`
-} # func_arith may be replaced by extended shell implementation
+    $debug_cmd
 
+    $warning_func ${1+"$@"}
+}
 
-# func_len string
-# STRING may not start with a hyphen.
-func_len ()
-{
-    func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len`
-} # func_len may be replaced by extended shell implementation
 
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+       --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
+       --no-warnings        equivalent to '-Wnone'
+       --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 more informational messages than default
+       --version            print version information
+   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
+   -h, --help, --help-all   print short, long, or detailed help message
+"
 
-# func_lo2o object
-func_lo2o ()
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
 {
-    func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"`
-} # func_lo2o may be replaced by extended shell implementation
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$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.  When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+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)
+       version:        $progname (GNU libtool) 2.4.6
+       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool@gnu.org>.
+GNU libtool home page: <http://www.gnu.org/s/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+    exit 0
+}
 
 
-# func_xform libobj-or-source
-func_xform ()
-{
-    func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'`
-} # func_xform may be replaced by extended shell implementation
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_lo2o ()
+  {
+    case $1 in
+      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+      *   ) func_lo2o_result=$1               ;;
+    esac
+  }'
+
+  # func_xform LIBOBJ-OR-SOURCE
+  # ---------------------------
+  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+  # suffix to a '.lo' libtool-object suffix.
+  eval 'func_xform ()
+  {
+    func_xform_result=${1%.*}.lo
+  }'
+else
+  # ...otherwise fall back to using sed.
+  func_lo2o ()
+  {
+    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+  }
+
+  func_xform ()
+  {
+    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+  }
+fi
 
 
-# func_fatal_configuration arg...
+# 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__fatal_error ${1+"$@"} \
+      "See the $PACKAGE documentation for more information." \
+      "Fatal configuration error."
 }
 
 
 # func_config
+# -----------
 # Display the configuration for all the tags in this script.
 func_config ()
 {
@@ -915,17 +2149,19 @@ func_config ()
     exit $?
 }
 
+
 # func_features
+# -------------
 # Display the features supported by this script.
 func_features ()
 {
     echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
+    if test yes = "$build_libtool_libs"; then
       echo "enable shared libraries"
     else
       echo "disable shared libraries"
     fi
-    if test "$build_old_libs" = yes; then
+    if test yes = "$build_old_libs"; then
       echo "enable static libraries"
     else
       echo "disable static libraries"
@@ -934,314 +2170,350 @@ func_features ()
     exit $?
 }
 
-# func_enable_tag tagname
+
+# 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"
+    # 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"
+    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
+    # 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) ;;
+    # 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
+        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
 }
 
+
 # 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
+    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
+        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
+        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
+      fi
 
-    exit $EXIT_MISMATCH
-  fi
+      exit $EXIT_MISMATCH
+    fi
 }
 
 
-# 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
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+    $debug_mode
 
+    # Option defaults:
+    opt_config=false
+    opt_dlopen=
+    opt_dry_run=false
+    opt_help=false
+    opt_mode=
+    opt_preserve_dup_deps=false
+    opt_quiet=false
 
+    nonopt=
+    preserve_args=
 
-# Option defaults:
-opt_debug=:
-opt_dry_run=false
-opt_config=false
-opt_preserve_dup_deps=false
-opt_features=false
-opt_finish=false
-opt_help=false
-opt_help_all=false
-opt_silent=:
-opt_warning=:
-opt_verbose=:
-opt_silent=false
-opt_verbose=false
+    # 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
+
+    # Pass back the list of options.
+    func_quote_for_eval ${1+"$@"}
+    libtool_options_prep_result=$func_quote_for_eval_result
+}
+func_add_hook func_options_prep libtool_options_prep
 
 
-# Parse options once, thoroughly.  This comes as soon as possible in the
-# script to make things like `--version' happen as quickly as we can.
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
 {
-  # this just eases exit handling
-  while test $# -gt 0; do
-    opt="$1"
-    shift
-    case $opt in
-      --debug|-x)      opt_debug='set -x'
-                       func_echo "enabling shell trace mode"
-                       $opt_debug
-                       ;;
-      --dry-run|--dryrun|-n)
-                       opt_dry_run=:
-                       ;;
-      --config)
-                       opt_config=:
-func_config
-                       ;;
-      --dlopen|-dlopen)
-                       optarg="$1"
-                       opt_dlopen="${opt_dlopen+$opt_dlopen
-}$optarg"
-                       shift
-                       ;;
-      --preserve-dup-deps)
-                       opt_preserve_dup_deps=:
-                       ;;
-      --features)
-                       opt_features=:
-func_features
-                       ;;
-      --finish)
-                       opt_finish=:
-set dummy --mode finish ${1+"$@"}; shift
-                       ;;
-      --help)
-                       opt_help=:
-                       ;;
-      --help-all)
-                       opt_help_all=:
-opt_help=': help-all'
-                       ;;
-      --mode)
-                       test $# = 0 && func_missing_arg $opt && break
-                       optarg="$1"
-                       opt_mode="$optarg"
-case $optarg 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
-                       shift
-                       ;;
-      --no-silent|--no-quiet)
-                       opt_silent=false
-func_append preserve_args " $opt"
-                       ;;
-      --no-warning|--no-warn)
-                       opt_warning=false
-func_append preserve_args " $opt"
-                       ;;
-      --no-verbose)
-                       opt_verbose=false
-func_append preserve_args " $opt"
-                       ;;
-      --silent|--quiet)
-                       opt_silent=:
-func_append preserve_args " $opt"
-        opt_verbose=false
-                       ;;
-      --verbose|-v)
-                       opt_verbose=:
-func_append preserve_args " $opt"
-opt_silent=false
-                       ;;
-      --tag)
-                       test $# = 0 && func_missing_arg $opt && break
-                       optarg="$1"
-                       opt_tag="$optarg"
-func_append preserve_args " $opt $optarg"
-func_enable_tag "$optarg"
-                       shift
-                       ;;
-
-      -\?|-h)          func_usage                              ;;
-      --help)          func_help                               ;;
-      --version)       func_version                            ;;
-
-      # Separate optargs to long options:
-      --*=*)
-                       func_split_long_opt "$opt"
-                       set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"}
-                       shift
-                       ;;
-
-      # Separate non-argument short options:
-      -\?*|-h*|-n*|-v*)
-                       func_split_short_opt "$opt"
-                       set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"}
-                       shift
-                       ;;
-
-      --)              break                                   ;;
-      -*)              func_fatal_help "unrecognized option \`$opt'" ;;
-      *)               set dummy "$opt" ${1+"$@"};     shift; break  ;;
-    esac
-  done
+    $debug_cmd
 
-  # Validate options:
+    # Perform our own loop to consume as many options as possible in
+    # each iteration.
+    while test $# -gt 0; do
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --dry-run|--dryrun|-n)
+                        opt_dry_run=:
+                        ;;
+
+        --config)       func_config ;;
+
+        --dlopen|-dlopen)
+                        opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+                        shift
+                        ;;
+
+        --preserve-dup-deps)
+                        opt_preserve_dup_deps=: ;;
+
+        --features)     func_features ;;
+
+        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
+
+        --help)         opt_help=: ;;
+
+        --help-all)     opt_help=': help-all' ;;
+
+        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_mode=$1
+                        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 $_G_opt"
+                             exit_cmd=exit
+                             break
+                             ;;
+                        esac
+                        shift
+                        ;;
+
+        --no-silent|--no-quiet)
+                        opt_quiet=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                        opt_warning=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-verbose)
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --silent|--quiet)
+                        opt_quiet=:
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_tag=$1
+                        func_append preserve_args " $_G_opt $1"
+                        func_enable_tag "$1"
+                        shift
+                        ;;
+
+        --verbose|-v)   opt_quiet=false
+                        opt_verbose=:
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+       # An option not handled by this hook function:
+        *)             set dummy "$_G_opt" ${1+"$@"};  shift; break  ;;
+      esac
+    done
 
-  # save first non-option argument
-  if test "$#" -gt 0; then
-    nonopt="$opt"
-    shift
-  fi
 
-  # preserve --debug
-  test "$opt_debug" = : || func_append preserve_args " --debug"
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
 
-  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_preserve_dup_deps
-      ;;
-  esac
 
-  $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"
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+    # save first non-option argument
+    if test 0 -lt $#; then
+      nonopt=$1
+      shift
     fi
 
-    # Darwin sucks
-    eval std_shrext=\"$shrext_cmds\"
+    # preserve --debug
+    test : = "$debug_cmd" || func_append preserve_args " --debug"
 
-    # Only execute mode is allowed to have -dlopen flags.
-    if test -n "$opt_dlopen" && test "$opt_mode" != execute; then
-      func_error "unrecognized option \`-dlopen'"
-      $ECHO "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
+    case $host in
+      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
 
-    # Change the help message to a mode-specific one.
-    generic_help="$help"
-    help="Try \`$progname --help --mode=$opt_mode' for more information."
-  }
+    $opt_help || {
+      # Sanity checks first:
+      func_check_version_match
+
+      test yes != "$build_libtool_libs" \
+        && test yes != "$build_old_libs" \
+        && func_fatal_configuration "not configured to build any kind of library"
+
+      # Darwin sucks
+      eval std_shrext=\"$shrext_cmds\"
+
+      # Only execute mode is allowed to have -dlopen flags.
+      if test -n "$opt_dlopen" && test execute != "$opt_mode"; 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=$opt_mode' for more information."
+    }
 
-  # Bail if the options were screwed
-  $exit_cmd $EXIT_FAILURE
+    # Pass back the unparsed argument list
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
 }
+func_add_hook func_validate_options libtool_validate_options
 
 
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
 
 
 ## ----------- ##
 ##    Main.    ##
 ## ----------- ##
 
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# 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=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
 # func_lalib_p file
-# True iff FILE is a libtool `.la' library or `.lo' object 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
+      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
 }
 
 # func_lalib_unsafe_p file
-# True iff FILE is a libtool `.la' library or `.lo' object 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.
+# fatal anyway.  Works if 'file' does not exist.
 func_lalib_unsafe_p ()
 {
     lalib_p=no
@@ -1249,13 +2521,13 @@ func_lalib_unsafe_p ()
        for lalib_p_l in 1 2 3 4
        do
            read lalib_p_line
-           case "$lalib_p_line" in
+           case $lalib_p_line in
                \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
            esac
        done
        exec 0<&5 5<&-
     fi
-    test "$lalib_p" = yes
+    test yes = "$lalib_p"
 }
 
 # func_ltwrapper_script_p file
@@ -1264,7 +2536,8 @@ func_lalib_unsafe_p ()
 # determined imposters.
 func_ltwrapper_script_p ()
 {
-    func_lalib_p "$1"
+    test -f "$1" &&
+      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
 }
 
 # func_ltwrapper_executable_p file
@@ -1289,7 +2562,7 @@ func_ltwrapper_scriptname ()
 {
     func_dirname_and_basename "$1" "" "."
     func_stripname '' '.exe' "$func_basename_result"
-    func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
+    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
 }
 
 # func_ltwrapper_p file
@@ -1308,11 +2581,13 @@ func_ltwrapper_p ()
 # FAIL_CMD may read-access the current command in variable CMD!
 func_execute_cmds ()
 {
-    $opt_debug
+    $debug_cmd
+
     save_ifs=$IFS; IFS='~'
     for cmd in $1; do
-      IFS=$save_ifs
+      IFS=$sp$nl
       eval cmd=\"$cmd\"
+      IFS=$save_ifs
       func_show_eval "$cmd" "${2-:}"
     done
     IFS=$save_ifs
@@ -1324,10 +2599,11 @@ func_execute_cmds ()
 # 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.
+# 'FILE.' does not work on cygwin managed mounts.
 func_source ()
 {
-    $opt_debug
+    $debug_cmd
+
     case $1 in
     */* | *\\*)        . "$1" ;;
     *)         . "./$1" ;;
@@ -1354,10 +2630,10 @@ func_resolve_sysroot ()
 # store the result into func_replace_sysroot_result.
 func_replace_sysroot ()
 {
-  case "$lt_sysroot:$1" in
+  case $lt_sysroot:$1 in
   ?*:"$lt_sysroot"*)
     func_stripname "$lt_sysroot" '' "$1"
-    func_replace_sysroot_result="=$func_stripname_result"
+    func_replace_sysroot_result='='$func_stripname_result
     ;;
   *)
     # Including no sysroot.
@@ -1374,7 +2650,8 @@ func_replace_sysroot ()
 # arg is usually of the form 'gcc ...'
 func_infer_tag ()
 {
-    $opt_debug
+    $debug_cmd
+
     if test -n "$available_tags" && test -z "$tagname"; then
       CC_quoted=
       for arg in $CC; do
@@ -1393,7 +2670,7 @@ func_infer_tag ()
        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`"
+           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.
@@ -1418,7 +2695,7 @@ func_infer_tag ()
        # 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'"
+         func_fatal_error "specify a tag with '--tag'"
 #      else
 #        func_verbose "using $tagname tagged configuration"
        fi
@@ -1434,15 +2711,15 @@ func_infer_tag ()
 # 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}\'
+    write_libobj=$1
+    if test yes = "$build_libtool_libs"; then
+      write_lobj=\'$2\'
     else
       write_lobj=none
     fi
 
-    if test "$build_old_libs" = yes; then
-      write_oldobj=\'${3}\'
+    if test yes = "$build_old_libs"; then
+      write_oldobj=\'$3\'
     else
       write_oldobj=none
     fi
@@ -1450,7 +2727,7 @@ func_write_libtool_object ()
     $opt_dry_run || {
       cat >${write_libobj}T <<EOF
 # $write_libobj - a libtool object file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
@@ -1462,7 +2739,7 @@ pic_object=$write_lobj
 non_pic_object=$write_oldobj
 
 EOF
-      $MV "${write_libobj}T" "${write_libobj}"
+      $MV "${write_libobj}T" "$write_libobj"
     }
 }
 
@@ -1482,8 +2759,9 @@ EOF
 # be empty on error (or when ARG is empty)
 func_convert_core_file_wine_to_w32 ()
 {
-  $opt_debug
-  func_convert_core_file_wine_to_w32_result="$1"
+  $debug_cmd
+
+  func_convert_core_file_wine_to_w32_result=$1
   if test -n "$1"; then
     # 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
@@ -1491,9 +2769,9 @@ func_convert_core_file_wine_to_w32 ()
     # *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_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
-    if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then
+    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
       func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
-        $SED -e "$lt_sed_naive_backslashify"`
+        $SED -e "$sed_naive_backslashify"`
     else
       func_convert_core_file_wine_to_w32_result=
     fi
@@ -1514,18 +2792,19 @@ func_convert_core_file_wine_to_w32 ()
 # are convertible, then the result may be empty.
 func_convert_core_path_wine_to_w32 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # unfortunately, winepath doesn't convert paths, only file names
-  func_convert_core_path_wine_to_w32_result=""
+  func_convert_core_path_wine_to_w32_result=
   if test -n "$1"; then
     oldIFS=$IFS
     IFS=:
     for func_convert_core_path_wine_to_w32_f in $1; do
       IFS=$oldIFS
       func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
-      if test -n "$func_convert_core_file_wine_to_w32_result" ; then
+      if test -n "$func_convert_core_file_wine_to_w32_result"; then
         if test -z "$func_convert_core_path_wine_to_w32_result"; then
-          func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result"
+          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
         else
           func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
         fi
@@ -1554,7 +2833,8 @@ func_convert_core_path_wine_to_w32 ()
 # environment variable; do not put it in $PATH.
 func_cygpath ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
     func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
     if test "$?" -ne 0; then
@@ -1563,7 +2843,7 @@ func_cygpath ()
     fi
   else
     func_cygpath_result=
-    func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'"
+    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
   fi
 }
 #end: func_cygpath
@@ -1574,10 +2854,11 @@ func_cygpath ()
 # result in func_convert_core_msys_to_w32_result.
 func_convert_core_msys_to_w32 ()
 {
-  $opt_debug
+  $debug_cmd
+
   # awkward: cmd appends spaces to result
   func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
-    $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"`
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
 }
 #end: func_convert_core_msys_to_w32
 
@@ -1588,13 +2869,14 @@ func_convert_core_msys_to_w32 ()
 # func_to_host_file_result to ARG1).
 func_convert_file_check ()
 {
-  $opt_debug
-  if test -z "$2" && test -n "$1" ; then
+  $debug_cmd
+
+  if test -z "$2" && test -n "$1"; then
     func_error "Could not determine host file name corresponding to"
-    func_error "  \`$1'"
+    func_error "  '$1'"
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback:
-    func_to_host_file_result="$1"
+    func_to_host_file_result=$1
   fi
 }
 # end func_convert_file_check
@@ -1606,10 +2888,11 @@ func_convert_file_check ()
 # func_to_host_file_result to a simplistic fallback value (see below).
 func_convert_path_check ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -z "$4" && test -n "$3"; then
     func_error "Could not determine the host path corresponding to"
-    func_error "  \`$3'"
+    func_error "  '$3'"
     func_error "Continuing, but uninstalled executables may not work."
     # Fallback.  This is a deliberately simplistic "conversion" and
     # should not be "improved".  See libtool.info.
@@ -1618,7 +2901,7 @@ func_convert_path_check ()
       func_to_host_path_result=`echo "$3" |
         $SED -e "$lt_replace_pathsep_chars"`
     else
-      func_to_host_path_result="$3"
+      func_to_host_path_result=$3
     fi
   fi
 }
@@ -1630,9 +2913,10 @@ func_convert_path_check ()
 # and appending REPL if ORIG matches BACKPAT.
 func_convert_path_front_back_pathsep ()
 {
-  $opt_debug
+  $debug_cmd
+
   case $4 in
-  $1 ) func_to_host_path_result="$3$func_to_host_path_result"
+  $1 ) func_to_host_path_result=$3$func_to_host_path_result
     ;;
   esac
   case $4 in
@@ -1646,7 +2930,7 @@ func_convert_path_front_back_pathsep ()
 ##################################################
 # $build to $host FILE NAME CONVERSION FUNCTIONS #
 ##################################################
-# invoked via `$to_host_file_cmd ARG'
+# invoked via '$to_host_file_cmd ARG'
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # Result will be available in $func_to_host_file_result.
@@ -1657,7 +2941,8 @@ func_convert_path_front_back_pathsep ()
 # in func_to_host_file_result.
 func_to_host_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   $to_host_file_cmd "$1"
 }
 # end func_to_host_file
@@ -1669,7 +2954,8 @@ func_to_host_file ()
 # in (the comma separated) LAZY, no conversion takes place.
 func_to_tool_file ()
 {
-  $opt_debug
+  $debug_cmd
+
   case ,$2, in
     *,"$to_tool_file_cmd",*)
       func_to_tool_file_result=$1
@@ -1687,7 +2973,7 @@ func_to_tool_file ()
 # Copy ARG to func_to_host_file_result.
 func_convert_file_noop ()
 {
-  func_to_host_file_result="$1"
+  func_to_host_file_result=$1
 }
 # end func_convert_file_noop
 
@@ -1698,11 +2984,12 @@ func_convert_file_noop ()
 # func_to_host_file_result.
 func_convert_file_msys_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result=$func_convert_core_msys_to_w32_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1714,8 +3001,9 @@ func_convert_file_msys_to_w32 ()
 # func_to_host_file_result.
 func_convert_file_cygwin_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
     # LT_CYGPATH in this case.
@@ -1731,11 +3019,12 @@ func_convert_file_cygwin_to_w32 ()
 # and a working winepath. Returns result in func_to_host_file_result.
 func_convert_file_nix_to_w32 ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_file_wine_to_w32 "$1"
-    func_to_host_file_result="$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1747,12 +3036,13 @@ func_convert_file_nix_to_w32 ()
 # Returns result in func_to_host_file_result.
 func_convert_file_msys_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     func_convert_core_msys_to_w32 "$1"
     func_cygpath -u "$func_convert_core_msys_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
+    func_to_host_file_result=$func_cygpath_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1765,13 +3055,14 @@ func_convert_file_msys_to_cygwin ()
 # in func_to_host_file_result.
 func_convert_file_nix_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_file_result="$1"
+  $debug_cmd
+
+  func_to_host_file_result=$1
   if test -n "$1"; then
     # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
     func_convert_core_file_wine_to_w32 "$1"
     func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
-    func_to_host_file_result="$func_cygpath_result"
+    func_to_host_file_result=$func_cygpath_result
   fi
   func_convert_file_check "$1" "$func_to_host_file_result"
 }
@@ -1781,7 +3072,7 @@ func_convert_file_nix_to_cygwin ()
 #############################################
 # $build to $host PATH CONVERSION FUNCTIONS #
 #############################################
-# invoked via `$to_host_path_cmd ARG'
+# invoked via '$to_host_path_cmd ARG'
 #
 # In each case, ARG is the path to be converted from $build to $host format.
 # The result will be available in $func_to_host_path_result.
@@ -1805,10 +3096,11 @@ func_convert_file_nix_to_cygwin ()
 to_host_path_cmd=
 func_init_to_host_path_cmd ()
 {
-  $opt_debug
+  $debug_cmd
+
   if test -z "$to_host_path_cmd"; then
     func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
-    to_host_path_cmd="func_convert_path_${func_stripname_result}"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
   fi
 }
 
@@ -1818,7 +3110,8 @@ func_init_to_host_path_cmd ()
 # in func_to_host_path_result.
 func_to_host_path ()
 {
-  $opt_debug
+  $debug_cmd
+
   func_init_to_host_path_cmd
   $to_host_path_cmd "$1"
 }
@@ -1829,7 +3122,7 @@ func_to_host_path ()
 # Copy ARG to func_to_host_path_result.
 func_convert_path_noop ()
 {
-  func_to_host_path_result="$1"
+  func_to_host_path_result=$1
 }
 # end func_convert_path_noop
 
@@ -1840,8 +3133,9 @@ func_convert_path_noop ()
 # func_to_host_path_result.
 func_convert_path_msys_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from ARG.  MSYS
     # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
@@ -1849,7 +3143,7 @@ func_convert_path_msys_to_w32 ()
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result=$func_convert_core_msys_to_w32_result
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
@@ -1863,8 +3157,9 @@ func_convert_path_msys_to_w32 ()
 # func_to_host_file_result.
 func_convert_path_cygwin_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
@@ -1883,14 +3178,15 @@ func_convert_path_cygwin_to_w32 ()
 # a working winepath.  Returns result in func_to_host_file_result.
 func_convert_path_nix_to_w32 ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
-    func_to_host_path_result="$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
     func_convert_path_check : ";" \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
@@ -1904,15 +3200,16 @@ func_convert_path_nix_to_w32 ()
 # Returns result in func_to_host_file_result.
 func_convert_path_msys_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # See func_convert_path_msys_to_w32:
     func_stripname : : "$1"
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
+    func_to_host_path_result=$func_cygpath_result
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
@@ -1927,8 +3224,9 @@ func_convert_path_msys_to_cygwin ()
 # func_to_host_file_result.
 func_convert_path_nix_to_cygwin ()
 {
-  $opt_debug
-  func_to_host_path_result="$1"
+  $debug_cmd
+
+  func_to_host_path_result=$1
   if test -n "$1"; then
     # Remove leading and trailing path separator characters from
     # ARG. msys behavior is inconsistent here, cygpath turns them
@@ -1937,7 +3235,7 @@ func_convert_path_nix_to_cygwin ()
     func_to_host_path_tmp1=$func_stripname_result
     func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
     func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
-    func_to_host_path_result="$func_cygpath_result"
+    func_to_host_path_result=$func_cygpath_result
     func_convert_path_check : : \
       "$func_to_host_path_tmp1" "$func_to_host_path_result"
     func_convert_path_front_back_pathsep ":*" "*:" : "$1"
@@ -1946,13 +3244,31 @@ func_convert_path_nix_to_cygwin ()
 # end func_convert_path_nix_to_cygwin
 
 
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+  $debug_cmd
+
+  func_dll_def_p_tmp=`$SED -n \
+    -e 's/^[    ]*//' \
+    -e '/^\(;.*\)*$/d' \
+    -e 's/^\(EXPORTS\|LIBRARY\)\([      ].*\)*$/DEF/p' \
+    -e q \
+    "$1"`
+  test DEF = "$func_dll_def_p_tmp"
+}
+
+
 # func_mode_compile arg...
 func_mode_compile ()
 {
-    $opt_debug
+    $debug_cmd
+
     # Get the compilation command and the source file.
     base_compile=
-    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
+    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
     suppress_opt=yes
     suppress_output=
     arg_mode=normal
@@ -1965,12 +3281,12 @@ func_mode_compile ()
       case $arg_mode in
       arg  )
        # do not "continue".  Instead, add this to base_compile
-       lastarg="$arg"
+       lastarg=$arg
        arg_mode=normal
        ;;
 
       target )
-       libobj="$arg"
+       libobj=$arg
        arg_mode=normal
        continue
        ;;
@@ -1980,7 +3296,7 @@ func_mode_compile ()
        case $arg in
        -o)
          test -n "$libobj" && \
-           func_fatal_error "you cannot specify \`-o' more than once"
+           func_fatal_error "you cannot specify '-o' more than once"
          arg_mode=target
          continue
          ;;
@@ -2009,12 +3325,12 @@ func_mode_compile ()
          func_stripname '-Wc,' '' "$arg"
          args=$func_stripname_result
          lastarg=
-         save_ifs="$IFS"; IFS=','
+         save_ifs=$IFS; IFS=,
          for arg in $args; do
-           IFS="$save_ifs"
+           IFS=$save_ifs
            func_append_quoted lastarg "$arg"
          done
-         IFS="$save_ifs"
+         IFS=$save_ifs
          func_stripname ' ' '' "$lastarg"
          lastarg=$func_stripname_result
 
@@ -2027,8 +3343,8 @@ func_mode_compile ()
          # Accept the current argument as the source file.
          # The previous "srcfile" becomes the current argument.
          #
-         lastarg="$srcfile"
-         srcfile="$arg"
+         lastarg=$srcfile
+         srcfile=$arg
          ;;
        esac  #  case $arg
        ;;
@@ -2043,13 +3359,13 @@ func_mode_compile ()
       func_fatal_error "you must specify an argument for -Xcompile"
       ;;
     target)
-      func_fatal_error "you must specify a target with \`-o'"
+      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"
+       libobj=$func_basename_result
       }
       ;;
     esac
@@ -2069,7 +3385,7 @@ func_mode_compile ()
     case $libobj in
     *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
     *)
-      func_fatal_error "cannot determine name of library object from \`$libobj'"
+      func_fatal_error "cannot determine name of library object from '$libobj'"
       ;;
     esac
 
@@ -2078,8 +3394,8 @@ func_mode_compile ()
     for arg in $later; do
       case $arg in
       -shared)
-       test "$build_libtool_libs" != yes && \
-         func_fatal_configuration "can not build a shared library"
+       test yes = "$build_libtool_libs" \
+         || func_fatal_configuration "cannot build a shared library"
        build_old_libs=no
        continue
        ;;
@@ -2105,17 +3421,17 @@ func_mode_compile ()
     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_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
+    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
+    if test yes = "$build_old_libs"; then
       removelist="$obj $lobj $libobj ${libobj}T"
     else
       removelist="$lobj $libobj ${libobj}T"
@@ -2127,16 +3443,16 @@ func_mode_compile ()
       pic_mode=default
       ;;
     esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
+    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; 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 "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
+    if test no = "$compiler_c_o"; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+      lockfile=$output_obj.lock
     else
       output_obj=
       need_locks=no
@@ -2145,12 +3461,12 @@ func_mode_compile ()
 
     # 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
+    if test yes = "$need_locks"; 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
+    elif test warn = "$need_locks"; then
       if test -f "$lockfile"; then
        $ECHO "\
 *** ERROR, $lockfile exists and contains:
@@ -2158,7 +3474,7 @@ func_mode_compile ()
 
 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
+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."
@@ -2180,11 +3496,11 @@ compiler."
     qsrcfile=$func_quote_for_eval_result
 
     # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
+    if test yes = "$build_libtool_libs"; then
       # Without this assignment, base_compile gets emptied.
       fbsd_hideous_sh_bug=$base_compile
 
-      if test "$pic_mode" != no; then
+      if test no != "$pic_mode"; then
        command="$base_compile $qsrcfile $pic_flag"
       else
        # Don't build PIC code
@@ -2201,7 +3517,7 @@ compiler."
       func_show_eval_locale "$command" \
           'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
         test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
        $ECHO "\
 *** ERROR, $lockfile contains:
@@ -2212,7 +3528,7 @@ $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
+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."
@@ -2228,20 +3544,20 @@ compiler."
       fi
 
       # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
+      if test yes = "$suppress_opt"; 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
+    if test yes = "$build_old_libs"; then
+      if test yes != "$pic_mode"; 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
+      if test yes = "$compiler_c_o"; then
        func_append command " -o $obj"
       fi
 
@@ -2250,7 +3566,7 @@ compiler."
       func_show_eval_locale "$command" \
         '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
 
-      if test "$need_locks" = warn &&
+      if test warn = "$need_locks" &&
         test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
        $ECHO "\
 *** ERROR, $lockfile contains:
@@ -2261,7 +3577,7 @@ $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
+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."
@@ -2281,7 +3597,7 @@ compiler."
       func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
 
       # Unlock the critical section if it was locked
-      if test "$need_locks" != no; then
+      if test no != "$need_locks"; then
        removelist=$lockfile
         $RM "$lockfile"
       fi
@@ -2291,7 +3607,7 @@ compiler."
 }
 
 $opt_help || {
-  test "$opt_mode" = compile && func_mode_compile ${1+"$@"}
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
 }
 
 func_mode_help ()
@@ -2311,7 +3627,7 @@ func_mode_help ()
 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
+(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
@@ -2330,16 +3646,16 @@ This mode accepts the following additional options:
   -no-suppress      do not suppress compiler output for multiple passes
   -prefer-pic       try to build PIC objects only
   -prefer-non-pic   try to build 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
+  -shared           do not build a '.o' file suitable for static linking
+  -static           only build a '.o' file suitable for static linking
   -Wc,FLAG          pass FLAG directly to the compiler
 
-COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+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'."
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
         ;;
 
       execute)
@@ -2352,7 +3668,7 @@ 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'
+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
@@ -2371,7 +3687,7 @@ 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."
+the '--dry-run' option if you just want to see what would be executed."
         ;;
 
       install)
@@ -2381,7 +3697,7 @@ the \`--dry-run' option if you just want to see what would be executed."
 Install executables or libraries.
 
 INSTALL-COMMAND is the installation command.  The first component should be
-either the \`install' or \`cp' program.
+either the 'install' or 'cp' program.
 
 The following components of INSTALL-COMMAND are treated specially:
 
@@ -2407,7 +3723,7 @@ The following components of LINK-COMMAND are treated specially:
   -avoid-version    do not add a version suffix if possible
   -bindir BINDIR    specify path to binaries directory (for systems where
                     libraries must be found in the PATH setting at runtime)
-  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -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
@@ -2421,7 +3737,8 @@ The following components of LINK-COMMAND are treated specially:
   -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
+  -objectlist FILE  use a list of object files found in FILE to specify objects
+  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
   -precious-files-regex REGEX
                     don't remove output files matching REGEX
   -release RELEASE  specify package release information
@@ -2441,20 +3758,20 @@ The following components of LINK-COMMAND are treated specially:
   -Xlinker FLAG     pass linker-specific FLAG directly to the linker
   -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
 
-All other options (arguments beginning with \`-') are ignored.
+All other options (arguments beginning with '-') are ignored.
 
-Every other argument is treated as a filename.  Files ending in \`.la' are
+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
+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 '.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
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
 is created, otherwise an executable program is created."
         ;;
 
@@ -2465,7 +3782,7 @@ is created, otherwise an executable program is created."
 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
+(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.
@@ -2473,17 +3790,17 @@ Otherwise, only FILE itself is deleted using RM."
         ;;
 
       *)
-        func_fatal_help "invalid operation mode \`$opt_mode'"
+        func_fatal_help "invalid operation mode '$opt_mode'"
         ;;
     esac
 
     echo
-    $ECHO "Try \`$progname --help' for more information about other modes."
+    $ECHO "Try '$progname --help' for more information about other modes."
 }
 
 # Now that we've collected a possible --mode arg, show help if necessary
 if $opt_help; then
-  if test "$opt_help" = :; then
+  if test : = "$opt_help"; then
     func_mode_help
   else
     {
@@ -2491,7 +3808,7 @@ if $opt_help; then
       for opt_mode in compile link execute install finish uninstall clean; do
        func_mode_help
       done
-    } | sed -n '1p; 2,$s/^Usage:/  or: /p'
+    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
     {
       func_help noexit
       for opt_mode in compile link execute install finish uninstall clean; do
@@ -2499,7 +3816,7 @@ if $opt_help; then
        func_mode_help
       done
     } |
-    sed '1d
+    $SED '1d
       /^When reporting/,/^Report/{
        H
        d
@@ -2516,16 +3833,17 @@ fi
 # func_mode_execute arg...
 func_mode_execute ()
 {
-    $opt_debug
+    $debug_cmd
+
     # The first argument is the command name.
-    cmd="$nonopt"
+    cmd=$nonopt
     test -z "$cmd" && \
       func_fatal_help "you must specify a COMMAND"
 
     # Handle -dlopen flags immediately.
     for file in $opt_dlopen; do
       test -f "$file" \
-       || func_fatal_help "\`$file' is not a file"
+       || func_fatal_help "'$file' is not a file"
 
       dir=
       case $file in
@@ -2535,7 +3853,7 @@ func_mode_execute ()
 
        # 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"
+         || func_fatal_help "'$lib' is not a valid libtool archive"
 
        # Read the libtool library.
        dlname=
@@ -2546,18 +3864,18 @@ func_mode_execute ()
        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'"
+           func_warning "'$file' was not linked with '-export-dynamic'"
          continue
        fi
 
        func_dirname "$file" "" "."
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
 
        if test -f "$dir/$objdir/$dlname"; then
          func_append dir "/$objdir"
        else
          if test ! -f "$dir/$dlname"; then
-           func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
+           func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
          fi
        fi
        ;;
@@ -2565,18 +3883,18 @@ func_mode_execute ()
       *.lo)
        # Just add the directory containing the .lo file.
        func_dirname "$file" "" "."
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
        ;;
 
       *)
-       func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
+       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"
+      test -n "$absdir" && dir=$absdir
 
       # Now add the directory to shlibpath_var.
       if eval "test -z \"\$$shlibpath_var\""; then
@@ -2588,7 +3906,7 @@ func_mode_execute ()
 
     # This variable tells wrapper scripts just to set shlibpath_var
     # rather than running their programs.
-    libtool_execute_magic="$magic"
+    libtool_execute_magic=$magic
 
     # Check if any of the arguments is a wrapper script.
     args=
@@ -2601,12 +3919,12 @@ func_mode_execute ()
        if func_ltwrapper_script_p "$file"; then
          func_source "$file"
          # Transform arg to wrapped name.
-         file="$progdir/$program"
+         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"
+         file=$progdir/$program
        fi
        ;;
       esac
@@ -2614,7 +3932,15 @@ func_mode_execute ()
       func_append_quoted args "$file"
     done
 
-    if test "X$opt_dry_run" = Xfalse; then
+    if $opt_dry_run; then
+      # 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
+    else
       if test -n "$shlibpath_var"; then
        # Export the shlibpath_var.
        eval "export $shlibpath_var"
@@ -2631,25 +3957,18 @@ func_mode_execute ()
       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
+      exec_cmd=\$cmd$args
     fi
 }
 
-test "$opt_mode" = execute && func_mode_execute ${1+"$@"}
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
 
 
 # func_mode_finish arg...
 func_mode_finish ()
 {
-    $opt_debug
+    $debug_cmd
+
     libs=
     libdirs=
     admincmds=
@@ -2663,11 +3982,11 @@ func_mode_finish ()
        if func_lalib_unsafe_p "$opt"; then
          func_append libs " $opt"
        else
-         func_warning "\`$opt' is not a valid libtool archive"
+         func_warning "'$opt' is not a valid libtool archive"
        fi
 
       else
-       func_fatal_error "invalid argument \`$opt'"
+       func_fatal_error "invalid argument '$opt'"
       fi
     done
 
@@ -2682,12 +4001,12 @@ func_mode_finish ()
       # Remove sysroot references
       if $opt_dry_run; then
         for lib in $libs; do
-          echo "removing references to $lt_sysroot and \`=' prefixes from $lib"
+          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
         done
       else
         tmpdir=`func_mktempdir`
         for lib in $libs; do
-         sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+         $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
            > $tmpdir/tmp-la
          mv -f $tmpdir/tmp-la $lib
        done
@@ -2712,7 +4031,7 @@ func_mode_finish ()
     fi
 
     # Exit here if they wanted silent mode.
-    $opt_silent && exit $EXIT_SUCCESS
+    $opt_quiet && exit $EXIT_SUCCESS
 
     if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
       echo "----------------------------------------------------------------------"
@@ -2723,27 +4042,27 @@ func_mode_finish ()
       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 "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 "   - 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 "   - 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"
+       $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'"
+       echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
       fi
       echo
 
@@ -2762,18 +4081,20 @@ func_mode_finish ()
     exit $EXIT_SUCCESS
 }
 
-test "$opt_mode" = finish && func_mode_finish ${1+"$@"}
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
 
 
 # func_mode_install arg...
 func_mode_install ()
 {
-    $opt_debug
+    $debug_cmd
+
     # 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 ||
+    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
        # Allow the use of GNU shtool's install command.
-       case $nonopt in *shtool*) :;; *) false;; esac; then
+       case $nonopt in *shtool*) :;; *) false;; esac
+    then
       # Aesthetically quote it.
       func_quote_for_eval "$nonopt"
       install_prog="$func_quote_for_eval_result "
@@ -2800,7 +4121,7 @@ func_mode_install ()
     opts=
     prev=
     install_type=
-    isdir=no
+    isdir=false
     stripme=
     no_mode=:
     for arg
@@ -2813,7 +4134,7 @@ func_mode_install ()
       fi
 
       case $arg in
-      -d) isdir=yes ;;
+      -d) isdir=: ;;
       -f)
        if $install_cp; then :; else
          prev=$arg
@@ -2831,7 +4152,7 @@ func_mode_install ()
       *)
        # If the previous option needed an argument, then skip it.
        if test -n "$prev"; then
-         if test "x$prev" = x-m && test -n "$install_override_mode"; then
+         if test X-m = "X$prev" && test -n "$install_override_mode"; then
            arg2=$install_override_mode
            no_mode=false
          fi
@@ -2856,7 +4177,7 @@ func_mode_install ()
       func_fatal_help "you must specify an install program"
 
     test -n "$prev" && \
-      func_fatal_help "the \`$prev' option requires an argument"
+      func_fatal_help "the '$prev' option requires an argument"
 
     if test -n "$install_override_mode" && $no_mode; then
       if $install_cp; then :; else
@@ -2878,19 +4199,19 @@ func_mode_install ()
     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"
+    test -d "$dest" && isdir=:
+    if $isdir; then
+      destdir=$dest
       destname=
     else
       func_dirname_and_basename "$dest" "" "."
-      destdir="$func_dirname_result"
-      destname="$func_basename_result"
+      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"
+       func_fatal_help "'$dest' is not a directory"
     fi
     case $destdir in
     [\\/]* | [A-Za-z]:[\\/]*) ;;
@@ -2899,7 +4220,7 @@ func_mode_install ()
        case $file in
        *.lo) ;;
        *)
-         func_fatal_help "\`$destdir' must be an absolute directory name"
+         func_fatal_help "'$destdir' must be an absolute directory name"
          ;;
        esac
       done
@@ -2908,7 +4229,7 @@ func_mode_install ()
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
-    libtool_install_magic="$magic"
+    libtool_install_magic=$magic
 
     staticlibs=
     future_libdirs=
@@ -2928,7 +4249,7 @@ func_mode_install ()
 
        # 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"
+         || func_fatal_help "'$file' is not a valid libtool archive"
 
        library_names=
        old_library=
@@ -2950,7 +4271,7 @@ func_mode_install ()
        fi
 
        func_dirname "$file" "/" ""
-       dir="$func_dirname_result"
+       dir=$func_dirname_result
        func_append dir "$objdir"
 
        if test -n "$relink_command"; then
@@ -2964,7 +4285,7 @@ func_mode_install ()
          # 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"
+           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.
@@ -2973,29 +4294,36 @@ func_mode_install ()
            relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
          fi
 
-         func_warning "relinking \`$file'"
+         func_warning "relinking '$file'"
          func_show_eval "$relink_command" \
-           'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
+           '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"
+         realname=$1
          shift
 
-         srcname="$realname"
-         test -n "$relink_command" && srcname="$realname"T
+         srcname=$realname
+         test -n "$relink_command" && srcname=${realname}T
 
          # Install the shared library and build the symlinks.
          func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
              'exit $?'
-         tstripme="$stripme"
+         tstripme=$stripme
          case $host_os in
          cygwin* | mingw* | pw32* | cegcc*)
            case $realname in
            *.dll.a)
-             tstripme=""
+             tstripme=
+             ;;
+           esac
+           ;;
+         os2*)
+           case $realname in
+           *_dll.a)
+             tstripme=
              ;;
            esac
            ;;
@@ -3006,7 +4334,7 @@ func_mode_install ()
 
          if test "$#" -gt 0; then
            # Delete the old symlinks, and create new ones.
-           # Try `ln -sf' first, because the `ln' binary might depend on
+           # 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
@@ -3017,14 +4345,14 @@ func_mode_install ()
          fi
 
          # Do each command in the postinstall commands.
-         lib="$destdir/$realname"
+         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
+       name=$func_basename_result
+       instname=$dir/${name}i
        func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
 
        # Maybe install the static library, too.
@@ -3036,11 +4364,11 @@ func_mode_install ()
 
        # Figure out destination file name, if it wasn't already specified.
        if test -n "$destname"; then
-         destfile="$destdir/$destname"
+         destfile=$destdir/$destname
        else
          func_basename "$file"
-         destfile="$func_basename_result"
-         destfile="$destdir/$destfile"
+         destfile=$func_basename_result
+         destfile=$destdir/$destfile
        fi
 
        # Deduce the name of the destination old-style object file.
@@ -3050,11 +4378,11 @@ func_mode_install ()
          staticdest=$func_lo2o_result
          ;;
        *.$objext)
-         staticdest="$destfile"
+         staticdest=$destfile
          destfile=
          ;;
        *)
-         func_fatal_help "cannot copy a libtool object to \`$destfile'"
+         func_fatal_help "cannot copy a libtool object to '$destfile'"
          ;;
        esac
 
@@ -3063,7 +4391,7 @@ func_mode_install ()
          func_show_eval "$install_prog $file $destfile" 'exit $?'
 
        # Install the old object if enabled.
-       if test "$build_old_libs" = yes; then
+       if test yes = "$build_old_libs"; then
          # Deduce the name of the old-style object file.
          func_lo2o "$file"
          staticobj=$func_lo2o_result
@@ -3075,23 +4403,23 @@ func_mode_install ()
       *)
        # Figure out destination file name, if it wasn't already specified.
        if test -n "$destname"; then
-         destfile="$destdir/$destname"
+         destfile=$destdir/$destname
        else
          func_basename "$file"
-         destfile="$func_basename_result"
-         destfile="$destdir/$destfile"
+         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=""
+       stripped_ext=
        case $file in
          *.exe)
            if test ! -f "$file"; then
              func_stripname '' '.exe' "$file"
              file=$func_stripname_result
-             stripped_ext=".exe"
+             stripped_ext=.exe
            fi
            ;;
        esac
@@ -3119,19 +4447,19 @@ func_mode_install ()
 
          # Check the variables that should have been set.
          test -z "$generated_by_libtool_version" && \
-           func_fatal_error "invalid libtool wrapper script \`$wrapper'"
+           func_fatal_error "invalid libtool wrapper script '$wrapper'"
 
-         finalize=yes
+         finalize=:
          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 "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test
+           libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
            if test -n "$libdir" && test ! -f "$libfile"; then
-             func_warning "\`$lib' has not been installed in \`$libdir'"
-             finalize=no
+             func_warning "'$lib' has not been installed in '$libdir'"
+             finalize=false
            fi
          done
 
@@ -3139,29 +4467,29 @@ func_mode_install ()
          func_source "$wrapper"
 
          outputname=
-         if test "$fast_install" = no && test -n "$relink_command"; then
+         if test no = "$fast_install" && test -n "$relink_command"; then
            $opt_dry_run || {
-             if test "$finalize" = yes; then
+             if $finalize; then
                tmpdir=`func_mktempdir`
                func_basename "$file$stripped_ext"
-               file="$func_basename_result"
-               outputname="$tmpdir/$file"
+               file=$func_basename_result
+               outputname=$tmpdir/$file
                # Replace the output file specification.
                relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
-               $opt_silent || {
+               $opt_quiet || {
                  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"
+                 func_error "error: relink '$file' with the above command before installing it"
                  $opt_dry_run || ${RM}r "$tmpdir"
                  continue
                fi
-               file="$outputname"
+               file=$outputname
              else
-               func_warning "cannot relink \`$file'"
+               func_warning "cannot relink '$file'"
              fi
            }
          else
@@ -3198,10 +4526,10 @@ func_mode_install ()
 
     for file in $staticlibs; do
       func_basename "$file"
-      name="$func_basename_result"
+      name=$func_basename_result
 
       # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
+      oldlib=$destdir/$name
       func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
       tool_oldlib=$func_to_tool_file_result
 
@@ -3216,18 +4544,18 @@ func_mode_install ()
     done
 
     test -n "$future_libdirs" && \
-      func_warning "remember to run \`$progname --finish$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'
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
     else
       exit $EXIT_SUCCESS
     fi
 }
 
-test "$opt_mode" = install && func_mode_install ${1+"$@"}
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
 
 
 # func_generate_dlsyms outputname originator pic_p
@@ -3235,16 +4563,17 @@ test "$opt_mode" = install && func_mode_install ${1+"$@"}
 # 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'`
+    $debug_cmd
+
+    my_outputname=$1
+    my_originator=$2
+    my_pic_p=${3-false}
+    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 "$dlfiles$dlprefiles" || test no != "$dlself"; then
       if test -n "$NM" && test -n "$global_symbol_pipe"; then
-       my_dlsyms="${my_outputname}S.c"
+       my_dlsyms=${my_outputname}S.c
       else
        func_error "not configured to extract global symbols from dlpreopened files"
       fi
@@ -3255,7 +4584,7 @@ func_generate_dlsyms ()
       "") ;;
       *.c)
        # Discover the nlist of each of the dlfiles.
-       nlist="$output_objdir/${my_outputname}.nm"
+       nlist=$output_objdir/$my_outputname.nm
 
        func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
 
@@ -3263,34 +4592,36 @@ func_generate_dlsyms ()
        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 */
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
 
 #ifdef __cplusplus
 extern \"C\" {
 #endif
 
-#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
 #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
 #endif
 
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT_DLSYM_CONST
 #else
 # define LT_DLSYM_CONST const
 #endif
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* External symbol declarations for the compiler. */\
 "
 
-       if test "$dlself" = yes; then
-         func_verbose "generating symbol list for \`$output'"
+       if test yes = "$dlself"; then
+         func_verbose "generating symbol list for '$output'"
 
          $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
 
@@ -3298,7 +4629,7 @@ extern \"C\" {
          progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
          for progfile in $progfiles; do
            func_to_tool_file "$progfile" func_convert_file_msys_to_w32
-           func_verbose "extracting global C symbols from \`$func_to_tool_file_result'"
+           func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
            $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
          done
 
@@ -3318,10 +4649,10 @@ extern \"C\" {
 
          # Prepare the list of exported symbols
          if test -z "$export_symbols"; then
-           export_symbols="$output_objdir/$outputname.exp"
+           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"'
+             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"'
@@ -3331,7 +4662,7 @@ extern \"C\" {
            }
          else
            $opt_dry_run || {
-             eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+             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
@@ -3345,22 +4676,22 @@ extern \"C\" {
        fi
 
        for dlprefile in $dlprefiles; do
-         func_verbose "extracting global C symbols from \`$dlprefile'"
+         func_verbose "extracting global C symbols from '$dlprefile'"
          func_basename "$dlprefile"
-         name="$func_basename_result"
+         name=$func_basename_result
           case $host in
            *cygwin* | *mingw* | *cegcc* )
              # if an import library, we need to obtain dlname
              if func_win32_import_lib_p "$dlprefile"; then
                func_tr_sh "$dlprefile"
                eval "curr_lafile=\$libfile_$func_tr_sh_result"
-               dlprefile_dlbasename=""
+               dlprefile_dlbasename=
                if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
                  # Use subshell, to avoid clobbering current variable values
                  dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
-                 if test -n "$dlprefile_dlname" ; then
+                 if test -n "$dlprefile_dlname"; then
                    func_basename "$dlprefile_dlname"
-                   dlprefile_dlbasename="$func_basename_result"
+                   dlprefile_dlbasename=$func_basename_result
                  else
                    # no lafile. user explicitly requested -dlpreopen <import library>.
                    $sharedlib_from_linklib_cmd "$dlprefile"
@@ -3368,7 +4699,7 @@ extern \"C\" {
                  fi
                fi
                $opt_dry_run || {
-                 if test -n "$dlprefile_dlbasename" ; then
+                 if test -n "$dlprefile_dlbasename"; then
                    eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
                  else
                    func_warning "Could not compute DLL name from $name"
@@ -3424,6 +4755,11 @@ extern \"C\" {
            echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
          fi
 
+         func_show_eval '$RM "${nlist}I"'
+         if test -n "$global_symbol_to_import"; then
+           eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+         fi
+
          echo >> "$output_objdir/$my_dlsyms" "\
 
 /* The mapping between symbol names and symbols.  */
@@ -3432,11 +4768,30 @@ typedef struct {
   void *address;
 } lt_dlsymlist;
 extern LT_DLSYM_CONST lt_dlsymlist
-lt_${my_prefix}_LTX_preloaded_symbols[];
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+  for (; symbol->name; ++symbol)
+    {"
+           $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+           echo >> "$output_objdir/$my_dlsyms" "\
+    }
+}"
+         fi
+         echo >> "$output_objdir/$my_dlsyms" "\
 LT_DLSYM_CONST lt_dlsymlist
 lt_${my_prefix}_LTX_preloaded_symbols[] =
-{\
-  { \"$my_originator\", (void *) 0 },"
+{ {\"$my_originator\", (void *) 0},"
+
+         if test -s "$nlist"I; then
+           echo >> "$output_objdir/$my_dlsyms" "\
+  {\"@INIT@\", (void *) &lt_syminit},"
+         fi
 
          case $need_lib_prefix in
          no)
@@ -3478,9 +4833,7 @@ static const void *lt_preloaded_setup() {
          *-*-hpux*)
            pic_flag_for_symtable=" $pic_flag"  ;;
          *)
-           if test "X$my_pic_p" != Xno; then
-             pic_flag_for_symtable=" $pic_flag"
-           fi
+           $my_pic_p && pic_flag_for_symtable=" $pic_flag"
            ;;
          esac
          ;;
@@ -3497,10 +4850,10 @@ static const void *lt_preloaded_setup() {
        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"'
+       func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
 
        # Transform the symbol file into the correct name.
-       symfileobj="$output_objdir/${my_outputname}S.$objext"
+       symfileobj=$output_objdir/${my_outputname}S.$objext
        case $host in
        *cygwin* | *mingw* | *cegcc* )
          if test -f "$output_objdir/$my_outputname.def"; then
@@ -3518,7 +4871,7 @@ static const void *lt_preloaded_setup() {
        esac
        ;;
       *)
-       func_fatal_error "unknown suffix for \`$my_dlsyms'"
+       func_fatal_error "unknown suffix for '$my_dlsyms'"
        ;;
       esac
     else
@@ -3532,6 +4885,32 @@ static const void *lt_preloaded_setup() {
     fi
 }
 
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
 # func_win32_libid arg
 # return the library type of file 'arg'
 #
@@ -3541,8 +4920,9 @@ static const void *lt_preloaded_setup() {
 # Despite the name, also deal with 64 bit binaries.
 func_win32_libid ()
 {
-  $opt_debug
-  win32_libid_type="unknown"
+  $debug_cmd
+
+  win32_libid_type=unknown
   win32_fileres=`file -L $1 2>/dev/null`
   case $win32_fileres in
   *ar\ archive\ import\ library*) # definitely import
@@ -3552,16 +4932,29 @@ func_win32_libid ()
     # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
     if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
        $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
-      func_to_tool_file "$1" func_convert_file_msys_to_w32
-      win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
-       $SED -n -e '
+      case $nm_interface in
+      "MS dumpbin")
+       if func_cygming_ms_implib_p "$1" ||
+          func_cygming_gnu_implib_p "$1"
+       then
+         win32_nmres=import
+       else
+         win32_nmres=
+       fi
+       ;;
+      *)
+       func_to_tool_file "$1" func_convert_file_msys_to_w32
+       win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+         $SED -n -e '
            1,100{
                / I /{
-                   s,.*,import,
+                   s|.*|import|
                    p
                    q
                }
            }'`
+       ;;
+      esac
       case $win32_nmres in
       import*)  win32_libid_type="x86 archive import";;
       *)        win32_libid_type="x86 archive static";;
@@ -3593,7 +4986,8 @@ func_win32_libid ()
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib ()
 {
-  $opt_debug
+  $debug_cmd
+
   sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
 }
 
@@ -3610,7 +5004,8 @@ func_cygming_dll_for_implib ()
 # specified import library.
 func_cygming_dll_for_implib_fallback_core ()
 {
-  $opt_debug
+  $debug_cmd
+
   match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
   $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
     $SED '/^Contents of section '"$match_literal"':/{
@@ -3646,8 +5041,8 @@ func_cygming_dll_for_implib_fallback_core ()
       /./p' |
     # we now have a list, one entry per line, of the stringified
     # contents of the appropriate section of all members of the
-    # archive which possess that section. Heuristic: eliminate
-    # all those which have a first or second character that is
+    # archive that possess that section. Heuristic: eliminate
+    # all those that have a first or second character that is
     # a '.' (that is, objdump's representation of an unprintable
     # character.) This should work for all archives with less than
     # 0x302f exports -- but will fail for DLLs whose name actually
@@ -3658,30 +5053,6 @@ func_cygming_dll_for_implib_fallback_core ()
     $SED -e '/^\./d;/^.\./d;q'
 }
 
-# func_cygming_gnu_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is a GNU/binutils-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_gnu_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
-  test -n "$func_cygming_gnu_implib_tmp"
-}
-
-# func_cygming_ms_implib_p ARG
-# This predicate returns with zero status (TRUE) if
-# ARG is an MS-style import library. Returns
-# with nonzero status (FALSE) otherwise.
-func_cygming_ms_implib_p ()
-{
-  $opt_debug
-  func_to_tool_file "$1" func_convert_file_msys_to_w32
-  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
-  test -n "$func_cygming_ms_implib_tmp"
-}
-
 # func_cygming_dll_for_implib_fallback ARG
 # Platform-specific function to extract the
 # name of the DLL associated with the specified
@@ -3695,16 +5066,17 @@ func_cygming_ms_implib_p ()
 #    $sharedlib_from_linklib_result
 func_cygming_dll_for_implib_fallback ()
 {
-  $opt_debug
-  if func_cygming_gnu_implib_p "$1" ; then
+  $debug_cmd
+
+  if func_cygming_gnu_implib_p "$1"; then
     # binutils import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
-  elif func_cygming_ms_implib_p "$1" ; then
+  elif func_cygming_ms_implib_p "$1"; then
     # ms-generated import library
     sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
   else
     # unknown
-    sharedlib_from_linklib_result=""
+    sharedlib_from_linklib_result=
   fi
 }
 
@@ -3712,10 +5084,11 @@ func_cygming_dll_for_implib_fallback ()
 # 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"
-    if test "$lock_old_archive_extraction" = yes; then
+    $debug_cmd
+
+    f_ex_an_ar_dir=$1; shift
+    f_ex_an_ar_oldlib=$1
+    if test yes = "$lock_old_archive_extraction"; then
       lockfile=$f_ex_an_ar_oldlib.lock
       until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
        func_echo "Waiting for $lockfile to be removed"
@@ -3724,7 +5097,7 @@ func_extract_an_archive ()
     fi
     func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
                   'stat=$?; rm -f "$lockfile"; exit $stat'
-    if test "$lock_old_archive_extraction" = yes; then
+    if test yes = "$lock_old_archive_extraction"; then
       $opt_dry_run || rm -f "$lockfile"
     fi
     if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
@@ -3738,22 +5111,23 @@ func_extract_an_archive ()
 # func_extract_archives gentop oldlib ...
 func_extract_archives ()
 {
-    $opt_debug
-    my_gentop="$1"; shift
+    $debug_cmd
+
+    my_gentop=$1; shift
     my_oldlibs=${1+"$@"}
-    my_oldobjs=""
-    my_xlib=""
-    my_xabs=""
-    my_xdir=""
+    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" ;;
+       [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
        *) my_xabs=`pwd`"/$my_xlib" ;;
       esac
       func_basename "$my_xlib"
-      my_xlib="$func_basename_result"
+      my_xlib=$func_basename_result
       my_xlib_u=$my_xlib
       while :; do
         case " $extracted_archives " in
@@ -3765,7 +5139,7 @@ func_extract_archives ()
        esac
       done
       extracted_archives="$extracted_archives $my_xlib_u"
-      my_xdir="$my_gentop/$my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
 
       func_mkdir_p "$my_xdir"
 
@@ -3778,22 +5152,23 @@ func_extract_archives ()
          cd $my_xdir || exit $?
          darwin_archive=$my_xabs
          darwin_curdir=`pwd`
-         darwin_base_archive=`basename "$darwin_archive"`
+         func_basename "$darwin_archive"
+         darwin_base_archive=$func_basename_result
          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}"
+           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}"
+             $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_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
            darwin_file=
            darwin_files=
            for darwin_file in $darwin_filelist; do
@@ -3815,7 +5190,7 @@ func_extract_archives ()
       my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
     done
 
-    func_extract_archives_result="$my_oldobjs"
+    func_extract_archives_result=$my_oldobjs
 }
 
 
@@ -3830,7 +5205,7 @@ func_extract_archives ()
 #
 # 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
+# will assume that the directory where it is stored is
 # the $objdir directory.  This is a cygwin/mingw-specific
 # behavior.
 func_emit_wrapper ()
@@ -3841,7 +5216,7 @@ func_emit_wrapper ()
 #! $SHELL
 
 # $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # The $output program cannot be directly executed until all the libtool
 # libraries that it depends on are installed.
@@ -3898,9 +5273,9 @@ _LTECHO_EOF'
 
 # Very basic option parsing. These options are (a) specific to
 # the libtool wrapper, (b) are identical between the wrapper
-# /script/ and the wrapper /executable/ which is used only on
+# /script/ and the wrapper /executable/ that is used only on
 # windows platforms, and (c) all begin with the string "--lt-"
-# (application programs are unlikely to have options which match
+# (application programs are unlikely to have options that match
 # this pattern).
 #
 # There are only two supported options: --lt-debug and
@@ -3933,7 +5308,7 @@ func_parse_lt_options ()
 
   # Print the debug banner immediately:
   if test -n \"\$lt_option_debug\"; then
-    echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2
+    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
   fi
 }
 
@@ -3944,7 +5319,7 @@ func_lt_dump_args ()
   lt_dump_args_N=1;
   for lt_arg
   do
-    \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
     lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
   done
 }
@@ -3958,7 +5333,7 @@ func_exec_program_core ()
   *-*-mingw | *-*-os2* | *-cegcc*)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
@@ -3968,7 +5343,7 @@ func_exec_program_core ()
   *)
     $ECHO "\
       if test -n \"\$lt_option_debug\"; then
-        \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
         func_lt_dump_args \${1+\"\$@\"} 1>&2
       fi
       exec \"\$progdir/\$program\" \${1+\"\$@\"}
@@ -4043,13 +5418,13 @@ func_exec_program ()
   test -n \"\$absdir\" && thisdir=\"\$absdir\"
 "
 
-       if test "$fast_install" = yes; then
+       if test yes = "$fast_install"; 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\`; \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
        test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 
     file=\"\$\$-\$program\"
@@ -4066,7 +5441,7 @@ func_exec_program ()
     if test -n \"\$relink_command\"; then
       if relink_command_output=\`eval \$relink_command 2>&1\`; then :
       else
-       $ECHO \"\$relink_command_output\" >&2
+       \$ECHO \"\$relink_command_output\" >&2
        $RM \"\$progdir/\$file\"
        exit 1
       fi
@@ -4101,7 +5476,7 @@ func_exec_program ()
        fi
 
        # Export our shlibpath_var if we have one.
-       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+       if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
          $ECHO "\
     # Add our own library path to $shlibpath_var
     $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
@@ -4121,7 +5496,7 @@ func_exec_program ()
     fi
   else
     # The program doesn't exist.
-    \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
+    \$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
@@ -4140,7 +5515,7 @@ func_emit_cwrapperexe_src ()
        cat <<EOF
 
 /* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 
    The $output program cannot be directly executed until all the libtool
    libraries that it depends on are installed.
@@ -4175,47 +5550,45 @@ EOF
 #include <fcntl.h>
 #include <sys/stat.h>
 
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
 /* declarations of non-ANSI functions */
-#if defined(__MINGW32__)
+#if defined __MINGW32__
 # ifdef __STRICT_ANSI__
 int _putenv (const char *);
 # endif
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # ifdef __STRICT_ANSI__
 char *realpath (const char *, char *);
 int putenv (char *);
 int setenv (const char *, const char *, int);
 # endif
-/* #elif defined (other platforms) ... */
+/* #elif defined other_platform || defined ... */
 #endif
 
 /* portability defines, excluding path handling macros */
-#if defined(_MSC_VER)
+#if defined _MSC_VER
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
 # define S_IXUSR _S_IEXEC
-# ifndef _INTPTR_T_DEFINED
-#  define _INTPTR_T_DEFINED
-#  define intptr_t int
-# endif
-#elif defined(__MINGW32__)
+#elif defined __MINGW32__
 # define setmode _setmode
 # define stat    _stat
 # define chmod   _chmod
 # define getcwd  _getcwd
 # define putenv  _putenv
-#elif defined(__CYGWIN__)
+#elif defined __CYGWIN__
 # define HAVE_SETENV
 # define FOPEN_WB "wb"
-/* #elif defined (other platforms) ... */
+/* #elif defined other platforms ... */
 #endif
 
-#if defined(PATH_MAX)
+#if defined PATH_MAX
 # define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
+#elif defined MAXPATHLEN
 # define LT_PATHMAX MAXPATHLEN
 #else
 # define LT_PATHMAX 1024
@@ -4234,8 +5607,8 @@ int setenv (const char *, const char *, int);
 # define PATH_SEPARATOR ':'
 #endif
 
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
-  defined (__OS2__)
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+  defined __OS2__
 # define HAVE_DOS_BASED_FILE_SYSTEM
 # define FOPEN_WB "wb"
 # ifndef DIR_SEPARATOR_2
@@ -4268,10 +5641,10 @@ int setenv (const char *, const char *, int);
 
 #define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
 #define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
+  if (stale) { free (stale); stale = 0; } \
 } while (0)
 
-#if defined(LT_DEBUGWRAPPER)
+#if defined LT_DEBUGWRAPPER
 static int lt_debug = 1;
 #else
 static int lt_debug = 0;
@@ -4300,11 +5673,16 @@ void lt_dump_script (FILE *f);
 EOF
 
            cat <<EOF
-volatile const char * MAGIC_EXE = "$magic_exe";
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible 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
+           if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
               func_to_host_path "$temp_rpath"
              cat <<EOF
 const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
@@ -4328,7 +5706,7 @@ const char * EXE_PATH_VALUE   = "";
 EOF
            fi
 
-           if test "$fast_install" = yes; then
+           if test yes = "$fast_install"; then
              cat <<EOF
 const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
 EOF
@@ -4357,12 +5735,12 @@ main (int argc, char *argv[])
   char *actual_cwrapper_name;
   char *target_name;
   char *lt_argv_zero;
-  intptr_t rval = 127;
+  int rval = 127;
 
   int i;
 
   program_name = (char *) xstrdup (base_name (argv[0]));
-  newargz = XMALLOC (char *, argc + 1);
+  newargz = XMALLOC (char *, (size_t) argc + 1);
 
   /* very simple arg parsing; don't want to rely on getopt
    * also, copy all non cwrapper options to newargz, except
@@ -4371,10 +5749,10 @@ main (int argc, char *argv[])
   newargc=0;
   for (i = 1; i < argc; i++)
     {
-      if (strcmp (argv[i], dumpscript_opt) == 0)
+      if (STREQ (argv[i], dumpscript_opt))
        {
 EOF
-           case "$host" in
+           case $host in
              *mingw* | *cygwin* )
                # make stdout use "unix" line endings
                echo "          setmode(1,_O_BINARY);"
@@ -4385,12 +5763,12 @@ EOF
          lt_dump_script (stdout);
          return 0;
        }
-      if (strcmp (argv[i], debug_opt) == 0)
+      if (STREQ (argv[i], debug_opt))
        {
           lt_debug = 1;
           continue;
        }
-      if (strcmp (argv[i], ltwrapper_option_prefix) == 0)
+      if (STREQ (argv[i], ltwrapper_option_prefix))
         {
           /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
              namespace, but it is not one of the ones we know about and
@@ -4413,7 +5791,7 @@ EOF
 EOF
            cat <<EOF
   /* The GNU banner must be the first non-error debug message */
-  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n");
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
 EOF
            cat <<"EOF"
   lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
@@ -4524,7 +5902,7 @@ EOF
                cat <<"EOF"
   /* execv doesn't actually work on mingw as expected on unix */
   newargz = prepare_spawn (newargz);
-  rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
   if (rval == -1)
     {
       /* failed to start process */
@@ -4569,7 +5947,7 @@ base_name (const char *name)
 {
   const char *base;
 
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#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;
@@ -4628,7 +6006,7 @@ find_executable (const char *wrapper)
   const char *p_next;
   /* static buffer for getcwd */
   char tmp[LT_PATHMAX + 1];
-  int tmp_len;
+  size_t tmp_len;
   char *concat_name;
 
   lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
@@ -4638,7 +6016,7 @@ find_executable (const char *wrapper)
     return NULL;
 
   /* Absolute path? */
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
   if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
     {
       concat_name = xstrdup (wrapper);
@@ -4656,7 +6034,7 @@ find_executable (const char *wrapper)
            return concat_name;
          XFREE (concat_name);
        }
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
     }
 #endif
 
@@ -4679,7 +6057,7 @@ find_executable (const char *wrapper)
              for (q = p; *q; q++)
                if (IS_PATH_SEPARATOR (*q))
                  break;
-             p_len = q - p;
+             p_len = (size_t) (q - p);
              p_next = (*q == '\0' ? q : q + 1);
              if (p_len == 0)
                {
@@ -4798,7 +6176,7 @@ strendzap (char *str, const char *pat)
   if (patlen <= len)
     {
       str += len - patlen;
-      if (strcmp (str, pat) == 0)
+      if (STREQ (str, pat))
        *str = '\0';
     }
   return str;
@@ -4863,7 +6241,7 @@ lt_setenv (const char *name, const char *value)
     char *str = xstrdup (value);
     setenv (name, str, 1);
 #else
-    int len = strlen (name) + 1 + strlen (value) + 1;
+    size_t len = strlen (name) + 1 + strlen (value) + 1;
     char *str = XMALLOC (char, len);
     sprintf (str, "%s=%s", name, value);
     if (putenv (str) != EXIT_SUCCESS)
@@ -4880,8 +6258,8 @@ 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);
+      size_t orig_value_len = strlen (orig_value);
+      size_t add_len = strlen (add);
       new_value = XMALLOC (char, add_len + orig_value_len + 1);
       if (to_end)
         {
@@ -4912,10 +6290,10 @@ lt_update_exe_path (const char *name, const char *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]))
+      size_t len = strlen (new_value);
+      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
         {
-          new_value[len-1] = '\0';
+          new_value[--len] = '\0';
         }
       lt_setenv (name, new_value);
       XFREE (new_value);
@@ -5082,27 +6460,47 @@ EOF
 # True if ARG is an import lib, as indicated by $file_magic_cmd
 func_win32_import_lib_p ()
 {
-    $opt_debug
+    $debug_cmd
+
     case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
     *import*) : ;;
     *) false ;;
     esac
 }
 
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+    $debug_cmd
+
+    case " $compile_command " in
+    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+      suncc_use_cstd_abi=no
+      ;;
+    *)
+      suncc_use_cstd_abi=yes
+      ;;
+    esac
+}
+
 # func_mode_link arg...
 func_mode_link ()
 {
-    $opt_debug
+    $debug_cmd
+
     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
+      # what 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
+      # to make a dll that 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.
@@ -5146,10 +6544,11 @@ func_mode_link ()
     module=no
     no_install=no
     objs=
+    os2dllname=
     non_pic_objects=
     precious_files_regex=
     prefer_static_libs=no
-    preload=no
+    preload=false
     prev=
     prevarg=
     release=
@@ -5161,7 +6560,7 @@ func_mode_link ()
     vinfo=
     vinfo_number=no
     weak_libs=
-    single_module="${wl}-single_module"
+    single_module=$wl-single_module
     func_infer_tag $base_compile
 
     # We need to know -static, to get the right output filenames.
@@ -5169,15 +6568,15 @@ func_mode_link ()
     do
       case $arg in
       -shared)
-       test "$build_libtool_libs" != yes && \
-         func_fatal_configuration "can not build a shared library"
+       test yes != "$build_libtool_libs" \
+         && func_fatal_configuration "cannot 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
+         if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
            func_warning "complete static linking is impossible in this configuration"
          fi
          if test -n "$link_static_flag"; then
@@ -5210,7 +6609,7 @@ func_mode_link ()
 
     # Go through the arguments, transforming them on the way.
     while test "$#" -gt 0; do
-      arg="$1"
+      arg=$1
       shift
       func_quote_for_eval "$arg"
       qarg=$func_quote_for_eval_unquoted_result
@@ -5227,21 +6626,21 @@ func_mode_link ()
 
        case $prev in
        bindir)
-         bindir="$arg"
+         bindir=$arg
          prev=
          continue
          ;;
        dlfiles|dlprefiles)
-         if test "$preload" = no; then
+         $preload || {
            # Add the symbol object into the linking commands.
            func_append compile_command " @SYMFILE@"
            func_append finalize_command " @SYMFILE@"
-           preload=yes
-         fi
+           preload=:
+         }
          case $arg in
          *.la | *.lo) ;;  # We handle these cases below.
          force)
-           if test "$dlself" = no; then
+           if test no = "$dlself"; then
              dlself=needless
              export_dynamic=yes
            fi
@@ -5249,9 +6648,9 @@ func_mode_link ()
            continue
            ;;
          self)
-           if test "$prev" = dlprefiles; then
+           if test dlprefiles = "$prev"; then
              dlself=yes
-           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+           elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
              dlself=yes
            else
              dlself=needless
@@ -5261,7 +6660,7 @@ func_mode_link ()
            continue
            ;;
          *)
-           if test "$prev" = dlfiles; then
+           if test dlfiles = "$prev"; then
              func_append dlfiles " $arg"
            else
              func_append dlprefiles " $arg"
@@ -5272,14 +6671,14 @@ func_mode_link ()
          esac
          ;;
        expsyms)
-         export_symbols="$arg"
+         export_symbols=$arg
          test -f "$arg" \
-           || func_fatal_error "symbol file \`$arg' does not exist"
+           || func_fatal_error "symbol file '$arg' does not exist"
          prev=
          continue
          ;;
        expsyms_regex)
-         export_symbols_regex="$arg"
+         export_symbols_regex=$arg
          prev=
          continue
          ;;
@@ -5297,7 +6696,13 @@ func_mode_link ()
          continue
          ;;
        inst_prefix)
-         inst_prefix_dir="$arg"
+         inst_prefix_dir=$arg
+         prev=
+         continue
+         ;;
+       mllvm)
+         # Clang does not use LLVM to link, so we can simply discard any
+         # '-mllvm $arg' options when doing the link step.
          prev=
          continue
          ;;
@@ -5321,21 +6726,21 @@ func_mode_link ()
 
                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'"
+                  test none = "$pic_object" &&
+                  test none = "$non_pic_object"; then
+                 func_fatal_error "cannot find name of object for '$arg'"
                fi
 
                # Extract subdirectory from the argument.
                func_dirname "$arg" "/" ""
-               xdir="$func_dirname_result"
+               xdir=$func_dirname_result
 
-               if test "$pic_object" != none; then
+               if test none != "$pic_object"; then
                  # Prepend the subdirectory the object is found in.
-                 pic_object="$xdir$pic_object"
+                 pic_object=$xdir$pic_object
 
-                 if test "$prev" = dlfiles; then
-                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+                 if test dlfiles = "$prev"; then
+                   if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
                      func_append dlfiles " $pic_object"
                      prev=
                      continue
@@ -5346,7 +6751,7 @@ func_mode_link ()
                  fi
 
                  # CHECK ME:  I think I busted this.  -Ossama
-                 if test "$prev" = dlprefiles; then
+                 if test dlprefiles = "$prev"; then
                    # Preload the old-style object.
                    func_append dlprefiles " $pic_object"
                    prev=
@@ -5354,23 +6759,23 @@ func_mode_link ()
 
                  # A PIC object.
                  func_append libobjs " $pic_object"
-                 arg="$pic_object"
+                 arg=$pic_object
                fi
 
                # Non-PIC object.
-               if test "$non_pic_object" != none; then
+               if test none != "$non_pic_object"; then
                  # Prepend the subdirectory the object is found in.
-                 non_pic_object="$xdir$non_pic_object"
+                 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"
+                 if test -z "$pic_object" || test none = "$pic_object"; 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"
+                 non_pic_object=$pic_object
                  func_append non_pic_objects " $non_pic_object"
                fi
              else
@@ -5378,7 +6783,7 @@ func_mode_link ()
                if $opt_dry_run; then
                  # Extract subdirectory from the argument.
                  func_dirname "$arg" "/" ""
-                 xdir="$func_dirname_result"
+                 xdir=$func_dirname_result
 
                  func_lo2o "$arg"
                  pic_object=$xdir$objdir/$func_lo2o_result
@@ -5386,24 +6791,29 @@ func_mode_link ()
                  func_append libobjs " $pic_object"
                  func_append non_pic_objects " $non_pic_object"
                else
-                 func_fatal_error "\`$arg' is not a valid libtool object"
+                 func_fatal_error "'$arg' is not a valid libtool object"
                fi
              fi
            done
          else
-           func_fatal_error "link input file \`$arg' does not exist"
+           func_fatal_error "link input file '$arg' does not exist"
          fi
          arg=$save_arg
          prev=
          continue
          ;;
+       os2dllname)
+         os2dllname=$arg
+         prev=
+         continue
+         ;;
        precious_regex)
-         precious_files_regex="$arg"
+         precious_files_regex=$arg
          prev=
          continue
          ;;
        release)
-         release="-$arg"
+         release=-$arg
          prev=
          continue
          ;;
@@ -5415,7 +6825,7 @@ func_mode_link ()
            func_fatal_error "only absolute run-paths are allowed"
            ;;
          esac
-         if test "$prev" = rpath; then
+         if test rpath = "$prev"; then
            case "$rpath " in
            *" $arg "*) ;;
            *) func_append rpath " $arg" ;;
@@ -5430,7 +6840,7 @@ func_mode_link ()
          continue
          ;;
        shrext)
-         shrext_cmds="$arg"
+         shrext_cmds=$arg
          prev=
          continue
          ;;
@@ -5470,7 +6880,7 @@ func_mode_link ()
        esac
       fi # test -n "$prev"
 
-      prevarg="$arg"
+      prevarg=$arg
 
       case $arg in
       -all-static)
@@ -5484,7 +6894,7 @@ func_mode_link ()
 
       -allow-undefined)
        # FIXME: remove this flag sometime in the future.
-       func_fatal_error "\`-allow-undefined' must not be used because it is the default"
+       func_fatal_error "'-allow-undefined' must not be used because it is the default"
        ;;
 
       -avoid-version)
@@ -5516,7 +6926,7 @@ func_mode_link ()
        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
+       if test X-export-symbols = "X$arg"; then
          prev=expsyms
        else
          prev=expsyms_regex
@@ -5550,9 +6960,9 @@ func_mode_link ()
        func_stripname "-L" '' "$arg"
        if test -z "$func_stripname_result"; then
          if test "$#" -gt 0; then
-           func_fatal_error "require no space between \`-L' and \`$1'"
+           func_fatal_error "require no space between '-L' and '$1'"
          else
-           func_fatal_error "need path for \`-L' option"
+           func_fatal_error "need path for '-L' option"
          fi
        fi
        func_resolve_sysroot "$func_stripname_result"
@@ -5563,8 +6973,8 @@ func_mode_link ()
        *)
          absdir=`cd "$dir" && pwd`
          test -z "$absdir" && \
-           func_fatal_error "cannot determine absolute directory name of \`$dir'"
-         dir="$absdir"
+           func_fatal_error "cannot determine absolute directory name of '$dir'"
+         dir=$absdir
          ;;
        esac
        case "$deplibs " in
@@ -5599,7 +7009,7 @@ func_mode_link ()
        ;;
 
       -l*)
-       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+       if test X-lc = "X$arg" || test X-lm = "X$arg"; then
          case $host in
          *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
            # These systems don't actually have a C or math library (as such)
@@ -5607,11 +7017,11 @@ func_mode_link ()
            ;;
          *-*-os2*)
            # These systems don't actually have a C library (as such)
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
-         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
            # Do not include libc due to us having libc/libc_r.
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          *-*-rhapsody* | *-*-darwin1.[012])
            # Rhapsody C and math libraries are in the System framework
@@ -5620,16 +7030,16 @@ func_mode_link ()
            ;;
          *-*-sco3.2v5* | *-*-sco5v6*)
            # Causes problems with __ctype
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
            # Compiler inserts libc in the correct place for threads to work
-           test "X$arg" = "X-lc" && continue
+           test X-lc = "X$arg" && continue
            ;;
          esac
-       elif test "X$arg" = "X-lc_r"; then
+       elif test X-lc_r = "X$arg"; then
         case $host in
-        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
           # Do not include libc_r directly, use -pthread flag.
           continue
           ;;
@@ -5639,6 +7049,11 @@ func_mode_link ()
        continue
        ;;
 
+      -mllvm)
+       prev=mllvm
+       continue
+       ;;
+
       -module)
        module=yes
        continue
@@ -5668,7 +7083,7 @@ func_mode_link ()
        ;;
 
       -multi_module)
-       single_module="${wl}-multi_module"
+       single_module=$wl-multi_module
        continue
        ;;
 
@@ -5682,8 +7097,8 @@ func_mode_link ()
        *-*-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"
+         func_warning "'-no-install' is ignored for $host"
+         func_warning "assuming '-no-fast-install' instead"
          fast_install=no
          ;;
        *) no_install=yes ;;
@@ -5701,6 +7116,11 @@ func_mode_link ()
        continue
        ;;
 
+      -os2dllname)
+       prev=os2dllname
+       continue
+       ;;
+
       -o) prev=output ;;
 
       -precious-files-regex)
@@ -5788,14 +7208,14 @@ func_mode_link ()
        func_stripname '-Wc,' '' "$arg"
        args=$func_stripname_result
        arg=
-       save_ifs="$IFS"; IFS=','
+       save_ifs=$IFS; IFS=,
        for flag in $args; do
-         IFS="$save_ifs"
+         IFS=$save_ifs
           func_quote_for_eval "$flag"
          func_append arg " $func_quote_for_eval_result"
          func_append compiler_flags " $func_quote_for_eval_result"
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
@@ -5804,15 +7224,15 @@ func_mode_link ()
        func_stripname '-Wl,' '' "$arg"
        args=$func_stripname_result
        arg=
-       save_ifs="$IFS"; IFS=','
+       save_ifs=$IFS; IFS=,
        for flag in $args; do
-         IFS="$save_ifs"
+         IFS=$save_ifs
           func_quote_for_eval "$flag"
          func_append arg " $wl$func_quote_for_eval_result"
          func_append compiler_flags " $wl$func_quote_for_eval_result"
          func_append linker_flags " $func_quote_for_eval_result"
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
@@ -5835,7 +7255,7 @@ func_mode_link ()
       # -msg_* for osf cc
       -msg_*)
        func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
 
       # Flags to be passed through unchanged, with rationale:
@@ -5847,25 +7267,49 @@ func_mode_link ()
       # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
       # -F/path              path to uninstalled frameworks, gcc on darwin
       # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # -fstack-protector*   stack protector flags for GCC
       # @file                GCC response files
       # -tp=*                Portland pgcc target processor selection
       # --sysroot=*          for sysroot support
-      # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -specs=*             GCC specs files
+      # -stdlib=*            select c++ std lib with clang
+      # -fsanitize=*         Clang/GCC memory and address sanitizer
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-      -O*|-flto*|-fwhopr*|-fuse-linker-plugin)
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
+      -specs=*|-fsanitize=*)
         func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
         func_append compiler_flags " $arg"
         continue
         ;;
 
+      -Z*)
+        if test os2 = "`expr $host : '.*\(os2\)'`"; then
+          # OS/2 uses -Zxxx to specify OS/2-specific options
+         compiler_flags="$compiler_flags $arg"
+         func_append compile_command " $arg"
+         func_append finalize_command " $arg"
+         case $arg in
+         -Zlinker | -Zstack)
+           prev=xcompiler
+           ;;
+         esac
+         continue
+        else
+         # Otherwise treat like 'Some other compiler flag' below
+         func_quote_for_eval "$arg"
+         arg=$func_quote_for_eval_result
+        fi
+       ;;
+
       # Some other compiler flag.
       -* | +*)
         func_quote_for_eval "$arg"
-       arg="$func_quote_for_eval_result"
+       arg=$func_quote_for_eval_result
        ;;
 
       *.$objext)
@@ -5886,21 +7330,21 @@ func_mode_link ()
 
          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'"
+            test none = "$pic_object" &&
+            test none = "$non_pic_object"; then
+           func_fatal_error "cannot find name of object for '$arg'"
          fi
 
          # Extract subdirectory from the argument.
          func_dirname "$arg" "/" ""
-         xdir="$func_dirname_result"
+         xdir=$func_dirname_result
 
-         if test "$pic_object" != none; then
+         test none = "$pic_object" || {
            # Prepend the subdirectory the object is found in.
-           pic_object="$xdir$pic_object"
+           pic_object=$xdir$pic_object
 
-           if test "$prev" = dlfiles; then
-             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+           if test dlfiles = "$prev"; then
+             if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
                func_append dlfiles " $pic_object"
                prev=
                continue
@@ -5911,7 +7355,7 @@ func_mode_link ()
            fi
 
            # CHECK ME:  I think I busted this.  -Ossama
-           if test "$prev" = dlprefiles; then
+           if test dlprefiles = "$prev"; then
              # Preload the old-style object.
              func_append dlprefiles " $pic_object"
              prev=
@@ -5919,23 +7363,23 @@ func_mode_link ()
 
            # A PIC object.
            func_append libobjs " $pic_object"
-           arg="$pic_object"
-         fi
+           arg=$pic_object
+         }
 
          # Non-PIC object.
-         if test "$non_pic_object" != none; then
+         if test none != "$non_pic_object"; then
            # Prepend the subdirectory the object is found in.
-           non_pic_object="$xdir$non_pic_object"
+           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"
+           if test -z "$pic_object" || test none = "$pic_object"; 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"
+           non_pic_object=$pic_object
            func_append non_pic_objects " $non_pic_object"
          fi
        else
@@ -5943,7 +7387,7 @@ func_mode_link ()
          if $opt_dry_run; then
            # Extract subdirectory from the argument.
            func_dirname "$arg" "/" ""
-           xdir="$func_dirname_result"
+           xdir=$func_dirname_result
 
            func_lo2o "$arg"
            pic_object=$xdir$objdir/$func_lo2o_result
@@ -5951,7 +7395,7 @@ func_mode_link ()
            func_append libobjs " $pic_object"
            func_append non_pic_objects " $non_pic_object"
          else
-           func_fatal_error "\`$arg' is not a valid libtool object"
+           func_fatal_error "'$arg' is not a valid libtool object"
          fi
        fi
        ;;
@@ -5967,11 +7411,11 @@ func_mode_link ()
        # A libtool-controlled library.
 
        func_resolve_sysroot "$arg"
-       if test "$prev" = dlfiles; then
+       if test dlfiles = "$prev"; then
          # This library was specified with -dlopen.
          func_append dlfiles " $func_resolve_sysroot_result"
          prev=
-       elif test "$prev" = dlprefiles; then
+       elif test dlprefiles = "$prev"; then
          # The library was specified with -dlpreopen.
          func_append dlprefiles " $func_resolve_sysroot_result"
          prev=
@@ -5986,7 +7430,7 @@ func_mode_link ()
        # 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"
+       arg=$func_quote_for_eval_result
        ;;
       esac # arg
 
@@ -5998,9 +7442,9 @@ func_mode_link ()
     done # argument parsing loop
 
     test -n "$prev" && \
-      func_fatal_help "the \`$prevarg' option requires an argument"
+      func_fatal_help "the '$prevarg' option requires an argument"
 
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
       eval arg=\"$export_dynamic_flag_spec\"
       func_append compile_command " $arg"
       func_append finalize_command " $arg"
@@ -6009,20 +7453,23 @@ func_mode_link ()
     oldlibs=
     # calculate the name of the file, without its directory
     func_basename "$output"
-    outputname="$func_basename_result"
-    libobjs_save="$libobjs"
+    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 \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\`
+      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'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\"
 
+    # Definition is injected by LT_CONFIG during libtool generation.
+    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
     func_dirname "$output" "/" ""
-    output_objdir="$func_dirname_result$objdir"
+    output_objdir=$func_dirname_result$objdir
     func_to_tool_file "$output_objdir/"
     tool_output_objdir=$func_to_tool_file_result
     # Create the object directory.
@@ -6045,7 +7492,7 @@ func_mode_link ()
     # 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_preserve_dup_deps ; then
+      if $opt_preserve_dup_deps; then
        case "$libs " in
        *" $deplib "*) func_append specialdeplibs " $deplib" ;;
        esac
@@ -6053,7 +7500,7 @@ func_mode_link ()
       func_append libs " $deplib"
     done
 
-    if test "$linkmode" = lib; then
+    if test lib = "$linkmode"; then
       libs="$predeps $libs $compiler_lib_search_path $postdeps"
 
       # Compute libraries that are listed more than once in $predeps
@@ -6085,7 +7532,7 @@ func_mode_link ()
          case $file in
          *.la) ;;
          *)
-           func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
+           func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
            ;;
          esac
        done
@@ -6093,7 +7540,7 @@ func_mode_link ()
     prog)
        compile_deplibs=
        finalize_deplibs=
-       alldeplibs=no
+       alldeplibs=false
        newdlfiles=
        newdlprefiles=
        passes="conv scan dlopen dlpreopen link"
@@ -6105,32 +7552,32 @@ func_mode_link ()
     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
+      if test lib,link = "$linkmode,$pass"; 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"
+       deplibs=$tmp_deplibs
       fi
 
-      if test "$linkmode,$pass" = "lib,link" ||
-        test "$linkmode,$pass" = "prog,scan"; then
-       libs="$deplibs"
+      if test lib,link = "$linkmode,$pass" ||
+        test prog,scan = "$linkmode,$pass"; then
+       libs=$deplibs
        deplibs=
       fi
-      if test "$linkmode" = prog; then
+      if test prog = "$linkmode"; then
        case $pass in
-       dlopen) libs="$dlfiles" ;;
-       dlpreopen) libs="$dlprefiles" ;;
+       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
+      if test lib,dlpreopen = "$linkmode,$pass"; then
        # Collect and forward deplibs of preopened libtool libs
        for lib in $dlprefiles; do
          # Ignore non-libtool-libs
@@ -6151,26 +7598,26 @@ func_mode_link ()
            esac
          done
        done
-       libs="$dlprefiles"
+       libs=$dlprefiles
       fi
-      if test "$pass" = dlopen; then
+      if test dlopen = "$pass"; then
        # Collect dlpreopened libraries
-       save_deplibs="$deplibs"
+       save_deplibs=$deplibs
        deplibs=
       fi
 
       for deplib in $libs; do
        lib=
-       found=no
+       found=false
        case $deplib in
        -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
         |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
-         if test "$linkmode,$pass" = "prog,link"; then
+         if test prog,link = "$linkmode,$pass"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
            func_append compiler_flags " $deplib"
-           if test "$linkmode" = lib ; then
+           if test lib = "$linkmode"; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6180,13 +7627,13 @@ func_mode_link ()
          continue
          ;;
        -l*)
-         if test "$linkmode" != lib && test "$linkmode" != prog; then
-           func_warning "\`-l' is ignored for archives/objects"
+         if test lib != "$linkmode" && test prog != "$linkmode"; then
+           func_warning "'-l' is ignored for archives/objects"
            continue
          fi
          func_stripname '-l' '' "$deplib"
          name=$func_stripname_result
-         if test "$linkmode" = lib; then
+         if test lib = "$linkmode"; 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"
@@ -6194,31 +7641,22 @@ func_mode_link ()
          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}"
+             lib=$searchdir/lib$name$search_ext
              if test -f "$lib"; then
-               if test "$search_ext" = ".la"; then
-                 found=yes
+               if test .la = "$search_ext"; then
+                 found=:
                else
-                 found=no
+                 found=false
                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 $found; then
+           # 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
+           if test yes = "$allow_libtool_libs_with_static_runtimes"; then
              case " $predeps $postdeps " in
              *" $deplib "*)
                if func_lalib_p "$lib"; then
@@ -6226,19 +7664,19 @@ func_mode_link ()
                  old_library=
                  func_source "$lib"
                  for l in $old_library $library_names; do
-                   ll="$l"
+                   ll=$l
                  done
-                 if test "X$ll" = "X$old_library" ; then # only static version available
-                   found=no
+                 if test "X$ll" = "X$old_library"; then # only static version available
+                   found=false
                    func_dirname "$lib" "" "."
-                   ladir="$func_dirname_result"
+                   ladir=$func_dirname_result
                    lib=$ladir/$old_library
-                   if test "$linkmode,$pass" = "prog,link"; then
+                   if test prog,link = "$linkmode,$pass"; then
                      compile_deplibs="$deplib $compile_deplibs"
                      finalize_deplibs="$deplib $finalize_deplibs"
                    else
                      deplibs="$deplib $deplibs"
-                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
+                     test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
                    fi
                    continue
                  fi
@@ -6247,15 +7685,25 @@ func_mode_link ()
              *) ;;
              esac
            fi
+         else
+           # deplib doesn't seem to be a libtool library
+           if test prog,link = "$linkmode,$pass"; then
+             compile_deplibs="$deplib $compile_deplibs"
+             finalize_deplibs="$deplib $finalize_deplibs"
+           else
+             deplibs="$deplib $deplibs"
+             test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+           fi
+           continue
          fi
          ;; # -l
        *.ltframework)
-         if test "$linkmode,$pass" = "prog,link"; then
+         if test prog,link = "$linkmode,$pass"; then
            compile_deplibs="$deplib $compile_deplibs"
            finalize_deplibs="$deplib $finalize_deplibs"
          else
            deplibs="$deplib $deplibs"
-           if test "$linkmode" = lib ; then
+           if test lib = "$linkmode"; then
                case "$new_inherited_linker_flags " in
                    *" $deplib "*) ;;
                    * ) func_append new_inherited_linker_flags " $deplib" ;;
@@ -6268,18 +7716,18 @@ func_mode_link ()
          case $linkmode in
          lib)
            deplibs="$deplib $deplibs"
-           test "$pass" = conv && continue
+           test conv = "$pass" && continue
            newdependency_libs="$deplib $newdependency_libs"
            func_stripname '-L' '' "$deplib"
            func_resolve_sysroot "$func_stripname_result"
            func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          prog)
-           if test "$pass" = conv; then
+           if test conv = "$pass"; then
              deplibs="$deplib $deplibs"
              continue
            fi
-           if test "$pass" = scan; then
+           if test scan = "$pass"; then
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
@@ -6290,13 +7738,13 @@ func_mode_link ()
            func_append newlib_search_path " $func_resolve_sysroot_result"
            ;;
          *)
-           func_warning "\`-L' is ignored for archives/objects"
+           func_warning "'-L' is ignored for archives/objects"
            ;;
          esac # linkmode
          continue
          ;; # -L
        -R*)
-         if test "$pass" = link; then
+         if test link = "$pass"; then
            func_stripname '-R' '' "$deplib"
            func_resolve_sysroot "$func_stripname_result"
            dir=$func_resolve_sysroot_result
@@ -6314,7 +7762,7 @@ func_mode_link ()
          lib=$func_resolve_sysroot_result
          ;;
        *.$libext)
-         if test "$pass" = conv; then
+         if test conv = "$pass"; then
            deplibs="$deplib $deplibs"
            continue
          fi
@@ -6325,21 +7773,26 @@ func_mode_link ()
            case " $dlpreconveniencelibs " in
            *" $deplib "*) ;;
            *)
-             valid_a_lib=no
+             valid_a_lib=false
              case $deplibs_check_method in
                match_pattern*)
                  set dummy $deplibs_check_method; shift
                  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
                  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
                    | $EGREP "$match_pattern_regex" > /dev/null; then
-                   valid_a_lib=yes
+                   valid_a_lib=:
                  fi
                ;;
                pass_all)
-                 valid_a_lib=yes
+                 valid_a_lib=:
                ;;
              esac
-             if test "$valid_a_lib" != yes; then
+             if $valid_a_lib; then
+               echo
+               $ECHO "*** Warning: Linking the shared library $output against the"
+               $ECHO "*** static library $deplib is not portable!"
+               deplibs="$deplib $deplibs"
+             else
                echo
                $ECHO "*** Warning: Trying to link with static lib archive $deplib."
                echo "*** I have the capability to make that library automatically link in when"
@@ -6347,18 +7800,13 @@ func_mode_link ()
                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
+           if test link != "$pass"; then
              deplibs="$deplib $deplibs"
            else
              compile_deplibs="$deplib $compile_deplibs"
@@ -6369,10 +7817,10 @@ func_mode_link ()
          esac # linkmode
          ;; # *.$libext
        *.lo | *.$objext)
-         if test "$pass" = conv; then
+         if test conv = "$pass"; then
            deplibs="$deplib $deplibs"
-         elif test "$linkmode" = prog; then
-           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+         elif test prog = "$linkmode"; then
+           if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
              # If there is no dlopen support or we're linking statically,
              # we need to preload.
              func_append newdlprefiles " $deplib"
@@ -6385,22 +7833,20 @@ func_mode_link ()
          continue
          ;;
        %DEPLIBS%)
-         alldeplibs=yes
+         alldeplibs=:
          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
+       $found || test -f "$lib" \
+         || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
 
        # 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_fatal_error "'$lib' is not a valid libtool archive"
 
        func_dirname "$lib" "" "."
-       ladir="$func_dirname_result"
+       ladir=$func_dirname_result
 
        dlname=
        dlopen=
@@ -6430,19 +7876,19 @@ func_mode_link ()
          done
        fi
        dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
-       if test "$linkmode,$pass" = "lib,link" ||
-          test "$linkmode,$pass" = "prog,scan" ||
-          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
+       if test lib,link = "$linkmode,$pass" ||
+          test prog,scan = "$linkmode,$pass" ||
+          { test prog != "$linkmode" && test lib != "$linkmode"; }; then
          test -n "$dlopen" && func_append dlfiles " $dlopen"
          test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
        fi
 
-       if test "$pass" = conv; then
+       if test conv = "$pass"; 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'"
+             func_fatal_error "cannot find name of link library for '$lib'"
            fi
            # It is a libtool convenience library, so add in its objects.
            func_append convenience " $ladir/$objdir/$old_library"
@@ -6450,15 +7896,15 @@ func_mode_link ()
            tmp_libs=
            for deplib in $dependency_libs; do
              deplibs="$deplib $deplibs"
-             if $opt_preserve_dup_deps ; then
+             if $opt_preserve_dup_deps; then
                case "$tmp_libs " in
                *" $deplib "*) func_append specialdeplibs " $deplib" ;;
                esac
              fi
              func_append tmp_libs " $deplib"
            done
-         elif test "$linkmode" != prog && test "$linkmode" != lib; then
-           func_fatal_error "\`$lib' is not a convenience library"
+         elif test prog != "$linkmode" && test lib != "$linkmode"; then
+           func_fatal_error "'$lib' is not a convenience library"
          fi
          continue
        fi # $pass = conv
@@ -6467,26 +7913,26 @@ func_mode_link ()
        # Get the name of the library we link against.
        linklib=
        if test -n "$old_library" &&
-          { test "$prefer_static_libs" = yes ||
-            test "$prefer_static_libs,$installed" = "built,no"; }; then
+          { test yes = "$prefer_static_libs" ||
+            test built,no = "$prefer_static_libs,$installed"; }; then
          linklib=$old_library
        else
          for l in $old_library $library_names; do
-           linklib="$l"
+           linklib=$l
          done
        fi
        if test -z "$linklib"; then
-         func_fatal_error "cannot find name of link library for \`$lib'"
+         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 dlopen = "$pass"; then
+         test -z "$libdir" \
+           && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
          if test -z "$dlname" ||
-            test "$dlopen_support" != yes ||
-            test "$build_libtool_libs" = no; then
+            test yes != "$dlopen_support" ||
+            test no = "$build_libtool_libs"
+         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
@@ -6500,40 +7946,40 @@ func_mode_link ()
 
        # We need an absolute path.
        case $ladir in
-       [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+       [\\/]* | [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 "cannot determine absolute directory name of '$ladir'"
            func_warning "passing it literally to the linker, although it might fail"
-           abs_ladir="$ladir"
+           abs_ladir=$ladir
          fi
          ;;
        esac
        func_basename "$lib"
-       laname="$func_basename_result"
+       laname=$func_basename_result
 
        # Find the relevant object directory and library name.
-       if test "X$installed" = Xyes; then
+       if test yes = "$installed"; then
          if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-           func_warning "library \`$lib' was moved."
-           dir="$ladir"
-           absdir="$abs_ladir"
-           libdir="$abs_ladir"
+           func_warning "library '$lib' was moved."
+           dir=$ladir
+           absdir=$abs_ladir
+           libdir=$abs_ladir
          else
-           dir="$lt_sysroot$libdir"
-           absdir="$lt_sysroot$libdir"
+           dir=$lt_sysroot$libdir
+           absdir=$lt_sysroot$libdir
          fi
-         test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
+         test yes = "$hardcode_automatic" && avoidtemprpath=yes
        else
          if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-           dir="$ladir"
-           absdir="$abs_ladir"
+           dir=$ladir
+           absdir=$abs_ladir
            # Remove this search path later
            func_append notinst_path " $abs_ladir"
          else
-           dir="$ladir/$objdir"
-           absdir="$abs_ladir/$objdir"
+           dir=$ladir/$objdir
+           absdir=$abs_ladir/$objdir
            # Remove this search path later
            func_append notinst_path " $abs_ladir"
          fi
@@ -6542,11 +7988,11 @@ func_mode_link ()
        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'"
+       if test dlpreopen = "$pass"; then
+         if test -z "$libdir" && test prog = "$linkmode"; then
+           func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
          fi
-         case "$host" in
+         case $host in
            # special handling for platforms with PE-DLLs.
            *cygwin* | *mingw* | *cegcc* )
              # Linker will automatically link against shared library if both
@@ -6590,9 +8036,9 @@ func_mode_link ()
 
        if test -z "$libdir"; then
          # Link the convenience library
-         if test "$linkmode" = lib; then
+         if test lib = "$linkmode"; then
            deplibs="$dir/$old_library $deplibs"
-         elif test "$linkmode,$pass" = "prog,link"; then
+         elif test prog,link = "$linkmode,$pass"; then
            compile_deplibs="$dir/$old_library $compile_deplibs"
            finalize_deplibs="$dir/$old_library $finalize_deplibs"
          else
@@ -6602,14 +8048,14 @@ func_mode_link ()
        fi
 
 
-       if test "$linkmode" = prog && test "$pass" != link; then
+       if test prog = "$linkmode" && test link != "$pass"; then
          func_append 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
+         linkalldeplibs=false
+         if test no != "$link_all_deplibs" || test -z "$library_names" ||
+            test no = "$build_libtool_libs"; then
+           linkalldeplibs=:
          fi
 
          tmp_libs=
@@ -6621,14 +8067,14 @@ func_mode_link ()
                 ;;
            esac
            # Need to link against all dependency_libs?
-           if test "$linkalldeplibs" = yes; then
+           if $linkalldeplibs; 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_preserve_dup_deps ; then
+           if $opt_preserve_dup_deps; then
              case "$tmp_libs " in
              *" $deplib "*) func_append specialdeplibs " $deplib" ;;
              esac
@@ -6638,15 +8084,15 @@ func_mode_link ()
          continue
        fi # $linkmode = prog...
 
-       if test "$linkmode,$pass" = "prog,link"; then
+       if test prog,link = "$linkmode,$pass"; then
          if test -n "$library_names" &&
-            { { test "$prefer_static_libs" = no ||
-                test "$prefer_static_libs,$installed" = "built,yes"; } ||
+            { { test no = "$prefer_static_libs" ||
+                test built,yes = "$prefer_static_libs,$installed"; } ||
               test -z "$old_library"; }; then
            # We need to hardcode the library path
-           if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
+           if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
              # Make sure the rpath contains only unique directories.
-             case "$temp_rpath:" in
+             case $temp_rpath: in
              *"$absdir:"*) ;;
              *) func_append temp_rpath "$absdir:" ;;
              esac
@@ -6675,9 +8121,9 @@ func_mode_link ()
            esac
          fi # $linkmode,$pass = prog,link...
 
-         if test "$alldeplibs" = yes &&
-            { test "$deplibs_check_method" = pass_all ||
-              { test "$build_libtool_libs" = yes &&
+         if $alldeplibs &&
+            { test pass_all = "$deplibs_check_method" ||
+              { test yes = "$build_libtool_libs" &&
                 test -n "$library_names"; }; }; then
            # We only need to search for static libraries
            continue
@@ -6686,19 +8132,19 @@ func_mode_link ()
 
        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
+       if test built = "$use_static_libs" && test yes = "$installed"; then
          use_static_libs=no
        fi
        if test -n "$library_names" &&
-          { test "$use_static_libs" = no || test -z "$old_library"; }; then
+          { test no = "$use_static_libs" || test -z "$old_library"; }; then
          case $host in
-         *cygwin* | *mingw* | *cegcc*)
+         *cygwin* | *mingw* | *cegcc* | *os2*)
              # No point in relinking DLLs because paths are not encoded
              func_append notinst_deplibs " $lib"
              need_relink=no
            ;;
          *)
-           if test "$installed" = no; then
+           if test no = "$installed"; then
              func_append notinst_deplibs " $lib"
              need_relink=yes
            fi
@@ -6708,24 +8154,24 @@ func_mode_link ()
 
          # Warn about portability, can't link against -module's on some
          # systems (darwin).  Don't bleat about dlopened modules though!
-         dlopenmodule=""
+         dlopenmodule=
          for dlpremoduletest in $dlprefiles; do
            if test "X$dlpremoduletest" = "X$lib"; then
-             dlopenmodule="$dlpremoduletest"
+             dlopenmodule=$dlpremoduletest
              break
            fi
          done
-         if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
+         if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
            echo
-           if test "$linkmode" = prog; then
+           if test prog = "$linkmode"; 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
+         if test lib = "$linkmode" &&
+            test yes = "$hardcode_into_libs"; then
            # Hardcode the library path.
            # Skip directories that are in the system default run-time
            # search path.
@@ -6753,43 +8199,43 @@ func_mode_link ()
            # figure out the soname
            set dummy $library_names
            shift
-           realname="$1"
+           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"
+             soname=$dlname
            elif test -n "$soname_spec"; then
              # bleh windows
              case $host in
-             *cygwin* | mingw* | *cegcc*)
+             *cygwin* | mingw* | *cegcc* | *os2*)
                func_arith $current - $age
                major=$func_arith_result
-               versuffix="-$major"
+               versuffix=-$major
                ;;
              esac
              eval soname=\"$soname_spec\"
            else
-             soname="$realname"
+             soname=$realname
            fi
 
            # Make a new name for the extract_expsyms_cmds to use
-           soroot="$soname"
+           soroot=$soname
            func_basename "$soroot"
-           soname="$func_basename_result"
+           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_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_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
@@ -6797,58 +8243,58 @@ func_mode_link ()
            linklib=$newlib
          fi # test -n "$old_archive_from_expsyms_cmds"
 
-         if test "$linkmode" = prog || test "$opt_mode" != relink; then
+         if test prog = "$linkmode" || test relink != "$opt_mode"; then
            add_shlibpath=
            add_dir=
            add=
            lib_linked=yes
            case $hardcode_action in
            immediate | unsupported)
-             if test "$hardcode_direct" = no; then
-               add="$dir/$linklib"
+             if test no = "$hardcode_direct"; then
+               add=$dir/$linklib
                case $host in
-                 *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
-                 *-*-sysv4*uw2*) add_dir="-L$dir" ;;
+                 *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+                 *-*-sysv4*uw2*) add_dir=-L$dir ;;
                  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
-                   *-*-unixware7*) add_dir="-L$dir" ;;
+                   *-*-unixware7*) add_dir=-L$dir ;;
                  *-*-darwin* )
-                   # if the lib is a (non-dlopened) module then we can not
+                   # if the lib is a (non-dlopened) module then we cannot
                    # link against it, someone is ignoring the earlier warnings
                    if /usr/bin/file -L $add 2> /dev/null |
-                        $GREP ": [^:]* bundle" >/dev/null ; then
+                        $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
+                       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"
+                         add=$dir/$old_library
                        fi
                      elif test -n "$old_library"; then
-                       add="$dir/$old_library"
+                       add=$dir/$old_library
                      fi
                    fi
                esac
-             elif test "$hardcode_minus_L" = no; then
+             elif test no = "$hardcode_minus_L"; then
                case $host in
-               *-*-sunos*) add_shlibpath="$dir" ;;
+               *-*-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"
+               add_dir=-L$dir
+               add=-l$name
+             elif test no = "$hardcode_shlibpath_var"; 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$absdir"
+             if test yes = "$hardcode_direct" &&
+                test no = "$hardcode_direct_absolute"; then
+               add=$dir/$linklib
+             elif test yes = "$hardcode_minus_L"; then
+               add_dir=-L$absdir
                # Try looking first in the location we're being installed to.
                if test -n "$inst_prefix_dir"; then
                  case $libdir in
@@ -6857,10 +8303,10 @@ func_mode_link ()
                      ;;
                  esac
                fi
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = yes; then
-               add_shlibpath="$dir"
-               add="-l$name"
+               add=-l$name
+             elif test yes = "$hardcode_shlibpath_var"; then
+               add_shlibpath=$dir
+               add=-l$name
              else
                lib_linked=no
              fi
@@ -6868,7 +8314,7 @@ func_mode_link ()
            *) lib_linked=no ;;
            esac
 
-           if test "$lib_linked" != yes; then
+           if test yes != "$lib_linked"; then
              func_fatal_configuration "unsupported hardcode properties"
            fi
 
@@ -6878,15 +8324,15 @@ func_mode_link ()
              *) func_append compile_shlibpath "$add_shlibpath:" ;;
              esac
            fi
-           if test "$linkmode" = prog; then
+           if test prog = "$linkmode"; 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
+             if test yes != "$hardcode_direct" &&
+                test yes != "$hardcode_minus_L" &&
+                test yes = "$hardcode_shlibpath_var"; then
                case :$finalize_shlibpath: in
                *":$libdir:"*) ;;
                *) func_append finalize_shlibpath "$libdir:" ;;
@@ -6895,33 +8341,33 @@ func_mode_link ()
            fi
          fi
 
-         if test "$linkmode" = prog || test "$opt_mode" = relink; then
+         if test prog = "$linkmode" || test relink = "$opt_mode"; 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
+           if test yes = "$hardcode_direct" &&
+              test no = "$hardcode_direct_absolute"; then
+             add=$libdir/$linklib
+           elif test yes = "$hardcode_minus_L"; then
+             add_dir=-L$libdir
+             add=-l$name
+           elif test yes = "$hardcode_shlibpath_var"; then
              case :$finalize_shlibpath: in
              *":$libdir:"*) ;;
              *) func_append finalize_shlibpath "$libdir:" ;;
              esac
-             add="-l$name"
-           elif test "$hardcode_automatic" = yes; then
+             add=-l$name
+           elif test yes = "$hardcode_automatic"; then
              if test -n "$inst_prefix_dir" &&
-                test -f "$inst_prefix_dir$libdir/$linklib" ; then
-               add="$inst_prefix_dir$libdir/$linklib"
+                test -f "$inst_prefix_dir$libdir/$linklib"; then
+               add=$inst_prefix_dir$libdir/$linklib
              else
-               add="$libdir/$linklib"
+               add=$libdir/$linklib
              fi
            else
              # We cannot seem to hardcode it, guess we'll fake it.
-             add_dir="-L$libdir"
+             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
@@ -6930,10 +8376,10 @@ func_mode_link ()
                    ;;
                esac
              fi
-             add="-l$name"
+             add=-l$name
            fi
 
-           if test "$linkmode" = prog; then
+           if test prog = "$linkmode"; then
              test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
              test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
            else
@@ -6941,43 +8387,43 @@ func_mode_link ()
              test -n "$add" && deplibs="$add $deplibs"
            fi
          fi
-       elif test "$linkmode" = prog; then
+       elif test prog = "$linkmode"; 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"
+         if test unsupported != "$hardcode_direct"; 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
+       elif test yes = "$build_libtool_libs"; then
          # Not a shared library
-         if test "$deplibs_check_method" != pass_all; then
+         if test pass_all != "$deplibs_check_method"; 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 "*** Warning: This system cannot 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
+           if test yes = "$module"; 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 "*** 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."
+               echo "*** 'nm' from GNU binutils and a full rebuild may help."
              fi
-             if test "$build_old_libs" = no; then
+             if test no = "$build_old_libs"; then
                build_libtool_libs=module
                build_old_libs=yes
              else
@@ -6990,11 +8436,11 @@ func_mode_link ()
          fi
        fi # link shared/static library?
 
-       if test "$linkmode" = lib; then
+       if test lib = "$linkmode"; then
          if test -n "$dependency_libs" &&
-            { test "$hardcode_into_libs" != yes ||
-              test "$build_old_libs" = yes ||
-              test "$link_static" = yes; }; then
+            { test yes != "$hardcode_into_libs" ||
+              test yes = "$build_old_libs" ||
+              test yes = "$link_static"; }; then
            # Extract -R from dependency_libs
            temp_deplibs=
            for libdir in $dependency_libs; do
@@ -7008,12 +8454,12 @@ func_mode_link ()
              *) func_append temp_deplibs " $libdir";;
              esac
            done
-           dependency_libs="$temp_deplibs"
+           dependency_libs=$temp_deplibs
          fi
 
          func_append newlib_search_path " $absdir"
          # Link against this library
-         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+         test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
          # ... and its dependency_libs
          tmp_libs=
          for deplib in $dependency_libs; do
@@ -7023,7 +8469,7 @@ func_mode_link ()
                    func_resolve_sysroot "$func_stripname_result";;
               *) func_resolve_sysroot "$deplib" ;;
             esac
-           if $opt_preserve_dup_deps ; then
+           if $opt_preserve_dup_deps; then
              case "$tmp_libs " in
              *" $func_resolve_sysroot_result "*)
                 func_append specialdeplibs " $func_resolve_sysroot_result" ;;
@@ -7032,12 +8478,12 @@ func_mode_link ()
            func_append tmp_libs " $func_resolve_sysroot_result"
          done
 
-         if test "$link_all_deplibs" != no; then
+         if test no != "$link_all_deplibs"; then
            # Add the search paths of all dependency libraries
            for deplib in $dependency_libs; do
              path=
              case $deplib in
-             -L*) path="$deplib" ;;
+             -L*) path=$deplib ;;
              *.la)
                func_resolve_sysroot "$deplib"
                deplib=$func_resolve_sysroot_result
@@ -7045,12 +8491,12 @@ func_mode_link ()
                dir=$func_dirname_result
                # We need an absolute path.
                case $dir in
-               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+               [\\/]* | [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"
+                   func_warning "cannot determine absolute directory name of '$dir'"
+                   absdir=$dir
                  fi
                  ;;
                esac
@@ -7058,35 +8504,35 @@ func_mode_link ()
                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
+                 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 -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}}'`
+                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
                       fi
-                     func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
-                     func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}"
+                     func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+                     func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
                      path=
                    fi
                  fi
                  ;;
                *)
-                 path="-L$absdir/$objdir"
+                 path=-L$absdir/$objdir
                  ;;
                esac
                else
-                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+                 eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
                  test -z "$libdir" && \
-                   func_fatal_error "\`$deplib' is not a valid libtool archive"
+                   func_fatal_error "'$deplib' is not a valid libtool archive"
                  test "$absdir" != "$libdir" && \
-                   func_warning "\`$deplib' seems to be moved"
+                   func_warning "'$deplib' seems to be moved"
 
-                 path="-L$absdir"
+                 path=-L$absdir
                fi
                ;;
              esac
@@ -7098,23 +8544,23 @@ func_mode_link ()
          fi # link_all_deplibs != no
        fi # linkmode = lib
       done # for deplib in $libs
-      if test "$pass" = link; then
-       if test "$linkmode" = "prog"; then
+      if test link = "$pass"; then
+       if test prog = "$linkmode"; then
          compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
          finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
        else
          compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
        fi
       fi
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
+      dependency_libs=$newdependency_libs
+      if test dlpreopen = "$pass"; 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
+      if test dlopen != "$pass"; then
+       test conv = "$pass" || {
          # Make sure lib_search_path contains only unique directories.
          lib_search_path=
          for dir in $newlib_search_path; do
@@ -7124,12 +8570,12 @@ func_mode_link ()
            esac
          done
          newlib_search_path=
-       fi
+       }
 
-       if test "$linkmode,$pass" != "prog,link"; then
-         vars="deplibs"
-       else
+       if test prog,link = "$linkmode,$pass"; then
          vars="compile_deplibs finalize_deplibs"
+       else
+         vars=deplibs
        fi
        for var in $vars dependency_libs; do
          # Add libraries to $var in reverse order
@@ -7187,62 +8633,93 @@ func_mode_link ()
          eval $var=\"$tmp_libs\"
        done # for var
       fi
+
+      # Add Sun CC postdeps if required:
+      test CXX = "$tagname" && {
+        case $host_os in
+        linux*)
+          case `$CC -V 2>&1 | sed 5q` in
+          *Sun\ C*) # Sun C++ 5.9
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+
+        solaris*)
+          func_cc_basename "$CC"
+          case $func_cc_basename_result in
+          CC* | sunCC*)
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+        esac
+      }
+
       # Last step: remove runtime libs from dependency_libs
       # (they stay in deplibs)
       tmp_libs=
-      for i in $dependency_libs ; do
+      for i in $dependency_libs; do
        case " $predeps $postdeps $compiler_lib_search_path " in
        *" $i "*)
-         i=""
+         i=
          ;;
        esac
-       if test -n "$i" ; then
+       if test -n "$i"; then
          func_append tmp_libs " $i"
        fi
       done
       dependency_libs=$tmp_libs
     done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
     fi
-    if test "$linkmode" = prog || test "$linkmode" = lib; then
-      dlprefiles="$newdlprefiles"
+    if test prog = "$linkmode" || test lib = "$linkmode"; then
+      dlprefiles=$newdlprefiles
     fi
 
     case $linkmode in
     oldlib)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       func_warning "\`-dlopen' is ignored for archives"
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for archives"
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
-       func_warning "\`-l' and \`-L' are ignored for archives" ;;
+       func_warning "'-l' and '-L' are ignored for archives" ;;
       esac
 
       test -n "$rpath" && \
-       func_warning "\`-rpath' is ignored for archives"
+       func_warning "'-rpath' is ignored for archives"
 
       test -n "$xrpath" && \
-       func_warning "\`-R' is ignored for archives"
+       func_warning "'-R' is ignored for archives"
 
       test -n "$vinfo" && \
-       func_warning "\`-version-info/-version-number' is ignored for archives"
+       func_warning "'-version-info/-version-number' is ignored for archives"
 
       test -n "$release" && \
-       func_warning "\`-release' is ignored for archives"
+       func_warning "'-release' is ignored for archives"
 
       test -n "$export_symbols$export_symbols_regex" && \
-       func_warning "\`-export-symbols' is ignored for archives"
+       func_warning "'-export-symbols' is ignored for archives"
 
       # Now set the variables for building old libraries.
       build_libtool_libs=no
-      oldlibs="$output"
+      oldlibs=$output
       func_append objs "$old_deplibs"
       ;;
 
     lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
+      # Make sure we only generate libraries of the form 'libNAME.la'.
       case $outputname in
       lib*)
        func_stripname 'lib' '.la' "$outputname"
@@ -7251,10 +8728,10 @@ func_mode_link ()
        eval libname=\"$libname_spec\"
        ;;
       *)
-       test "$module" = no && \
-         func_fatal_help "libtool library \`$output' must begin with \`lib'"
+       test no = "$module" \
+         && func_fatal_help "libtool library '$output' must begin with 'lib'"
 
-       if test "$need_lib_prefix" != no; then
+       if test no != "$need_lib_prefix"; then
          # Add the "lib" prefix for modules if required
          func_stripname '' '.la' "$outputname"
          name=$func_stripname_result
@@ -7268,8 +8745,8 @@ func_mode_link ()
       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"
+       if test pass_all != "$deplibs_check_method"; 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"
@@ -7278,21 +8755,21 @@ func_mode_link ()
        fi
       fi
 
-      test "$dlself" != no && \
-       func_warning "\`-dlopen self' is ignored for libtool libraries"
+      test no = "$dlself" \
+       || 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"
+      test 1 -lt "$#" \
+       && func_warning "ignoring multiple '-rpath's for a libtool library"
 
-      install_libdir="$1"
+      install_libdir=$1
 
       oldlibs=
       if test -z "$rpath"; then
-       if test "$build_libtool_libs" = yes; then
+       if test yes = "$build_libtool_libs"; then
          # Building a libtool convenience library.
-         # Some compilers have problems with a `.al' extension so
+         # 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"
@@ -7301,20 +8778,20 @@ func_mode_link ()
        fi
 
        test -n "$vinfo" && \
-         func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
+         func_warning "'-version-info/-version-number' is ignored for convenience libraries"
 
        test -n "$release" && \
-         func_warning "\`-release' is ignored for convenience libraries"
+         func_warning "'-release' is ignored for convenience libraries"
       else
 
        # Parse the version information argument.
-       save_ifs="$IFS"; IFS=':'
+       save_ifs=$IFS; IFS=:
        set dummy $vinfo 0 0 0
        shift
-       IFS="$save_ifs"
+       IFS=$save_ifs
 
        test -n "$7" && \
-         func_fatal_help "too many parameters to \`-version-info'"
+         func_fatal_help "too many parameters to '-version-info'"
 
        # convert absolute version numbers to libtool ages
        # this retains compatibility with .la files and attempts
@@ -7322,45 +8799,45 @@ func_mode_link ()
 
        case $vinfo_number in
        yes)
-         number_major="$1"
-         number_minor="$2"
-         number_revision="$3"
+         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
+         # that has an extra 1 added just for fun
          #
          case $version_type in
          # correct linux to gnu/linux during the next big refactor
-         darwin|linux|osf|windows|none)
+         darwin|freebsd-elf|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
-           age="$number_minor"
-           revision="$number_revision"
+           age=$number_minor
+           revision=$number_revision
            ;;
-         freebsd-aout|freebsd-elf|qnx|sunos)
-           current="$number_major"
-           revision="$number_minor"
-           age="0"
+         freebsd-aout|qnx|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"
+           age=$number_minor
+           revision=$number_minor
            lt_irix_increment=no
            ;;
          *)
-           func_fatal_configuration "$modename: unknown library version type \`$version_type'"
+           func_fatal_configuration "$modename: unknown library version type '$version_type'"
            ;;
          esac
          ;;
        no)
-         current="$1"
-         revision="$2"
-         age="$3"
+         current=$1
+         revision=$2
+         age=$3
          ;;
        esac
 
@@ -7368,30 +8845,30 @@ func_mode_link ()
        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"
+         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"
+         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"
+         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"
+         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.
@@ -7406,26 +8883,36 @@ func_mode_link ()
          # verstring for coding it into the library header
          func_arith $current - $age
          major=.$func_arith_result
-         versuffix="$major.$age.$revision"
+         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"
+         xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
          verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+          # On Darwin other compilers
+          case $CC in
+              nagfor*)
+                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+                  ;;
+              *)
+                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+                  ;;
+          esac
          ;;
 
        freebsd-aout)
-         major=".$current"
-         versuffix=".$current.$revision";
+         major=.$current
+         versuffix=.$current.$revision
          ;;
 
        freebsd-elf)
-         major=".$current"
-         versuffix=".$current"
+         func_arith $current - $age
+         major=.$func_arith_result
+         versuffix=$major.$age.$revision
          ;;
 
        irix | nonstopux)
-         if test "X$lt_irix_increment" = "Xno"; then
+         if test no = "$lt_irix_increment"; then
            func_arith $current - $age
          else
            func_arith $current - $age + 1
@@ -7436,69 +8923,74 @@ func_mode_link ()
            nonstopux) verstring_prefix=nonstopux ;;
            *)         verstring_prefix=sgi ;;
          esac
-         verstring="$verstring_prefix$major.$revision"
+         verstring=$verstring_prefix$major.$revision
 
          # Add in all the interfaces that we are compatible with.
          loop=$revision
-         while test "$loop" -ne 0; do
+         while test 0 -ne "$loop"; do
            func_arith $revision - $loop
            iface=$func_arith_result
            func_arith $loop - 1
            loop=$func_arith_result
-           verstring="$verstring_prefix$major.$iface:$verstring"
+           verstring=$verstring_prefix$major.$iface:$verstring
          done
 
-         # Before this point, $major must not contain `.'.
+         # Before this point, $major must not contain '.'.
          major=.$major
-         versuffix="$major.$revision"
+         versuffix=$major.$revision
          ;;
 
        linux) # correct to gnu/linux during the next big refactor
          func_arith $current - $age
          major=.$func_arith_result
-         versuffix="$major.$age.$revision"
+         versuffix=$major.$age.$revision
          ;;
 
        osf)
          func_arith $current - $age
          major=.$func_arith_result
-         versuffix=".$current.$age.$revision"
-         verstring="$current.$age.$revision"
+         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
+         while test 0 -ne "$loop"; do
            func_arith $current - $loop
            iface=$func_arith_result
            func_arith $loop - 1
            loop=$func_arith_result
-           verstring="$verstring:${iface}.0"
+           verstring=$verstring:$iface.0
          done
 
          # Make executables depend on our current version.
-         func_append verstring ":${current}.0"
+         func_append verstring ":$current.0"
          ;;
 
        qnx)
-         major=".$current"
-         versuffix=".$current"
+         major=.$current
+         versuffix=.$current
+         ;;
+
+       sco)
+         major=.$current
+         versuffix=.$current
          ;;
 
        sunos)
-         major=".$current"
-         versuffix=".$current.$revision"
+         major=.$current
+         versuffix=.$current.$revision
          ;;
 
        windows)
          # Use '-' rather than '.', since we only want one
-         # extension on DOS 8.3 filesystems.
+         # extension on DOS 8.3 file systems.
          func_arith $current - $age
          major=$func_arith_result
-         versuffix="-$major"
+         versuffix=-$major
          ;;
 
        *)
-         func_fatal_configuration "unknown library version type \`$version_type'"
+         func_fatal_configuration "unknown library version type '$version_type'"
          ;;
        esac
 
@@ -7512,42 +9004,45 @@ func_mode_link ()
            verstring=
            ;;
          *)
-           verstring="0.0"
+           verstring=0.0
            ;;
          esac
-         if test "$need_version" = no; then
+         if test no = "$need_version"; then
            versuffix=
          else
-           versuffix=".0.0"
+           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
+       if test yes,no = "$avoid_version,$need_version"; then
          major=
          versuffix=
-         verstring=""
+         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
+       if test yes = "$allow_undefined"; then
+         if test unsupported = "$allow_undefined_flag"; then
+           if test yes = "$build_old_libs"; then
+             func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+             build_libtool_libs=no
+           else
+             func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+           fi
          fi
        else
          # Don't allow undefined symbols.
-         allow_undefined_flag="$no_undefined_flag"
+         allow_undefined_flag=$no_undefined_flag
        fi
 
       fi
 
-      func_generate_dlsyms "$libname" "$libname" "yes"
+      func_generate_dlsyms "$libname" "$libname" :
       func_append libobjs " $symfileobj"
-      test "X$libobjs" = "X " && libobjs=
+      test " " = "$libobjs" && libobjs=
 
-      if test "$opt_mode" != relink; then
+      if test relink != "$opt_mode"; then
        # Remove our outputs, but don't remove object files since they
        # may have been created when compiling PIC objects.
        removelist=
@@ -7556,8 +9051,8 @@ func_mode_link ()
          case $p in
            *.$objext | *.gcno)
               ;;
-           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-              if test "X$precious_files_regex" != "X"; then
+           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+              if test -n "$precious_files_regex"; then
                 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
                 then
                   continue
@@ -7573,11 +9068,11 @@ func_mode_link ()
       fi
 
       # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
        func_append oldlibs " $output_objdir/$libname.$libext"
 
        # Transform .lo files to .o files.
-       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP`
+       oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
       fi
 
       # Eliminate all temporary directories.
@@ -7598,13 +9093,13 @@ func_mode_link ()
          *) func_append finalize_rpath " $libdir" ;;
          esac
        done
-       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
+       if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
          dependency_libs="$temp_xrpath $dependency_libs"
        fi
       fi
 
       # Make sure dlfiles contains only unique files that won't be dlpreopened
-      old_dlfiles="$dlfiles"
+      old_dlfiles=$dlfiles
       dlfiles=
       for lib in $old_dlfiles; do
        case " $dlprefiles $dlfiles " in
@@ -7614,7 +9109,7 @@ func_mode_link ()
       done
 
       # Make sure dlprefiles contains only unique files
-      old_dlprefiles="$dlprefiles"
+      old_dlprefiles=$dlprefiles
       dlprefiles=
       for lib in $old_dlprefiles; do
        case "$dlprefiles " in
@@ -7623,7 +9118,7 @@ func_mode_link ()
        esac
       done
 
-      if test "$build_libtool_libs" = yes; then
+      if test yes = "$build_libtool_libs"; then
        if test -n "$rpath"; then
          case $host in
          *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
@@ -7647,7 +9142,7 @@ func_mode_link ()
            ;;
          *)
            # Add libc to deplibs on all other systems if necessary.
-           if test "$build_libtool_need_lc" = "yes"; then
+           if test yes = "$build_libtool_need_lc"; then
              func_append deplibs " -lc"
            fi
            ;;
@@ -7663,9 +9158,9 @@ func_mode_link ()
        # 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=""
+       release=
+       versuffix=
+       major=
        newdeplibs=
        droppeddeps=no
        case $deplibs_check_method in
@@ -7694,20 +9189,20 @@ EOF
              -l*)
                func_stripname -l '' "$i"
                name=$func_stripname_result
-               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+               if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                  case " $predeps $postdeps " in
                  *" $i "*)
                    func_append newdeplibs " $i"
-                   i=""
+                   i=
                    ;;
                  esac
                fi
-               if test -n "$i" ; then
+               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
+                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
                    func_append newdeplibs " $i"
                  else
                    droppeddeps=yes
@@ -7737,20 +9232,20 @@ EOF
                $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
+                 if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                    case " $predeps $postdeps " in
                    *" $i "*)
                      func_append newdeplibs " $i"
-                     i=""
+                     i=
                      ;;
                    esac
                  fi
-                 if test -n "$i" ; then
+                 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
+                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
                      func_append newdeplibs " $i"
                    else
                      droppeddeps=yes
@@ -7787,24 +9282,24 @@ EOF
            -l*)
              func_stripname -l '' "$a_deplib"
              name=$func_stripname_result
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
                  func_append newdeplibs " $a_deplib"
-                 a_deplib=""
+                 a_deplib=
                  ;;
                esac
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                libname=`eval "\\$ECHO \"$libname_spec\""`
                if test -n "$file_magic_glob"; then
                  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
                else
                  libnameglob=$libname
                fi
-               test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob`
+               test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
                for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
-                 if test "$want_nocaseglob" = yes; then
+                 if test yes = "$want_nocaseglob"; then
                    shopt -s nocaseglob
                    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
                    $nocaseglob
@@ -7822,25 +9317,25 @@ EOF
                      # We might still enter an endless loop, since a link
                      # loop can be closed while we follow links,
                      # but so what?
-                     potlib="$potent_lib"
+                     potlib=$potent_lib
                      while test -h "$potlib" 2>/dev/null; do
-                       potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
+                       potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
                        case $potliblink in
-                       [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
-                       *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";;
+                       [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+                       *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
                        esac
                      done
                      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
                         $SED -e 10q |
                         $EGREP "$file_magic_regex" > /dev/null; then
                        func_append newdeplibs " $a_deplib"
-                       a_deplib=""
+                       a_deplib=
                        break 2
                      fi
                  done
                done
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                droppeddeps=yes
                echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
@@ -7848,7 +9343,7 @@ EOF
                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
+               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"
@@ -7871,30 +9366,30 @@ EOF
            -l*)
              func_stripname -l '' "$a_deplib"
              name=$func_stripname_result
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
+             if test yes = "$allow_libtool_libs_with_static_runtimes"; then
                case " $predeps $postdeps " in
                *" $a_deplib "*)
                  func_append newdeplibs " $a_deplib"
-                 a_deplib=""
+                 a_deplib=
                  ;;
                esac
              fi
-             if test -n "$a_deplib" ; then
+             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
+                   potlib=$potent_lib # see symlink-check above in file_magic test
                    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
                       $EGREP "$match_pattern_regex" > /dev/null; then
                      func_append newdeplibs " $a_deplib"
-                     a_deplib=""
+                     a_deplib=
                      break 2
                    fi
                  done
                done
              fi
-             if test -n "$a_deplib" ; then
+             if test -n "$a_deplib"; then
                droppeddeps=yes
                echo
                $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
@@ -7902,7 +9397,7 @@ EOF
                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
+               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"
@@ -7918,18 +9413,18 @@ EOF
          done # Gone through all deplibs.
          ;;
        none | unknown | *)
-         newdeplibs=""
+         newdeplibs=
          tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
-         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-           for i in $predeps $postdeps ; do
+         if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+           for i in $predeps $postdeps; do
              # can't use Xsed below, because $i might contain '/'
-             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"`
+             tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
            done
          fi
          case $tmp_deplibs in
          *[!\  \ ]*)
            echo
-           if test "X$deplibs_check_method" = "Xnone"; then
+           if test none = "$deplibs_check_method"; then
              echo "*** Warning: inter-library dependencies are not supported in this platform."
            else
              echo "*** Warning: inter-library dependencies are not known to be supported."
@@ -7953,8 +9448,8 @@ EOF
          ;;
        esac
 
-       if test "$droppeddeps" = yes; then
-         if test "$module" = yes; then
+       if test yes = "$droppeddeps"; then
+         if test yes = "$module"; then
            echo
            echo "*** Warning: libtool could not satisfy all declared inter-library"
            $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
@@ -7963,12 +9458,12 @@ EOF
            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 "*** 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."
+             echo "*** 'nm' from GNU binutils and a full rebuild may help."
            fi
-           if test "$build_old_libs" = no; then
-             oldlibs="$output_objdir/$libname.$libext"
+           if test no = "$build_old_libs"; then
+             oldlibs=$output_objdir/$libname.$libext
              build_libtool_libs=module
              build_old_libs=yes
            else
@@ -7979,14 +9474,14 @@ EOF
            echo "*** automatically added whenever a program is linked with this library"
            echo "*** or is declared to -dlopen it."
 
-           if test "$allow_undefined" = no; then
+           if test no = "$allow_undefined"; 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"
+             if test no = "$build_old_libs"; then
+               oldlibs=$output_objdir/$libname.$libext
                build_libtool_libs=module
                build_old_libs=yes
              else
@@ -8032,7 +9527,7 @@ EOF
        *) func_append new_libs " $deplib" ;;
        esac
       done
-      deplibs="$new_libs"
+      deplibs=$new_libs
 
       # All the library-specific variables (install_libdir is set above).
       library_names=
@@ -8040,25 +9535,25 @@ EOF
       dlname=
 
       # Test again, we may have decided not to build it any more
-      if test "$build_libtool_libs" = yes; then
-       # Remove ${wl} instances when linking with ld.
+      if test yes = "$build_libtool_libs"; then
+       # Remove $wl instances when linking with ld.
        # FIXME: should test the right _cmds variable.
        case $archive_cmds in
          *\$LD\ *) wl= ;;
         esac
-       if test "$hardcode_into_libs" = yes; then
+       if test yes = "$hardcode_into_libs"; then
          # Hardcode the library paths
          hardcode_libdirs=
          dep_rpath=
-         rpath="$finalize_rpath"
-         test "$opt_mode" != relink && rpath="$compile_rpath$rpath"
+         rpath=$finalize_rpath
+         test relink = "$opt_mode" || rpath=$compile_rpath$rpath
          for libdir in $rpath; do
            if test -n "$hardcode_libdir_flag_spec"; then
              if test -n "$hardcode_libdir_separator"; then
                func_replace_sysroot "$libdir"
                libdir=$func_replace_sysroot_result
                if test -z "$hardcode_libdirs"; then
-                 hardcode_libdirs="$libdir"
+                 hardcode_libdirs=$libdir
                else
                  # Just accumulate the unique libdirs.
                  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8083,7 +9578,7 @@ EOF
          # Substitute the hardcoded libdirs into the rpath.
          if test -n "$hardcode_libdir_separator" &&
             test -n "$hardcode_libdirs"; then
-           libdir="$hardcode_libdirs"
+           libdir=$hardcode_libdirs
            eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
          fi
          if test -n "$runpath_var" && test -n "$perm_rpath"; then
@@ -8097,8 +9592,8 @@ EOF
          test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
        fi
 
-       shlibpath="$finalize_shlibpath"
-       test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+       shlibpath=$finalize_shlibpath
+       test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
        if test -n "$shlibpath"; then
          eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
        fi
@@ -8108,19 +9603,19 @@ EOF
        eval library_names=\"$library_names_spec\"
        set dummy $library_names
        shift
-       realname="$1"
+       realname=$1
        shift
 
        if test -n "$soname_spec"; then
          eval soname=\"$soname_spec\"
        else
-         soname="$realname"
+         soname=$realname
        fi
        if test -z "$dlname"; then
          dlname=$soname
        fi
 
-       lib="$output_objdir/$realname"
+       lib=$output_objdir/$realname
        linknames=
        for link
        do
@@ -8134,7 +9629,7 @@ EOF
        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"
+         export_symbols=$output_objdir/$libname.uexp
          func_append delfiles " $export_symbols"
        fi
 
@@ -8143,31 +9638,31 @@ EOF
        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
+           func_dll_def_p "$export_symbols" || {
              # 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"
+             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"
+         if test yes = "$always_export_symbols" || 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='~'
+           save_ifs=$IFS; IFS='~'
            for cmd1 in $cmds; do
-             IFS="$save_ifs"
+             IFS=$save_ifs
              # Take the normal branch if the nm_file_list_spec branch
              # doesn't work or if tool conversion is not needed.
              case $nm_file_list_spec~$to_tool_file_cmd in
@@ -8181,7 +9676,7 @@ EOF
                  try_normal_branch=no
                  ;;
              esac
-             if test "$try_normal_branch" = yes \
+             if test yes = "$try_normal_branch" \
                 && { test "$len" -lt "$max_cmd_len" \
                      || test "$max_cmd_len" -le -1; }
              then
@@ -8192,7 +9687,7 @@ EOF
                output_la=$func_basename_result
                save_libobjs=$libobjs
                save_output=$output
-               output=${output_objdir}/${output_la}.nm
+               output=$output_objdir/$output_la.nm
                func_to_tool_file "$output"
                libobjs=$nm_file_list_spec$func_to_tool_file_result
                func_append delfiles " $output"
@@ -8215,8 +9710,8 @@ EOF
                break
              fi
            done
-           IFS="$save_ifs"
-           if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
+           IFS=$save_ifs
+           if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
              func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
              func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
            fi
@@ -8224,16 +9719,16 @@ EOF
        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"
+         tmp_export_symbols=$export_symbols
+         test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
          $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
        fi
 
-       if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
+       if test : != "$skipped_export" && 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"
+         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
+         # '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.
@@ -8252,11 +9747,11 @@ EOF
            ;;
          esac
        done
-       deplibs="$tmp_deplibs"
+       deplibs=$tmp_deplibs
 
        if test -n "$convenience"; then
          if test -n "$whole_archive_flag_spec" &&
-           test "$compiler_needs_object" = yes &&
+           test yes = "$compiler_needs_object" &&
            test -z "$libobjs"; then
            # extract the archives, so we have objects to list.
            # TODO: could optimize this to just extract one archive.
@@ -8267,7 +9762,7 @@ EOF
            eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
            test "X$libobjs" = "X " && libobjs=
          else
-           gentop="$output_objdir/${outputname}x"
+           gentop=$output_objdir/${outputname}x
            func_append generated " $gentop"
 
            func_extract_archives $gentop $convenience
@@ -8276,18 +9771,18 @@ EOF
          fi
        fi
 
-       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+       if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
          eval flag=\"$thread_safe_flag_spec\"
          func_append linker_flags " $flag"
        fi
 
        # Make a backup of the uninstalled library when relinking
-       if test "$opt_mode" = relink; then
+       if test relink = "$opt_mode"; 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 yes = "$module" && 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
@@ -8305,7 +9800,7 @@ EOF
          fi
        fi
 
-       if test "X$skipped_export" != "X:" &&
+       if test : != "$skipped_export" &&
           func_len " $test_cmds" &&
           len=$func_len_result &&
           test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
@@ -8338,8 +9833,8 @@ EOF
          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
+         if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+           output=$output_objdir/$output_la.lnkscript
            func_verbose "creating GNU ld script: $output"
            echo 'INPUT (' > $output
            for obj in $save_libobjs
@@ -8351,14 +9846,14 @@ EOF
            func_append delfiles " $output"
            func_to_tool_file "$output"
            output=$func_to_tool_file_result
-         elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
-           output=${output_objdir}/${output_la}.lnk
+         elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; 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
+           if test yes = "$compiler_needs_object"; then
              firstobj="$1 "
              shift
            fi
@@ -8373,7 +9868,7 @@ EOF
          else
            if test -n "$save_libobjs"; then
              func_verbose "creating reloadable object files..."
-             output=$output_objdir/$output_la-${k}.$objext
+             output=$output_objdir/$output_la-$k.$objext
              eval test_cmds=\"$reload_cmds\"
              func_len " $test_cmds"
              len0=$func_len_result
@@ -8385,13 +9880,13 @@ EOF
                func_len " $obj"
                func_arith $len + $func_len_result
                len=$func_arith_result
-               if test "X$objlist" = X ||
+               if test -z "$objlist" ||
                   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
+                 if test 1 -eq "$k"; then
                    # The first file doesn't have a previous command to add.
                    reload_objs=$objlist
                    eval concat_cmds=\"$reload_cmds\"
@@ -8401,10 +9896,10 @@ EOF
                    reload_objs="$objlist $last_robj"
                    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
                  fi
-                 last_robj=$output_objdir/$output_la-${k}.$objext
+                 last_robj=$output_objdir/$output_la-$k.$objext
                  func_arith $k + 1
                  k=$func_arith_result
-                 output=$output_objdir/$output_la-${k}.$objext
+                 output=$output_objdir/$output_la-$k.$objext
                  objlist=" $obj"
                  func_len " $last_robj"
                  func_arith $len0 + $func_len_result
@@ -8416,9 +9911,9 @@ EOF
              # files will link in the last one created.
              test -z "$concat_cmds" || concat_cmds=$concat_cmds~
              reload_objs="$objlist $last_robj"
-             eval concat_cmds=\"\${concat_cmds}$reload_cmds\"
+             eval concat_cmds=\"\$concat_cmds$reload_cmds\"
              if test -n "$last_robj"; then
-               eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
+               eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
              fi
              func_append delfiles " $output"
 
@@ -8426,9 +9921,9 @@ EOF
              output=
            fi
 
-           if ${skipped_export-false}; then
-             func_verbose "generating symbol list for \`$libname.la'"
-             export_symbols="$output_objdir/$libname.exp"
+           ${skipped_export-false} && {
+             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.
@@ -8437,16 +9932,16 @@ EOF
              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='~'
+           save_ifs=$IFS; IFS='~'
            for cmd in $concat_cmds; do
-             IFS="$save_ifs"
-             $opt_silent || {
+             IFS=$save_ifs
+             $opt_quiet || {
                  func_quote_for_expand "$cmd"
                  eval "func_echo $func_quote_for_expand_result"
              }
@@ -8454,7 +9949,7 @@ EOF
                lt_exit=$?
 
                # Restore the uninstalled library and exit
-               if test "$opt_mode" = relink; then
+               if test relink = "$opt_mode"; then
                  ( cd "$output_objdir" && \
                    $RM "${realname}T" && \
                    $MV "${realname}U" "$realname" )
@@ -8463,7 +9958,7 @@ EOF
                exit $lt_exit
              }
            done
-           IFS="$save_ifs"
+           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"'
@@ -8471,18 +9966,18 @@ EOF
            fi
          fi
 
-          if ${skipped_export-false}; then
+          ${skipped_export-false} && {
            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"
+             tmp_export_symbols=$export_symbols
+             test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
              $opt_dry_run || eval '$ECHO "$include_expsyms" | $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"
+             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
+             # '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.
@@ -8491,7 +9986,7 @@ EOF
              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.
@@ -8505,7 +10000,7 @@ EOF
          # value of $libobjs for piecewise linking.
 
          # Do each of the archive commands.
-         if test "$module" = yes && test -n "$module_cmds" ; then
+         if test yes = "$module" && test -n "$module_cmds"; then
            if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
              cmds=$module_expsym_cmds
            else
@@ -8527,7 +10022,7 @@ EOF
 
        # Add any objects from preloaded convenience libraries
        if test -n "$dlprefiles"; then
-         gentop="$output_objdir/${outputname}x"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
@@ -8535,11 +10030,12 @@ EOF
          test "X$libobjs" = "X " && libobjs=
        fi
 
-       save_ifs="$IFS"; IFS='~'
+       save_ifs=$IFS; IFS='~'
        for cmd in $cmds; do
-         IFS="$save_ifs"
+         IFS=$sp$nl
          eval cmd=\"$cmd\"
-         $opt_silent || {
+         IFS=$save_ifs
+         $opt_quiet || {
            func_quote_for_expand "$cmd"
            eval "func_echo $func_quote_for_expand_result"
          }
@@ -8547,7 +10043,7 @@ EOF
            lt_exit=$?
 
            # Restore the uninstalled library and exit
-           if test "$opt_mode" = relink; then
+           if test relink = "$opt_mode"; then
              ( cd "$output_objdir" && \
                $RM "${realname}T" && \
                $MV "${realname}U" "$realname" )
@@ -8556,10 +10052,10 @@ EOF
            exit $lt_exit
          }
        done
-       IFS="$save_ifs"
+       IFS=$save_ifs
 
        # Restore the uninstalled library and exit
-       if test "$opt_mode" = relink; then
+       if test relink = "$opt_mode"; 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
@@ -8579,39 +10075,39 @@ EOF
        done
 
        # If -module or -export-dynamic was specified, set the dlname.
-       if test "$module" = yes || test "$export_dynamic" = yes; then
+       if test yes = "$module" || test yes = "$export_dynamic"; then
          # On all known operating systems, these are identical.
-         dlname="$soname"
+         dlname=$soname
        fi
       fi
       ;;
 
     obj)
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       func_warning "\`-dlopen' is ignored for objects"
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+       func_warning "'-dlopen' is ignored for objects"
       fi
 
       case " $deplibs" in
       *\ -l* | *\ -L*)
-       func_warning "\`-l' and \`-L' are ignored for objects" ;;
+       func_warning "'-l' and '-L' are ignored for objects" ;;
       esac
 
       test -n "$rpath" && \
-       func_warning "\`-rpath' is ignored for objects"
+       func_warning "'-rpath' is ignored for objects"
 
       test -n "$xrpath" && \
-       func_warning "\`-R' is ignored for objects"
+       func_warning "'-R' is ignored for objects"
 
       test -n "$vinfo" && \
-       func_warning "\`-version-info' is ignored for objects"
+       func_warning "'-version-info' is ignored for objects"
 
       test -n "$release" && \
-       func_warning "\`-release' is ignored for objects"
+       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"
+         func_fatal_error "cannot build library object '$output' from non-libtool objects"
 
        libobj=$output
        func_lo2o "$libobj"
@@ -8619,7 +10115,7 @@ EOF
        ;;
       *)
        libobj=
-       obj="$output"
+       obj=$output
        ;;
       esac
 
@@ -8632,17 +10128,19 @@ EOF
       # 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 reload_cmds runs $LD directly, get rid of -Wl from
+      # whole_archive_flag_spec and hope we can get by with turning comma
+      # into space.
+      case $reload_cmds in
+        *\$LD[\ \$]*) wl= ;;
+      esac
       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 "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+         test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+         reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
        else
-         gentop="$output_objdir/${obj}x"
+         gentop=$output_objdir/${obj}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $convenience
@@ -8651,12 +10149,12 @@ EOF
       fi
 
       # If we're not building shared, we need to use non_pic_objs
-      test "$build_libtool_libs" != yes && libobjs="$non_pic_objects"
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
 
       # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
 
-      output="$obj"
+      output=$obj
       func_execute_cmds "$reload_cmds" 'exit $?'
 
       # Exit if we aren't doing a library object file.
@@ -8668,7 +10166,7 @@ EOF
        exit $EXIT_SUCCESS
       fi
 
-      if test "$build_libtool_libs" != yes; then
+      test yes = "$build_libtool_libs" || {
        if test -n "$gentop"; then
          func_show_eval '${RM}r "$gentop"'
        fi
@@ -8678,12 +10176,12 @@ EOF
        # $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
+      if test -n "$pic_flag" || test default != "$pic_mode"; then
        # Only do commands if we really have different PIC objects.
        reload_objs="$libobjs $reload_conv_objs"
-       output="$libobj"
+       output=$libobj
        func_execute_cmds "$reload_cmds" 'exit $?'
       fi
 
@@ -8700,16 +10198,14 @@ EOF
                  output=$func_stripname_result.exe;;
       esac
       test -n "$vinfo" && \
-       func_warning "\`-version-info' is ignored for programs"
+       func_warning "'-version-info' is ignored for programs"
 
       test -n "$release" && \
-       func_warning "\`-release' is ignored for programs"
+       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."
+      $preload \
+       && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+       && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
 
       case $host in
       *-*-rhapsody* | *-*-darwin1.[012])
@@ -8723,11 +10219,11 @@ EOF
       *-*-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
+       if test CXX = "$tagname"; then
          case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
            10.[0123])
-             func_append compile_command " ${wl}-bind_at_load"
-             func_append finalize_command " ${wl}-bind_at_load"
+             func_append compile_command " $wl-bind_at_load"
+             func_append finalize_command " $wl-bind_at_load"
            ;;
          esac
        fi
@@ -8763,7 +10259,7 @@ EOF
        *) func_append new_libs " $deplib" ;;
        esac
       done
-      compile_deplibs="$new_libs"
+      compile_deplibs=$new_libs
 
 
       func_append compile_command " $compile_deplibs"
@@ -8787,7 +10283,7 @@ EOF
        if test -n "$hardcode_libdir_flag_spec"; then
          if test -n "$hardcode_libdir_separator"; then
            if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
+             hardcode_libdirs=$libdir
            else
              # Just accumulate the unique libdirs.
              case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8810,7 +10306,7 @@ EOF
        fi
        case $host in
        *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
-         testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
+         testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
          case :$dllsearchpath: in
          *":$libdir:"*) ;;
          ::) dllsearchpath=$libdir;;
@@ -8827,10 +10323,10 @@ EOF
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
         test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
+       libdir=$hardcode_libdirs
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      compile_rpath="$rpath"
+      compile_rpath=$rpath
 
       rpath=
       hardcode_libdirs=
@@ -8838,7 +10334,7 @@ EOF
        if test -n "$hardcode_libdir_flag_spec"; then
          if test -n "$hardcode_libdir_separator"; then
            if test -z "$hardcode_libdirs"; then
-             hardcode_libdirs="$libdir"
+             hardcode_libdirs=$libdir
            else
              # Just accumulate the unique libdirs.
              case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
@@ -8863,45 +10359,43 @@ EOF
       # Substitute the hardcoded libdirs into the rpath.
       if test -n "$hardcode_libdir_separator" &&
         test -n "$hardcode_libdirs"; then
-       libdir="$hardcode_libdirs"
+       libdir=$hardcode_libdirs
        eval rpath=\" $hardcode_libdir_flag_spec\"
       fi
-      finalize_rpath="$rpath"
+      finalize_rpath=$rpath
 
-      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+      if test -n "$libobjs" && test yes = "$build_old_libs"; then
        # Transform all the library objects into standard objects.
        compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
        finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
       fi
 
-      func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
+      func_generate_dlsyms "$outputname" "@PROGRAM@" false
 
       # template prelinking step
       if test -n "$prelink_cmds"; then
        func_execute_cmds "$prelink_cmds" 'exit $?'
       fi
 
-      wrappers_required=yes
+      wrappers_required=:
       case $host in
       *cegcc* | *mingw32ce*)
         # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
-        wrappers_required=no
+        wrappers_required=false
         ;;
       *cygwin* | *mingw* )
-        if test "$build_libtool_libs" != yes; then
-          wrappers_required=no
-        fi
+        test yes = "$build_libtool_libs" || wrappers_required=false
         ;;
       *)
-        if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-          wrappers_required=no
+        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+          wrappers_required=false
         fi
         ;;
       esac
-      if test "$wrappers_required" = no; then
+      $wrappers_required || {
        # Replace the output file specification.
        compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
-       link_command="$compile_command$compile_rpath"
+       link_command=$compile_command$compile_rpath
 
        # We have no uninstalled library dependencies, so finalize right now.
        exit_status=0
@@ -8914,12 +10408,12 @@ EOF
        fi
 
        # Delete the generated files.
-       if test -f "$output_objdir/${outputname}S.${objext}"; then
-         func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
+       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"
@@ -8949,9 +10443,9 @@ EOF
        fi
       fi
 
-      if test "$no_install" = yes; then
+      if test yes = "$no_install"; then
        # We don't need to create a wrapper script.
-       link_command="$compile_var$compile_command$compile_rpath"
+       link_command=$compile_var$compile_command$compile_rpath
        # Replace the output file specification.
        link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
        # Delete the old output file.
@@ -8968,27 +10462,28 @@ EOF
        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"
+      case $hardcode_action,$fast_install in
+        relink,*)
+         # 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 "$compile_var$compile_command$compile_rpath" | $SED '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
+         func_warning "this platform does not like uninstalled shared libraries"
+         func_warning "'$output' will be relinked during installation"
+         ;;
+        *,yes)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+          ;;
+       *,no)
+         link_command=$compile_var$compile_command$compile_rpath
+         relink_command=$finalize_var$finalize_command$finalize_rpath
+          ;;
+       *,needless)
+         link_command=$finalize_var$compile_command$finalize_rpath
+         relink_command=
+          ;;
+      esac
 
       # Replace the output file specification.
       link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
@@ -9045,8 +10540,8 @@ EOF
            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"
+           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
 
@@ -9067,7 +10562,7 @@ EOF
            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
+             if test "x$build" = "x$host"; then
                $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
              else
                func_emit_wrapper no > $func_ltwrapper_scriptname_result
@@ -9090,25 +10585,27 @@ EOF
     # 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"
+      case $build_libtool_libs in
+        convenience)
+         oldobjs="$libobjs_save $symfileobj"
+         addlibs=$convenience
          build_libtool_libs=no
-       else
+         ;;
+       module)
+         oldobjs=$libobjs_save
+         addlibs=$old_convenience
+         build_libtool_libs=no
+          ;;
+       *)
          oldobjs="$old_deplibs $non_pic_objects"
-         if test "$preload" = yes && test -f "$symfileobj"; then
-           func_append oldobjs " $symfileobj"
-         fi
-       fi
-       addlibs="$old_convenience"
-      fi
+         $preload && test -f "$symfileobj" \
+           && func_append oldobjs " $symfileobj"
+         addlibs=$old_convenience
+         ;;
+      esac
 
       if test -n "$addlibs"; then
-       gentop="$output_objdir/${outputname}x"
+       gentop=$output_objdir/${outputname}x
        func_append generated " $gentop"
 
        func_extract_archives $gentop $addlibs
@@ -9116,13 +10613,13 @@ EOF
       fi
 
       # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; 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"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
 
          func_extract_archives $gentop $dlprefiles
@@ -9143,7 +10640,7 @@ EOF
          :
        else
          echo "copying selected object files to avoid basename conflicts..."
-         gentop="$output_objdir/${outputname}x"
+         gentop=$output_objdir/${outputname}x
          func_append generated " $gentop"
          func_mkdir_p "$gentop"
          save_oldobjs=$oldobjs
@@ -9152,7 +10649,7 @@ EOF
          for obj in $save_oldobjs
          do
            func_basename "$obj"
-           objbase="$func_basename_result"
+           objbase=$func_basename_result
            case " $oldobjs " in
            " ") oldobjs=$obj ;;
            *[\ /]"$objbase "*)
@@ -9221,18 +10718,18 @@ EOF
            else
              # the above command should be used before it gets too long
              oldobjs=$objlist
-             if test "$obj" = "$last_oldobj" ; then
+             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\"
+             eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
              objlist=
              len=$len0
            fi
          done
          RANLIB=$save_RANLIB
          oldobjs=$objlist
-         if test "X$oldobjs" = "X" ; then
+         if test -z "$oldobjs"; then
            eval cmds=\"\$concat_cmds\"
          else
            eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
@@ -9249,7 +10746,7 @@ EOF
     case $output in
     *.la)
       old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      test yes = "$build_old_libs" && old_library=$libname.$libext
       func_verbose "creating $output"
 
       # Preserve any variables that may affect compiler behavior
@@ -9264,31 +10761,31 @@ EOF
        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="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
-      if test "$hardcode_automatic" = yes ; then
+      if test yes = "$hardcode_automatic"; 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 yes = "$installed"; then
            if test -z "$install_libdir"; then
              break
            fi
-           output="$output_objdir/$outputname"i
+           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"
+               name=$func_basename_result
                func_resolve_sysroot "$deplib"
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+               eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
                test -z "$libdir" && \
-                 func_fatal_error "\`$deplib' is not a valid libtool archive"
+                 func_fatal_error "'$deplib' is not a valid libtool archive"
                func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
                ;;
              -L*)
@@ -9304,23 +10801,23 @@ EOF
              *) func_append newdependency_libs " $deplib" ;;
              esac
            done
-           dependency_libs="$newdependency_libs"
+           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`
+               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"
+                 func_fatal_error "'$lib' is not a valid libtool archive"
                func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              *) func_append newdlfiles " $lib" ;;
              esac
            done
-           dlfiles="$newdlfiles"
+           dlfiles=$newdlfiles
            newdlprefiles=
            for lib in $dlprefiles; do
              case $lib in
@@ -9330,34 +10827,34 @@ EOF
                # 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`
+               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"
+                 func_fatal_error "'$lib' is not a valid libtool archive"
                func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
                ;;
              esac
            done
-           dlprefiles="$newdlprefiles"
+           dlprefiles=$newdlprefiles
          else
            newdlfiles=
            for lib in $dlfiles; do
              case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
                *) abs=`pwd`"/$lib" ;;
              esac
              func_append newdlfiles " $abs"
            done
-           dlfiles="$newdlfiles"
+           dlfiles=$newdlfiles
            newdlprefiles=
            for lib in $dlprefiles; do
              case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
+               [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
                *) abs=`pwd`"/$lib" ;;
              esac
              func_append newdlprefiles " $abs"
            done
-           dlprefiles="$newdlprefiles"
+           dlprefiles=$newdlprefiles
          fi
          $RM $output
          # place dlname in correct position for cygwin
@@ -9373,10 +10870,9 @@ EOF
          case $host,$output,$installed,$module,$dlname in
            *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
              # If a -bindir argument was supplied, place the dll there.
-             if test "x$bindir" != x ;
-             then
+             if test -n "$bindir"; then
                func_relative_path "$install_libdir" "$bindir"
-               tdlname=$func_relative_path_result$dlname
+               tdlname=$func_relative_path_result/$dlname
              else
                # Otherwise fall back on heuristic.
                tdlname=../bin/$dlname
@@ -9385,7 +10881,7 @@ EOF
          esac
          $ECHO > $output "\
 # $outputname - a libtool library file
-# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
 #
 # Please DO NOT delete this file!
 # It is necessary for linking the library.
@@ -9399,7 +10895,7 @@ library_names='$library_names'
 # The name of the static archive.
 old_library='$old_library'
 
-# Linker flags that can not go in dependency_libs.
+# Linker flags that cannot go in dependency_libs.
 inherited_linker_flags='$new_inherited_linker_flags'
 
 # Libraries that this one depends upon.
@@ -9425,7 +10921,7 @@ dlpreopen='$dlprefiles'
 
 # Directory that this library needs to be installed in:
 libdir='$install_libdir'"
-         if test "$installed" = no && test "$need_relink" = yes; then
+         if test no,yes = "$installed,$need_relink"; then
            $ECHO >> $output "\
 relink_command=\"$relink_command\""
          fi
@@ -9440,27 +10936,29 @@ relink_command=\"$relink_command\""
     exit $EXIT_SUCCESS
 }
 
-{ test "$opt_mode" = link || test "$opt_mode" = relink; } &&
-    func_mode_link ${1+"$@"}
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+  func_mode_link ${1+"$@"}
+fi
 
 
 # func_mode_uninstall arg...
 func_mode_uninstall ()
 {
-    $opt_debug
-    RM="$nonopt"
+    $debug_cmd
+
+    RM=$nonopt
     files=
-    rmforce=
+    rmforce=false
     exit_status=0
 
     # This variable tells wrapper scripts just to set variables rather
     # than running their programs.
-    libtool_install_magic="$magic"
+    libtool_install_magic=$magic
 
     for arg
     do
       case $arg in
-      -f) func_append RM " $arg"; rmforce=yes ;;
+      -f) func_append RM " $arg"; rmforce=: ;;
       -*) func_append RM " $arg" ;;
       *) func_append files " $arg" ;;
       esac
@@ -9473,18 +10971,18 @@ func_mode_uninstall ()
 
     for file in $files; do
       func_dirname "$file" "" "."
-      dir="$func_dirname_result"
-      if test "X$dir" = X.; then
-       odir="$objdir"
+      dir=$func_dirname_result
+      if test . = "$dir"; then
+       odir=$objdir
       else
-       odir="$dir/$objdir"
+       odir=$dir/$objdir
       fi
       func_basename "$file"
-      name="$func_basename_result"
-      test "$opt_mode" = uninstall && odir="$dir"
+      name=$func_basename_result
+      test uninstall = "$opt_mode" && odir=$dir
 
       # Remember odir for removal later, being careful to avoid duplicates
-      if test "$opt_mode" = clean; then
+      if test clean = "$opt_mode"; then
        case " $rmdirs " in
          *" $odir "*) ;;
          *) func_append rmdirs " $odir" ;;
@@ -9499,11 +10997,11 @@ func_mode_uninstall ()
       elif test -d "$file"; then
        exit_status=1
        continue
-      elif test "$rmforce" = yes; then
+      elif $rmforce; then
        continue
       fi
 
-      rmfiles="$file"
+      rmfiles=$file
 
       case $name in
       *.la)
@@ -9517,7 +11015,7 @@ func_mode_uninstall ()
          done
          test -n "$old_library" && func_append rmfiles " $odir/$old_library"
 
-         case "$opt_mode" in
+         case $opt_mode in
          clean)
            case " $library_names " in
            *" $dlname "*) ;;
@@ -9528,12 +11026,12 @@ func_mode_uninstall ()
          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'
+             func_execute_cmds "$postuninstall_cmds" '$rmforce || 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'
+             func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
            fi
            # FIXME: should reinstall the best remaining shared library.
            ;;
@@ -9549,21 +11047,19 @@ func_mode_uninstall ()
          func_source $dir/$name
 
          # Add PIC object to the list of files to remove.
-         if test -n "$pic_object" &&
-            test "$pic_object" != none; then
+         if test -n "$pic_object" && test none != "$pic_object"; then
            func_append 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
+         if test -n "$non_pic_object" && test none != "$non_pic_object"; then
            func_append rmfiles " $dir/$non_pic_object"
          fi
        fi
        ;;
 
       *)
-       if test "$opt_mode" = clean ; then
+       if test clean = "$opt_mode"; then
          noexename=$name
          case $file in
          *.exe)
@@ -9590,12 +11086,12 @@ func_mode_uninstall ()
 
            # note $name still contains .exe if it was in $file originally
            # as does the version of $file that was added into $rmfiles
-           func_append rmfiles " $odir/$name $odir/${name}S.${objext}"
-           if test "$fast_install" = yes && test -n "$relink_command"; then
+           func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+           if test yes = "$fast_install" && test -n "$relink_command"; then
              func_append rmfiles " $odir/lt-$name"
            fi
-           if test "X$noexename" != "X$name" ; then
-             func_append rmfiles " $odir/lt-${noexename}.c"
+           if test "X$noexename" != "X$name"; then
+             func_append rmfiles " $odir/lt-$noexename.c"
            fi
          fi
        fi
@@ -9604,7 +11100,7 @@ func_mode_uninstall ()
       func_show_eval "$RM $rmfiles" 'exit_status=1'
     done
 
-    # Try to remove the ${objdir}s in the directories where we deleted files
+    # 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"
@@ -9614,16 +11110,17 @@ func_mode_uninstall ()
     exit $exit_status
 }
 
-{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } &&
-    func_mode_uninstall ${1+"$@"}
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+  func_mode_uninstall ${1+"$@"}
+fi
 
 test -z "$opt_mode" && {
-  help="$generic_help"
+  help=$generic_help
   func_fatal_help "you must specify a MODE"
 }
 
 test -z "$exec_cmd" && \
-  func_fatal_help "invalid operation mode \`$opt_mode'"
+  func_fatal_help "invalid operation mode '$opt_mode'"
 
 if test -n "$exec_cmd"; then
   eval exec "$exec_cmd"
@@ -9634,7 +11131,7 @@ 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
+# where 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
@@ -9657,5 +11154,3 @@ build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
 # mode:shell-script
 # sh-indentation:2
 # End:
-# vi:sw=2
-
index f1a634b..085c6ff 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -66,7 +66,7 @@ AC_DEFUN([CURL_CHECK_COMPILER], [
 ***
 *** 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/
+*** mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/
 ***
 _EOF
   fi
index 44b018e..a396be6 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -316,6 +316,42 @@ dnl     AC_MSG_ERROR([options --enable-ares and --enable-threads are mutually ex
 dnl   fi
 dnl ])
 
+dnl CURL_CHECK_OPTION_RT
+dnl -------------------------------------------------
+dnl Verify if configure has been involed with option
+dnl --disable-rt and set shell variable dontwant_rt
+dnl as appropriate.
+
+AC_DEFUN([CURL_CHECK_OPTION_RT], [
+  AC_BEFORE([$0], [CURL_CHECK_LIB_THREADS])dnl
+  AC_MSG_CHECKING([whether to disable dependency on -lrt])
+  OPT_RT="default"
+  AC_ARG_ENABLE(rt,
+ AC_HELP_STRING([--disable-rt],[disable dependency on -lrt]),
+  OPT_RT=$enableval)
+  case "$OPT_RT" in
+    no)
+      dnl --disable-rt used (reverse logic)
+      dontwant_rt="yes"
+      AC_MSG_RESULT([yes])
+      ;;
+    default)
+      dnl configure option not specified (so not disabled)
+      dontwant_rt="no"
+      AC_MSG_RESULT([(assumed no)])
+      ;;
+    *)
+      dnl --enable-rt option used (reverse logic)
+      dontwant_rt="no"
+      AC_MSG_RESULT([no])
+      ;;
+  esac
+  dnl TODO: may require mutual exclusion
+  if test "$dontwant_rt" = "yes" && test "$want_thres" = "yes" ; then
+    AC_MSG_ERROR([options --disable-rt and --enable-thread-resolver are mutually exclusive, at most one can be selected.])
+  fi
+])
 
 dnl CURL_CHECK_OPTION_WARNINGS
 dnl -------------------------------------------------
index 0d65421..ed263ba 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -44,6 +44,10 @@ curl_includes_arpa_inet="\
 #ifdef HAVE_ARPA_INET_H
 #  include <arpa/inet.h>
 #endif
+#ifdef HAVE_WINSOCK2_H
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#endif
 /* includes end */"
   AC_CHECK_HEADERS(
     sys/types.h sys/socket.h netinet/in.h arpa/inet.h,
@@ -2098,6 +2102,12 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
         struct addrinfo *ai = 0;
         int error;
 
+        #ifdef HAVE_WINSOCK2_H
+        WSADATA wsa;
+        if (WSAStartup(MAKEWORD(2,2), &wsa))
+                exit(2);
+        #endif
+
         memset(&hints, 0, sizeof(hints));
         hints.ai_flags = AI_NUMERICHOST;
         hints.ai_family = AF_UNSPEC;
index cd9074b..20c3126 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -67,6 +67,7 @@ AC_DEFUN([CURL_CHECK_OPENSSL_API_HEADERS], [
     esac
     case $tst_api in
       0x110) tst_show="1.1.0" ;;
+      0x102) tst_show="1.0.2" ;;
       0x101) tst_show="1.0.1" ;;
       0x100) tst_show="1.0.0" ;;
       0x099) tst_show="0.9.9" ;;
@@ -140,6 +141,13 @@ AC_DEFUN([CURL_CHECK_OPENSSL_API_LIBRARY], [
   fi
   if test "$tst_api" = "unknown"; then
     AC_LINK_IFELSE([
+      AC_LANG_FUNC_LINK_TRY([SSL_CONF_CTX_new])
+    ],[
+      tst_api="0x102"
+    ])
+  fi
+  if test "$tst_api" = "unknown"; then
+    AC_LINK_IFELSE([
       AC_LANG_FUNC_LINK_TRY([SSL_renegotiate_abbreviated])
     ],[
       tst_api="0x101"
@@ -210,6 +218,7 @@ AC_DEFUN([CURL_CHECK_OPENSSL_API_LIBRARY], [
   fi
   case $tst_api in
     0x110) tst_show="1.1.0" ;;
+    0x102) tst_show="1.0.2" ;;
     0x101) tst_show="1.0.1" ;;
     0x100) tst_show="1.0.0" ;;
     0x099) tst_show="0.9.9" ;;
index 842cc40..e32d3f8 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 2930a7d..b202060 100644 (file)
@@ -1,8 +1,6 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
-#   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
-#                 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-#                 Foundation, Inc.
+#   Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
 # 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, 2009, 2010, 2011 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.
+# Copyright (C) 2014 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 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.
+# 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
+# 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.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ])
 
-# serial 57 LT_INIT
+# serial 58 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -67,7 +59,7 @@ esac
 # LT_INIT([OPTIONS])
 # ------------------
 AC_DEFUN([LT_INIT],
-[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
 AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
 AC_BEFORE([$0], [LT_LANG])dnl
 AC_BEFORE([$0], [LT_OUTPUT])dnl
@@ -91,7 +83,7 @@ dnl Parse OPTIONS
 _LT_SET_OPTIONS([$0], [$1])
 
 # This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ltmain"
+LIBTOOL_DEPS=$ltmain
 
 # Always use our own libtool.
 LIBTOOL='$(SHELL) $(top_builddir)/libtool'
@@ -111,26 +103,43 @@ dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
 dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
 
 
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+        distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+        \-*) ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
 # _LT_CC_BASENAME(CC)
 # -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
 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 "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
 ])
 
 
 # _LT_FILEUTILS_DEFAULTS
 # ----------------------
 # It is okay to use these file commands and assume they have been set
-# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
 m4_defun([_LT_FILEUTILS_DEFAULTS],
 [: ${CP="cp -f"}
 : ${MV="mv -f"}
@@ -177,15 +186,16 @@ m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
 m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
 m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
 
 _LT_CONFIG_LIBTOOL_INIT([
-# See if we are running on zsh, and set the options which allow our
+# See if we are running on zsh, and set the options that allow our
 # commands through without removal of \ escapes INIT.
-if test -n "\${ZSH_VERSION+set}" ; then
+if test -n "\${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 ])
-if test -n "${ZSH_VERSION+set}" ; then
+if test -n "${ZSH_VERSION+set}"; then
    setopt NO_GLOB_SUBST
 fi
 
@@ -198,7 +208,7 @@ 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
+  if test set != "${COLLECT_NAMES+set}"; then
     COLLECT_NAMES=
     export COLLECT_NAMES
   fi
@@ -209,14 +219,14 @@ esac
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a `.a' archive for static linking (except MSVC,
+# 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"
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
+old_CC=$CC
+old_CFLAGS=$CFLAGS
 
 # Set sane defaults for various variables
 test -z "$CC" && CC=cc
@@ -269,14 +279,14 @@ no_glob_subst='s/\*/\\\*/g'
 
 # _LT_PROG_LTMAIN
 # ---------------
-# Note that this code is called both from `configure', and `config.status'
+# 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,
+# '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"
+ltmain=$ac_aux_dir/ltmain.sh
 ])# _LT_PROG_LTMAIN
 
 
@@ -286,7 +296,7 @@ ltmain="$ac_aux_dir/ltmain.sh"
 
 # 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'
+# in macros and then make a single call at the end using the 'libtool'
 # label.
 
 
@@ -421,8 +431,8 @@ m4_define([_lt_decl_all_varnames],
 
 # _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
+# 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 "$][$1" | $SED "$delay_single_quote_subst"`'])
@@ -446,7 +456,7 @@ m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
 # 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
+available_tags='_LT_TAGS'dnl
 ])
 
 
@@ -474,7 +484,7 @@ 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'
+# 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],
@@ -500,8 +510,8 @@ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
 # 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
+# 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],
@@ -547,7 +557,7 @@ for var in lt_decl_all_varnames([[ \
 ]], lt_decl_quote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -560,7 +570,7 @@ for var in lt_decl_all_varnames([[ \
 ]], lt_decl_dquote_varnames); do
     case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
     *[[\\\\\\\`\\"\\\$]]*)
-      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
       ;;
     *)
       eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
@@ -576,7 +586,7 @@ _LT_OUTPUT_LIBTOOL_INIT
 # Generate a child script FILE with all initialization necessary to
 # reuse the environment learned by the parent script, and make the
 # file executable.  If COMMENT is supplied, it is inserted after the
-# `#!' sequence but before initialization text begins.  After this
+# '#!' sequence but before initialization text begins.  After this
 # macro, additional text can be appended to FILE to form the body of
 # the child script.  The macro ends with non-zero status if the
 # file could not be fully written (such as if the disk is full).
@@ -598,7 +608,7 @@ AS_SHELL_SANITIZE
 _AS_PREPARE
 exec AS_MESSAGE_FD>&1
 _ASEOF
-test $lt_write_fail = 0 && chmod +x $1[]dnl
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
 m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
 
 # LT_OUTPUT
@@ -621,7 +631,7 @@ exec AS_MESSAGE_LOG_FD>>config.log
 } >&AS_MESSAGE_LOG_FD
 
 lt_cl_help="\
-\`$as_me' creates a local libtool stub from the current configuration,
+'$as_me' creates a local libtool stub from the current configuration,
 for use in further configure time tests before the real libtool is
 generated.
 
@@ -643,7 +653,7 @@ Copyright (C) 2011 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
+while test 0 != $[#]
 do
   case $[1] in
     --version | --v* | -V )
@@ -656,10 +666,10 @@ do
       lt_cl_silent=: ;;
 
     -*) AC_MSG_ERROR([unrecognized option: $[1]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
 
     *) AC_MSG_ERROR([unrecognized argument: $[1]
-Try \`$[0] --help' for more information.]) ;;
+Try '$[0] --help' for more information.]) ;;
   esac
   shift
 done
@@ -685,7 +695,7 @@ chmod +x "$CONFIG_LT"
 # 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.
 lt_cl_success=:
-test "$silent" = yes &&
+test yes = "$silent" &&
   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
@@ -705,27 +715,31 @@ m4_defun([_LT_CONFIG],
 _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
+    # See if we are running on zsh, and set the options that allow our
     # commands through without removal of \ escapes.
-    if test -n "${ZSH_VERSION+set}" ; then
+    if test -n "${ZSH_VERSION+set}"; then
       setopt NO_GLOB_SUBST
     fi
 
-    cfgfile="${ofile}T"
+    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
+# Generated automatically by $as_me ($PACKAGE) $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.
-#
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
 _LT_COPYING
 _LT_LIBTOOL_TAGS
 
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
 # ### BEGIN LIBTOOL CONFIG
 _LT_LIBTOOL_CONFIG_VARS
 _LT_LIBTOOL_TAG_VARS
@@ -733,13 +747,24 @@ _LT_LIBTOOL_TAG_VARS
 
 _LT_EOF
 
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_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
+if test set != "${COLLECT_NAMES+set}"; then
   COLLECT_NAMES=
   export COLLECT_NAMES
 fi
@@ -756,8 +781,6 @@ _LT_EOF
   sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
-  _LT_PROG_REPLACE_SHELLFNS
-
    mv -f "$cfgfile" "$ofile" ||
     (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
   chmod +x "$ofile"
@@ -775,7 +798,6 @@ _LT_EOF
 [m4_if([$1], [], [
     PACKAGE='$PACKAGE'
     VERSION='$VERSION'
-    TIMESTAMP='$TIMESTAMP'
     RM='$RM'
     ofile='$ofile'], [])
 ])dnl /_LT_CONFIG_SAVE_COMMANDS
@@ -974,7 +996,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
 
     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
+      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
@@ -992,7 +1014,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
          cat conftest.err >&AS_MESSAGE_LOG_FD
        # Otherwise, if the output was created with a 0 exit code from
        # the compiler, it worked.
-       elif test -f libconftest.dylib && test $_lt_result -eq 0; then
+       elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
          lt_cv_apple_cc_single_mod=yes
        else
          cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1010,7 +1032,7 @@ m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
       AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
        [lt_cv_ld_exported_symbols_list=yes],
        [lt_cv_ld_exported_symbols_list=no])
-       LDFLAGS="$save_LDFLAGS"
+       LDFLAGS=$save_LDFLAGS
     ])
 
     AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
@@ -1032,7 +1054,7 @@ _LT_EOF
       _lt_result=$?
       if test -s conftest.err && $GREP force_load conftest.err; then
        cat conftest.err >&AS_MESSAGE_LOG_FD
-      elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
        lt_cv_ld_force_load=yes
       else
        cat conftest.err >&AS_MESSAGE_LOG_FD
@@ -1042,32 +1064,32 @@ _LT_EOF
     ])
     case $host_os in
     rhapsody* | darwin1.[[012]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
-      _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
+      _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' ;;
+         _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' ;;
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
-    if test "$lt_cv_apple_cc_single_mod" = "yes"; then
+    if test yes = "$lt_cv_apple_cc_single_mod"; 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'
+    if test yes = "$lt_cv_ld_exported_symbols_list"; 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}'
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
     fi
-    if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
       _lt_dsymutil='~$DSYMUTIL $lib || :'
     else
       _lt_dsymutil=
@@ -1087,29 +1109,29 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
   _LT_TAGVAR(hardcode_direct, $1)=no
   _LT_TAGVAR(hardcode_automatic, $1)=yes
   _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  if test "$lt_cv_ld_force_load" = "yes"; then
-    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+  if test yes = "$lt_cv_ld_force_load"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
     m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
                   [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
   else
     _LT_TAGVAR(whole_archive_flag_spec, $1)=''
   fi
   _LT_TAGVAR(link_all_deplibs, $1)=yes
-  _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
+  _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
   case $cc_basename in
-     ifort*) _lt_dar_can_shared=yes ;;
+     ifort*|nagfor*) _lt_dar_can_shared=yes ;;
      *) _lt_dar_can_shared=$GCC ;;
   esac
-  if test "$_lt_dar_can_shared" = "yes"; then
+  if test yes = "$_lt_dar_can_shared"; then
     output_verbose_link_cmd=func_echo_all
-    _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}"
+    _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}"
+[   if test yes != "$lt_cv_apple_cc_single_mod"; 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
@@ -1129,7 +1151,7 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
 # Allow to override them for all tags through lt_cv_aix_libpath.
 m4_defun([_LT_SYS_MODULE_PATH_AIX],
 [m4_require([_LT_DECL_SED])dnl
-if test "${lt_cv_aix_libpath+set}" = set; then
+if test set = "${lt_cv_aix_libpath+set}"; then
   aix_libpath=$lt_cv_aix_libpath
 else
   AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
@@ -1147,7 +1169,7 @@ else
     _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
   fi],[])
   if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
-    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib"
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
   fi
   ])
   aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
@@ -1167,8 +1189,8 @@ m4_define([_LT_SHELL_INIT],
 # -----------------------
 # Find how we can fake an echo command that does not interpret backslash.
 # In particular, with Autoconf 2.60 or later we add some code to the start
-# of the generated configure script which will find a shell with a builtin
-# printf (which we can use as an echo command).
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
 m4_defun([_LT_PROG_ECHO_BACKSLASH],
 [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
@@ -1196,10 +1218,10 @@ fi
 # Invoke $ECHO with all args, space-separated.
 func_echo_all ()
 {
-    $ECHO "$*" 
+    $ECHO "$*"
 }
 
-case "$ECHO" in
+case $ECHO in
   printf*) AC_MSG_RESULT([printf]) ;;
   print*) AC_MSG_RESULT([print -r]) ;;
   *) AC_MSG_RESULT([cat]) ;;
@@ -1225,16 +1247,17 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 AC_DEFUN([_LT_WITH_SYSROOT],
 [AC_MSG_CHECKING([for sysroot])
 AC_ARG_WITH([sysroot],
-[  --with-sysroot[=DIR] Search for dependent libraries within DIR
-                        (or the compiler's sysroot if not specified).],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
 [], [with_sysroot=no])
 
 dnl lt_sysroot will always be passed unquoted.  We quote it here
 dnl in case the user passed a directory name.
 lt_sysroot=
-case ${with_sysroot} in #(
+case $with_sysroot in #(
  yes)
-   if test "$GCC" = yes; then
+   if test yes = "$GCC"; then
      lt_sysroot=`$CC --print-sysroot 2>/dev/null`
    fi
    ;; #(
@@ -1244,14 +1267,14 @@ case ${with_sysroot} in #(
  no|'')
    ;; #(
  *)
-   AC_MSG_RESULT([${with_sysroot}])
+   AC_MSG_RESULT([$with_sysroot])
    AC_MSG_ERROR([The sysroot must be an absolute path.])
    ;;
 esac
 
  AC_MSG_RESULT([${lt_sysroot:-no}])
 _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
-[dependent libraries, and in which our libraries should be installed.])])
+[dependent libraries, and where our libraries should be installed.])])
 
 # _LT_ENABLE_LOCK
 # ---------------
@@ -1259,31 +1282,33 @@ 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
+test no = "$enable_libtool_lock" || 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.
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
   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"
+       HPUX_IA64_MODE=32
        ;;
       *ELF-64*)
-       HPUX_IA64_MODE="64"
+       HPUX_IA64_MODE=64
        ;;
     esac
   fi
   rm -rf conftest*
   ;;
 *-*-irix6*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
-    if test "$lt_cv_prog_gnu_ld" = yes; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
       case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
@@ -1312,9 +1337,46 @@ ia64-*-hpux*)
   rm -rf conftest*
   ;;
 
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+       emul="${emul}32"
+       ;;
+      *64-bit*)
+       emul="${emul}64"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+       emul="${emul}btsmip"
+       ;;
+      *LSB*)
+       emul="${emul}ltsmip"
+       ;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+       emul="${emul}n32"
+       ;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
 x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
 s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
@@ -1333,10 +1395,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
                ;;
            esac
            ;;
-         powerpc64le-*)
+         powerpc64le-*linux*)
            LD="${LD-ld} -m elf32lppclinux"
            ;;
-         powerpc64-*)
+         powerpc64-*linux*)
            LD="${LD-ld} -m elf32ppclinux"
            ;;
          s390x-*linux*)
@@ -1355,10 +1417,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
          x86_64-*linux*)
            LD="${LD-ld} -m elf_x86_64"
            ;;
-         powerpcle-*)
+         powerpcle-*linux*)
            LD="${LD-ld} -m elf64lppc"
            ;;
-         powerpc-*)
+         powerpc-*linux*)
            LD="${LD-ld} -m elf64ppc"
            ;;
          s390*-*linux*|s390*-*tpf*)
@@ -1376,19 +1438,20 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
 
 *-*-sco3.2v5*)
   # On SCO OpenServer 5, we need -belf to get full-featured binaries.
-  SAVE_CFLAGS="$CFLAGS"
+  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
+  if test yes != "$lt_cv_cc_needs_belf"; then
     # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
+    CFLAGS=$SAVE_CFLAGS
   fi
   ;;
 *-*solaris*)
-  # Find out which ABI we are using.
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     case `/usr/bin/file conftest.o` in
@@ -1396,7 +1459,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
       case $lt_cv_prog_gnu_ld in
       yes*)
         case $host in
-        i?86-*-solaris*)
+        i?86-*-solaris*|x86_64-*-solaris*)
           LD="${LD-ld} -m elf_x86_64"
           ;;
         sparc*-*-solaris*)
@@ -1405,7 +1468,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
         esac
         # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
         if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
-          LD="${LD-ld}_sol2"
+          LD=${LD-ld}_sol2
         fi
         ;;
       *)
@@ -1421,7 +1484,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   ;;
 esac
 
-need_locks="$enable_libtool_lock"
+need_locks=$enable_libtool_lock
 ])# _LT_ENABLE_LOCK
 
 
@@ -1440,11 +1503,11 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
      [echo conftest.$ac_objext > conftest.lst
       lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
       AC_TRY_EVAL([lt_ar_try])
-      if test "$ac_status" -eq 0; then
+      if test 0 -eq "$ac_status"; then
        # Ensure the archiver fails upon bogus file names.
        rm -f conftest.$ac_objext libconftest.a
        AC_TRY_EVAL([lt_ar_try])
-       if test "$ac_status" -ne 0; then
+       if test 0 -ne "$ac_status"; then
           lt_cv_ar_at_file=@
         fi
       fi
@@ -1452,7 +1515,7 @@ AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
      ])
   ])
 
-if test "x$lt_cv_ar_at_file" = xno; then
+if test no = "$lt_cv_ar_at_file"; then
   archiver_list_spec=
 else
   archiver_list_spec=$lt_cv_ar_at_file
@@ -1483,7 +1546,7 @@ old_postuninstall_cmds=
 
 if test -n "$RANLIB"; then
   case $host_os in
-  openbsd*)
+  bitrig* | openbsd*)
     old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
     ;;
   *)
@@ -1519,7 +1582,7 @@ 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"
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
    # 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
@@ -1546,7 +1609,7 @@ AC_CACHE_CHECK([$1], [$2],
    $RM conftest*
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$5], , :, [$5])
 else
     m4_if([$6], , :, [$6])
@@ -1568,7 +1631,7 @@ AC_DEFUN([_LT_LINKER_OPTION],
 m4_require([_LT_DECL_SED])dnl
 AC_CACHE_CHECK([$1], [$2],
   [$2=no
-   save_LDFLAGS="$LDFLAGS"
+   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
@@ -1587,10 +1650,10 @@ AC_CACHE_CHECK([$1], [$2],
      fi
    fi
    $RM -r conftest*
-   LDFLAGS="$save_LDFLAGS"
+   LDFLAGS=$save_LDFLAGS
 ])
 
-if test x"[$]$2" = xyes; then
+if test yes = "[$]$2"; then
     m4_if([$4], , :, [$4])
 else
     m4_if([$5], , :, [$5])
@@ -1611,7 +1674,7 @@ AC_DEFUN([LT_CMD_MAX_LEN],
 AC_MSG_CHECKING([the maximum length of command line arguments])
 AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   i=0
-  teststring="ABCD"
+  teststring=ABCD
 
   case $build_os in
   msdosdjgpp*)
@@ -1651,7 +1714,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # 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`
@@ -1702,22 +1765,22 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   *)
     lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
     if test -n "$lt_cv_sys_max_cmd_len" && \
-       test undefined != "$lt_cv_sys_max_cmd_len"; then
+       test undefined != "$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
+      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"`env echo "$teststring$teststring" 2>/dev/null` \
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
                 = "X$teststring$teststring"; } >/dev/null 2>&1 &&
-             test $i != 17 # 1/2 MB should be enough
+             test 17 != "$i" # 1/2 MB should be enough
       do
         i=`expr $i + 1`
         teststring=$teststring$teststring
@@ -1733,7 +1796,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     ;;
   esac
 ])
-if test -n $lt_cv_sys_max_cmd_len ; then
+if test -n "$lt_cv_sys_max_cmd_len"; then
   AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
 else
   AC_MSG_RESULT(none)
@@ -1761,7 +1824,7 @@ m4_defun([_LT_HEADER_DLFCN],
 # ----------------------------------------------------------------
 m4_defun([_LT_TRY_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
+if test yes = "$cross_compiling"; then :
   [$4]
 else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
@@ -1808,9 +1871,9 @@ else
 #  endif
 #endif
 
-/* When -fvisbility=hidden is used, assume the code has been annotated
+/* When -fvisibility=hidden is used, assume the code has been annotated
    correspondingly for the symbols needed.  */
-#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
 int fnord () __attribute__((visibility("default")));
 #endif
 
@@ -1836,7 +1899,7 @@ int main ()
   return status;
 }]
 _LT_EOF
-  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+  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
@@ -1857,7 +1920,7 @@ rm -fr conftest*
 # ------------------
 AC_DEFUN([LT_SYS_DLOPEN_SELF],
 [m4_require([_LT_HEADER_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; then
+if test yes != "$enable_dlopen"; then
   enable_dlopen=unknown
   enable_dlopen_self=unknown
   enable_dlopen_self_static=unknown
@@ -1867,44 +1930,52 @@ else
 
   case $host_os in
   beos*)
-    lt_cv_dlopen="load_add_on"
+    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=LoadLibrary
     lt_cv_dlopen_libs=
     ;;
 
   cygwin*)
-    lt_cv_dlopen="dlopen"
+    lt_cv_dlopen=dlopen
     lt_cv_dlopen_libs=
     ;;
 
   darwin*)
-  # if libdl is installed we need to link against it
+    # 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=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
     lt_cv_dlopen_libs=
     lt_cv_dlopen_self=yes
     ])
     ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
   *)
     AC_CHECK_FUNC([shl_load],
-         [lt_cv_dlopen="shl_load"],
+         [lt_cv_dlopen=shl_load],
       [AC_CHECK_LIB([dld], [shl_load],
-           [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
+           [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
        [AC_CHECK_FUNC([dlopen],
-             [lt_cv_dlopen="dlopen"],
+             [lt_cv_dlopen=dlopen],
          [AC_CHECK_LIB([dl], [dlopen],
-               [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+               [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
            [AC_CHECK_LIB([svld], [dlopen],
-                 [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+                 [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"])
+                   [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
              ])
            ])
          ])
@@ -1913,21 +1984,21 @@ else
     ;;
   esac
 
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
+  if test no = "$lt_cv_dlopen"; then
     enable_dlopen=no
+  else
+    enable_dlopen=yes
   fi
 
   case $lt_cv_dlopen in
   dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
-    save_LDFLAGS="$LDFLAGS"
+    save_LDFLAGS=$LDFLAGS
     wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
-    save_LIBS="$LIBS"
+    save_LIBS=$LIBS
     LIBS="$lt_cv_dlopen_libs $LIBS"
 
     AC_CACHE_CHECK([whether a program can dlopen itself],
@@ -1937,7 +2008,7 @@ else
            lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
     ])
 
-    if test "x$lt_cv_dlopen_self" = xyes; then
+    if test yes = "$lt_cv_dlopen_self"; 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
@@ -1947,9 +2018,9 @@ else
       ])
     fi
 
-    CPPFLAGS="$save_CPPFLAGS"
-    LDFLAGS="$save_LDFLAGS"
-    LIBS="$save_LIBS"
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
     ;;
   esac
 
@@ -2041,8 +2112,8 @@ m4_defun([_LT_COMPILER_FILE_LOCKS],
 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
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; 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
@@ -2052,8 +2123,8 @@ if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" !=
   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])
+  if test no = "$hard_links"; then
+    AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
     need_locks=warn
   fi
 else
@@ -2080,8 +2151,8 @@ 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.])
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+  [Define to the sub-directory where libtool stores uninstalled libraries.])
 ])# _LT_CHECK_OBJDIR
 
 
@@ -2093,15 +2164,15 @@ m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
 _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
+   test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
 
   # We can hardcode non-existent directories.
-  if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
+  if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
      # 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
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+     test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
     # Linking always hardcodes the temporary library directory.
     _LT_TAGVAR(hardcode_action, $1)=relink
   else
@@ -2115,12 +2186,12 @@ else
 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
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+   test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
   # Fast installation is not supported
   enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
   # Fast installation is not necessary
   enable_fast_install=needless
 fi
@@ -2144,7 +2215,7 @@ else
 # FIXME - insert some real tests, host_os isn't really good enough
   case $host_os in
   darwin*)
-    if test -n "$STRIP" ; then
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       AC_MSG_RESULT([yes])
@@ -2162,6 +2233,47 @@ _LT_DECL([], [striplib], [1])
 ])# _LT_CMD_STRIPLIB
 
 
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x@S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
 # _LT_SYS_DYNAMIC_LINKER([TAG])
 # -----------------------------
 # PORTME Fill in your ld.so characteristics
@@ -2172,17 +2284,18 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_OBJDUMP])dnl
 m4_require([_LT_DECL_SED])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
 AC_MSG_CHECKING([dynamic linker characteristics])
 m4_if([$1],
        [], [
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
   esac
   case $host_os in
-    mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;;
-    *) lt_sed_strip_eq="s,=/,/,g" ;;
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
   esac
   lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq`
   case $lt_search_path_spec in
@@ -2198,28 +2311,35 @@ if test "$GCC" = yes; then
     ;;
   esac
   # Ok, now we have the path, separated by spaces, we can step through it
-  # and add multilib dir if necessary.
+  # 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`
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
   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
+    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"
+    elif test -n "$lt_multi_os_dir"; then
       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;
+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;
+          lt_foo = "/" $lt_i lt_foo;
         } else {
           lt_count--;
         }
@@ -2233,7 +2353,7 @@ BEGIN {RS=" "; FS="/|\n";} {
   # for these hosts.
   case $host_os in
     mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
-      $SED 's,/\([[A-Za-z]]:\),\1,g'` ;;
+      $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
   esac
   sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
 else
@@ -2242,7 +2362,7 @@ fi])
 library_names_spec=
 libname_spec='lib$name'
 soname_spec=
-shrext_cmds=".so"
+shrext_cmds=.so
 postinstall_cmds=
 postuninstall_cmds=
 finish_cmds=
@@ -2259,14 +2379,17 @@ hardcode_into_libs=no
 # flags to be left without arguments
 need_version=unknown
 
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
 case $host_os in
 aix3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
+  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'
+  soname_spec='$libname$release$shared_ext$major'
   ;;
 
 aix[[4-9]]*)
@@ -2274,41 +2397,91 @@ aix[[4-9]]*)
   need_lib_prefix=no
   need_version=no
   hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     # AIX 5 supports IA64
-    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
+    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
+    # 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
+          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
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot 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
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
       # 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
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a[(]lib.so.V[)]'
       # 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
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
     shlibpath_var=LIBPATH
   fi
   ;;
@@ -2318,18 +2491,18 @@ amigaos*)
   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}'
+    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=`func_echo_all "$lib" | $SED '\''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'
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $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}'
+  library_names_spec='$libname$shared_ext'
   dynamic_linker="$host_os ld.so"
   shlibpath_var=LIBRARY_PATH
   ;;
@@ -2337,8 +2510,8 @@ beos*)
 bsdi[[45]]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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"
@@ -2350,7 +2523,7 @@ bsdi[[45]]*)
 
 cygwin* | mingw* | pw32* | cegcc*)
   version_type=windows
-  shrext_cmds=".dll"
+  shrext_cmds=.dll
   need_version=no
   need_lib_prefix=no
 
@@ -2359,8 +2532,8 @@ cygwin* | mingw* | pw32* | cegcc*)
     # gcc
     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'\''`~
+    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~
@@ -2376,17 +2549,17 @@ cygwin* | mingw* | pw32* | cegcc*)
     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}'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
 m4_if([$1], [],[
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
     mingw* | cegcc*)
       # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
+      soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     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}'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
@@ -2395,8 +2568,8 @@ m4_if([$1], [],[
   *,cl*)
     # Native MSVC
     libname_spec='$name'
-    soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-    library_names_spec='${libname}.dll.lib'
+    soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
 
     case $build_os in
     mingw*)
@@ -2423,7 +2596,7 @@ m4_if([$1], [],[
       sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
       ;;
     *)
-      sys_lib_search_path_spec="$LIB"
+      sys_lib_search_path_spec=$LIB
       if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
         # It is most probably a Windows format PATH.
         sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
@@ -2436,8 +2609,8 @@ m4_if([$1], [],[
     esac
 
     # 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'\''`~
+    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'
@@ -2450,7 +2623,7 @@ m4_if([$1], [],[
 
   *)
     # Assume MSVC wrapper
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
+    library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
   esac
@@ -2463,8 +2636,8 @@ darwin* | rhapsody*)
   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'
+  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`'
@@ -2477,8 +2650,8 @@ dgux*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
   ;;
 
@@ -2496,12 +2669,13 @@ freebsd* | dragonfly*)
   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}'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
       need_version=no
       need_lib_prefix=no
       ;;
     freebsd-*)
-      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
       need_version=yes
       ;;
   esac
@@ -2531,10 +2705,10 @@ haiku*)
   need_lib_prefix=no
   need_version=no
   dynamic_linker="$host_os runtime_loader"
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  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=LIBRARY_PATH
-  shlibpath_overrides_runpath=yes
+  shlibpath_overrides_runpath=no
   sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
   hardcode_into_libs=yes
   ;;
@@ -2552,14 +2726,15 @@ hpux9* | hpux10* | hpux11*)
     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
+    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 32 = "$HPUX_IA64_MODE"; then
       sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
     else
       sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
     fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
     ;;
   hppa*64*)
     shrext_cmds='.sl'
@@ -2567,8 +2742,8 @@ hpux9* | hpux10* | hpux11*)
     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'
+    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
     ;;
@@ -2577,8 +2752,8 @@ hpux9* | hpux10* | hpux11*)
     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'
+    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, ...
@@ -2591,8 +2766,8 @@ interix[[3-9]]*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
@@ -2603,7 +2778,7 @@ irix5* | irix6* | nonstopux*)
   case $host_os in
     nonstopux*) version_type=nonstopux ;;
     *)
-       if test "$lt_cv_prog_gnu_ld" = yes; then
+       if test yes = "$lt_cv_prog_gnu_ld"; then
                version_type=linux # correct to gnu/linux during the next big refactor
        else
                version_type=irix
@@ -2611,8 +2786,8 @@ irix5* | irix6* | nonstopux*)
   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}'
+  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=
@@ -2631,8 +2806,8 @@ irix5* | irix6* | nonstopux*)
   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}"
+  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
   ;;
 
@@ -2641,13 +2816,33 @@ linux*oldld* | linux*aout* | linux*coff*)
   dynamic_linker=no
   ;;
 
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # 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
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  ;;
+
 # This must be glibc/ELF.
 linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
@@ -2672,7 +2867,12 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
   # before this can be enabled.
   hardcode_into_libs=yes
 
-  # Append ld.so.conf contents to the search path
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) 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;s/"//g;/^$/d' | tr '\n' ' '`
     sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
@@ -2704,12 +2904,12 @@ netbsd*)
   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'
+    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'
+    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
@@ -2719,7 +2919,7 @@ netbsd*)
 
 newsos6)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  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
   ;;
@@ -2728,58 +2928,68 @@ newsos6)
   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'
+  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*)
+openbsd* | bitrig*)
   version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
+  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
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
   else
-    shlibpath_overrides_runpath=yes
+    need_version=yes
   fi
+  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
+  shlibpath_overrides_runpath=yes
   ;;
 
 os2*)
   libname_spec='$name'
-  shrext_cmds=".dll"
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
   need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
   dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  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'
   ;;
 
 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}'
+  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"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
   ;;
 
 rdos*)
@@ -2790,8 +3000,8 @@ solaris*)
   version_type=linux # correct to gnu/linux during the next big refactor
   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'
+  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
@@ -2801,11 +3011,11 @@ solaris*)
 
 sunos4*)
   version_type=sunos
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
+  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
+  if test yes = "$with_gnu_ld"; then
     need_lib_prefix=no
   fi
   need_version=yes
@@ -2813,8 +3023,8 @@ sunos4*)
 
 sysv4 | sysv4.3*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  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)
@@ -2835,24 +3045,24 @@ sysv4 | sysv4.3*)
   ;;
 
 sysv4*MP*)
-  if test -d /usr/nec ;then
+  if test -d /usr/necthen
     version_type=linux # correct to gnu/linux during the next big refactor
-    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
-    soname_spec='$libname${shared_ext}.$major'
+    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
+  version_type=sco
   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'
+  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
+  if test yes = "$with_gnu_ld"; 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'
@@ -2870,7 +3080,7 @@ tpf*)
   version_type=linux # correct to gnu/linux during the next big refactor
   need_lib_prefix=no
   need_version=no
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+  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
@@ -2878,8 +3088,8 @@ tpf*)
 
 uts4*)
   version_type=linux # correct to gnu/linux during the next big refactor
-  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-  soname_spec='${libname}${release}${shared_ext}$major'
+  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
   ;;
 
@@ -2888,20 +3098,30 @@ uts4*)
   ;;
 esac
 AC_MSG_RESULT([$dynamic_linker])
-test "$dynamic_linker" = no && can_build_shared=no
+test no = "$dynamic_linker" && can_build_shared=no
 
 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
+if test yes = "$GCC"; 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"
+if test set = "${lt_cv_sys_lib_search_path_spec+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"
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
 fi
 
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
 _LT_DECL([], [variables_saved_for_relink], [1],
     [Variables whose values should be saved in libtool wrapper scripts and
     restored at link time])
@@ -2934,39 +3154,41 @@ _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_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+    [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+    [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
 ])# _LT_SYS_DYNAMIC_LINKER
 
 
 # _LT_PATH_TOOL_PREFIX(TOOL)
 # --------------------------
-# find a file program which can recognize shared library
+# find a file program that 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_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
+  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"
+    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 -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"
+         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
            :
@@ -2989,11 +3211,11 @@ _LT_EOF
       break
     fi
   done
-  IFS="$lt_save_ifs"
-  MAGIC_CMD="$lt_save_MAGIC_CMD"
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
   ;;
 esac])
-MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
 if test -n "$MAGIC_CMD"; then
   AC_MSG_RESULT($MAGIC_CMD)
 else
@@ -3011,7 +3233,7 @@ dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
 
 # _LT_PATH_MAGIC
 # --------------
-# find a file program which can recognize a shared library
+# find a file program that 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
@@ -3038,16 +3260,16 @@ m4_require([_LT_PROG_ECHO_BACKSLASH])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],
+    [test no = "$withval" || with_gnu_ld=yes],
     [with_gnu_ld=no])dnl
 
 ac_prog=ld
-if test "$GCC" = yes; then
+if test yes = "$GCC"; 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
+    # 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` ;;
@@ -3061,7 +3283,7 @@ if test "$GCC" = yes; then
       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"
+      test -z "$LD" && LD=$ac_prog
       ;;
   "")
     # If it fails, then pretend we aren't using GCC.
@@ -3072,37 +3294,37 @@ if test "$GCC" = yes; then
     with_gnu_ld=unknown
     ;;
   esac
-elif test "$with_gnu_ld" = yes; then
+elif test yes = "$with_gnu_ld"; 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
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
   for ac_dir in $PATH; do
-    IFS="$lt_save_ifs"
+    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"
+      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 no != "$with_gnu_ld" && break
        ;;
       *)
-       test "$with_gnu_ld" != yes && break
+       test yes != "$with_gnu_ld" && break
        ;;
       esac
     fi
   done
-  IFS="$lt_save_ifs"
+  IFS=$lt_save_ifs
 else
-  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
 fi])
-LD="$lt_cv_path_LD"
+LD=$lt_cv_path_LD
 if test -n "$LD"; then
   AC_MSG_RESULT($LD)
 else
@@ -3156,13 +3378,13 @@ esac
 reload_cmds='$LD$reload_flag -o $output$reload_objs'
 case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    if test "$GCC" != yes; then
+    if test yes != "$GCC"; then
       reload_cmds=false
     fi
     ;;
   darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs'
     else
       reload_cmds='$LD$reload_flag -o $output$reload_objs'
     fi
@@ -3173,6 +3395,43 @@ _LT_TAGDECL([], [reload_cmds], [2])dnl
 ])# _LT_CMD_RELOAD
 
 
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+  [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
 # _LT_CHECK_MAGIC_METHOD
 # ----------------------
 # how to check for library dependencies
@@ -3188,13 +3447,13 @@ 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.
+# '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.
+# that 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]]*)
@@ -3221,8 +3480,7 @@ 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.
-  # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin.
-  if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then
+  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
@@ -3318,8 +3576,8 @@ newos6*)
   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
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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)$'
@@ -3372,6 +3630,9 @@ sysv4 | sysv4.3*)
 tpf*)
   lt_cv_deplibs_check_method=pass_all
   ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 esac
 ])
 
@@ -3412,33 +3673,38 @@ AC_DEFUN([LT_PATH_NM],
 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"
+  lt_cv_path_NM=$NM
 else
-  lt_nm_to_check="${ac_tool_prefix}nm"
+  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
+    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"
+      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
+      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:
+       # 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'*)
+       # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+       case $build_os in
+       mingw*) lt_bad_file=conftest.nm/nofile ;;
+       *) lt_bad_file=/dev/null ;;
+       esac
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+       *$lt_bad_file* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
-         break
+         break 2
          ;;
        *)
          case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
-           break
+           break 2
            ;;
          *)
            lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
@@ -3449,21 +3715,21 @@ else
        esac
       fi
     done
-    IFS="$lt_save_ifs"
+    IFS=$lt_save_ifs
   done
   : ${lt_cv_path_NM=no}
 fi])
-if test "$lt_cv_path_NM" != "no"; then
-  NM="$lt_cv_path_NM"
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
 else
   # Didn't find any BSD compatible name lister, look for dumpbin.
   if test -n "$DUMPBIN"; then :
     # Let the user override the test.
   else
     AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
-    case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
-      DUMPBIN="$DUMPBIN -symbols"
+      DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
     *)
       DUMPBIN=:
@@ -3471,8 +3737,8 @@ else
     esac
   fi
   AC_SUBST([DUMPBIN])
-  if test "$DUMPBIN" != ":"; then
-    NM="$DUMPBIN"
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
 fi
 test -z "$NM" && NM=nm
@@ -3518,8 +3784,8 @@ lt_cv_sharedlib_from_linklib_cmd,
 
 case $host_os in
 cygwin* | mingw* | pw32* | cegcc*)
-  # two different shell functions defined in ltmain.sh
-  # decide which to use based on capabilities of $DLLTOOL
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
   case `$DLLTOOL --help 2>&1` in
   *--identify-strict*)
     lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
@@ -3531,7 +3797,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   ;;
 *)
   # fallback: assume linklib IS sharedlib
-  lt_cv_sharedlib_from_linklib_cmd="$ECHO"
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
   ;;
 esac
 ])
@@ -3558,13 +3824,28 @@ AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool
     lt_cv_path_mainfest_tool=yes
   fi
   rm -f conftest*])
-if test "x$lt_cv_path_mainfest_tool" != xyes; then
+if test yes != "$lt_cv_path_mainfest_tool"; then
   MANIFEST_TOOL=:
 fi
 _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
 ])# _LT_PATH_MANIFEST_TOOL
 
 
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[        ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[  ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])# _LT_DLL_DEF_P
+
+
 # LT_LIB_M
 # --------
 # check for math library
@@ -3576,11 +3857,11 @@ case $host in
   # These system don't have libm, or don't need it
   ;;
 *-ncr-sysv4.3*)
-  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
   AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
   ;;
 *)
-  AC_CHECK_LIB(m, cos, LIBM="-lm")
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
   ;;
 esac
 AC_SUBST([LIBM])
@@ -3599,7 +3880,7 @@ m4_defun([_LT_COMPILER_NO_RTTI],
 
 _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 
-if test "$GCC" = yes; then
+if test yes = "$GCC"; then
   case $cc_basename in
   nvcc*)
     _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
@@ -3651,7 +3932,7 @@ cygwin* | mingw* | pw32* | cegcc*)
   symcode='[[ABCDGISTW]]'
   ;;
 hpux*)
-  if test "$host_cpu" = ia64; then
+  if test ia64 = "$host_cpu"; then
     symcode='[[ABCDEGRST]]'
   fi
   ;;
@@ -3684,14 +3965,44 @@ case `$NM -V 2>&1` in
   symcode='[[ABCDGIRSTW]]' ;;
 esac
 
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
 # 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'"
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$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'"
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
 
 # Handle CRLF in mingw tool chain
 opt_cr=
@@ -3709,21 +4020,24 @@ for ac_symprfx in "" "_"; do
 
   # 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.
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported 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};"\
 "     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
 "     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
 "     \$ 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))}"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,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'"
@@ -3763,11 +4077,11 @@ _LT_EOF
        if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
          cat <<_LT_EOF > conftest.$ac_ext
 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
-#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE)
-/* DATA imports from DLLs on WIN32 con't be const, because runtime
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
    relocations are performed -- see ld's documentation on pseudo-relocs.  */
 # define LT@&t@_DLSYM_CONST
-#elif defined(__osf__)
+#elif defined __osf__
 /* This system does not cope well with relocations in const data.  */
 # define LT@&t@_DLSYM_CONST
 #else
@@ -3793,7 +4107,7 @@ lt__PROGRAM__LTX_preloaded_symbols[[]] =
 {
   { "@PROGRAM@", (void *) 0 },
 _LT_EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+         $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
          cat <<\_LT_EOF >> conftest.$ac_ext
   {0, (void *) 0}
 };
@@ -3813,9 +4127,9 @@ _LT_EOF
          mv -f conftest.$ac_objext conftstm.$ac_objext
          lt_globsym_save_LIBS=$LIBS
          lt_globsym_save_CFLAGS=$CFLAGS
-         LIBS="conftstm.$ac_objext"
+         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
+         if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
            pipe_works=yes
          fi
          LIBS=$lt_globsym_save_LIBS
@@ -3836,7 +4150,7 @@ _LT_EOF
   rm -rf conftest* conftst*
 
   # Do not use the global_symbol_pipe unless it works.
-  if test "$pipe_works" = yes; then
+  if test yes = "$pipe_works"; then
     break
   else
     lt_cv_sys_global_symbol_pipe=
@@ -3863,12 +4177,16 @@ _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_import], [lt_cv_sys_global_symbol_to_import], [1],
+    [Transform the output of nm into a list of symbols to manually relocate])
 _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_DECL([nm_interface], [lt_cv_nm_interface], [1],
+    [The name lister interface])
 _LT_DECL([], [nm_file_list_spec], [1],
     [Specify filename containing input files for $NM])
 ]) # _LT_CMD_GLOBAL_SYMBOLS
@@ -3884,17 +4202,18 @@ _LT_TAGVAR(lt_prog_compiler_static, $1)=
 
 m4_if([$1], [CXX], [
   # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
+  if test yes = "$GXX"; 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
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
@@ -3905,8 +4224,8 @@ m4_if([$1], [CXX], [
         ;;
       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'.
+            # 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
@@ -3922,6 +4241,11 @@ m4_if([$1], [CXX], [
       # (--disable-auto-import) libraries
       m4_if([$1], [GCJ], [],
        [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+       ;;
+      esac
       ;;
     darwin* | rhapsody*)
       # PIC is the default on this platform
@@ -3971,7 +4295,7 @@ m4_if([$1], [CXX], [
     case $host_os in
       aix[[4-9]]*)
        # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; then
          # AIX 5 now supports IA64 processor
          _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        else
@@ -4012,14 +4336,14 @@ m4_if([$1], [CXX], [
        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_static, $1)='$wl-a ${wl}archive'
+           if test ia64 != "$host_cpu"; 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'
+           _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
            case $host_cpu in
            hppa*64*|ia64*)
              # +Z the default
@@ -4056,7 +4380,7 @@ m4_if([$1], [CXX], [
            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
            ;;
          ecpc* )
-           # old Intel C++ for x86_64 which still supported -KPIC.
+           # 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'
@@ -4201,17 +4525,18 @@ m4_if([$1], [CXX], [
   fi
 ],
 [
-  if test "$GCC" = yes; then
+  if test yes = "$GCC"; 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
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
       ;;
 
     amigaos*)
@@ -4222,8 +4547,8 @@ m4_if([$1], [CXX], [
         ;;
       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'.
+            # 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
@@ -4240,6 +4565,11 @@ m4_if([$1], [CXX], [
       # (--disable-auto-import) libraries
       m4_if([$1], [GCJ], [],
        [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+       ;;
+      esac
       ;;
 
     darwin* | rhapsody*)
@@ -4310,7 +4640,7 @@ m4_if([$1], [CXX], [
     case $host_os in
     aix*)
       _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; then
        # AIX 5 now supports IA64 processor
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       else
@@ -4318,11 +4648,30 @@ m4_if([$1], [CXX], [
       fi
       ;;
 
+    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'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      esac
+      ;;
+
     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'])
+      case $host_os in
+      os2*)
+       _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+       ;;
+      esac
       ;;
 
     hpux9* | hpux10* | hpux11*)
@@ -4338,7 +4687,7 @@ m4_if([$1], [CXX], [
        ;;
       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'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
       ;;
 
     irix5* | irix6* | nonstopux*)
@@ -4349,7 +4698,7 @@ m4_if([$1], [CXX], [
 
     linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
       case $cc_basename in
-      # old Intel for x86_64 which still supported -KPIC.
+      # 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'
@@ -4374,6 +4723,12 @@ m4_if([$1], [CXX], [
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
        ;;
+      tcc*)
+       # Fabrice Bellard et al's Tiny 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)='-static'
+       ;;
       pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
         # Portland Group compilers (*not* the Pentium gcc compiler,
        # which looks to be a dead project)
@@ -4471,7 +4826,7 @@ m4_if([$1], [CXX], [
       ;;
 
     sysv4*MP*)
-      if test -d /usr/nec ;then
+      if test -d /usr/necthen
        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
       fi
@@ -4500,7 +4855,7 @@ m4_if([$1], [CXX], [
   fi
 ])
 case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
+  # For platforms that do not support PIC, -DPIC is meaningless:
   *djgpp*)
     _LT_TAGVAR(lt_prog_compiler_pic, $1)=
     ;;
@@ -4566,17 +4921,21 @@ m4_if([$1], [CXX], [
   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
-    # Also, AIX nm treats weak defined symbols like other global defined
-    # symbols, whereas GNU nm marks them as "W".
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { 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'
+      _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
-    _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
+    _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
@@ -4625,9 +4984,9 @@ m4_if([$1], [CXX], [
   # 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'.
+  # 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
@@ -4643,7 +5002,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     # 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
+    if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
@@ -4651,7 +5010,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
-  openbsd*)
+  openbsd* | bitrig*)
     with_gnu_ld=no
     ;;
   linux* | k*bsd*-gnu | gnu*)
@@ -4664,7 +5023,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
   # On some targets, GNU ld is compatible enough with the native linker
   # that we're better off using the native interface for both.
   lt_use_gnu_ld_interface=no
-  if test "$with_gnu_ld" = yes; then
+  if test yes = "$with_gnu_ld"; then
     case $host_os in
       aix*)
        # The AIX port of GNU ld has always aspired to compatibility
@@ -4686,24 +5045,24 @@ dnl Note also adjust exclude_expsyms for C++ above.
     esac
   fi
 
-  if test "$lt_use_gnu_ld_interface" = yes; then
+  if test yes = "$lt_use_gnu_ld_interface"; then
     # If archive_cmds runs LD, not CC, wlarc should be empty
-    wlarc='${wl}'
+    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'
+    _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'
+      _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
+    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 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 ...
@@ -4716,7 +5075,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
     case $host_os in
     aix[[3-9]]*)
       # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
+      if test ia64 != "$host_cpu"; then
        _LT_TAGVAR(ld_shlibs, $1)=no
        cat <<_LT_EOF 1>&2
 
@@ -4735,7 +5094,7 @@ _LT_EOF
       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_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
@@ -4751,7 +5110,7 @@ _LT_EOF
        _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'
+       _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
@@ -4761,7 +5120,7 @@ _LT_EOF
       # _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(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
       _LT_TAGVAR(always_export_symbols, $1)=no
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
@@ -4769,61 +5128,89 @@ _LT_EOF
       _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
 
       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'
+        _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, use it as
+       # is; otherwise, prepend EXPORTS...
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); 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
       ;;
 
     haiku*)
-      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
       _LT_TAGVAR(link_all_deplibs, $1)=yes
       ;;
 
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
     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'
+      _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'
+      _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
+      if test linux-dietlibc = "$host_os"; 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
+        && test no = "$tmp_diet"
       then
        tmp_addflag=' $pic_flag'
        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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag'
          ;;
        pgf77* | pgf90* | pgf95* | pgfortran*)
                                        # 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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          tmp_addflag=' $pic_flag -Mnomain' ;;
        ecc*,ia64* | icc*,ia64*)        # Intel C compiler on ia64
          tmp_addflag=' -i_dynamic' ;;
@@ -4834,42 +5221,47 @@ _LT_EOF
        lf95*)                          # Lahey Fortran 8.1
          _LT_TAGVAR(whole_archive_flag_spec, $1)=
          tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
        xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
          tmp_sharedflag='-qmkshrobj'
          tmp_addflag= ;;
        nvcc*)  # Cuda Compiler Driver 2.2
-         _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          _LT_TAGVAR(compiler_needs_object, $1)=yes
          ;;
        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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+         _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; func_echo_all \"$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'
+       _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
+        if test yes = "$supports_anon_versioning"; 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'
+            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
+       tcc*)
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+         ;;
        xlf* | bgf* | bgxlf* | mpixlf*)
          # 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)='${wl}-rpath ${wl}$libdir'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
          _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
-         if test "x$supports_anon_versioning" = xyes; then
+         if test yes = "$supports_anon_versioning"; 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 $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
          ;;
        esac
@@ -4883,8 +5275,8 @@ _LT_EOF
        _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
        wlarc=
       else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
       fi
       ;;
 
@@ -4902,8 +5294,8 @@ _LT_EOF
 
 _LT_EOF
       elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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
@@ -4915,7 +5307,7 @@ _LT_EOF
        _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
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
 *** 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
@@ -4930,9 +5322,9 @@ _LT_EOF
          # 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'
+           _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
@@ -4949,15 +5341,15 @@ _LT_EOF
 
     *)
       if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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
+    if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
       runpath_var=
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
       _LT_TAGVAR(export_dynamic_flag_spec, $1)=
@@ -4973,7 +5365,7 @@ _LT_EOF
       # 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
+      if test yes = "$GCC" && 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
@@ -4981,34 +5373,57 @@ _LT_EOF
       ;;
 
     aix[[4-9]]*)
-      if test "$host_cpu" = ia64; then
+      if test ia64 = "$host_cpu"; 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=""
+       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
-       # Also, AIX nm treats weak defined symbols like other global
-       # defined symbols, whereas GNU nm marks them as "W".
+       # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+       # Without the "-l" option, or with the "-B" option, AIX nm treats
+       # weak defined symbols like other global defined symbols, whereas
+       # GNU nm marks them as "W".
+       # While the 'weak' keyword is ignored in the Export File, we need
+       # it in the Import File for the 'aix-soname' feature, so we have
+       # to replace the "-B" option with "-P" for AIX 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") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
+         _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { 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'
+         _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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.
+       # have runtime linking enabled, and use it for executables.
+       # For shared libraries, we enable/disable runtime linking
+       # depending on the kind of the shared library created -
+       # when "with_aix_soname,aix_use_runtimelinking" is:
+       # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "aix,yes"  lib.so          shared, rtl:yes, for executables
+       #            lib.a           static archive
+       # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+       #            lib.a(lib.so.V) shared, rtl:no,  for executables
+       # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a(lib.so.V) shared, rtl:no
+       # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+       #            lib.a           static archive
        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
+         if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
            aix_use_runtimelinking=yes
            break
          fi
          done
+         if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+           # With aix-soname=svr4, we create the lib.so.V shared archives only,
+           # so we don't have lib.a shared libs to link our executables.
+           # We have to force runtime linking in this case.
+           aix_use_runtimelinking=yes
+           LDFLAGS="$LDFLAGS -Wl,-brtl"
+         fi
          ;;
        esac
 
@@ -5027,13 +5442,21 @@ _LT_EOF
       _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,'
+      _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+       # The Import File defines what to hardcode.
+       _LT_TAGVAR(hardcode_direct, $1)=no
+       _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+       ;;
+      esac
 
-      if test "$GCC" = yes; then
+      if test yes = "$GCC"; 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`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
           strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -5052,62 +5475,80 @@ _LT_EOF
          ;;
        esac
        shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
+       if test yes = "$aix_use_runtimelinking"; then
+         shared_flag="$shared_flag "'$wl-G'
        fi
-       _LT_TAGVAR(link_all_deplibs, $1)=no
+       # Need to ensure runtime linking is disabled for the traditional
+       # shared library, or the linker may eventually find shared libraries
+       # /with/ Import File - we do not want to mix them.
+       shared_flag_aix='-shared'
+       shared_flag_svr4='-shared $wl-G'
       else
        # not using gcc
-       if test "$host_cpu" = ia64; then
+       if test ia64 = "$host_cpu"; 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'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag='$wl-G'
          else
-           shared_flag='${wl}-bM:SRE'
+           shared_flag='$wl-bM:SRE'
          fi
+         shared_flag_aix='$wl-bM:SRE'
+         shared_flag_svr4='$wl-G'
        fi
       fi
 
-      _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+      _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
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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([$1])
-        _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 func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+        _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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; 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'
+       if test ia64 = "$host_cpu"; 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"
+         _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([$1])
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+        _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'
-         if test "$with_gnu_ld" = yes; then
+         _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+         _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+         if test yes = "$with_gnu_ld"; then
            # We only use this code for GNU lds that support --whole-archive.
-           _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+           _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
          else
            # Exported symbols can be pulled into shared objects from archives
            _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
          fi
          _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'
+         _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+         # -brtl affects multiple linker settings, -berok does not and is overridden later
+         compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+         if test svr4 != "$with_aix_soname"; then
+           # This is similar to how AIX traditionally builds its shared libraries.
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+         fi
+         if test aix != "$with_aix_soname"; then
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+         else
+           # used by -dlpreopen to get the symbols
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+         fi
+         _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
        fi
       fi
       ;;
@@ -5116,7 +5557,7 @@ _LT_EOF
       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_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
             _LT_TAGVAR(archive_expsym_cmds, $1)=''
         ;;
       m68k)
@@ -5146,16 +5587,17 @@ _LT_EOF
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
-       _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-       _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-           sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-         else
-           sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-         fi~
-         $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-         linknames='
+       _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+       _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
        # The linker will not automatically build a static lib if we build a DLL.
        # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
@@ -5164,18 +5606,18 @@ _LT_EOF
        # Don't use ranlib
        _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
        _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-         lt_tool_outputfile="@TOOL_OUTPUT@"~
-         case $lt_outputfile in
-           *.exe|*.EXE) ;;
-           *)
-             lt_outputfile="$lt_outputfile.exe"
-             lt_tool_outputfile="$lt_tool_outputfile.exe"
-             ;;
-         esac~
-         if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-           $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-           $RM "$lt_outputfile.manifest";
-         fi'
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
        ;;
       *)
        # Assume MSVC wrapper
@@ -5184,7 +5626,7 @@ _LT_EOF
        # Tell ltmain to make .lib files, not .a files.
        libext=lib
        # Tell ltmain to make .dll files, not .so files.
-       shrext_cmds=".dll"
+       shrext_cmds=.dll
        # FIXME: Setting linknames here is a bad hack.
        _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
        # The linker will automatically build a .lib file if we build a DLL.
@@ -5234,33 +5676,33 @@ _LT_EOF
       ;;
 
     hpux9*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv -f $output_objdir/$soname $lib'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv -f $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 -f $output_objdir/$soname $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv -f $output_objdir/$soname $lib'
       fi
-      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+      _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'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
       ;;
 
     hpux10*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $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'
+      if test no = "$with_gnu_ld"; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$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'
+       _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
@@ -5268,25 +5710,25 @@ _LT_EOF
       ;;
 
     hpux11*)
-      if test "$GCC" = yes && test "$with_gnu_ld" = no; then
+      if test yes,no = "$GCC,$with_gnu_ld"; then
        case $host_cpu in
        hppa*64*)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+         _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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
-         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+         _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $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'
+         _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+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
          ;;
        *)
        m4_if($1, [], [
@@ -5294,14 +5736,14 @@ _LT_EOF
          # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
          _LT_LINKER_OPTION([if $CC understands -b],
            _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
-           [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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'],
            [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
-         [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -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'
+      if test no = "$with_gnu_ld"; then
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
        case $host_cpu in
@@ -5312,7 +5754,7 @@ _LT_EOF
        *)
          _LT_TAGVAR(hardcode_direct, $1)=yes
          _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
-         _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
+         _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.
@@ -5323,16 +5765,16 @@ _LT_EOF
       ;;
 
     irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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.
        # This should be the same for all languages, so no per-tag cache variable.
        AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
          [lt_cv_irix_exported_symbol],
-         [save_LDFLAGS="$LDFLAGS"
-          LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
+         [save_LDFLAGS=$LDFLAGS
+          LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
           AC_LINK_IFELSE(
             [AC_LANG_SOURCE(
                [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
@@ -5345,21 +5787,32 @@ _LT_EOF
       end]])])],
              [lt_cv_irix_exported_symbol=yes],
              [lt_cv_irix_exported_symbol=no])
-           LDFLAGS="$save_LDFLAGS"])
-       if test "$lt_cv_irix_exported_symbol" = yes; then
-          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
+           LDFLAGS=$save_LDFLAGS])
+       if test yes = "$lt_cv_irix_exported_symbol"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
        fi
+       _LT_TAGVAR(link_all_deplibs, $1)=no
       else
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -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_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
       ;;
 
+    linux*)
+      case $cc_basename in
+      tcc*)
+       # Fabrice Bellard et al's Tiny C Compiler
+       _LT_TAGVAR(ld_shlibs, $1)=yes
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+       ;;
+      esac
+      ;;
+
     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
@@ -5374,7 +5827,7 @@ _LT_EOF
     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_flag_spec, $1)='$wl-rpath $wl$libdir'
       _LT_TAGVAR(hardcode_libdir_separator, $1)=:
       _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
       ;;
@@ -5382,27 +5835,19 @@ _LT_EOF
     *nto* | *qnx*)
       ;;
 
-    openbsd*)
+    openbsd* | bitrig*)
       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
+       if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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'
+         _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
+         _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'
        fi
       else
        _LT_TAGVAR(ld_shlibs, $1)=no
@@ -5413,33 +5858,53 @@ _LT_EOF
       _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'
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+       $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+       $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+       $ECHO EXPORTS >> $output_objdir/$libname.def~
+       prefix_cmds="$SED"~
+       if test EXPORTS = "`$SED 1q $export_symbols`"; then
+         prefix_cmds="$prefix_cmds -e 1d";
+       fi~
+       prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+       cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+       $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+       emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
       ;;
 
     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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      if test yes = "$GCC"; 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" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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_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} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
+      if test yes = "$GCC"; then
+       _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -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'
@@ -5450,24 +5915,24 @@ _LT_EOF
 
     solaris*)
       _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+      if test yes = "$GCC"; then
+       wlarc='$wl'
+       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+          $CC -shared $pic_flag $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_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'
+            $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'
+         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'
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
          ;;
        esac
       fi
@@ -5477,11 +5942,11 @@ _LT_EOF
       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 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'
+       if test yes = "$GCC"; 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
@@ -5491,10 +5956,10 @@ _LT_EOF
       ;;
 
     sunos4*)
-      if test "x$host_vendor" = xsequent; then
+      if test sequent = "$host_vendor"; 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'
+       _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
@@ -5543,43 +6008,43 @@ _LT_EOF
       ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _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'
+      if test yes = "$GCC"; 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'
+       _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
+      # Note: We CANNOT 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(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_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'
+      _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'
+      if test yes = "$GCC"; 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'
+       _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
       ;;
 
@@ -5594,17 +6059,17 @@ _LT_EOF
       ;;
     esac
 
-    if test x$host_vendor = xsni; then
+    if test sni = "$host_vendor"; then
       case $host in
       sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
-       _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
+       _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
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
 
 _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
 
@@ -5621,7 +6086,7 @@ x|xyes)
   # Assume -lc should be added
   _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
 
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
+  if test yes,yes = "$GCC,$enable_shared"; then
     case $_LT_TAGVAR(archive_cmds, $1) in
     *'~'*)
       # FIXME: we may have to deal with multi-command sequences.
@@ -5701,12 +6166,12 @@ _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
 _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
+    [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
+    [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
+    "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
@@ -5747,10 +6212,10 @@ dnl    [Compiler flag to generate thread safe objects])
 # ------------------------
 # 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'.
+# the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_C_CONFIG],
 [m4_require([_LT_DECL_EGREP])dnl
-lt_save_CC="$CC"
+lt_save_CC=$CC
 AC_LANG_PUSH(C)
 
 # Source file extension for C test sources.
@@ -5790,18 +6255,18 @@ if test -n "$compiler"; then
   LT_SYS_DLOPEN_SELF
   _LT_CMD_STRIPLIB
 
-  # Report which library types will actually be built
+  # Report what 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
+  test no = "$can_build_shared" && 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
+    test yes = "$enable_shared" && enable_static=no
     if test -n "$RANLIB"; then
       archive_cmds="$archive_cmds~\$RANLIB \$lib"
       postinstall_cmds='$RANLIB $lib'
@@ -5809,8 +6274,12 @@ if test -n "$compiler"; then
     ;;
 
   aix[[4-9]]*)
-    if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-      test "$enable_shared" = yes && enable_static=no
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;                  # shared object as lib.so file only
+      yes,svr4,*) ;;                   # shared object as lib.so archive member only
+      yes,*) enable_static=no ;;       # shared object in lib.a archive as well
+      esac
     fi
     ;;
   esac
@@ -5818,13 +6287,13 @@ if test -n "$compiler"; then
 
   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
+  test yes = "$enable_shared" || enable_static=yes
   AC_MSG_RESULT([$enable_static])
 
   _LT_CONFIG($1)
 fi
 AC_LANG_POP
-CC="$lt_save_CC"
+CC=$lt_save_CC
 ])# _LT_LANG_C_CONFIG
 
 
@@ -5832,14 +6301,14 @@ CC="$lt_save_CC"
 # --------------------------
 # 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'.
+# the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_CXX_CONFIG],
 [m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_DECL_EGREP])dnl
 m4_require([_LT_PATH_MANIFEST_TOOL])dnl
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
+if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
   AC_PROG_CXXCPP
 else
   _lt_caught_CXX_error=yes
@@ -5881,7 +6350,7 @@ _LT_TAGVAR(objext, $1)=$objext
 # 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
+if test yes != "$_lt_caught_CXX_error"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="int some_variable = 0;"
 
@@ -5923,35 +6392,35 @@ if test "$_lt_caught_CXX_error" != yes; then
   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
+    if test yes = "$GXX"; 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
+    if test yes = "$GXX"; 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 $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+      if test yes = "$with_gnu_ld"; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -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'
+        _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}'
+        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'
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
         else
           _LT_TAGVAR(whole_archive_flag_spec, $1)=
         fi
@@ -5987,18 +6456,30 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(ld_shlibs, $1)=no
         ;;
       aix[[4-9]]*)
-        if test "$host_cpu" = ia64; then
+        if test ia64 = "$host_cpu"; 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=""
+          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.
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
           case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
            for ld_flag in $LDFLAGS; do
              case $ld_flag in
@@ -6008,6 +6489,13 @@ if test "$_lt_caught_CXX_error" != yes; then
                ;;
              esac
            done
+           if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+             # With aix-soname=svr4, we create the lib.so.V shared archives only,
+             # so we don't have lib.a shared libs to link our executables.
+             # We have to force runtime linking in this case.
+             aix_use_runtimelinking=yes
+             LDFLAGS="$LDFLAGS -Wl,-brtl"
+           fi
            ;;
           esac
 
@@ -6026,13 +6514,21 @@ if test "$_lt_caught_CXX_error" != yes; then
         _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,'
+        _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;      # no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          _LT_TAGVAR(hardcode_direct, $1)=no
+          _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+          ;;
+        esac
 
-        if test "$GXX" = yes; then
+        if test yes = "$GXX"; 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`
+         collect2name=`$CC -print-prog-name=collect2`
          if test -f "$collect2name" &&
             strings "$collect2name" | $GREP resolve_lib_name >/dev/null
          then
@@ -6050,64 +6546,84 @@ if test "$_lt_caught_CXX_error" != yes; then
          fi
           esac
           shared_flag='-shared'
-         if test "$aix_use_runtimelinking" = yes; then
-           shared_flag="$shared_flag "'${wl}-G'
+         if test yes = "$aix_use_runtimelinking"; then
+           shared_flag=$shared_flag' $wl-G'
          fi
+         # Need to ensure runtime linking is disabled for the traditional
+         # shared library, or the linker may eventually find shared libraries
+         # /with/ Import File - we do not want to mix them.
+         shared_flag_aix='-shared'
+         shared_flag_svr4='-shared $wl-G'
         else
           # not using gcc
-          if test "$host_cpu" = ia64; then
+          if test ia64 = "$host_cpu"; 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'
+           if test yes = "$aix_use_runtimelinking"; then
+             shared_flag='$wl-G'
            else
-             shared_flag='${wl}-bM:SRE'
+             shared_flag='$wl-bM:SRE'
            fi
+           shared_flag_aix='$wl-bM:SRE'
+           shared_flag_svr4='$wl-G'
           fi
         fi
 
-        _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
+        _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
+       if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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'
+          # The "-G" linker flag allows undefined symbols.
+          _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
           # Determine the default libpath from the value encoded in an empty
           # executable.
           _LT_SYS_MODULE_PATH_AIX([$1])
-          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+          _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 func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; 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'
+          if test ia64 = "$host_cpu"; 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"
+           _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([$1])
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
+           _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'
-           if test "$with_gnu_ld" = yes; then
+           _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+           _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+           if test yes = "$with_gnu_ld"; then
              # We only use this code for GNU lds that support --whole-archive.
-             _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+             _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
            else
              # Exported symbols can be pulled into shared objects from archives
              _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
            fi
            _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'
+           _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+           # -brtl affects multiple linker settings, -berok does not and is overridden later
+           compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+           if test svr4 != "$with_aix_soname"; then
+             # This is similar to how AIX traditionally builds its shared
+             # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+             _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+           fi
+           if test aix != "$with_aix_soname"; then
+             _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp'
+           else
+             # used by -dlpreopen to get the symbols
+             _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+           fi
+           _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
           fi
         fi
         ;;
@@ -6117,7 +6633,7 @@ if test "$_lt_caught_CXX_error" != yes; 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'
+         _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
@@ -6145,57 +6661,58 @@ if test "$_lt_caught_CXX_error" != yes; then
          # Tell ltmain to make .lib files, not .a files.
          libext=lib
          # Tell ltmain to make .dll files, not .so files.
-         shrext_cmds=".dll"
+         shrext_cmds=.dll
          # FIXME: Setting linknames here is a bad hack.
-         _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames='
-         _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
-             $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp;
-           else
-             $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp;
-           fi~
-           $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
-           linknames='
+         _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+         _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
          # The linker will not automatically build a static lib if we build a DLL.
          # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
          _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
          # Don't use ranlib
          _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
          _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
-           lt_tool_outputfile="@TOOL_OUTPUT@"~
-           case $lt_outputfile in
-             *.exe|*.EXE) ;;
-             *)
-               lt_outputfile="$lt_outputfile.exe"
-               lt_tool_outputfile="$lt_tool_outputfile.exe"
-               ;;
-           esac~
-           func_to_tool_file "$lt_outputfile"~
-           if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then
-             $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
-             $RM "$lt_outputfile.manifest";
-           fi'
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
          ;;
        *)
          # g++
          # _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(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols'
+         _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
          _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'
+           _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, use it as
+           # is; otherwise, prepend EXPORTS...
+           _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); 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
@@ -6206,6 +6723,34 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_DARWIN_LINKER_FEATURES($1)
        ;;
 
+      os2*)
+       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+       _LT_TAGVAR(hardcode_minus_L, $1)=yes
+       _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+       shrext_cmds=.dll
+       _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+         $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+         $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+         $ECHO EXPORTS >> $output_objdir/$libname.def~
+         prefix_cmds="$SED"~
+         if test EXPORTS = "`$SED 1q $export_symbols`"; then
+           prefix_cmds="$prefix_cmds -e 1d";
+         fi~
+         prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+         cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+         $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+         emximp -o $lib $output_objdir/$libname.def'
+       _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+       ;;
+
       dgux*)
         case $cc_basename in
           ec++*)
@@ -6241,14 +6786,14 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       haiku*)
-        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
         _LT_TAGVAR(link_all_deplibs, $1)=yes
         ;;
 
       hpux9*)
-        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        _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(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
@@ -6260,7 +6805,7 @@ if test "$_lt_caught_CXX_error" != yes; then
             _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 -f $output_objdir/$soname $lib'
+            _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 "x$output_objdir/$soname" = "x$lib" || mv -f $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.
@@ -6269,11 +6814,11 @@ if test "$_lt_caught_CXX_error" != yes; then
             # 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; func_echo_all "$list"'
+            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; func_echo_all "$list"'
             ;;
           *)
-            if test "$GXX" = yes; then
-              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv -f $output_objdir/$soname $lib'
+            if test yes = "$GXX"; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv -f $output_objdir/$soname $lib'
             else
               # FIXME: insert proper C++ library support
               _LT_TAGVAR(ld_shlibs, $1)=no
@@ -6283,15 +6828,15 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
       hpux10*|hpux11*)
-        if test $with_gnu_ld = no; then
-         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
+        if test no = "$with_gnu_ld"; 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'
+             _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
               ;;
           esac
         fi
@@ -6317,13 +6862,13 @@ if test "$_lt_caught_CXX_error" != yes; then
           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'
+               _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+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'
+               _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
@@ -6334,20 +6879,20 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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; func_echo_all "$list"'
+           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; func_echo_all "$list"'
            ;;
           *)
-           if test "$GXX" = yes; then
-             if test $with_gnu_ld = no; then
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; 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'
+                   _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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                  *)
-                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+                   _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
                    ;;
                esac
              fi
@@ -6362,22 +6907,22 @@ if test "$_lt_caught_CXX_error" != yes; then
       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'
+       _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'
+       _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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+           _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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
@@ -6386,17 +6931,17 @@ if test "$_lt_caught_CXX_error" != yes; then
            _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 $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+           if test yes = "$GXX"; then
+             if test no = "$with_gnu_ld"; then
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
              else
-               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -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_flag_spec, $1)='$wl-rpath $wl$libdir'
         _LT_TAGVAR(hardcode_libdir_separator, $1)=:
         _LT_TAGVAR(inherit_rpath, $1)=yes
         ;;
@@ -6409,8 +6954,8 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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 -f \$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 -f \$templib $lib'
+           _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 -f \$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 -f \$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.
@@ -6419,10 +6964,10 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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; func_echo_all "$list"'
+           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; func_echo_all "$list"'
 
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-           _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+           _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.
@@ -6436,59 +6981,59 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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'
+               _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'
+               _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'
+           _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 | sort | $NL2SP`"'
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $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 | sort | $NL2SP`~
-               $RANLIB $oldlib'
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $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 | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+                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 | sort | $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 | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+                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 | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
              ;;
            *) # Version 6 and above 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'
+             _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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+           _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; func_echo_all \"$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'
+           _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'
@@ -6502,18 +7047,18 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
            ;;
          xl* | mpixl* | bgxl*)
            # 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(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 yes = "$supports_anon_versioning"; 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'
+                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
            ;;
          *)
@@ -6521,10 +7066,10 @@ if test "$_lt_caught_CXX_error" != yes; then
            *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(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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive'
+             _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; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
              _LT_TAGVAR(compiler_needs_object, $1)=yes
 
              # Not sure whether something based on
@@ -6582,22 +7127,17 @@ if test "$_lt_caught_CXX_error" != yes; then
         _LT_TAGVAR(ld_shlibs, $1)=yes
        ;;
 
-      openbsd2*)
-        # C++ shared libraries are fairly broken
-       _LT_TAGVAR(ld_shlibs, $1)=no
-       ;;
-
-      openbsd*)
+      openbsd* | bitrig*)
        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'
+         _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+         if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; 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=func_echo_all
        else
@@ -6613,9 +7153,9 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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 -f \$templib $lib'
+           _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 -f \$templib $lib'
 
-           _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
+           _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
@@ -6633,17 +7173,17 @@ if test "$_lt_caught_CXX_error" != yes; then
           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" && func_echo_all "${wl}-set_version $verstring"` -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)=' $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" && func_echo_all "$wl-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~
-                 $RM $lib.exp'
+                  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 "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
                _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
                ;;
            esac
@@ -6658,21 +7198,21 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+           output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
            ;;
          *)
-           if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-             _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
+           if test yes,no = "$GXX,$with_gnu_ld"; 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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
                  ;;
                *)
-                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+                 _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $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_flag_spec, $1)='$wl-rpath $wl$libdir'
              _LT_TAGVAR(hardcode_libdir_separator, $1)=:
 
              # Commands to make compiler produce verbose output that lists
@@ -6718,9 +7258,9 @@ if test "$_lt_caught_CXX_error" != yes; then
            # 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_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'
+              $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
@@ -6728,7 +7268,7 @@ if test "$_lt_caught_CXX_error" != yes; then
              solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
              *)
                # The compiler driver will combine and reorder linker options,
-               # but understands `-z linker_flag'.
+               # 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'
                ;;
@@ -6745,30 +7285,30 @@ if test "$_lt_caught_CXX_error" != yes; then
            ;;
           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'
+           _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 test yes,no = "$GXX,$with_gnu_ld"; 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 $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
+               _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $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 $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+                  $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -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 -v "^Configured with:" | $GREP "\-L"'
              else
-               # g++ 2.7 appears to require `-G' NOT `-shared' on this
+               # 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_cmds, $1)='$CC -G -nostdlib $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'
+                  $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -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
@@ -6776,11 +7316,11 @@ if test "$_lt_caught_CXX_error" != yes; then
                output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
              fi
 
-             _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
+             _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'
+                 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
                  ;;
              esac
            fi
@@ -6789,52 +7329,52 @@ if test "$_lt_caught_CXX_error" != yes; then
         ;;
 
     sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
+      _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 -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'
+         _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
+       # Note: We CANNOT 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(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_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'
+       _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 -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(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
-             '"$_LT_TAGVAR(old_archive_cmds, $1)"
+              '"$_LT_TAGVAR(old_archive_cmds, $1)"
            _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
-             '"$_LT_TAGVAR(reload_cmds, $1)"
+              '"$_LT_TAGVAR(reload_cmds, $1)"
            ;;
          *)
-           _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'
+           _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
       ;;
@@ -6865,10 +7405,10 @@ if test "$_lt_caught_CXX_error" != yes; then
     esac
 
     AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
-    test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
+    test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
 
-    _LT_TAGVAR(GCC, $1)="$GXX"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$GXX
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -6895,7 +7435,7 @@ if test "$_lt_caught_CXX_error" != yes; then
   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
+fi # test yes != "$_lt_caught_CXX_error"
 
 AC_LANG_POP
 ])# _LT_LANG_CXX_CONFIG
@@ -6917,13 +7457,14 @@ AC_REQUIRE([_LT_DECL_SED])
 AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
 func_stripname_cnf ()
 {
-  case ${2} in
-  .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;;
-  *)  func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;;
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
   esac
 } # func_stripname_cnf
 ])# _LT_FUNC_STRIPNAME_CNF
 
+
 # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
 # ---------------------------------
 # Figure out "hidden" library dependencies from verbose
@@ -7007,13 +7548,13 @@ if AC_TRY_EVAL(ac_compile); then
   pre_test_object_deps_done=no
 
   for p in `eval "$output_verbose_link_cmd"`; do
-    case ${prev}${p} in
+    case $prev$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
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
         prev=$p
         continue
        fi
@@ -7029,16 +7570,16 @@ if AC_TRY_EVAL(ac_compile); then
        case $p in
        =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
        esac
-       if test "$pre_test_object_deps_done" = no; then
-        case ${prev} in
+       if test no = "$pre_test_object_deps_done"; then
+        case $prev 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}"
+            _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}"
+            _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
@@ -7046,9 +7587,9 @@ if AC_TRY_EVAL(ac_compile); then
         esac
        else
         if test -z "$_LT_TAGVAR(postdeps, $1)"; then
-          _LT_TAGVAR(postdeps, $1)="${prev}${p}"
+          _LT_TAGVAR(postdeps, $1)=$prev$p
         else
-          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
+          _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
         fi
        fi
        prev=
@@ -7063,15 +7604,15 @@ if AC_TRY_EVAL(ac_compile); then
         continue
        fi
 
-       if test "$pre_test_object_deps_done" = no; then
+       if test no = "$pre_test_object_deps_done"; then
         if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
-          _LT_TAGVAR(predep_objects, $1)="$p"
+          _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"
+          _LT_TAGVAR(postdep_objects, $1)=$p
         else
           _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
         fi
@@ -7102,51 +7643,6 @@ interix[[3-9]]*)
   _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* | sunCC*)
-    # 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
 ])
 
@@ -7155,7 +7651,7 @@ case " $_LT_TAGVAR(postdeps, $1) " in
 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!^ !!'`
+ _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])
@@ -7175,10 +7671,10 @@ _LT_TAGDECL([], [compiler_lib_search_path], [1],
 # --------------------------
 # 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'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_F77_CONFIG],
 [AC_LANG_PUSH(Fortran 77)
-if test -z "$F77" || test "X$F77" = "Xno"; then
+if test -z "$F77" || test no = "$F77"; then
   _lt_disable_F77=yes
 fi
 
@@ -7215,7 +7711,7 @@ _LT_TAGVAR(objext, $1)=$objext
 # 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
+if test yes != "$_lt_disable_F77"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
@@ -7237,7 +7733,7 @@ if test "$_lt_disable_F77" != yes; then
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
+  lt_save_CC=$CC
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${F77-"f77"}
@@ -7251,21 +7747,25 @@ if test "$_lt_disable_F77" != yes; then
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
+    test no = "$can_build_shared" && 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
+        test yes = "$enable_shared" && 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
+       if test ia64 != "$host_cpu"; then
+         case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+         yes,aix,yes) ;;               # shared object as lib.so file only
+         yes,svr4,*) ;;                # shared object as lib.so archive member only
+         yes,*) enable_static=no ;;    # shared object in lib.a archive as well
+         esac
        fi
         ;;
     esac
@@ -7273,11 +7773,11 @@ if test "$_lt_disable_F77" != yes; then
 
     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
+    test yes = "$enable_shared" || enable_static=yes
     AC_MSG_RESULT([$enable_static])
 
-    _LT_TAGVAR(GCC, $1)="$G77"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _LT_TAGVAR(GCC, $1)=$G77
+    _LT_TAGVAR(LD, $1)=$LD
 
     ## CAVEAT EMPTOR:
     ## There is no encapsulation within the following macros, do not change
@@ -7294,9 +7794,9 @@ if test "$_lt_disable_F77" != yes; then
   fi # test -n "$compiler"
 
   GCC=$lt_save_GCC
-  CC="$lt_save_CC"
-  CFLAGS="$lt_save_CFLAGS"
-fi # test "$_lt_disable_F77" != yes
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
 
 AC_LANG_POP
 ])# _LT_LANG_F77_CONFIG
@@ -7306,11 +7806,11 @@ AC_LANG_POP
 # -------------------------
 # 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'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_FC_CONFIG],
 [AC_LANG_PUSH(Fortran)
 
-if test -z "$FC" || test "X$FC" = "Xno"; then
+if test -z "$FC" || test no = "$FC"; then
   _lt_disable_FC=yes
 fi
 
@@ -7347,7 +7847,7 @@ _LT_TAGVAR(objext, $1)=$objext
 # 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
+if test yes != "$_lt_disable_FC"; then
   # Code to be used in simple compile tests
   lt_simple_compile_test_code="\
       subroutine t
@@ -7369,7 +7869,7 @@ if test "$_lt_disable_FC" != yes; then
   _LT_LINKER_BOILERPLATE
 
   # Allow CC to be a program name with arguments.
-  lt_save_CC="$CC"
+  lt_save_CC=$CC
   lt_save_GCC=$GCC
   lt_save_CFLAGS=$CFLAGS
   CC=${FC-"f95"}
@@ -7385,21 +7885,25 @@ if test "$_lt_disable_FC" != yes; then
     AC_MSG_RESULT([$can_build_shared])
 
     AC_MSG_CHECKING([whether to build shared libraries])
-    test "$can_build_shared" = "no" && enable_shared=no
+    test no = "$can_build_shared" && 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
+        test yes = "$enable_shared" && 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
+       if test ia64 != "$host_cpu"; then
+         case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+         yes,aix,yes) ;;               # shared object as lib.so file only
+         yes,svr4,*) ;;                # shared object as lib.so archive member only
+         yes,*) enable_static=no ;;    # shared object in lib.a archive as well
+         esac
        fi
         ;;
     esac
@@ -7407,11 +7911,11 @@ if test "$_lt_disable_FC" != yes; then
 
     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
+    test yes = "$enable_shared" || enable_static=yes
     AC_MSG_RESULT([$enable_static])
 
-    _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
-    _LT_TAGVAR(LD, $1)="$LD"
+    _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
@@ -7431,7 +7935,7 @@ if test "$_lt_disable_FC" != yes; then
   GCC=$lt_save_GCC
   CC=$lt_save_CC
   CFLAGS=$lt_save_CFLAGS
-fi # test "$_lt_disable_FC" != yes
+fi # test yes != "$_lt_disable_FC"
 
 AC_LANG_POP
 ])# _LT_LANG_FC_CONFIG
@@ -7441,7 +7945,7 @@ AC_LANG_POP
 # --------------------------
 # 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'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_GCJ_CONFIG],
 [AC_REQUIRE([LT_PROG_GCJ])dnl
 AC_LANG_SAVE
@@ -7475,7 +7979,7 @@ CC=${GCJ-"gcj"}
 CFLAGS=$GCJFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
+_LT_TAGVAR(LD, $1)=$LD
 _LT_CC_BASENAME([$compiler])
 
 # GCJ did not exist at the time GCC didn't implicitly link libc in.
@@ -7512,7 +8016,7 @@ CFLAGS=$lt_save_CFLAGS
 # --------------------------
 # Ensure that the configuration variables for the GNU Go compiler
 # are suitably defined.  These variables are subsequently used by _LT_CONFIG
-# to write the compiler configuration to `libtool'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_GO_CONFIG],
 [AC_REQUIRE([LT_PROG_GO])dnl
 AC_LANG_SAVE
@@ -7546,7 +8050,7 @@ CC=${GOC-"gccgo"}
 CFLAGS=$GOFLAGS
 compiler=$CC
 _LT_TAGVAR(compiler, $1)=$CC
-_LT_TAGVAR(LD, $1)="$LD"
+_LT_TAGVAR(LD, $1)=$LD
 _LT_CC_BASENAME([$compiler])
 
 # Go did not exist at the time GCC didn't implicitly link libc in.
@@ -7583,7 +8087,7 @@ CFLAGS=$lt_save_CFLAGS
 # -------------------------
 # 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'.
+# to write the compiler configuration to 'libtool'.
 m4_defun([_LT_LANG_RC_CONFIG],
 [AC_REQUIRE([LT_PROG_RC])dnl
 AC_LANG_SAVE
@@ -7599,7 +8103,7 @@ _LT_TAGVAR(objext, $1)=$objext
 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"
+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
@@ -7609,7 +8113,7 @@ _LT_COMPILER_BOILERPLATE
 _LT_LINKER_BOILERPLATE
 
 # Allow CC to be a program name with arguments.
-lt_save_CC="$CC"
+lt_save_CC=$CC
 lt_save_CFLAGS=$CFLAGS
 lt_save_GCC=$GCC
 GCC=
@@ -7638,7 +8142,7 @@ 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"
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
       AC_SUBST(GCJFLAGS)])])[]dnl
 ])
 
@@ -7749,7 +8253,7 @@ 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
+  test ! -f "$lt_ac_sed" && continue
   cat /dev/null > conftest.in
   lt_ac_count=0
   echo $ECHO_N "0123456789$ECHO_C" >conftest.in
@@ -7766,9 +8270,9 @@ for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
     $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
+    test 10 -lt "$lt_ac_count" && break
     lt_ac_count=`expr $lt_ac_count + 1`
-    if test $lt_ac_count -gt $lt_ac_max; then
+    if test "$lt_ac_count" -gt "$lt_ac_max"; then
       lt_ac_max=$lt_ac_count
       lt_cv_path_SED=$lt_ac_sed
     fi
@@ -7792,27 +8296,7 @@ dnl AC_DEFUN([LT_AC_PROG_SED], [])
 # 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%"$_lt_dummy"}, \
-      = c,a/b,b/c, \
-    && 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
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   lt_unset=unset
 else
   lt_unset=false
@@ -7836,102 +8320,9 @@ _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
 ])# _LT_CHECK_SHELL_FEATURES
 
 
-# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY)
-# ------------------------------------------------------
-# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and
-# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY.
-m4_defun([_LT_PROG_FUNCTION_REPLACE],
-[dnl {
-sed -e '/^$1 ()$/,/^} # $1 /c\
-$1 ()\
-{\
-m4_bpatsubsts([$2], [$], [\\], [^\([    ]\)], [\\\1])
-} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \
-  && mv -f "$cfgfile.tmp" "$cfgfile" \
-    || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-test 0 -eq $? || _lt_function_replace_fail=:
-])
-
-
-# _LT_PROG_REPLACE_SHELLFNS
-# -------------------------
-# Replace existing portable implementations of several shell functions with
-# equivalent extended shell implementations where those features are available..
-m4_defun([_LT_PROG_REPLACE_SHELLFNS],
-[if test x"$xsi_shell" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl
-    case ${1} in
-      */*) func_dirname_result="${1%/*}${2}" ;;
-      *  ) func_dirname_result="${3}" ;;
-    esac
-    func_basename_result="${1##*/}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl
-    # 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}"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl
-    func_split_long_opt_name=${1%%=*}
-    func_split_long_opt_arg=${1#*=}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl
-    func_split_short_opt_arg=${1#??}
-    func_split_short_opt_name=${1%"$func_split_short_opt_arg"}])
-
-  _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl
-    case ${1} in
-      *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
-      *)    func_lo2o_result=${1} ;;
-    esac])
-
-  _LT_PROG_FUNCTION_REPLACE([func_xform], [    func_xform_result=${1%.*}.lo])
-
-  _LT_PROG_FUNCTION_REPLACE([func_arith], [    func_arith_result=$(( $[*] ))])
-
-  _LT_PROG_FUNCTION_REPLACE([func_len], [    func_len_result=${#1}])
-fi
-
-if test x"$lt_shell_append" = xyes; then
-  _LT_PROG_FUNCTION_REPLACE([func_append], [    eval "${1}+=\\${2}"])
-
-  _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl
-    func_quote_for_eval "${2}"
-dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \
-    eval "${1}+=\\\\ \\$func_quote_for_eval_result"])
-
-  # Save a `func_append' function call where possible by direct use of '+='
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-else
-  # Save a `func_append' function call even when '+=' is not available
-  sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \
-    && mv -f "$cfgfile.tmp" "$cfgfile" \
-      || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp")
-  test 0 -eq $? || _lt_function_replace_fail=:
-fi
-
-if test x"$_lt_function_replace_fail" = x":"; then
-  AC_MSG_WARN([Unable to substitute extended shell functions in $ofile])
-fi
-])
-
 # _LT_PATH_CONVERSION_FUNCTIONS
 # -----------------------------
-# Determine which file name conversion functions should be used by
+# Determine what file name conversion functions should be used by
 # func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
 # for certain cross-compile configurations and native mingw.
 m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
index 5d9acd8..94b0829 100644 (file)
@@ -1,14 +1,14 @@
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation,
-#   Inc.
+#   Copyright (C) 2004-2005, 2007-2009, 2011-2015 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 7 ltoptions.m4
+# serial 8 ltoptions.m4
 
 # This is to help aclocal find these macros, as it can't see m4_define.
 AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
@@ -29,7 +29,7 @@ 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
+    [m4_warning([Unknown $1 option '$2'])])[]dnl
 ])
 
 
@@ -75,13 +75,15 @@ m4_if([$1],[LT_INIT],[
   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 '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_ENABLE_FAST_INSTALL])
+  _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+                  [_LT_WITH_AIX_SONAME([aix])])
   ])
 ])# _LT_SET_OPTIONS
 
@@ -112,7 +114,7 @@ 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.])
+put the 'dlopen' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -148,7 +150,7 @@ AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
 _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.])
+put the 'win32-dll' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -157,9 +159,9 @@ 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'.
+# 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],
@@ -172,14 +174,14 @@ AC_ARG_ENABLE([shared],
     *)
       enable_shared=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_shared=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
@@ -211,9 +213,9 @@ 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'.
+# 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],
@@ -226,14 +228,14 @@ AC_ARG_ENABLE([static],
     *)
      enable_static=no
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_static=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
@@ -265,9 +267,9 @@ 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'.
+# 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],
@@ -280,14 +282,14 @@ AC_ARG_ENABLE([fast-install],
     *)
       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,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for pkg in $enableval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$pkg" = "X$p"; then
          enable_fast_install=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
     [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
@@ -304,14 +306,14 @@ 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.])
+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.])
+the 'disable-fast-install' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
@@ -319,11 +321,64 @@ dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
 dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
 
 
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'.  If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+  AC_MSG_CHECKING([which variant of shared library versioning to provide])
+  AC_ARG_WITH([aix-soname],
+    [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+      [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+    [case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname],
+    [AC_CACHE_VAL([lt_cv_with_aix_soname],
+      [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+    with_aix_soname=$lt_cv_with_aix_soname])
+  AC_MSG_RESULT([$with_aix_soname])
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+    [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
 # _LT_WITH_PIC([MODE])
 # --------------------
-# implement the --with-pic flag, and support the `pic-only' and `no-pic'
+# 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'.
+# 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@<:@=PKGS@:>@],
@@ -334,19 +389,17 @@ m4_define([_LT_WITH_PIC],
     *)
       pic_mode=default
       # Look at the argument we got.  We use all the common list separators.
-      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
       for lt_pkg in $withval; do
-       IFS="$lt_save_ifs"
+       IFS=$lt_save_ifs
        if test "X$lt_pkg" = "X$lt_p"; then
          pic_mode=yes
        fi
       done
-      IFS="$lt_save_ifs"
+      IFS=$lt_save_ifs
       ;;
     esac],
-    [pic_mode=default])
-
-test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
+    [pic_mode=m4_default([$1], [default])])
 
 _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
 ])# _LT_WITH_PIC
@@ -359,7 +412,7 @@ 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.])
+put the 'pic-only' option into LT_INIT's first parameter.])
 ])
 
 dnl aclocal-1.4 backwards compatibility:
index 9000a05..48bc934 100644 (file)
@@ -1,6 +1,7 @@
 # ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
 #
-# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Foundation, Inc.
 # Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
@@ -33,7 +34,7 @@ m4_define([_lt_join],
 # ------------
 # Manipulate m4 lists.
 # These macros are necessary as long as will still need to support
-# Autoconf-2.59 which quotes differently.
+# 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])],
@@ -44,7 +45,7 @@ m4_define([lt_unquote], $1)
 
 # lt_append(MACRO-NAME, STRING, [SEPARATOR])
 # ------------------------------------------
-# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
+# 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
index 07a8602..fa04b52 100644 (file)
@@ -1,6 +1,6 @@
 # ltversion.m4 -- version numbers                      -*- Autoconf -*-
 #
-#   Copyright (C) 2004 Free Software Foundation, Inc.
+#   Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004
 #
 # This file is free software; the Free Software Foundation gives
@@ -9,15 +9,15 @@
 
 # @configure_input@
 
-# serial 3337 ltversion.m4
+# serial 4179 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4.2])
-m4_define([LT_PACKAGE_REVISION], [1.3337])
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.2'
-macro_revision='1.3337'
+[macro_version='2.4.6'
+macro_revision='2.4.6'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
index c573da9..c6b26f8 100644 (file)
@@ -1,6 +1,7 @@
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc.
+#   Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+#   Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
@@ -11,7 +12,7 @@
 
 # These exist entirely to fool aclocal when bootstrapping libtool.
 #
-# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
+# 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.
 #
@@ -25,7 +26,7 @@
 # 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. 
+# 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
index 0b90d5f..82aaafa 100644 (file)
@@ -72,7 +72,7 @@ fi
 if test "x$xc_lt_want_enable_shared" = 'xyes' &&
   test "x$xc_lt_want_enable_static" = 'xyes'; then
   case $host_os in @%:@ (
-    mingw* | pw32* | cegcc* | os2* | aix*)
+    pw32* | cegcc* | os2* | aix*)
       xc_lt_want_enable_static='no'
       ;;
   esac
diff --git a/maketgz b/maketgz
index 5aba1a3..aede6d0 100755 (executable)
--- a/maketgz
+++ b/maketgz
@@ -9,11 +9,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2016, 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.
+# are also available at https://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
@@ -46,7 +46,7 @@ HEADER=include/curl/curlver.h
 CHEADER=src/tool_version.h
 
 # requires a date command that knows -u for UTC time zone
-datestamp=`date -u`
+datestamp=`LC_TIME=C date -u`
 
 # Replace version number in header file:
 sed -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g' \
@@ -60,8 +60,9 @@ sed -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g'
 # 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
+# Generate VC7, VC8, VC9, VC10, VC11, VC12 and VC14 versions from the VC6
+# Makefile versions
+for ver in vc7 vc8 vc9 vc10 vc11 vc12 vc14; do
   make -f Makefile.dist $ver
   mv src/Makefile.$ver src/Makefile.$ver.dist
   mv lib/Makefile.$ver lib/Makefile.$ver.dist
@@ -128,7 +129,7 @@ echo "make vc-ide"
 make -s vc-ide
 
 echo "produce CHANGES"
-git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./log2changes.pl > CHANGES.dist
+git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./scripts/log2changes.pl > CHANGES.dist
 
 ############################################################################
 #
@@ -137,7 +138,7 @@ git log --pretty=fuller --no-color --date=short --decorate=full -1000 | ./log2ch
 
 echo "make dist"
 targz="curl-$version.tar.gz"
-make -s dist VERSION=$version
+make -sj dist VERSION=$version
 
 ############################################################################
 #
diff --git a/missing b/missing
index a9f9d94..f62bbae 100755 (executable)
--- a/missing
+++ b/missing
@@ -1,7 +1,10 @@
 #! /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.
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Originally written 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
@@ -14,9 +17,7 @@
 # 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.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # 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"
+  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
 
-case "$1" in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  ;;
-esac
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
 
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
 
   -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.
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
 
 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]"
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
     ;;
 
   -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing 0.3 - GNU automake"
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
     ;;
 
   -*)
-    echo 1>&2 "$0: Unknown \`$1' option"
-    echo 1>&2 "Try \`$0 --help' for more information"
+    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
+esac
 
-    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
-    ;;
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
 
-  *)
-    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
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
     ;;
-esac
-
-exit 0
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/mkinstalldirs b/mkinstalldirs
deleted file mode 100755 (executable)
index 55d537f..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2009-04-28.21; # UTC
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-IFS=" ""       $nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
-  case $1 in
-    -h | --help | --h*)         # -h for help
-      echo "$usage"
-      exit $?
-      ;;
-    -m)                         # -m PERM arg
-      shift
-      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
-      dirmode=$1
-      shift
-      ;;
-    --version)
-      echo "$0 $scriptversion"
-      exit $?
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  esac
-done
-
-for file
-do
-  if test -d "$file"; then
-    shift
-  else
-    break
-  fi
-done
-
-case $# in
-  0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error.  This is a problem when calling mkinstalldirs
-# from a parallel make.  We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
-  '')
-    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-      echo "mkdir -p -- $*"
-      exec 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.
-      test -d ./-p && rmdir ./-p
-      test -d ./--version && rmdir ./--version
-    fi
-    ;;
-  *)
-    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
-       test ! -d ./--version; then
-      echo "mkdir -m $dirmode -p -- $*"
-      exec mkdir -m "$dirmode" -p -- "$@"
-    else
-      # Clean up after NextStep and OpenStep mkdir.
-      for d in ./-m ./-p ./--version "./$dirmode";
-      do
-        test -d $d && rmdir $d
-      done
-    fi
-    ;;
-esac
-
-for file
-do
-  case $file in
-    /*) pathcomp=/ ;;
-    *)  pathcomp= ;;
-  esac
-  oIFS=$IFS
-  IFS=/
-  set fnord $file
-  shift
-  IFS=$oIFS
-
-  for d
-  do
-    test "x$d" = x && continue
-
-    pathcomp=$pathcomp$d
-    case $pathcomp in
-      -*) pathcomp=./$pathcomp ;;
-    esac
-
-    if test ! -d "$pathcomp"; then
-      echo "mkdir $pathcomp"
-
-      mkdir "$pathcomp" || lasterr=$?
-
-      if test ! -d "$pathcomp"; then
-       errstatus=$lasterr
-      else
-       if test ! -z "$dirmode"; then
-         echo "chmod $dirmode $pathcomp"
-         lasterr=
-         chmod "$dirmode" "$pathcomp" || lasterr=$?
-
-         if test ! -z "$lasterr"; then
-           errstatus=$lasterr
-         fi
-       fi
-      fi
-    fi
-
-    pathcomp=$pathcomp/
-  done
-done
-
-exit $errstatus
-
-# 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-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
index b898d16..2d8c366 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/AIX
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -160,6 +169,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -243,7 +253,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -263,6 +273,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -296,6 +307,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -307,17 +319,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -363,6 +376,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -389,7 +403,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/AIX/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/AIX/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -684,6 +697,8 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index a8d5ba5..4aa2757 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/AIX/RPM
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs $(srcdir)/curl.spec.in README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES = curl.spec
@@ -125,6 +134,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/curl.spec.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -183,7 +193,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -203,6 +213,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -236,6 +247,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -247,17 +259,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -303,6 +316,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -328,7 +342,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/AIX/RPM/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/AIX/RPM/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -505,6 +518,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 366cfa0..c64a0b7 100644 (file)
@@ -16,7 +16,7 @@ License: MIT/X derivate
 Vendor: Daniel Stenberg <Daniel.Stenberg@haxx.se>
 Group: Applications/Internet
 Source: %{name}-%{version}.tar.bz2
-URL: http://curl.haxx.se/
+URL: https://curl.haxx.se/
 Provides: curl
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
 Prefix: %{_prefix}
index 489dd95..eec71c1 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/EPM
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs $(srcdir)/curl.list.in README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES = curl.list
@@ -125,6 +134,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/curl.list.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -183,7 +193,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -203,6 +213,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -236,6 +247,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -247,17 +259,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -303,6 +316,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -329,7 +343,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/EPM/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/EPM/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -506,6 +519,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 1ddd000..348ee2a 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/Linux
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -160,6 +169,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -243,7 +253,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -263,6 +273,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -296,6 +307,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -307,17 +319,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -363,6 +376,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -388,7 +402,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Linux/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/Linux/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -683,6 +696,8 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 164e0e0..12e950d 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,9 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/Linux/RPM
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs $(srcdir)/curl.spec.in \
-       $(srcdir)/curl-ssl.spec.in README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -101,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES = curl.spec curl-ssl.spec
@@ -126,6 +134,8 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/curl-ssl.spec.in \
+       $(srcdir)/curl.spec.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -184,7 +194,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -204,6 +214,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -237,6 +248,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -248,17 +260,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -304,6 +317,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -329,7 +343,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Linux/RPM/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/Linux/RPM/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -508,6 +521,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 287a3a5..5b45bb1 100644 (file)
@@ -14,7 +14,7 @@ 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/
+URL: https://curl.haxx.se/
 Provides: curl
 Obsoletes: curl
 BuildRoot: %{_tmppath}/%{tarball}-%{version}-root
index 2382f57..59577b0 100644 (file)
@@ -14,7 +14,7 @@ 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/
+URL: https://curl.haxx.se/
 BuildRoot: /tmp/%{name}-%{version}-root
 
 %description
index 7bbde3d..7e62397 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -160,6 +169,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -243,7 +253,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -263,6 +273,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -296,6 +307,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -307,17 +319,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -363,6 +376,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -420,7 +434,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -715,6 +728,8 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 5bd8a0c..566e891 100644 (file)
@@ -9,7 +9,7 @@
 # *
 # * 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.
+# * are also available at https://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
index 91affbb..03ee5ec 100644 (file)
@@ -9,7 +9,7 @@
 # *
 # * 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.
+# * are also available at https://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
index 99b606c..24cf39e 100644 (file)
@@ -72,6 +72,7 @@ options:
         CURLOPT_COPYPOSTFIELDS
         CURLOPT_CRLFILE
         CURLOPT_CUSTOMREQUEST
+        CURLOPT_DEFAULT_PROTOCOL
         CURLOPT_DNS_SERVERS
         CURLOPT_EGDSOCKET
         CURLOPT_ENCODING
@@ -93,17 +94,19 @@ options:
         CURLOPT_PROXYPASSWORD
         CURLOPT_PROXYUSERNAME
         CURLOPT_PROXYUSERPWD
+        CURLOPT_PROXY_SERVICE_NAME
         CURLOPT_RANDOM_FILE
         CURLOPT_RANGE
         CURLOPT_REFERER
         CURLOPT_RTSP_SESSION_UID
         CURLOPT_RTSP_STREAM_URI
         CURLOPT_RTSP_TRANSPORT
+        CURLOPT_SERVICE_NAME
         CURLOPT_SOCKS5_GSSAPI_SERVICE
-        CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 Note: SSH not available on OS400.
-        CURLOPT_SSH_KNOWNHOSTS          Note: SSH not available on OS400.
-        CURLOPT_SSH_PRIVATE_KEYFILE     Note: SSH not available on OS400.
-        CURLOPT_SSH_PUBLIC_KEYFILE      Note: SSH not available on OS400.
+        CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
+        CURLOPT_SSH_KNOWNHOSTS
+        CURLOPT_SSH_PRIVATE_KEYFILE
+        CURLOPT_SSH_PUBLIC_KEYFILE
         CURLOPT_SSLCERT
         CURLOPT_SSLCERTTYPE
         CURLOPT_SSL_CIPHER_LIST
@@ -146,7 +149,7 @@ 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
+_ 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:
@@ -167,6 +170,14 @@ CCSID. Returned structures sould be free'ed using curl_certinfo_free_all() after
 use.
   Other options are processed like in curl_easy_getinfo().
 
+_ curl_pushheader_bynum_cssid() and curl_pushheader_byname_ccsid()
+  Although the prototypes are self-explanatory, the returned string pointer
+should be freed after use, as opposite to the non-ccsid versions of these
+procedures.
+  Please note that HTTP2 is not (yet) implemented on OS/400, thus these
+functions will always return NULL.
+
+
   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
@@ -193,6 +204,8 @@ _ POP3
 _ POP3S
 _ POP3 with secure transmission
 _ RTSP
+_ SCP if libssh2 is enabled
+_ SFTP if libssh2 is enabled
 _ SMTP
 _ SMTPS
 _ SMTP with secure transmission
@@ -208,13 +221,17 @@ archive extraction. Do not ask questions about these subjects if you're not
 familiar with.
 
 _ As a prerequisite, QADRT development environment must be installed.
+_ If data compression has to be supported, ZLIB development environment must
+  be installed.
+_ Likewise, if SCP and SFTP protocols have to be compiled in, LIBSSH2
+  developent 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.
+  target library, ZLIB/LIBSSH2 availability and location, 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!
@@ -243,6 +260,8 @@ _ 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.
+_ IFS directory /curl/include/curl containg the C header files for IFS source
+  C/C++ compilation and curl.inc.rpgle for IFS source ILE/RPG compilation.
 
 
 
@@ -256,21 +275,22 @@ _ The EBCDIC CCSID used by QADRT is 37 by default, NOT THE JOB'S CCSID. If
   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).
+  Use the installed members instead (in /QSYS.LIB/CURL.LIB/H.FILE and
+  /curl/include/curl).
 
 
 
 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
+  /INCLUDE 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
+     d/include curl/h,curl.inc
 
 in the global data section of the module's source code.
 
index d0e6827..75b7570 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -679,6 +679,8 @@ curl_easy_getinfo_ccsid(CURL * curl, CURLINFO info, ...)
         break;
 
       case CURLINFO_TLS_SESSION:
+      case CURLINFO_TLS_SSL_PTR:
+      case CURLINFO_SOCKET:
         break;
 
       default:
@@ -932,6 +934,14 @@ curl_formadd_ccsid(struct curl_httppost * * httppost,
 
       break;
 
+    case CURLFORM_CONTENTLEN:
+      lengthx = nargs;
+
+      if(!forms)
+        value = (char *) va_arg(arg, curl_off_t);
+
+      break;
+
     case CURLFORM_NAMELENGTH:
       namelengthx = nargs;
 
@@ -1133,6 +1143,7 @@ curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
   case CURLOPT_COOKIELIST:
   case CURLOPT_CRLFILE:
   case CURLOPT_CUSTOMREQUEST:
+  case CURLOPT_DEFAULT_PROTOCOL:
   case CURLOPT_DNS_SERVERS:
   case CURLOPT_EGDSOCKET:
   case CURLOPT_ENCODING:
@@ -1154,12 +1165,14 @@ curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
   case CURLOPT_PROXYPASSWORD:
   case CURLOPT_PROXYUSERNAME:
   case CURLOPT_PROXYUSERPWD:
+  case CURLOPT_PROXY_SERVICE_NAME:
   case CURLOPT_RANDOM_FILE:
   case CURLOPT_RANGE:
   case CURLOPT_REFERER:
   case CURLOPT_RTSP_SESSION_ID:
   case CURLOPT_RTSP_STREAM_URI:
   case CURLOPT_RTSP_TRANSPORT:
+  case CURLOPT_SERVICE_NAME:
   case CURLOPT_SOCKS5_GSSAPI_SERVICE:
   case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
   case CURLOPT_SSH_KNOWNHOSTS:
@@ -1193,10 +1206,7 @@ curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
       }
 
     result = curl_easy_setopt(curl, tag, s);
-
-    if(s)
-      free(s);
-
+    free(s);
     break;
 
   case CURLOPT_COPYPOSTFIELDS:
@@ -1279,3 +1289,42 @@ curl_form_long_value(long value)
 
   return (char *) value;
 }
+
+
+char *
+curl_pushheader_bynum_cssid(struct curl_pushheaders *h,
+                            size_t num, unsigned int ccsid)
+
+{
+  char *d = (char *) NULL;
+  char *s = curl_pushheader_bynum(h, num);
+
+  if(s)
+    d = dynconvert(ccsid, s, -1, ASCII_CCSID);
+
+  return d;
+}
+
+
+char *
+curl_pushheader_byname_ccsid(struct curl_pushheaders *h, const char *header,
+                             unsigned int ccsidin, unsigned int ccsidout)
+
+{
+  char *d = (char *) NULL;
+  char *s;
+
+  if(header) {
+    header = dynconvert(ASCII_CCSID, header, -1, ccsidin);
+
+    if(header) {
+      s = curl_pushheader_byname(h, header);
+      free((char *) header);
+
+      if(s)
+        d = dynconvert(ccsidout, s, -1, ASCII_CCSID);
+    }
+  }
+
+  return d;
+}
index 3d1fe79..5bd24cf 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -61,5 +61,11 @@ CURL_EXTERN int curl_formget_ccsid(struct curl_httppost * form, void * arg,
                                    unsigned int ccsid);
 CURL_EXTERN CURLcode curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...);
 CURL_EXTERN void curl_certinfo_free_all(struct curl_certinfo *info);
+CURL_EXTERN char *curl_pushheader_bynum_cssid(struct curl_pushheaders *h,
+                                              size_t num, unsigned int ccsid);
+CURL_EXTERN char *curl_pushheader_byname_ccsid(struct curl_pushheaders *h,
+                                               const char *header,
+                                               unsigned int ccsidin,
+                                               unsigned int ccsidout);
 
 #endif
index fcbf7c7..7c64686 100644 (file)
@@ -5,11 +5,11 @@
       *                            | (__| |_| |  _ <| |___
       *                             \___|\___/|_| \_\_____|
       *
-      * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+      * Copyright (C) 1998 - 2015, 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.
+      * are also available at https://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
@@ -66,6 +66,8 @@
      d CURLINFO_DOUBLE...
      d                 c                   X'00300000'
      d CURLINFO_SLIST  c                   X'00400000'
+     d CURLINFO_SOCKET...
+     d                 c                   X'00500000'
      d CURLINFO_MASK   c                   X'000FFFFF'
      d CURLINFO_TYPEMASK...
      d                 c                   X'00F00000'
      d                 c                   X'00040000'
      d CURL_VERSION_UNIX_SOCKETS...
      d                 c                   X'00080000'
+     d CURL_VERSION_PSL...
+     d                 c                   X'00100000'
       *
-     d HTTPPOST_FILENAME...
+     d CURL_HTTPPOST_FILENAME...
      d                 c                   X'00000001'
-     d HTTPPOST_READFILE...
+     d CURL_HTTPPOST_READFILE...
      d                 c                   X'00000002'
-     d HTTPPOST_PTRNAME...
+     d CURL_HTTPPOST_PTRNAME...
      d                 c                   X'00000004'
-     d HTTPPOST_PTRCONTENTS...
+     d CURL_HTTPPOST_PTRCONTENTS...
      d                 c                   X'00000008'
-     d HTTPPOST_BUFFER...
+     d CURL_HTTPPOST_BUFFER...
      d                 c                   X'00000010'
-     d HTTPPOST_PTRBUFFER...
+     d CURL_HTTPPOST_PTRBUFFER...
      d                 c                   X'00000020'
-     d HTTPPOST_CALLBACK...
+     d CURL_HTTPPOST_CALLBACK...
      d                 c                   X'00000040'
+     d CURL_HTTPPOST_LARGE...
+     d                 c                   X'00000080'
       *
      d CURL_SEEKFUNC_OK...
      d                 c                   0
      d                 c                   0
      d CURLOPTTYPE_OBJECTPOINT...
      d                 c                   10000
+     d CURLOPTTYPE_STRINGPOINT...
+     d                 c                   10000
      d CURLOPTTYPE_FUNCTIONPOINT...
      d                 c                   20000
      d CURLOPTTYPE_OFF_T...
      d                 c                   2
      d CURL_HTTP_VERSION_2_0...
      d                 c                   3
+     d CURL_HTTP_VERSION_2...
+     d                 c                   3
+     d CURL_HTTP_VERSION_2TLS...
+     d                 c                   4
       *
      d CURL_NETRC_IGNORED...
      d                 c                   0
      d CURL_CSELECT_ERR...
      d                 c                   X'00000004'
       *
+     d CURL_PUSH_OK    c                   0
+     d CURL_PUSH_DENY  c                   1
+      *
      d CURLPAUSE_RECV  c                   X'00000001'
      d CURLPAUSE_RECV_CONT...
      d                 c                   X'00000000'
      d                 c                   89
      d  CURLE_SSL_PINNEDPUBKEYNOTMATCH...
      d                 c                   90
+     d  CURLE_SSL_INVALIDCERTSTATUS...
+     d                 c                   91
       *
       /if not defined(CURL_NO_OLDIES)
      d  CURLE_URL_MALFORMAT_USER...
      d                 c                   3
       *
      d CURLSSLOPT_ALLOW_BEAST...
-     d                 c                   1
+     d                 c                   X'0001'
+     d CURLSSLOPT_NO_REVOKE...
+     d                 c                   X'0002'
       *
       /if not defined(CURL_NO_OLDIES)
      d curl_ftpssl     s                   like(curl_usessl)
      d                 c                   10230
      d  CURLOPT_UNIX_SOCKET_PATH...
      d                 c                   10231
+     d  CURLOPT_SSL_VERIFYSTATUS...
+     d                 c                   00232
+     d  CURLOPT_SSL_FALSESTART...
+     d                 c                   00233
+     d  CURLOPT_PATH_AS_IS...
+     d                 c                   00234
+     d  CURLOPT_PROXY_SERVICE_NAME...
+     d                 c                   10235
+     d  CURLOPT_SERVICE_NAME...
+     d                 c                   10236
+     d  CURLOPT_PIPEWAIT...
+     d                 c                   00237
+     d  CURLOPT_DEFAULT_PROTOCOL...
+     d                 c                   10238
+     d  CURLOPT_STREAM_WEIGHT...
+     d                 c                   00239
+     d  CURLOPT_STREAM_DEPENDS...
+     d                 c                   10240
+     d  CURLOPT_STREAM_DEPENDS_E...
+     d                 c                   10241
+     d  CURLOPT_TFTP_NO_OPTIONS...
+     d                 c                   00242
       *
       /if not defined(CURL_NO_OLDIES)
      d  CURLOPT_FILE   c                   10001
      d                 c                   18
      d  CURLFORM_STREAM...
      d                 c                   19
+     d  CURLFORM_CONTENTLEN...
+     d                 c                   20
       *
      d CURLINFO        s             10i 0 based(######ptr######)               Enum
      d  CURLINFO_EFFECTIVE_URL...                                               CURLINFO_STRING + 1
      d                 c                   X'0020002A'
      d  CURLINFO_TLS_SESSION...                                                 CURLINFO_SLIST + 43
      d                 c                   X'0040002B'
+     d  CURLINFO_ACTIVESOCKET...                                                CURLINFO_SOCKET + 44
+     d                 c                   X'0050002C'
+     d  CURLINFO_TLS_SSL_PTR...                                                 CURLINFO_SLIST + 45
+     d                 c                   X'0040002D'
       *
      d  CURLINFO_HTTP_CODE...                                                   Old ...RESPONSE_CODE
      d                 c                   X'00200002'
      d                 c                   8
      d  CURLSSLBACKEND_DARWINSSL...
      d                 c                   9
+     d  CURLSSLBACKEND_AXTLS...
+     d                 c                   10
+     d  CURLSSLBACKEND_MBEDTLS...
+     d                 c                   11
       *
      d curl_closepolicy...
      d                 s             10i 0 based(######ptr######)               Enum
      d                 c                   10012
      d  CURLMOPT_MAX_TOTAL_CONNECTIONS...
      d                 c                   00013
+     d  CURLMOPT_PUSHFUNCTION...
+     d                 c                   20014
+     d  CURLMOPT_PUSHDATA...
+     d                 c                   10015
+      *
+      * Bitmask bits for CURLMOPT_PIPELING.
+      *
+     d CURLPIPE_NOTHING...
+     d                 c                   x'00000000'
+     d CURLPIPE_HTTP1  c                   x'00000001'
+     d CURLPIPE_MULTIPLEX...
+     d                 c                   x'00000002'
       *
       *  Public API enums for RTSP requests.
       *
      d   value_ptr                     *   overlay(value)
      d   value_procptr...
      d                                 *   overlay(value) procptr
+     d   value_num                         overlay(value: 8) like(curl_off_t)
       *
      d curl_slist      ds                  based(######ptr######)
      d                                     qualified
      d curl_socket_callback...
      d                 s               *   based(######ptr######) procptr
       *
+     d curl_multi_timer_callback...
+     d                 s               *   based(######ptr######) procptr
+      *
+     d curl_push_callback...
+     d                 s               *   based(######ptr######) procptr
+      *
      d curl_opensocket_callback...
      d                 s               *   based(######ptr######) procptr
       *
      d                 pr              *   extproc('curl_multi_strerror')       char *
      d  code                               value like(CURLMcode)
       *
+     d curl_pushheader_bynum...
+     d                 pr              *   extproc('curl_pushheader_bynum')     char *
+     d  h                              *   value                                curl_pushheaders *
+     d  num                          10u 0 value
+      *
+     d curl_pushheader_byname...
+     d                 pr              *   extproc('curl_pushheader_byname')    char *
+     d  h                              *   value                                curl_pushheaders *
+     d  header                         *   value options(*string)               const char *
+      *
      d curl_multi_socket...
      d                 pr                  extproc('curl_multi_socket')
      d                                     like(CURLMcode)
      d  objectarg                      *   value options(*string: *nopass)
      d  ccsid                        10u 0 value options(*nopass)
       *
+     d curl_pushheader_bynum_ccsid...
+     d                 pr              *   extproc(                             char *
+     d                                       'curl_pushheader_bynum_ccsid')
+     d  h                              *   value                                curl_pushheaders *
+     d  num                          10u 0 value
+     d  ccsid                        10u 0 value
+      *
+     d curl_pushheader_byname_ccsid...
+     d                 pr              *   extproc(                             char *
+     d                                       'curl_pushheader_byname_ccsid')
+     d  h                              *   value                                curl_pushheaders *
+     d  header                         *   value options(*string)               const char *
+     d  ccsidin                      10u 0 value
+     d  ccsidout                     10u 0 value
+      *
       /endif
index 0105f5a..8d66b60 100644 (file)
@@ -60,6 +60,13 @@ setenv ZLIB_INCLUDE     '/zlib/include'         # ZLIB include IFS directory.
 setenv ZLIB_LIB         'ZLIB'                  # ZLIB library.
 setenv ZLIB_BNDDIR      'ZLIB_A'                # ZLIB binding directory.
 
+#       Define LIBSSH2 availability and locations.
+
+setenv WITH_LIBSSH2     0                       # Define to 1 to enable.
+setenv LIBSSH2_INCLUDE  '/libssh2/include'      # LIBSSH2 include IFS directory.
+setenv LIBSSH2_LIB      'LIBSSH2'               # LIBSSH2 library.
+setenv LIBSSH2_BNDDIR   'LIBSSH2_A'             # LIBSSH2 binding directory.
+
 
 ################################################################################
 
@@ -190,6 +197,10 @@ make_module()
         then    CMD="${CMD} '${ZLIB_INCLUDE}'"
         fi
 
+        if [ "${WITH_LIBSSH2}" != "0" ]
+        then    CMD="${CMD} '${LIBSSH2_INCLUDE}'"
+        fi
+
         CMD="${CMD} ${INCLUDES})"
         CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
         CMD="${CMD} OUTPUT(${OUTPUT})"
@@ -202,6 +213,10 @@ make_module()
         then    DEFINES="${DEFINES} HAVE_LIBZ HAVE_ZLIB_H"
         fi
 
+        if [ "${WITH_LIBSSH2}" != "0" ]
+        then    DEFINES="${DEFINES} USE_LIBSSH2 HAVE_LIBSSH2_H"
+        fi
+
         if [ "${DEFINES}" ]
         then    CMD="${CMD} DEFINE(${DEFINES})"
         fi
index a4e5059..526ec03 100644 (file)
@@ -128,6 +128,11 @@ then    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
         CMD="${CMD} BNDDIR(${TARGETLIB}/${STATBNDDIR}"
         if [ "${WITH_ZLIB}" != 0 ]
         then    CMD="${CMD} ${ZLIB_LIB}/${ZLIB_BNDDIR}"
+                liblist -a "${ZLIB_LIB}"
+        fi
+        if [ "${WITH_LIBSSH2}" != 0 ]
+        then    CMD="${CMD} ${LIBSSH2_LIB}/${LIBSSH2_BNDDIR}"
+                liblist -a "${LIBSSH2_LIB}"
         fi
         CMD="${CMD})"
         CMD="${CMD} BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)"
index d2b6bc9..141d877 100644 (file)
@@ -21,7 +21,7 @@ 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)"
+then    CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(240)"
         CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')"
         system "${CMD}"
 fi
index caeaa95..89837bd 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -99,9 +99,7 @@ thdbufdestroy(void * private)
     localkey_t i;
 
     for(i = (localkey_t) 0; i < LK_LAST; i++) {
-      if(p->buf)
-        free(p->buf);
-
+      free(p->buf);
       p++;
       }
 
@@ -281,9 +279,7 @@ Curl_getnameinfo_a(const struct sockaddr * sa, curl_socklen_t salen,
 
   if(servname && servnamelen)
     if(!(eservname = malloc(servnamelen))) {
-      if(enodename)
-        free(enodename);
-
+      free(enodename);
       return EAI_MEMORY;
       }
 
@@ -304,12 +300,8 @@ Curl_getnameinfo_a(const struct sockaddr * sa, curl_socklen_t salen,
       }
     }
 
-  if(enodename)
-    free(enodename);
-
-  if(eservname)
-    free(eservname);
-
+  free(enodename);
+  free(eservname);
   return status;
 }
 
@@ -342,9 +334,7 @@ Curl_getaddrinfo_a(const char * nodename, const char * servname,
     i = strlen(servname);
 
     if(!(eservname = malloc(i + 1))) {
-      if(enodename)
-        free(enodename);
-
+      free(enodename);
       return EAI_MEMORY;
       }
 
@@ -353,13 +343,8 @@ Curl_getaddrinfo_a(const char * nodename, const char * servname,
     }
 
   status = getaddrinfo(enodename, eservname, hints, res);
-
-  if(enodename)
-    free(enodename);
-
-  if(eservname)
-    free(eservname);
-
+  free(enodename);
+  free(eservname);
   return status;
 }
 
@@ -886,9 +871,7 @@ Curl_gss_init_sec_context_a(OM_uint32 * minor_status,
                              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);
+  free(in.value);
 
   if(rc != GSS_S_COMPLETE || !output_token ||
       !output_token->length || !output_token->value)
@@ -985,9 +968,7 @@ Curl_ldap_simple_bind_s_a(void * ld, char * dn, char * passwd)
     i = strlen(passwd);
 
     if(!(epasswd = malloc(i + 1))) {
-      if(edn)
-        free(edn);
-
+      free(edn);
       return LDAP_NO_MEMORY;
       }
 
@@ -996,13 +977,8 @@ Curl_ldap_simple_bind_s_a(void * ld, char * dn, char * passwd)
     }
 
   i = ldap_simple_bind_s(ld, edn, epasswd);
-
-  if(epasswd)
-    free(epasswd);
-
-  if(edn)
-    free(edn);
-
+  free(epasswd);
+  free(edn);
   return i;
 }
 
@@ -1079,12 +1055,8 @@ Curl_ldap_search_s_a(void * ld, char * base, int scope, char * filter,
     free(eattrs);
     }
 
-  if(efilter)
-    free(efilter);
-
-  if(ebase)
-    free(ebase);
-
+  free(efilter);
+  free(ebase);
   return status;
 }
 
@@ -1112,9 +1084,7 @@ Curl_ldap_get_values_len_a(void * ld, LDAPMessage * entry, const char * attr)
     }
 
   result = ldap_get_values_len(ld, entry, cp);
-
-  if(cp)
-    free(cp);
+  free(cp);
 
   /* Result data are binary in nature, so they haven't been
      converted to EBCDIC. Therefore do not convert. */
index 1144692..c98e198 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 60a005a..2882ad7 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 #
 #
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -81,8 +91,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/Solaris
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -103,7 +111,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -128,6 +137,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -186,7 +196,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -206,6 +216,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -239,6 +250,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -250,17 +262,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -306,6 +319,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -335,7 +349,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Solaris/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/Solaris/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -510,6 +523,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 package:
        if [ ! -f release ]; then echo 0 > release; fi
index 2419c20..545cdee 100644 (file)
@@ -16,7 +16,7 @@ MACRO       BUILDING_LIBCURL
 MACRO       HAVE_LIBZ
 #endif
 #ifdef ENABLE_SSL
-MACRO       USE_SSLEAY
+MACRO       USE_OPENSSL
 #endif
 
 SOURCEPATH  ../../../lib
@@ -38,9 +38,9 @@ SOURCE \
   vtls/axtls.c idn_win32.c http_negotiate_sspi.c vtls/cyassl.c         \
   http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c     \
   curl_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_ntlm_msgs.c         \
-  curl_sasl.c vtls/curl_schannel.c curl_multibyte.c                    \
-  vtls/curl_darwinssl.c bundles.c conncache.c curl_sasl_sspi.c smb.c   \
-  curl_sasl_gssapi.c curl_endian.c
+  curl_sasl.c vtls/schannel.c curl_multibyte.c vtls/darwinssl.c        \
+  conncache.c curl_sasl_sspi.c smb.c curl_sasl_gssapi.c      \
+  curl_endian.c curl_des.c
 
 USERINCLUDE   ../../../lib ../../../include/curl
 #ifdef ENABLE_SSL
index 6e93404..5ef2ae1 100644 (file)
@@ -43,7 +43,6 @@ 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)
index 9c81836..ff23c2f 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/Win32
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -160,6 +169,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -243,7 +253,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -263,6 +273,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -296,6 +307,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -307,17 +319,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -363,6 +376,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -389,7 +403,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Win32/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/Win32/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -684,6 +697,8 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 266e4ea..eb5d0a6 100644 (file)
@@ -3,7 +3,7 @@ Author: J
 DESCRIPTION
 
 (If you're only looking for precompiled win32 binaries, go visit
-http://curl.haxx.se/download.html)
+https://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
index eedce11..81f4dc5 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/Win32/cygwin
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -125,6 +134,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -183,7 +193,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -203,6 +213,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -236,6 +247,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -247,17 +259,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -303,6 +316,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -345,7 +359,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Win32/cygwin/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/Win32/cygwin/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -520,6 +533,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 cygwinbin:
        rm -rf $(cygwintmp)
index 7457f73..a0811de 100644 (file)
@@ -16,8 +16,8 @@ Dependencies:
 
 
 Canonical Homepage and Downloads:
-  http://curl.haxx.se/
-  http://curl.haxx.se/download.html
+  https://curl.haxx.se/
+  https://curl.haxx.se/download.html
 
 
 Cygwin specific source files (a .README template and a Makefile
index 99e6313..d51fe55 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = packages/vms
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -125,6 +134,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -183,7 +193,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -203,6 +213,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -236,6 +247,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -247,17 +259,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -303,6 +316,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -364,7 +378,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/vms/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign packages/vms/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -539,6 +552,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 572b9b8..3b4cd80 100644 (file)
@@ -113,6 +113,7 @@ $! Required product dependencies.
 $!----------------------------------
 $ vmsprd = "DEC"
 $ if base .eqs. "I64VMS" then vmsprd = "HP"
+$ vsiprd = "VSI"
 $!
 $ write pdsc "   software ''vmsprd' ''base' VMS ;"
 $ arch_type = f$getsyi("ARCH_NAME")
@@ -126,8 +127,11 @@ $ if dashver .eqs. "-" then dashver = ""
 $ vmstag = majver + minver + dashver
 $ code = f$extract(0, 1, arch_type)
 $ arch_code = f$extract(0, 1, arch_type)
-$ write pdsc -
- "   if (not <software ''vmsprd' ''base' VMS version minimum ''node_swvers'>) ;"
+$ line_out = -
+ "   if ((not <software ''vsiprd' ''base' VMS version minimum" + -
+ " ''node_swvers'>) and" + -
+ " (not <software ''vmsprd' ''base' VMS version minimum ''node_swvers'>));"
+$ write pdsc line_out
 $ write pdsc "      error NEED_VMS''vmstag';"
 $ write pdsc "   end if;"
 $!
index d7edc46..e21e57c 100644 (file)
@@ -549,7 +549,7 @@ $ if (.not. nossl)
 $ then
 $   if (f$trnlnm("OPENSSL") .nes. "")
 $   then
-$!        cc_defs = cc_defs + ", USE_SSLEAY=1"
+$!        cc_defs = cc_defs + ", USE_OPENSSL=1"
 $        if ((f$trnlnm("SSL$INCLUDE") .nes. "") .and. (.not. nohpssl))
 $        then
 $!          Use HP SSL.
index 6a87fef..83534c0 100644 (file)
@@ -36,7 +36,7 @@ time that this document was written.
 [gnv.common_src]curl_*_original_src.bck is the original source of the curl kit
 as provided by the curl project.  [gnv.vms_src]curl-*_vms_src.bck, if present,
 has the OpenVMS specific files that are used for building that are not yet in
-the curl source kits for that release distributed http://curl.haxx.se
+the curl source kits for that release distributed https://curl.haxx.se
 
 These backup savesets should be restored to different directory trees on
 an ODS-5 volume(s) which are referenced by concealed rooted logical names.
index 0473be6..2cb32ec 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3976973..3aef9cf 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 960c243..b7e6083 100644 (file)
@@ -173,9 +173,17 @@ $       full_version = f$element(1, " ", hp_ssl_version)
 $       ver_maj = f$element(0, ".", full_version)
 $       ver_min = f$element(1, ".", full_version)
 $       ver_patch = f$element(2, ".", full_version)
+$!      ! ver_patch is typically both a number and some letters
 $       ver_patch_len = f$length(ver_patch)
-$       ver_patchnum = f$extract(0, ver_patch_len - 1, ver_patch)
-$       ver_patchltr = f$extract(ver_patch_len - 1, 1, ver_patch)
+$       ver_patchltr = ""
+$ver_patch_loop:
+$           ver_patchltr_c = f$extract(ver_patch_len - 1, 1, ver_patch)
+$           if ver_patchltr_c .les. "9" then goto ver_patch_loop_end
+$           ver_patchltr = ver_patchltr_c + ver_patchltr
+$           ver_patch_len = ver_patch_len - 1
+$           goto ver_patch_loop
+$ver_patch_loop_end:
+$       ver_patchnum = ver_patch - ver_patchltr
 $       if 'ver_maj' .ge. 0
 $       then
 $           if 'ver_min' .ge. 9
@@ -186,6 +194,7 @@ $                   if ver_patchltr .ges. "w" then use_hp_ssl = 1
 $               endif
 $           endif
 $       endif
+$set nover
 $       if use_hp_ssl .eq. 0
 $       then
 $           write sys$output -
index b45d783..e5fd019 100644 (file)
@@ -68,16 +68,16 @@ Building with Visual C++
    If you are building with VC6 then you will also need the February 2003
    Edition of the Windows Platform SDK which can be downloaded from:
 
-    http://www.microsoft.com/en-us/download/details.aspx?id=12261
+    https://www.microsoft.com/en-us/download/details.aspx?id=12261
 
    If you require support for Internationalized Domain Names via Windows IDN
    then you will need either:
 
     * Microsoft Internationalized Domain Name (IDN) Mitigation APIs:
-      http://www.microsoft.com/en-us/download/details.aspx?id=734
+      https://www.microsoft.com/en-us/download/details.aspx?id=734
 
     * Microsoft Windows SDK Update for Windows Vista:
-      http://www.microsoft.com/en-us/download/details.aspx?id=23719
+      https://www.microsoft.com/en-us/download/details.aspx?id=23719
 
     * Microsoft Visual Studio 2010 or above
 
@@ -88,6 +88,46 @@ Building with Visual C++
    well as a configuration that includes both, it is recommend that you use the
    all-in-one configuration.
 
+Running DLL based configurations
+================================
+
+   If you are a developer and plan to run the curl tool from Visual Studio (eg
+   you are debugging) with any third-party libraries (such as OpenSSL, wolfSSL
+   or LibSSH2) then you will need to add the search path of these DLLs to the
+   configuration's PATH environment. To do that:
+
+    * Open the 'curl-all.sln' or 'curl.sln' solutions
+
+    * Right-click on the 'curl' project and select Properties
+
+    * Navigate to 'Configuration Properties > Debugging > Environment'
+
+    * Add PATH='Path to DLL';C:\Windows\system32;C:\Windows;
+               C:\Windows\System32\Wbem
+
+   ... where 'Path to DLL` is the configuration specific path. For example the
+   following configurations in Visual Studio 2010 might be:
+   
+   DLL Debug - DLL OpenSSL (Win32):
+   PATH=..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;C:\Windows\system32;
+        C:\Windows;C:\Windows\System32\Wbem
+
+   DLL Debug - DLL OpenSSL (x64):
+   PATH=..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;C:\Windows\system32;
+        C:\Windows;C:\Windows\System32\Wbem
+
+   DLL Debug - DLL wolfSSL (Win32):
+   PATH=..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;C:\Windows\system32;
+        C:\Windows;C:\Windows\System32\Wbem
+
+   DLL Debug - DLL wolfSSL (x64):
+   PATH=..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;C:\Windows\system32;
+        C:\Windows;C:\Windows\System32\Wbem
+
+   If you are using a configuration that uses multiple third-party library DLLs
+   (such as DLL Debug - DLL OpenSSL - DLL LibSSH2) then 'Path to DLL' will need
+   to contain the path to both of these.
+
 Notes
 =====
 
@@ -110,6 +150,16 @@ Notes
    stored in the git repositoty) will need to be modified rather than the
    generated project files that Visual Studio uses.
 
+Legacy Windows and SSL
+======================
+
+   Some of the project configurations allow the use of WinSSL (specifically
+   SChannel from Windows SSPI), the native SSL library in Windows. However,
+   WinSSL in Windows <= XP is unable to connect to servers that no longer
+   support the legacy handshakes and algorithms used by those versions. If
+   you will be using curl in one of those earlier versions of Windows you
+   should choose another SSL backend such as OpenSSL.
+
 TODO
 ====
 
@@ -118,8 +168,8 @@ TODO
 
    * Support zlib
    * Use of static runtime libraries
-   * Generate *.vcxproj.filters files for VC10, VC11 and VC12
    * Add the Test Suite components
    * Support for other development IDEs
+   * Add PATH environment variables for third-party DLLs
 
    Any additional help would be appreciated ;-)
\ No newline at end of file
similarity index 86%
rename from projects/Windows/VC10/curl.sln
rename to projects/Windows/VC10/curl-all.sln
index 4501272..7bd131c 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
        EndProjectSection
@@ -17,6 +17,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -27,6 +29,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -41,6 +45,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -55,6 +61,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -75,6 +83,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -95,6 +107,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -123,6 +139,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -151,6 +171,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
@@ -171,6 +195,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -191,6 +219,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -219,6 +251,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -247,6 +283,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
index f29eccd..15461ef 100644 (file)
@@ -12,6 +12,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -22,6 +24,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -36,6 +40,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -50,6 +56,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -70,26 +78,34 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -118,6 +134,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -146,6 +166,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
index 5023bf7..5a2fbf8 100644 (file)
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>DLL Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\lib\amigaos.c" />\r
     <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />\r
     <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />\r
     <ClCompile Include="..\..\..\..\lib\base64.c" />\r
-    <ClCompile Include="..\..\..\..\lib\bundles.c" />\r
     <ClCompile Include="..\..\..\..\lib\conncache.c" />\r
     <ClCompile Include="..\..\..\..\lib\connect.c" />\r
     <ClCompile Include="..\..\..\..\lib\content_encoding.c" />\r
     <ClCompile Include="..\..\..\..\lib\cookie.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_des.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_endian.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />\r
     <ClCompile Include="..\..\..\..\lib\wildcard.c" />\r
     <ClCompile Include="..\..\..\..\lib\x509asn1.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\axtls.c" />\r
-    <ClCompile Include="..\..\..\..\lib\vtls\curl_darwinssl.c" />\r
-    <ClCompile Include="..\..\..\..\lib\vtls\curl_schannel.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\cyassl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\darwinssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\..\..\lib\amigaos.h" />\r
     <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />\r
     <ClInclude Include="..\..\..\..\lib\asyn.h" />\r
-    <ClInclude Include="..\..\..\..\lib\bundles.h" />\r
     <ClInclude Include="..\..\..\..\lib\config-win32.h" />\r
     <ClInclude Include="..\..\..\..\lib\conncache.h" />\r
     <ClInclude Include="..\..\..\..\lib\connect.h" />\r
     <ClInclude Include="..\..\..\..\lib\cookie.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_base64.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_des.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_endian.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm_msgs.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_printf.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_sec.h" />\r
     <ClInclude Include="..\..\..\..\lib\wildcard.h" />\r
     <ClInclude Include="..\..\..\..\lib\x509asn1.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\axtls.h" />\r
-    <ClInclude Include="..\..\..\..\lib\vtls\curl_darwinssl.h" />\r
-    <ClInclude Include="..\..\..\..\lib\vtls\curl_schannel.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\cyassl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\darwinssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
diff --git a/projects/Windows/VC10/lib/libcurl.vcxproj.filters b/projects/Windows/VC10/lib/libcurl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
similarity index 86%
rename from projects/Windows/VC10/src/curlsrc.sln
rename to projects/Windows/VC10/src/curl.sln
index 13fc1d3..131f27b 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 11.00
 # Visual Studio 2010
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -12,6 +12,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -22,6 +24,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -36,6 +40,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -50,6 +56,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -70,6 +78,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -90,6 +102,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -118,6 +134,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -146,6 +166,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
similarity index 81%
rename from projects/Windows/VC10/src/curlsrc.vcxproj
rename to projects/Windows/VC10/src/curl.vcxproj
index d259465..9c88e70 100644 (file)
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>DLL Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
   </ItemGroup>\r
   <PropertyGroup Label="Globals">\r
     <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>\r
-    <RootNamespace>curlsrc</RootNamespace>\r
+    <RootNamespace>curl</RootNamespace>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC10\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">curl</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC10\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC10\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC10\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC10\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\lib\nonblock.c" />\r
     <ClCompile Include="..\..\..\..\lib\rawstr.c" />\r
     <ClCompile Include="..\..\..\..\lib\strtoofft.c" />\r
     <ClCompile Include="..\..\..\..\lib\warnless.c" />\r
+    <ClCompile Include="..\..\..\..\src\slist_wc.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_binmode.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_bname.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />\r
     <ClInclude Include="..\..\..\..\lib\rawstr.h" />\r
     <ClInclude Include="..\..\..\..\lib\strtoofft.h" />\r
     <ClInclude Include="..\..\..\..\lib\warnless.h" />\r
+    <ClInclude Include="..\..\..\..\src\slist_wc.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_binmode.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_bname.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />\r
diff --git a/projects/Windows/VC10/src/curl.vcxproj.filters b/projects/Windows/VC10/src/curl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
similarity index 86%
rename from projects/Windows/VC11/curl.sln
rename to projects/Windows/VC11/curl-all.sln
index c9085a9..bec0ad8 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2012
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
        EndProjectSection
@@ -17,6 +17,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -27,6 +29,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -41,6 +45,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -55,6 +61,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -75,6 +83,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -95,6 +107,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -123,6 +139,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -151,6 +171,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
@@ -171,6 +195,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -191,6 +219,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -219,6 +251,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -247,6 +283,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
index 9e3b9ed..780dc91 100644 (file)
@@ -12,6 +12,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -22,6 +24,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -36,6 +40,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -50,6 +56,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -70,26 +78,34 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -118,6 +134,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -146,6 +166,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
index 6a13105..f173133 100644 (file)
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>DLL Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\lib\amigaos.c" />\r
     <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />\r
     <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />\r
     <ClCompile Include="..\..\..\..\lib\base64.c" />\r
-    <ClCompile Include="..\..\..\..\lib\bundles.c" />\r
     <ClCompile Include="..\..\..\..\lib\conncache.c" />\r
     <ClCompile Include="..\..\..\..\lib\connect.c" />\r
     <ClCompile Include="..\..\..\..\lib\content_encoding.c" />\r
     <ClCompile Include="..\..\..\..\lib\cookie.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_des.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_endian.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />\r
     <ClCompile Include="..\..\..\..\lib\wildcard.c" />\r
     <ClCompile Include="..\..\..\..\lib\x509asn1.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\axtls.c" />\r
-    <ClCompile Include="..\..\..\..\lib\vtls\curl_darwinssl.c" />\r
-    <ClCompile Include="..\..\..\..\lib\vtls\curl_schannel.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\cyassl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\darwinssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\..\..\lib\amigaos.h" />\r
     <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />\r
     <ClInclude Include="..\..\..\..\lib\asyn.h" />\r
-    <ClInclude Include="..\..\..\..\lib\bundles.h" />\r
     <ClInclude Include="..\..\..\..\lib\config-win32.h" />\r
     <ClInclude Include="..\..\..\..\lib\conncache.h" />\r
     <ClInclude Include="..\..\..\..\lib\connect.h" />\r
     <ClInclude Include="..\..\..\..\lib\cookie.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_base64.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_des.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_endian.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm_msgs.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_printf.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_sec.h" />\r
     <ClInclude Include="..\..\..\..\lib\wildcard.h" />\r
     <ClInclude Include="..\..\..\..\lib\x509asn1.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\axtls.h" />\r
-    <ClInclude Include="..\..\..\..\lib\vtls\curl_darwinssl.h" />\r
-    <ClInclude Include="..\..\..\..\lib\vtls\curl_schannel.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\cyassl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\darwinssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
diff --git a/projects/Windows/VC11/lib/libcurl.vcxproj.filters b/projects/Windows/VC11/lib/libcurl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
similarity index 86%
rename from projects/Windows/VC11/src/curlsrc.sln
rename to projects/Windows/VC11/src/curl.sln
index 88b4f7e..e12253e 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2012
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -12,6 +12,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -22,6 +24,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -36,6 +40,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -50,6 +56,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -70,6 +78,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -90,6 +102,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -118,6 +134,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -146,6 +166,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
similarity index 81%
rename from projects/Windows/VC11/src/curlsrc.vcxproj
rename to projects/Windows/VC11/src/curl.vcxproj
index 297262d..8842d98 100644 (file)
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>DLL Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
   </ItemGroup>\r
   <PropertyGroup Label="Globals">\r
     <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>\r
-    <RootNamespace>curlsrc</RootNamespace>\r
+    <RootNamespace>curl</RootNamespace>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v110</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v110</PlatformToolset>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC11\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">curl</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC11\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC11\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC11\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC11\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\lib\nonblock.c" />\r
     <ClCompile Include="..\..\..\..\lib\rawstr.c" />\r
     <ClCompile Include="..\..\..\..\lib\strtoofft.c" />\r
     <ClCompile Include="..\..\..\..\lib\warnless.c" />\r
+    <ClCompile Include="..\..\..\..\src\slist_wc.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_binmode.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_bname.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />\r
     <ClInclude Include="..\..\..\..\lib\rawstr.h" />\r
     <ClInclude Include="..\..\..\..\lib\strtoofft.h" />\r
     <ClInclude Include="..\..\..\..\lib\warnless.h" />\r
+    <ClInclude Include="..\..\..\..\src\slist_wc.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_binmode.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_bname.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />\r
diff --git a/projects/Windows/VC11/src/curl.vcxproj.filters b/projects/Windows/VC11/src/curl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
similarity index 86%
rename from projects/Windows/VC12/curl.sln
rename to projects/Windows/VC12/curl-all.sln
index 57064c4..38b33e6 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2013
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
        EndProjectSection
@@ -17,6 +17,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -27,6 +29,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -41,6 +45,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -55,6 +61,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -75,6 +83,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -95,6 +107,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -123,6 +139,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -151,6 +171,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
@@ -171,6 +195,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -191,6 +219,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -219,6 +251,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -247,6 +283,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
index 6fe2772..860a060 100644 (file)
@@ -12,6 +12,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -22,6 +24,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -36,6 +40,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -50,6 +56,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -70,26 +78,34 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -118,6 +134,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -146,6 +166,10 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
index 739efa2..d7ad13c 100644 (file)
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>DLL Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
     <ConfigurationType>StaticLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">\r
     <ConfigurationType>DynamicLibrary</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
     <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>Win32</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MkTypLibCompatible>true</MkTypLibCompatible>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetEnvironment>X64</TargetEnvironment>\r
       <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
       <HeaderFileName>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <ClCompile>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <ClCompile>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
       <Optimization>MaxSpeed</Optimization>\r
       <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <StringPooling>true</StringPooling>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     </ResourceCompile>\r
     <Lib>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Lib>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(OutDir)$(ProjectName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\lib\amigaos.c" />\r
     <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />\r
     <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />\r
     <ClCompile Include="..\..\..\..\lib\base64.c" />\r
-    <ClCompile Include="..\..\..\..\lib\bundles.c" />\r
     <ClCompile Include="..\..\..\..\lib\conncache.c" />\r
     <ClCompile Include="..\..\..\..\lib\connect.c" />\r
     <ClCompile Include="..\..\..\..\lib\content_encoding.c" />\r
     <ClCompile Include="..\..\..\..\lib\cookie.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_des.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_endian.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />\r
     <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />\r
     <ClCompile Include="..\..\..\..\lib\wildcard.c" />\r
     <ClCompile Include="..\..\..\..\lib\x509asn1.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\axtls.c" />\r
-    <ClCompile Include="..\..\..\..\lib\vtls\curl_darwinssl.c" />\r
-    <ClCompile Include="..\..\..\..\lib\vtls\curl_schannel.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\cyassl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\darwinssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />\r
     <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="..\..\..\..\lib\amigaos.h" />\r
     <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />\r
     <ClInclude Include="..\..\..\..\lib\asyn.h" />\r
-    <ClInclude Include="..\..\..\..\lib\bundles.h" />\r
     <ClInclude Include="..\..\..\..\lib\config-win32.h" />\r
     <ClInclude Include="..\..\..\..\lib\conncache.h" />\r
     <ClInclude Include="..\..\..\..\lib\connect.h" />\r
     <ClInclude Include="..\..\..\..\lib\cookie.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_base64.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_des.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_endian.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm_msgs.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_printf.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />\r
     <ClInclude Include="..\..\..\..\lib\curl_sec.h" />\r
     <ClInclude Include="..\..\..\..\lib\wildcard.h" />\r
     <ClInclude Include="..\..\..\..\lib\x509asn1.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\axtls.h" />\r
-    <ClInclude Include="..\..\..\..\lib\vtls\curl_darwinssl.h" />\r
-    <ClInclude Include="..\..\..\..\lib\vtls\curl_schannel.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\cyassl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\darwinssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />\r
     <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />\r
   </ItemGroup>\r
   <ItemGroup>\r
diff --git a/projects/Windows/VC12/lib/libcurl.vcxproj.filters b/projects/Windows/VC12/lib/libcurl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
similarity index 86%
rename from projects/Windows/VC12/src/curlsrc.sln
rename to projects/Windows/VC12/src/curl.sln
index 292699c..7b5244c 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 2013
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -12,6 +12,8 @@ Global
                DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
                DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
                DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
                DLL Debug|Win32 = DLL Debug|Win32
                DLL Debug|x64 = DLL Debug|x64
                DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -22,6 +24,8 @@ Global
                DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
                DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
                DLL Release|Win32 = DLL Release|Win32
                DLL Release|x64 = DLL Release|x64
                LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
@@ -36,6 +40,8 @@ Global
                LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
                LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
                LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
                LIB Debug|Win32 = LIB Debug|Win32
                LIB Debug|x64 = LIB Debug|x64
                LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
@@ -50,6 +56,8 @@ Global
                LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
                LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
                LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
                LIB Release|Win32 = LIB Release|Win32
                LIB Release|x64 = LIB Release|x64
        EndGlobalSection
@@ -70,6 +78,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
@@ -90,6 +102,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
@@ -118,6 +134,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
@@ -146,6 +166,10 @@ Global
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
                {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
similarity index 81%
rename from projects/Windows/VC12/src/curlsrc.vcxproj
rename to projects/Windows/VC12/src/curl.vcxproj
index 7fc0c29..2a00b4a 100644 (file)
@@ -1,6 +1,14 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>DLL Debug</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
       <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
       <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
       <Platform>x64</Platform>\r
     </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
     <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
       <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
       <Platform>Win32</Platform>\r
   </ItemGroup>\r
   <PropertyGroup Label="Globals">\r
     <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>\r
-    <RootNamespace>curlsrc</RootNamespace>\r
+    <RootNamespace>curl</RootNamespace>\r
   </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
     <ConfigurationType>Application</ConfigurationType>\r
     <UseOfMfc>false</UseOfMfc>\r
     <CharacterSet>MultiByte</CharacterSet>\r
     <PlatformToolset>v120</PlatformToolset>\r
   </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v120</PlatformToolset>\r
+  </PropertyGroup>\r
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
   <ImportGroup Label="ExtensionSettings">\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
   </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
   <PropertyGroup Label="UserMacros" />\r
   <PropertyGroup>\r
     <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
     <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC12\$(Configuration)\</OutDir>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
     <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>\r
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">curld</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">curl</TargetName>\r
-    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">curl</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>\r
   </PropertyGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC12\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC12\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC12\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
     <ClCompile>\r
       <Optimization>Disabled</Optimization>\r
       <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
-      <PreprocessorDefinitions>_DEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
       <MinimalRebuild>true</MinimalRebuild>\r
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
     </ClCompile>\r
     <ResourceCompile>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <GenerateDebugInformation>true</GenerateDebugInformation>\r
       <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX86</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
     <Midl>\r
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
       <FunctionLevelLinking>true</FunctionLevelLinking>\r
       <WarningLevel>Level3</WarningLevel>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
     </ClCompile>\r
     <ResourceCompile>\r
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
     <Link>\r
       <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
       <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
       <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC12\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
       <SubSystem>Console</SubSystem>\r
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>\r
-      <DataExecutionPrevention>\r
-      </DataExecutionPrevention>\r
       <TargetMachine>MachineX64</TargetMachine>\r
     </Link>\r
-    <Bscmake>\r
-      <SuppressStartupBanner>true</SuppressStartupBanner>\r
-      <OutputFile>$(TargetDir)$(TargetName).bsc</OutputFile>\r
-    </Bscmake>\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
     <ClCompile Include="..\..\..\..\lib\nonblock.c" />\r
     <ClCompile Include="..\..\..\..\lib\rawstr.c" />\r
     <ClCompile Include="..\..\..\..\lib\strtoofft.c" />\r
     <ClCompile Include="..\..\..\..\lib\warnless.c" />\r
+    <ClCompile Include="..\..\..\..\src\slist_wc.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_binmode.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_bname.c" />\r
     <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />\r
     <ClInclude Include="..\..\..\..\lib\rawstr.h" />\r
     <ClInclude Include="..\..\..\..\lib\strtoofft.h" />\r
     <ClInclude Include="..\..\..\..\lib\warnless.h" />\r
+    <ClInclude Include="..\..\..\..\src\slist_wc.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_binmode.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_bname.h" />\r
     <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />\r
diff --git a/projects/Windows/VC12/src/curl.vcxproj.filters b/projects/Windows/VC12/src/curl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Windows/VC14/curl-all.sln b/projects/Windows/VC14/curl-all.sln
new file mode 100644 (file)
index 0000000..05820e1
--- /dev/null
@@ -0,0 +1,298 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2015
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+       ProjectSection(ProjectDependencies) = postProject
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
+       EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "lib\libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
+               DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
+               DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
+               DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
+               DLL Debug|Win32 = DLL Debug|Win32
+               DLL Debug|x64 = DLL Debug|x64
+               DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
+               DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
+               DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
+               DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
+               DLL Release|Win32 = DLL Release|Win32
+               DLL Release|x64 = DLL Release|x64
+               LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
+               LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
+               LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
+               LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
+               LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
+               LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
+               LIB Debug|Win32 = LIB Debug|Win32
+               LIB Debug|x64 = LIB Debug|x64
+               LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
+               LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
+               LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
+               LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
+               LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
+               LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
+               LIB Release|Win32 = LIB Release|Win32
+               LIB Release|x64 = LIB Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.Build.0 = DLL Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.Build.0 = DLL Release|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.Build.0 = LIB Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.Build.0 = LIB Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.Build.0 = DLL Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.Build.0 = LIB Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.Build.0 = LIB Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/projects/Windows/VC14/lib/libcurl.sln b/projects/Windows/VC14/lib/libcurl.sln
new file mode 100644 (file)
index 0000000..cd8afe2
--- /dev/null
@@ -0,0 +1,181 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2015
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "libcurl.vcxproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
+               DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
+               DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
+               DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
+               DLL Debug|Win32 = DLL Debug|Win32
+               DLL Debug|x64 = DLL Debug|x64
+               DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
+               DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
+               DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
+               DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
+               DLL Release|Win32 = DLL Release|Win32
+               DLL Release|x64 = DLL Release|x64
+               LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
+               LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
+               LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
+               LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
+               LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
+               LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
+               LIB Debug|Win32 = LIB Debug|Win32
+               LIB Debug|x64 = LIB Debug|x64
+               LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
+               LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
+               LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
+               LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
+               LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
+               LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
+               LIB Release|Win32 = LIB Release|Win32
+               LIB Release|x64 = LIB Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.Build.0 = DLL Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.ActiveCfg = DLL Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|x64.Build.0 = DLL Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Debug|x64.Build.0 = LIB Debug|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|Win32.Build.0 = LIB Release|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.ActiveCfg = LIB Release|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.LIB Release|x64.Build.0 = LIB Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/projects/Windows/VC14/lib/libcurl.vcxproj b/projects/Windows/VC14/lib/libcurl.vcxproj
new file mode 100644 (file)
index 0000000..cc71407
--- /dev/null
@@ -0,0 +1,2619 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">\r
+      <Configuration>DLL Debug - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">\r
+      <Configuration>DLL Debug - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">\r
+      <Configuration>DLL Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">\r
+      <Configuration>DLL Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug|Win32">\r
+      <Configuration>DLL Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug|x64">\r
+      <Configuration>DLL Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">\r
+      <Configuration>DLL Release - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">\r
+      <Configuration>DLL Release - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">\r
+      <Configuration>DLL Release - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">\r
+      <Configuration>DLL Release - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release|Win32">\r
+      <Configuration>DLL Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release|x64">\r
+      <Configuration>DLL Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">\r
+      <Configuration>LIB Debug - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">\r
+      <Configuration>LIB Debug - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">\r
+      <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">\r
+      <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
+      <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">\r
+      <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">\r
+      <Configuration>LIB Debug - LIB OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">\r
+      <Configuration>LIB Debug - LIB OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug|Win32">\r
+      <Configuration>LIB Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug|x64">\r
+      <Configuration>LIB Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">\r
+      <Configuration>LIB Release - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">\r
+      <Configuration>LIB Release - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">\r
+      <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">\r
+      <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
+      <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">\r
+      <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">\r
+      <Configuration>LIB Release - LIB OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">\r
+      <Configuration>LIB Release - LIB OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release|Win32">\r
+      <Configuration>LIB Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release|x64">\r
+      <Configuration>LIB Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>\r
+    <RootNamespace>libcurl</RootNamespace>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>StaticLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>DynamicLibrary</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)lib\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)lib\</IntDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)lib\</IntDir>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;WOLFSSL_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\wolfssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\wolfssl;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_CYASSL;HAVE_CYASSL_OPTIONS_H;HAVE_CYASSL_ERROR_SSL_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>Win32</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ManifestFile>$(IntDir)$(TargetFileName).intermediate.manifest</ManifestFile>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MkTypLibCompatible>true</MkTypLibCompatible>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(OutDir)$(ProjectName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <ImportLibrary>$(TargetDir)$(TargetName).lib</ImportLibrary>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+    </ResourceCompile>\r
+    <Lib>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Lib>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\..\lib\amigaos.c" />\r
+    <ClCompile Include="..\..\..\..\lib\asyn-ares.c" />\r
+    <ClCompile Include="..\..\..\..\lib\asyn-thread.c" />\r
+    <ClCompile Include="..\..\..\..\lib\base64.c" />\r
+    <ClCompile Include="..\..\..\..\lib\conncache.c" />\r
+    <ClCompile Include="..\..\..\..\lib\connect.c" />\r
+    <ClCompile Include="..\..\..\..\lib\content_encoding.c" />\r
+    <ClCompile Include="..\..\..\..\lib\cookie.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_des.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_endian.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_ntlm.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_ntlm_msgs.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_rtmp.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_sasl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_sasl_gssapi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_sasl_sspi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_sspi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\curl_threads.c" />\r
+    <ClCompile Include="..\..\..\..\lib\dict.c" />\r
+    <ClCompile Include="..\..\..\..\lib\dotdot.c" />\r
+    <ClCompile Include="..\..\..\..\lib\easy.c" />\r
+    <ClCompile Include="..\..\..\..\lib\escape.c" />\r
+    <ClCompile Include="..\..\..\..\lib\file.c" />\r
+    <ClCompile Include="..\..\..\..\lib\fileinfo.c" />\r
+    <ClCompile Include="..\..\..\..\lib\formdata.c" />\r
+    <ClCompile Include="..\..\..\..\lib\ftp.c" />\r
+    <ClCompile Include="..\..\..\..\lib\ftplistparser.c" />\r
+    <ClCompile Include="..\..\..\..\lib\getenv.c" />\r
+    <ClCompile Include="..\..\..\..\lib\getinfo.c" />\r
+    <ClCompile Include="..\..\..\..\lib\gopher.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hash.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hmac.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hostasyn.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hostcheck.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hostip4.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hostip6.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hostip.c" />\r
+    <ClCompile Include="..\..\..\..\lib\hostsyn.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http2.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http_chunks.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http_digest.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http_negotiate.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http_negotiate_sspi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\http_proxy.c" />\r
+    <ClCompile Include="..\..\..\..\lib\idn_win32.c" />\r
+    <ClCompile Include="..\..\..\..\lib\if2ip.c" />\r
+    <ClCompile Include="..\..\..\..\lib\imap.c" />\r
+    <ClCompile Include="..\..\..\..\lib\inet_ntop.c" />\r
+    <ClCompile Include="..\..\..\..\lib\inet_pton.c" />\r
+    <ClCompile Include="..\..\..\..\lib\krb5.c" />\r
+    <ClCompile Include="..\..\..\..\lib\ldap.c" />\r
+    <ClCompile Include="..\..\..\..\lib\llist.c" />\r
+    <ClCompile Include="..\..\..\..\lib\md4.c" />\r
+    <ClCompile Include="..\..\..\..\lib\md5.c" />\r
+    <ClCompile Include="..\..\..\..\lib\memdebug.c" />\r
+    <ClCompile Include="..\..\..\..\lib\mprintf.c" />\r
+    <ClCompile Include="..\..\..\..\lib\multi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\netrc.c" />\r
+    <ClCompile Include="..\..\..\..\lib\non-ascii.c" />\r
+    <ClCompile Include="..\..\..\..\lib\nonblock.c" />\r
+    <ClCompile Include="..\..\..\..\lib\openldap.c" />\r
+    <ClCompile Include="..\..\..\..\lib\parsedate.c" />\r
+    <ClCompile Include="..\..\..\..\lib\pingpong.c" />\r
+    <ClCompile Include="..\..\..\..\lib\pipeline.c" />\r
+    <ClCompile Include="..\..\..\..\lib\pop3.c" />\r
+    <ClCompile Include="..\..\..\..\lib\progress.c" />\r
+    <ClCompile Include="..\..\..\..\lib\rawstr.c" />\r
+    <ClCompile Include="..\..\..\..\lib\rtsp.c" />\r
+    <ClCompile Include="..\..\..\..\lib\security.c" />\r
+    <ClCompile Include="..\..\..\..\lib\select.c" />\r
+    <ClCompile Include="..\..\..\..\lib\sendf.c" />\r
+    <ClCompile Include="..\..\..\..\lib\share.c" />\r
+    <ClCompile Include="..\..\..\..\lib\slist.c" />\r
+    <ClCompile Include="..\..\..\..\lib\smb.c" />\r
+    <ClCompile Include="..\..\..\..\lib\smtp.c" />\r
+    <ClCompile Include="..\..\..\..\lib\socks.c" />\r
+    <ClCompile Include="..\..\..\..\lib\socks_gssapi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\socks_sspi.c" />\r
+    <ClCompile Include="..\..\..\..\lib\speedcheck.c" />\r
+    <ClCompile Include="..\..\..\..\lib\splay.c" />\r
+    <ClCompile Include="..\..\..\..\lib\ssh.c" />\r
+    <ClCompile Include="..\..\..\..\lib\strdup.c" />\r
+    <ClCompile Include="..\..\..\..\lib\strequal.c" />\r
+    <ClCompile Include="..\..\..\..\lib\strerror.c" />\r
+    <ClCompile Include="..\..\..\..\lib\strtok.c" />\r
+    <ClCompile Include="..\..\..\..\lib\strtoofft.c" />\r
+    <ClCompile Include="..\..\..\..\lib\telnet.c" />\r
+    <ClCompile Include="..\..\..\..\lib\tftp.c" />\r
+    <ClCompile Include="..\..\..\..\lib\timeval.c" />\r
+    <ClCompile Include="..\..\..\..\lib\transfer.c" />\r
+    <ClCompile Include="..\..\..\..\lib\url.c" />\r
+    <ClCompile Include="..\..\..\..\lib\version.c" />\r
+    <ClCompile Include="..\..\..\..\lib\warnless.c" />\r
+    <ClCompile Include="..\..\..\..\lib\wildcard.c" />\r
+    <ClCompile Include="..\..\..\..\lib\x509asn1.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\axtls.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\cyassl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\darwinssl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\gskit.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\gtls.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\mbedtls.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\nss.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\openssl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\polarssl.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\polarssl_threadlock.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\schannel.c" />\r
+    <ClCompile Include="..\..\..\..\lib\vtls\vtls.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\..\lib\amigaos.h" />\r
+    <ClInclude Include="..\..\..\..\lib\arpa_telnet.h" />\r
+    <ClInclude Include="..\..\..\..\lib\asyn.h" />\r
+    <ClInclude Include="..\..\..\..\lib\config-win32.h" />\r
+    <ClInclude Include="..\..\..\..\lib\conncache.h" />\r
+    <ClInclude Include="..\..\..\..\lib\connect.h" />\r
+    <ClInclude Include="..\..\..\..\lib\content_encoding.h" />\r
+    <ClInclude Include="..\..\..\..\lib\cookie.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_base64.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_des.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_endian.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_md4.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_md5.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_memory.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_multibyte.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_ntlm_core.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_ntlm.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_ntlm_msgs.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_ntlm_wb.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_printf.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_rtmp.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_sasl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_sec.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_setup.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_setup_once.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_sspi.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_threads.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curlx.h" />\r
+    <ClInclude Include="..\..\..\..\lib\dict.h" />\r
+    <ClInclude Include="..\..\..\..\lib\dotdot.h" />\r
+    <ClInclude Include="..\..\..\..\lib\easyif.h" />\r
+    <ClInclude Include="..\..\..\..\lib\escape.h" />\r
+    <ClInclude Include="..\..\..\..\lib\file.h" />\r
+    <ClInclude Include="..\..\..\..\lib\fileinfo.h" />\r
+    <ClInclude Include="..\..\..\..\lib\formdata.h" />\r
+    <ClInclude Include="..\..\..\..\lib\ftp.h" />\r
+    <ClInclude Include="..\..\..\..\lib\ftplistparser.h" />\r
+    <ClInclude Include="..\..\..\..\lib\getinfo.h" />\r
+    <ClInclude Include="..\..\..\..\lib\gopher.h" />\r
+    <ClInclude Include="..\..\..\..\lib\hash.h" />\r
+    <ClInclude Include="..\..\..\..\lib\hostcheck.h" />\r
+    <ClInclude Include="..\..\..\..\lib\hostip.h" />\r
+    <ClInclude Include="..\..\..\..\lib\http2.h" />\r
+    <ClInclude Include="..\..\..\..\lib\http_chunks.h" />\r
+    <ClInclude Include="..\..\..\..\lib\http_digest.h" />\r
+    <ClInclude Include="..\..\..\..\lib\http.h" />\r
+    <ClInclude Include="..\..\..\..\lib\http_negotiate.h" />\r
+    <ClInclude Include="..\..\..\..\lib\http_proxy.h" />\r
+    <ClInclude Include="..\..\..\..\lib\if2ip.h" />\r
+    <ClInclude Include="..\..\..\..\lib\imap.h" />\r
+    <ClInclude Include="..\..\..\..\lib\inet_ntop.h" />\r
+    <ClInclude Include="..\..\..\..\lib\inet_pton.h" />\r
+    <ClInclude Include="..\..\..\..\lib\llist.h" />\r
+    <ClInclude Include="..\..\..\..\lib\memdebug.h" />\r
+    <ClInclude Include="..\..\..\..\lib\multihandle.h" />\r
+    <ClInclude Include="..\..\..\..\lib\multiif.h" />\r
+    <ClInclude Include="..\..\..\..\lib\netrc.h" />\r
+    <ClInclude Include="..\..\..\..\lib\non-ascii.h" />\r
+    <ClInclude Include="..\..\..\..\lib\nonblock.h" />\r
+    <ClInclude Include="..\..\..\..\lib\parsedate.h" />\r
+    <ClInclude Include="..\..\..\..\lib\pingpong.h" />\r
+    <ClInclude Include="..\..\..\..\lib\pipeline.h" />\r
+    <ClInclude Include="..\..\..\..\lib\pop3.h" />\r
+    <ClInclude Include="..\..\..\..\lib\progress.h" />\r
+    <ClInclude Include="..\..\..\..\lib\rawstr.h" />\r
+    <ClInclude Include="..\..\..\..\lib\rtsp.h" />\r
+    <ClInclude Include="..\..\..\..\lib\select.h" />\r
+    <ClInclude Include="..\..\..\..\lib\sendf.h" />\r
+    <ClInclude Include="..\..\..\..\lib\setup-vms.h" />\r
+    <ClInclude Include="..\..\..\..\lib\share.h" />\r
+    <ClInclude Include="..\..\..\..\lib\sigpipe.h" />\r
+    <ClInclude Include="..\..\..\..\lib\slist.h" />\r
+    <ClInclude Include="..\..\..\..\lib\smb.h" />\r
+    <ClInclude Include="..\..\..\..\lib\smtp.h" />\r
+    <ClInclude Include="..\..\..\..\lib\sockaddr.h" />\r
+    <ClInclude Include="..\..\..\..\lib\socks.h" />\r
+    <ClInclude Include="..\..\..\..\lib\speedcheck.h" />\r
+    <ClInclude Include="..\..\..\..\lib\splay.h" />\r
+    <ClInclude Include="..\..\..\..\lib\ssh.h" />\r
+    <ClInclude Include="..\..\..\..\lib\strdup.h" />\r
+    <ClInclude Include="..\..\..\..\lib\strequal.h" />\r
+    <ClInclude Include="..\..\..\..\lib\strerror.h" />\r
+    <ClInclude Include="..\..\..\..\lib\strtok.h" />\r
+    <ClInclude Include="..\..\..\..\lib\strtoofft.h" />\r
+    <ClInclude Include="..\..\..\..\lib\telnet.h" />\r
+    <ClInclude Include="..\..\..\..\lib\tftp.h" />\r
+    <ClInclude Include="..\..\..\..\lib\timeval.h" />\r
+    <ClInclude Include="..\..\..\..\lib\transfer.h" />\r
+    <ClInclude Include="..\..\..\..\lib\urldata.h" />\r
+    <ClInclude Include="..\..\..\..\lib\url.h" />\r
+    <ClInclude Include="..\..\..\..\lib\warnless.h" />\r
+    <ClInclude Include="..\..\..\..\lib\wildcard.h" />\r
+    <ClInclude Include="..\..\..\..\lib\x509asn1.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\axtls.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\cyassl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\darwinssl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\gskit.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\gtls.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\mbedtls.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\nssg.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\openssl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\polarssl.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\polarssl_threadlock.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\schannel.h" />\r
+    <ClInclude Include="..\..\..\..\lib\vtls\vtls.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ResourceCompile Include="..\..\..\..\lib\libcurl.rc" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>\r
diff --git a/projects/Windows/VC14/lib/libcurl.vcxproj.filters b/projects/Windows/VC14/lib/libcurl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/projects/Windows/VC14/src/curl.sln b/projects/Windows/VC14/src/curl.sln
new file mode 100644 (file)
index 0000000..b40c18b
--- /dev/null
@@ -0,0 +1,181 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2015
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcxproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+EndProject
+Global
+       GlobalSection(SolutionConfigurationPlatforms) = preSolution
+               DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               DLL Debug - DLL OpenSSL - DLL LibSSH2|x64 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               DLL Debug - DLL OpenSSL|Win32 = DLL Debug - DLL OpenSSL|Win32
+               DLL Debug - DLL OpenSSL|x64 = DLL Debug - DLL OpenSSL|x64
+               DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               DLL Debug - DLL Windows SSPI - DLL WinIDN|x64 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               DLL Debug - DLL Windows SSPI|Win32 = DLL Debug - DLL Windows SSPI|Win32
+               DLL Debug - DLL Windows SSPI|x64 = DLL Debug - DLL Windows SSPI|x64
+               DLL Debug - DLL wolfSSL|Win32 = DLL Debug - DLL wolfSSL|Win32
+               DLL Debug - DLL wolfSSL|x64 = DLL Debug - DLL wolfSSL|x64
+               DLL Debug|Win32 = DLL Debug|Win32
+               DLL Debug|x64 = DLL Debug|x64
+               DLL Release - DLL OpenSSL - DLL LibSSH2|Win32 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               DLL Release - DLL OpenSSL - DLL LibSSH2|x64 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               DLL Release - DLL OpenSSL|Win32 = DLL Release - DLL OpenSSL|Win32
+               DLL Release - DLL OpenSSL|x64 = DLL Release - DLL OpenSSL|x64
+               DLL Release - DLL Windows SSPI - DLL WinIDN|Win32 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               DLL Release - DLL Windows SSPI - DLL WinIDN|x64 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               DLL Release - DLL Windows SSPI|Win32 = DLL Release - DLL Windows SSPI|Win32
+               DLL Release - DLL Windows SSPI|x64 = DLL Release - DLL Windows SSPI|x64
+               DLL Release - DLL wolfSSL|Win32 = DLL Release - DLL wolfSSL|Win32
+               DLL Release - DLL wolfSSL|x64 = DLL Release - DLL wolfSSL|x64
+               DLL Release|Win32 = DLL Release|Win32
+               DLL Release|x64 = DLL Release|x64
+               LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               LIB Debug - DLL OpenSSL - DLL LibSSH2|x64 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               LIB Debug - DLL OpenSSL|Win32 = LIB Debug - DLL OpenSSL|Win32
+               LIB Debug - DLL OpenSSL|x64 = LIB Debug - DLL OpenSSL|x64
+               LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               LIB Debug - DLL Windows SSPI - DLL WinIDN|x64 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               LIB Debug - DLL Windows SSPI|Win32 = LIB Debug - DLL Windows SSPI|Win32
+               LIB Debug - DLL Windows SSPI|x64 = LIB Debug - DLL Windows SSPI|x64
+               LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               LIB Debug - LIB OpenSSL - LIB LibSSH2|x64 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               LIB Debug - LIB OpenSSL|Win32 = LIB Debug - LIB OpenSSL|Win32
+               LIB Debug - LIB OpenSSL|x64 = LIB Debug - LIB OpenSSL|x64
+               LIB Debug - LIB wolfSSL|Win32 = LIB Debug - LIB wolfSSL|Win32
+               LIB Debug - LIB wolfSSL|x64 = LIB Debug - LIB wolfSSL|x64
+               LIB Debug|Win32 = LIB Debug|Win32
+               LIB Debug|x64 = LIB Debug|x64
+               LIB Release - DLL OpenSSL - DLL LibSSH2|Win32 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               LIB Release - DLL OpenSSL - DLL LibSSH2|x64 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               LIB Release - DLL OpenSSL|Win32 = LIB Release - DLL OpenSSL|Win32
+               LIB Release - DLL OpenSSL|x64 = LIB Release - DLL OpenSSL|x64
+               LIB Release - DLL Windows SSPI - DLL WinIDN|Win32 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               LIB Release - DLL Windows SSPI - DLL WinIDN|x64 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               LIB Release - DLL Windows SSPI|Win32 = LIB Release - DLL Windows SSPI|Win32
+               LIB Release - DLL Windows SSPI|x64 = LIB Release - DLL Windows SSPI|x64
+               LIB Release - LIB OpenSSL - LIB LibSSH2|Win32 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               LIB Release - LIB OpenSSL - LIB LibSSH2|x64 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               LIB Release - LIB OpenSSL|Win32 = LIB Release - LIB OpenSSL|Win32
+               LIB Release - LIB OpenSSL|x64 = LIB Release - LIB OpenSSL|x64
+               LIB Release - LIB wolfSSL|Win32 = LIB Release - LIB wolfSSL|Win32
+               LIB Release - LIB wolfSSL|x64 = LIB Release - LIB wolfSSL|x64
+               LIB Release|Win32 = LIB Release|Win32
+               LIB Release|x64 = LIB Release|x64
+       EndGlobalSection
+       GlobalSection(ProjectConfigurationPlatforms) = postSolution
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.ActiveCfg = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL Windows SSPI|x64.Build.0 = DLL Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.ActiveCfg = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|Win32.Build.0 = DLL Debug - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.ActiveCfg = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug - DLL wolfSSL|x64.Build.0 = DLL Debug - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Debug|x64.Build.0 = DLL Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.ActiveCfg = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|Win32.Build.0 = DLL Release - DLL wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.ActiveCfg = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release - DLL wolfSSL|x64.Build.0 = DLL Release - DLL wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|Win32.Build.0 = DLL Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.ActiveCfg = DLL Release|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.DLL Release|x64.Build.0 = DLL Release|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Debug - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.ActiveCfg = LIB Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|Win32.Build.0 = LIB Debug - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.ActiveCfg = LIB Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL OpenSSL|x64.Build.0 = LIB Debug - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Debug - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.ActiveCfg = LIB Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|Win32.Build.0 = LIB Debug - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.ActiveCfg = LIB Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - DLL Windows SSPI|x64.Build.0 = LIB Debug - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Debug - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.ActiveCfg = LIB Debug - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|Win32.Build.0 = LIB Debug - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.ActiveCfg = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB OpenSSL|x64.Build.0 = LIB Debug - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.ActiveCfg = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|Win32.Build.0 = LIB Debug - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.ActiveCfg = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug - LIB wolfSSL|x64.Build.0 = LIB Debug - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|Win32.Build.0 = LIB Debug|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.ActiveCfg = LIB Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Debug|x64.Build.0 = LIB Debug|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = LIB Release - DLL OpenSSL - DLL LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.ActiveCfg = LIB Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|Win32.Build.0 = LIB Release - DLL OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.ActiveCfg = LIB Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL OpenSSL|x64.Build.0 = LIB Release - DLL OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = LIB Release - DLL Windows SSPI - DLL WinIDN|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.ActiveCfg = LIB Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|Win32.Build.0 = LIB Release - DLL Windows SSPI|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.ActiveCfg = LIB Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - DLL Windows SSPI|x64.Build.0 = LIB Release - DLL Windows SSPI|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|Win32.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.ActiveCfg = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL - LIB LibSSH2|x64.Build.0 = LIB Release - LIB OpenSSL - LIB LibSSH2|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.ActiveCfg = LIB Release - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|Win32.Build.0 = LIB Release - LIB OpenSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.ActiveCfg = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB OpenSSL|x64.Build.0 = LIB Release - LIB OpenSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.ActiveCfg = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|Win32.Build.0 = LIB Release - LIB wolfSSL|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.ActiveCfg = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release - LIB wolfSSL|x64.Build.0 = LIB Release - LIB wolfSSL|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.ActiveCfg = LIB Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|Win32.Build.0 = LIB Release|Win32
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.ActiveCfg = LIB Release|x64
+               {5228E9CE-A216-422F-A5E6-58E95E2DD71D}.LIB Release|x64.Build.0 = LIB Release|x64
+       EndGlobalSection
+       GlobalSection(SolutionProperties) = preSolution
+               HideSolutionNode = FALSE
+       EndGlobalSection
+EndGlobal
diff --git a/projects/Windows/VC14/src/curl.vcxproj b/projects/Windows/VC14/src/curl.vcxproj
new file mode 100644 (file)
index 0000000..9be7f2c
--- /dev/null
@@ -0,0 +1,2788 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
+  <ItemGroup Label="ProjectConfigurations">\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL wolfSSL|x64">\r
+      <Configuration>DLL Debug - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>DLL Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|Win32">\r
+      <Configuration>DLL Debug - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL OpenSSL|x64">\r
+      <Configuration>DLL Debug - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>DLL Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|Win32">\r
+      <Configuration>DLL Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug - DLL Windows SSPI|x64">\r
+      <Configuration>DLL Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug|Win32">\r
+      <Configuration>DLL Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Debug|x64">\r
+      <Configuration>DLL Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|Win32">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL wolfSSL|x64">\r
+      <Configuration>DLL Release - DLL wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>DLL Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL|Win32">\r
+      <Configuration>DLL Release - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL OpenSSL|x64">\r
+      <Configuration>DLL Release - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>DLL Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|Win32">\r
+      <Configuration>DLL Release - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release - DLL Windows SSPI|x64">\r
+      <Configuration>DLL Release - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release|Win32">\r
+      <Configuration>DLL Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="DLL Release|x64">\r
+      <Configuration>DLL Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>LIB Debug - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|Win32">\r
+      <Configuration>LIB Debug - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL OpenSSL|x64">\r
+      <Configuration>LIB Debug - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>LIB Debug - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|Win32">\r
+      <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - DLL Windows SSPI|x64">\r
+      <Configuration>LIB Debug - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB wolfSSL|x64">\r
+      <Configuration>LIB Debug - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32">\r
+      <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL - LIB LibSSH2|x64">\r
+      <Configuration>LIB Debug - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|Win32">\r
+      <Configuration>LIB Debug - LIB OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug - LIB OpenSSL|x64">\r
+      <Configuration>LIB Debug - LIB OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug|Win32">\r
+      <Configuration>LIB Debug</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Debug|x64">\r
+      <Configuration>LIB Debug</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|Win32">\r
+      <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL - DLL LibSSH2|x64">\r
+      <Configuration>LIB Release - DLL OpenSSL - DLL LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL|Win32">\r
+      <Configuration>LIB Release - DLL OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL OpenSSL|x64">\r
+      <Configuration>LIB Release - DLL OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|Win32">\r
+      <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI - DLL WinIDN|x64">\r
+      <Configuration>LIB Release - DLL Windows SSPI - DLL WinIDN</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|Win32">\r
+      <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - DLL Windows SSPI|x64">\r
+      <Configuration>LIB Release - DLL Windows SSPI</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|Win32">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB wolfSSL|x64">\r
+      <Configuration>LIB Release - LIB wolfSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|Win32">\r
+      <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL - LIB LibSSH2|x64">\r
+      <Configuration>LIB Release - LIB OpenSSL - LIB LibSSH2</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL|Win32">\r
+      <Configuration>LIB Release - LIB OpenSSL</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release - LIB OpenSSL|x64">\r
+      <Configuration>LIB Release - LIB OpenSSL</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release|Win32">\r
+      <Configuration>LIB Release</Configuration>\r
+      <Platform>Win32</Platform>\r
+    </ProjectConfiguration>\r
+    <ProjectConfiguration Include="LIB Release|x64">\r
+      <Configuration>LIB Release</Configuration>\r
+      <Platform>x64</Platform>\r
+    </ProjectConfiguration>\r
+  </ItemGroup>\r
+  <PropertyGroup Label="Globals">\r
+    <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>\r
+    <RootNamespace>curl</RootNamespace>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">\r
+    <ConfigurationType>Application</ConfigurationType>\r
+    <UseOfMfc>false</UseOfMfc>\r
+    <CharacterSet>MultiByte</CharacterSet>\r
+    <PlatformToolset>v140</PlatformToolset>\r
+  </PropertyGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />\r
+  <ImportGroup Label="ExtensionSettings">\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="PropertySheets">\r
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />\r
+  </ImportGroup>\r
+  <PropertyGroup Label="UserMacros" />\r
+  <PropertyGroup>\r
+    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">..\..\..\..\build\Win32\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">false</LinkIncremental>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">..\..\..\..\build\Win64\VC14\$(Configuration)\</OutDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(OutDir)src\</IntDir>\r
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(OutDir)src\</IntDir>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">false</LinkIncremental>\r
+    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">false</LinkIncremental>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)d</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">$(ProjectName)</TargetName>\r
+    <TargetName Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">$(ProjectName)</TargetName>\r
+  </PropertyGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;wolfssl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\wolfssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>crypt32.lib;ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC14\LIB Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;libeay32.lib;ssleay32.lib;libssh2d.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libeay32.lib;ssleay32.lib;libssh2.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win32\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;libssh2.lib;libeay32.lib;ssleay32.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);..\..\..\..\..\openssl\build\Win64\VC14\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC14\DLL Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>Disabled</Optimization>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <MinimalRebuild>true</MinimalRebuild>\r
+      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>\r
+      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>\r
+      <WarningLevel>Level3</WarningLevel>\r
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurld.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <GenerateDebugInformation>true</GenerateDebugInformation>\r
+      <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'">\r
+    <Midl>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win32\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX86</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'">\r
+    <Midl>\r
+      <TargetEnvironment>X64</TargetEnvironment>\r
+      <TypeLibraryName>$(TargetDir)$(TargetName).tlb</TypeLibraryName>\r
+      <HeaderFileName>\r
+      </HeaderFileName>\r
+    </Midl>\r
+    <ClCompile>\r
+      <Optimization>MaxSpeed</Optimization>\r
+      <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+      <PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <StringPooling>true</StringPooling>\r
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>\r
+      <FunctionLevelLinking>true</FunctionLevelLinking>\r
+      <WarningLevel>Level3</WarningLevel>\r
+    </ClCompile>\r
+    <ResourceCompile>\r
+      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>\r
+      <Culture>0x0409</Culture>\r
+      <AdditionalIncludeDirectories>..\..\..\..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>\r
+    </ResourceCompile>\r
+    <Link>\r
+      <AdditionalDependencies>ws2_32.lib;wldap32.lib;normaliz.lib;libcurl.lib;%(AdditionalDependencies)</AdditionalDependencies>\r
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>\r
+      <AdditionalLibraryDirectories>..\..\..\..\build\Win64\VC14\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>\r
+      <SubSystem>Console</SubSystem>\r
+      <TargetMachine>MachineX64</TargetMachine>\r
+    </Link>\r
+  </ItemDefinitionGroup>\r
+  <ItemGroup>\r
+    <ClCompile Include="..\..\..\..\lib\nonblock.c" />\r
+    <ClCompile Include="..\..\..\..\lib\rawstr.c" />\r
+    <ClCompile Include="..\..\..\..\lib\strtoofft.c" />\r
+    <ClCompile Include="..\..\..\..\lib\warnless.c" />\r
+    <ClCompile Include="..\..\..\..\src\slist_wc.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_binmode.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_bname.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cb_dbg.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cb_hdr.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cb_prg.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cb_rea.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cb_see.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cb_wrt.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_cfgable.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_convert.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_dirhie.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_doswin.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_easysrc.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_formparse.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_getparam.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_getpass.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_help.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_helpers.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_homedir.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_hugehelp.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_libinfo.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_main.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_metalink.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_mfiles.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_msgs.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_operate.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_operhlp.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_panykey.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_paramhlp.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_parsecfg.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_setopt.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_sleep.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_strdup.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_urlglob.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_util.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_vms.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_writeenv.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_writeout.c" />\r
+    <ClCompile Include="..\..\..\..\src\tool_xattr.c" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ClInclude Include="..\..\..\..\lib\config-win32.h" />\r
+    <ClInclude Include="..\..\..\..\lib\curl_setup.h" />\r
+    <ClInclude Include="..\..\..\..\lib\nonblock.h" />\r
+    <ClInclude Include="..\..\..\..\lib\rawstr.h" />\r
+    <ClInclude Include="..\..\..\..\lib\strtoofft.h" />\r
+    <ClInclude Include="..\..\..\..\lib\warnless.h" />\r
+    <ClInclude Include="..\..\..\..\src\slist_wc.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_binmode.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_bname.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cb_dbg.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cb_hdr.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cb_prg.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cb_rea.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cb_see.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cb_wrt.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_cfgable.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_convert.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_dirhie.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_doswin.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_easysrc.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_formparse.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_getparam.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_getpass.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_helpers.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_help.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_homedir.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_hugehelp.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_libinfo.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_main.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_metalink.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_mfiles.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_msgs.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_operate.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_operhlp.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_panykey.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_paramhlp.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_parsecfg.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_sdecls.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_setopt.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_setup.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_sleep.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_strdup.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_urlglob.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_util.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_version.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_vms.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_writeenv.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_writeout.h" />\r
+    <ClInclude Include="..\..\..\..\src\tool_xattr.h" />\r
+  </ItemGroup>\r
+  <ItemGroup>\r
+    <ResourceCompile Include="..\..\..\..\src\curl.rc" />\r
+  </ItemGroup>\r
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />\r
+  <ImportGroup Label="ExtensionTargets">\r
+  </ImportGroup>\r
+</Project>\r
diff --git a/projects/Windows/VC14/src/curl.vcxproj.filters b/projects/Windows/VC14/src/curl.vcxproj.filters
new file mode 100644 (file)
index 0000000..4d6341d
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+</Project>
\ No newline at end of file
similarity index 87%
rename from projects/Windows/VC6/curl.dsw
rename to projects/Windows/VC6/curl-all.dsw
index 0d368d6..a718e59 100644 (file)
@@ -15,7 +15,7 @@ Package=<4>
 \r
 ###############################################################################\r
 \r
-Project: "curlsrc"=".\src\curlsrc.dsp" - Package Owner=<4>\r
+Project: "curl"=".\src\curl.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
index 2c0f531..040b689 100644 (file)
@@ -63,8 +63,8 @@ CFG=libcurl - Win32 LIB Debug
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "_DEBUG" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /win32\r
@@ -93,8 +93,8 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "_DEBUG" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /win32\r
@@ -123,8 +123,8 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "_DEBUG" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /win32\r
@@ -153,8 +153,8 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /FD /EHsc /GZ /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "_DEBUG" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /win32\r
@@ -183,8 +183,8 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "_DEBUG" /win32\r
 # ADD MTL /nologo /D "_DEBUG" /win32\r
@@ -242,8 +242,8 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /c\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_OPENSSL" /FD /EHsc /c\r
+# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_OPENSSL" /FD /EHsc /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "NDEBUG" /win32\r
 # ADD MTL /nologo /D "NDEBUG" /win32\r
@@ -272,8 +272,8 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
+# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
 MTL=midl.exe\r
 # ADD BASE MTL /nologo /D "NDEBUG" /win32\r
 # ADD MTL /nologo /D "NDEBUG" /win32\r
@@ -360,8 +360,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -385,8 +385,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -410,8 +410,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL - DLL LibSSH2\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -435,8 +435,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -460,8 +460,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI - DLL WinIDN\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_WINDOWS_SSPI" /D "USE_SCHANNEL" /D "USE_WIN32_IDN" /D "WANT_IDN_PROTOTYPES" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -485,8 +485,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -510,8 +510,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL - LIB LibSSH2\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "_DEBUG" /D "BUILDING_LIBCURL" /D "DEBUGBUILD" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /GZ /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "_DEBUG"\r
 # ADD RSC /l 0x409 /d "_DEBUG"\r
@@ -560,8 +560,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /c\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /c\r
+# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
 # ADD RSC /l 0x409 /d "NDEBUG"\r
@@ -585,8 +585,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL - DLL LibSSH2\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
+# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
 # ADD RSC /l 0x409 /d "NDEBUG"\r
@@ -660,8 +660,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Release - LIB OpenSSL\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /FD /EHsc /c\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /c\r
+# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /FD /EHsc /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
 # ADD RSC /l 0x409 /d "NDEBUG"\r
@@ -685,8 +685,8 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Release - LIB OpenSSL - LIB LibSSH2\lib"\r
 # PROP Target_Dir ""\r
 CPP=cl.exe\r
-# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
-# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_SSLEAY" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
+# ADD BASE CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
+# ADD CPP /nologo /MD /W3 /O2 /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\..\openssl\inc32" /I "..\..\..\..\..\libssh2\include" /D "NDEBUG" /D "BUILDING_LIBCURL" /D "CURL_STATICLIB" /D "USE_OPENSSL" /D "USE_LIBSSH2" /D "HAVE_LIBSSH2_H" /FD /EHsc /c\r
 RSC=rc.exe\r
 # ADD BASE RSC /l 0x409 /d "NDEBUG"\r
 # ADD RSC /l 0x409 /d "NDEBUG"\r
@@ -746,10 +746,6 @@ SOURCE=..\..\..\..\lib\base64.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\bundles.c\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=..\..\..\..\lib\conncache.c\r
 # End Source File\r
 # Begin Source File\r
@@ -770,6 +766,10 @@ SOURCE=..\..\..\..\lib\curl_addrinfo.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\curl_des.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\curl_endian.c\r
 # End Source File\r
 # Begin Source File\r
@@ -1150,23 +1150,23 @@ SOURCE=..\..\..\..\lib\vtls\axtls.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\curl_darwinssl.c\r
+SOURCE=..\..\..\..\lib\vtls\cyassl.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\curl_schannel.c\r
+SOURCE=..\..\..\..\lib\vtls\darwinssl.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\cyassl.c\r
+SOURCE=..\..\..\..\lib\vtls\gskit.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\gskit.c\r
+SOURCE=..\..\..\..\lib\vtls\gtls.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\gtls.c\r
+SOURCE=..\..\..\..\lib\vtls\mbedtls.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -1186,6 +1186,10 @@ SOURCE=..\..\..\..\lib\vtls\polarssl_threadlock.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\vtls\schannel.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\vtls\vtls.c\r
 # End Source File\r
 # End Group\r
@@ -1206,10 +1210,6 @@ SOURCE=..\..\..\..\lib\asyn.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\bundles.h\r
-# End Source File\r
-# Begin Source File\r
-\r
 SOURCE=..\..\..\..\lib\config-win32.h\r
 # End Source File\r
 # Begin Source File\r
@@ -1238,6 +1238,10 @@ SOURCE=..\..\..\..\lib\curl_base64.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\curl_des.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\curl_endian.h\r
 # End Source File\r
 # Begin Source File\r
@@ -1298,6 +1302,10 @@ SOURCE=..\..\..\..\lib\curl_ntlm_wb.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\curl_printf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\curl_rtmp.h\r
 # End Source File\r
 # Begin Source File\r
@@ -1594,23 +1602,23 @@ SOURCE=..\..\..\..\lib\vtls\axtls.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\curl_darwinssl.h\r
+SOURCE=..\..\..\..\lib\vtls\cyassl.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\curl_schannel.h\r
+SOURCE=..\..\..\..\lib\vtls\darwinssl.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\cyassl.h\r
+SOURCE=..\..\..\..\lib\vtls\gskit.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\gskit.h\r
+SOURCE=..\..\..\..\lib\vtls\gtls.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\lib\vtls\gtls.h\r
+SOURCE=..\..\..\..\lib\vtls\mbedtls.h\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -1630,6 +1638,10 @@ SOURCE=..\..\..\..\lib\vtls\polarssl_threadlock.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\lib\vtls\schannel.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\lib\vtls\vtls.h\r
 # End Source File\r
 # End Group\r
similarity index 84%
rename from projects/Windows/VC6/src/curlsrc.dsp
rename to projects/Windows/VC6/src/curl.dsp
index e13674c..e7d4130 100644 (file)
@@ -1,46 +1,46 @@
-# Microsoft Developer Studio Project File - Name="curlsrc" - Package Owner=<4>\r
+# Microsoft Developer Studio Project File - Name="curl" - Package Owner=<4>\r
 # Microsoft Developer Studio Generated Build File, Format Version 6.00\r
 # ** DO NOT EDIT **\r
 \r
 # TARGTYPE "Win32 (x86) Console Application" 0x0103\r
 \r
-CFG=curlsrc - Win32 LIB Debug\r
+CFG=curl - Win32 LIB Debug\r
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
 !MESSAGE use the Export Makefile command and run\r
 !MESSAGE \r
-!MESSAGE NMAKE /f "curlsrc.mak".\r
+!MESSAGE NMAKE /f "curl.mak".\r
 !MESSAGE \r
 !MESSAGE You can specify a configuration when running NMAKE\r
 !MESSAGE by defining the macro CFG on the command line. For example:\r
 !MESSAGE \r
-!MESSAGE NMAKE /f "curlsrc.mak" CFG="curlsrc - Win32 LIB Debug"\r
+!MESSAGE NMAKE /f "curl.mak" CFG="curl - Win32 LIB Debug"\r
 !MESSAGE \r
 !MESSAGE Possible choices for configuration are:\r
 !MESSAGE \r
-!MESSAGE "curlsrc - Win32 DLL Debug" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Debug DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Debug DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Debug DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Debug DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Release" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Release DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Release DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Release DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 DLL Release DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug LIB OpenSSL" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Debug LIB OpenSSL LIB LibSSH2" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release LIB OpenSSL" (based on "Win32 (x86) Console Application")\r
-!MESSAGE "curlsrc - Win32 LIB Release LIB OpenSSL LIB LibSSH2" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Debug DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Debug DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Debug DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Debug DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Release DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Release DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Release DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 DLL Release DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug LIB OpenSSL" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Debug LIB OpenSSL LIB LibSSH2" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release DLL OpenSSL" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release DLL OpenSSL DLL LibSSH2" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release DLL Windows SSPI" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release DLL Windows SSPI DLL WinIDN" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release LIB OpenSSL" (based on "Win32 (x86) Console Application")\r
+!MESSAGE "curl - Win32 LIB Release LIB OpenSSL LIB LibSSH2" (based on "Win32 (x86) Console Application")\r
 !MESSAGE \r
 \r
 # Begin Project\r
@@ -50,7 +50,7 @@ CFG=curlsrc - Win32 LIB Debug
 CPP=cl.exe\r
 RSC=rc.exe\r
 \r
-!IF  "$(CFG)" == "curlsrc - Win32 DLL Debug"\r
+!IF  "$(CFG)" == "curl - Win32 DLL Debug"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -63,8 +63,8 @@ RSC=rc.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\DLL Debug\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_CONSOLE" /D "_DEBUG" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -74,7 +74,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Debug DLL OpenSSL"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Debug DLL OpenSSL"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -88,8 +88,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -99,7 +99,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Debug DLL OpenSSL DLL LibSSH2"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Debug DLL OpenSSL DLL LibSSH2"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -113,8 +113,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL - DLL LibSSH2\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -124,7 +124,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL - DLL LibSSH2\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL - DLL LibSSH2\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL OpenSSL" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Debug DLL Windows SSPI"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Debug DLL Windows SSPI"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -138,8 +138,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -149,7 +149,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Debug DLL Windows SSPI DLL WinIDN"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Debug DLL Windows SSPI DLL WinIDN"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -163,8 +163,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI - DLL WinIDN\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -174,7 +174,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI - DLL WinIDN\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI - DLL WinIDN\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\DLL Debug - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Release"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Release"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -198,7 +198,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Release DLL OpenSSL"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Release DLL OpenSSL"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -223,7 +223,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Release DLL OpenSSL DLL LibSSH2"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Release DLL OpenSSL DLL LibSSH2"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -248,7 +248,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL - DLL LibSSH2\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL - DLL LibSSH2\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL OpenSSL" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Release DLL Windows SSPI"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Release DLL Windows SSPI"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -273,7 +273,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 DLL Release DLL Windows SSPI DLL WinIDN"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 DLL Release DLL Windows SSPI DLL WinIDN"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -298,7 +298,7 @@ LINK32=link.exe
 # ADD BASE LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI - DLL WinIDN\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 # ADD LINK32 wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI - DLL WinIDN\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\DLL Release - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -311,8 +311,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_CONSOLE" /D "_DEBUG" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -322,7 +322,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug\curl.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug DLL OpenSSL"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug DLL OpenSSL"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -336,8 +336,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -347,7 +347,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\DLL Debug" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug DLL OpenSSL DLL LibSSH2"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug DLL OpenSSL DLL LibSSH2"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -361,8 +361,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL - DLL LibSSH2\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -372,7 +372,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL - DLL LibSSH2\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\DLL Debug" /libpath:"..\..\..\..\..\libssh2\build\Win32\VC6\DLL Debug" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL - DLL LibSSH2\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\DLL Debug" /libpath:"..\..\..\..\..\libssh2\build\Win32\VC6\DLL Debug" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug DLL Windows SSPI"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug DLL Windows SSPI"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -386,8 +386,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -397,7 +397,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug DLL Windows SSPI DLL WinIDN"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug DLL Windows SSPI DLL WinIDN"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -411,8 +411,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI - DLL WinIDN\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -422,7 +422,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib normaliz.lib wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI - DLL WinIDN\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 # ADD LINK32 advapi32.lib normaliz.lib wldap32.lib ws2_32.lib libcurld.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI - DLL WinIDN\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug LIB OpenSSL"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug LIB OpenSSL"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -436,8 +436,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -447,7 +447,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib crypt32.lib gdi32.lib user32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL" /fixed:no\r
 # ADD LINK32 advapi32.lib crypt32.lib gdi32.lib user32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\LIB Debug" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Debug LIB OpenSSL LIB LibSSH2"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Debug LIB OpenSSL LIB LibSSH2"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 1\r
@@ -461,8 +461,8 @@ LINK32=link.exe
 # PROP Intermediate_Dir "..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL - LIB LibSSH2\src"\r
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
-# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD BASE CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Zi /Od /I "$(ProgramFiles)\Microsoft Platform SDK\Include" /I "..\..\..\..\include" /I "..\..\..\..\lib" /I "..\..\..\..\src" /D "_DEBUG" /D "_CONSOLE" /D "DEBUGBUILD" /D "CURL_STATICLIB" /FD /EHsc /GZ /c\r
 # ADD BASE RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 # ADD RSC /l 0x409 /i "..\..\..\..\include" /d "_DEBUG"\r
 BSC32=bscmake.exe\r
@@ -472,7 +472,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib crypt32.lib gdi32.lib user32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL - LIB LibSSH2\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\LIB Debug" /libpath:"..\..\..\..\..\libssh2\build\Win32\VC6\LIB Debug" /fixed:no\r
 # ADD LINK32 advapi32.lib crypt32.lib gdi32.lib user32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib /nologo /subsystem:console /incremental:no /debug /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL - LIB LibSSH2\curld.exe" /pdbtype:con /libpath:"..\..\..\..\build\Win32\VC6\LIB Debug - LIB OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\LIB Debug" /libpath:"..\..\..\..\..\libssh2\build\Win32\VC6\LIB Debug" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -496,7 +496,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release DLL OpenSSL"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release DLL OpenSSL"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -521,7 +521,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\DLL Release" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release DLL OpenSSL DLL LibSSH2"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release DLL OpenSSL DLL LibSSH2"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -546,7 +546,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL - DLL LibSSH2\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\DLL Release" /libpath:"..\..\..\..\..\libssh2\build\Win32\VC6\DLL Release" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL - DLL LibSSH2\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\DLL Release" /libpath:"..\..\..\..\..\libssh2\build\Win32\VC6\DLL Release" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release DLL Windows SSPI"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release DLL Windows SSPI"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -571,7 +571,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI" /fixed:no\r
 # ADD LINK32 advapi32.lib wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release DLL Windows SSPI DLL WinIDN"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release DLL Windows SSPI DLL WinIDN"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -596,7 +596,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib normaliz.lib wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI - DLL WinIDN\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 # ADD LINK32 advapi32.lib normaliz.lib wldap32.lib ws2_32.lib libcurl.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI - DLL WinIDN\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - DLL Windows SSPI - DLL WinIDN" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release LIB OpenSSL"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release LIB OpenSSL"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -621,7 +621,7 @@ LINK32=link.exe
 # ADD BASE LINK32 advapi32.lib crypt32.lib gdi32.lib user32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - LIB OpenSSL\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - LIB OpenSSL" /fixed:no\r
 # ADD LINK32 advapi32.lib crypt32.lib gdi32.lib user32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib /nologo /subsystem:console /pdb:none /machine:I386 /out:"..\..\..\..\build\Win32\VC6\LIB Release - LIB OpenSSL\curl.exe" /libpath:"..\..\..\..\build\Win32\VC6\LIB Release - LIB OpenSSL" /libpath:"..\..\..\..\..\openssl\build\Win32\VC6\LIB Release" /fixed:no\r
 \r
-!ELSEIF  "$(CFG)" == "curlsrc - Win32 LIB Release LIB OpenSSL LIB LibSSH2"\r
+!ELSEIF  "$(CFG)" == "curl - Win32 LIB Release LIB OpenSSL LIB LibSSH2"\r
 \r
 # PROP BASE Use_MFC 0\r
 # PROP BASE Use_Debug_Libraries 0\r
@@ -650,30 +650,30 @@ LINK32=link.exe
 \r
 # Begin Target\r
 \r
-# Name "curlsrc - Win32 DLL Debug"\r
-# Name "curlsrc - Win32 DLL Debug DLL OpenSSL"\r
-# Name "curlsrc - Win32 DLL Debug DLL OpenSSL DLL LibSSH2"\r
-# Name "curlsrc - Win32 DLL Debug DLL Windows SSPI"\r
-# Name "curlsrc - Win32 DLL Debug DLL Windows SSPI DLL WinIDN"\r
-# Name "curlsrc - Win32 DLL Release"\r
-# Name "curlsrc - Win32 DLL Release DLL OpenSSL"\r
-# Name "curlsrc - Win32 DLL Release DLL OpenSSL DLL LibSSH2"\r
-# Name "curlsrc - Win32 DLL Release DLL Windows SSPI"\r
-# Name "curlsrc - Win32 DLL Release DLL Windows SSPI DLL WinIDN"\r
-# Name "curlsrc - Win32 LIB Debug"\r
-# Name "curlsrc - Win32 LIB Debug DLL OpenSSL"\r
-# Name "curlsrc - Win32 LIB Debug DLL OpenSSL DLL LibSSH2"\r
-# Name "curlsrc - Win32 LIB Debug DLL Windows SSPI"\r
-# Name "curlsrc - Win32 LIB Debug DLL Windows SSPI DLL WinIDN"\r
-# Name "curlsrc - Win32 LIB Debug LIB OpenSSL"\r
-# Name "curlsrc - Win32 LIB Debug LIB OpenSSL LIB LibSSH2"\r
-# Name "curlsrc - Win32 LIB Release"\r
-# Name "curlsrc - Win32 LIB Release DLL OpenSSL"\r
-# Name "curlsrc - Win32 LIB Release DLL OpenSSL DLL LibSSH2"\r
-# Name "curlsrc - Win32 LIB Release DLL Windows SSPI"\r
-# Name "curlsrc - Win32 LIB Release DLL Windows SSPI DLL WinIDN"\r
-# Name "curlsrc - Win32 LIB Release LIB OpenSSL"\r
-# Name "curlsrc - Win32 LIB Release LIB OpenSSL LIB LibSSH2"\r
+# Name "curl - Win32 DLL Debug"\r
+# Name "curl - Win32 DLL Debug DLL OpenSSL"\r
+# Name "curl - Win32 DLL Debug DLL OpenSSL DLL LibSSH2"\r
+# Name "curl - Win32 DLL Debug DLL Windows SSPI"\r
+# Name "curl - Win32 DLL Debug DLL Windows SSPI DLL WinIDN"\r
+# Name "curl - Win32 DLL Release"\r
+# Name "curl - Win32 DLL Release DLL OpenSSL"\r
+# Name "curl - Win32 DLL Release DLL OpenSSL DLL LibSSH2"\r
+# Name "curl - Win32 DLL Release DLL Windows SSPI"\r
+# Name "curl - Win32 DLL Release DLL Windows SSPI DLL WinIDN"\r
+# Name "curl - Win32 LIB Debug"\r
+# Name "curl - Win32 LIB Debug DLL OpenSSL"\r
+# Name "curl - Win32 LIB Debug DLL OpenSSL DLL LibSSH2"\r
+# Name "curl - Win32 LIB Debug DLL Windows SSPI"\r
+# Name "curl - Win32 LIB Debug DLL Windows SSPI DLL WinIDN"\r
+# Name "curl - Win32 LIB Debug LIB OpenSSL"\r
+# Name "curl - Win32 LIB Debug LIB OpenSSL LIB LibSSH2"\r
+# Name "curl - Win32 LIB Release"\r
+# Name "curl - Win32 LIB Release DLL OpenSSL"\r
+# Name "curl - Win32 LIB Release DLL OpenSSL DLL LibSSH2"\r
+# Name "curl - Win32 LIB Release DLL Windows SSPI"\r
+# Name "curl - Win32 LIB Release DLL Windows SSPI DLL WinIDN"\r
+# Name "curl - Win32 LIB Release LIB OpenSSL"\r
+# Name "curl - Win32 LIB Release LIB OpenSSL LIB LibSSH2"\r
 # Begin Group "Source Files"\r
 \r
 # PROP Default_Filter ""\r
@@ -695,6 +695,10 @@ SOURCE=..\..\..\..\lib\warnless.c
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\src\slist_wc.c\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\src\tool_binmode.c\r
 # End Source File\r
 # Begin Source File\r
@@ -879,6 +883,10 @@ SOURCE=..\..\..\..\lib\warnless.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\..\..\..\src\slist_wc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\..\..\..\src\tool_binmode.h\r
 # End Source File\r
 # Begin Source File\r
similarity index 84%
rename from projects/Windows/VC6/src/curlsrc.dsw
rename to projects/Windows/VC6/src/curl.dsw
index 2aec010..a7adbce 100644 (file)
@@ -3,7 +3,7 @@ Microsoft Developer Studio Workspace File, Format Version 6.00
 \r
 ###############################################################################\r
 \r
-Project: "curlsrc"=".\curlsrc.dsp" - Package Owner=<4>\r
+Project: "curl"=".\curl.dsp" - Package Owner=<4>\r
 \r
 Package=<5>\r
 {{{\r
similarity index 99%
rename from projects/Windows/VC7.1/curl.sln
rename to projects/Windows/VC7.1/curl-all.sln
index 4475c77..fc51b9d 100644 (file)
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
        EndProjectSection
index a7d5bf3..fd4c683 100644 (file)
@@ -23,7 +23,7 @@
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
@@ -81,7 +81,7 @@
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                RelativePath="..\..\..\..\lib\base64.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.c">\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\conncache.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\curl_addrinfo.c">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.c">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\asyn.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.h">\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\config-win32.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\curl_base64.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\curl_ntlm_wb.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_printf.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_rtmp.h">\r
                        </File>\r
                        <File\r
                                        RelativePath="..\..\..\..\lib\vtls\axtls.c">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.c">\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.c">\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c">\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.c">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\gskit.c">\r
                                        RelativePath="..\..\..\..\lib\vtls\gtls.c">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.c">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\nss.c">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.c">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.c">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.c">\r
                                </File>\r
                        </Filter>\r
                                        RelativePath="..\..\..\..\lib\vtls\axtls.h">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.h">\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.h">\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h">\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.h">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\gskit.h">\r
                                        RelativePath="..\..\..\..\lib\vtls\gtls.h">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.h">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\nssg.h">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.h">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.h">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.h">\r
                                </File>\r
                        </Filter>\r
similarity index 98%
rename from projects/Windows/VC7.1/src/curlsrc.sln
rename to projects/Windows/VC7.1/src/curl.sln
index cba3b60..41ebb61 100644 (file)
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
        EndProjectSection
 EndProject
similarity index 92%
rename from projects/Windows/VC7.1/src/curlsrc.vcproj
rename to projects/Windows/VC7.1/src/curl.vcproj
index 024e9d7..09e9dce 100644 (file)
@@ -2,7 +2,7 @@
 <VisualStudioProject\r
        ProjectType="Visual C++"\r
        Version="7.10"\r
-       Name="curlsrc"\r
+       Name="curl"\r
        SccProjectName=""\r
        SccLocalPath="">\r
        <Platforms>\r
@@ -35,7 +35,7 @@
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\LIB Release"\r
@@ -90,7 +90,7 @@
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\DLL Debug,..\..\..\..\..\libssh2\build\Win32\VC7.1\DLL Debug"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\LIB Debug"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\LIB Debug,..\..\..\..\..\libssh2\build\Win32\VC7.1\LIB Debug"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\DLL Release"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\DLL Release,..\..\..\..\..\libssh2\build\Win32\VC7.1\DLL Release"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\LIB Release,..\..\..\..\..\libssh2\build\Win32\VC7.1\LIB Release"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7.1\DLL Debug"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="normaliz.lib wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="normaliz.lib wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7.1\$(ConfigurationName)"\r
                                RelativePath="..\..\..\..\lib\warnless.c">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.c">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\warnless.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.h">\r
                        </File>\r
                        <File\r
similarity index 99%
rename from projects/Windows/VC7/curl.sln
rename to projects/Windows/VC7/curl-all.sln
index fb7b89a..b0746d8 100644 (file)
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcurl", "lib\libcurl.vcproj", "{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}"
 EndProject
index e3cbba1..a9b1b88 100644 (file)
@@ -23,7 +23,7 @@
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
@@ -75,7 +75,7 @@
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="TRUE"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="TRUE"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32,..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                RelativePath="..\..\..\..\lib\base64.c">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.c">\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\conncache.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\curl_addrinfo.c">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.c">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\asyn.h">\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.h">\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\config-win32.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\curl_base64.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.h">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\curl_ntlm_wb.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_printf.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_rtmp.h">\r
                        </File>\r
                        <File\r
                                        RelativePath="..\..\..\..\lib\vtls\axtls.c">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.c">\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.c">\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c">\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.c">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\gskit.c">\r
                                        RelativePath="..\..\..\..\lib\vtls\gtls.c">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.c">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\nss.c">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.c">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.c">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.c">\r
                                </File>\r
                        </Filter>\r
                                        RelativePath="..\..\..\..\lib\vtls\axtls.h">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.h">\r
-                               </File>\r
-                               <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.h">\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h">\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h">\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.h">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\gskit.h">\r
                                        RelativePath="..\..\..\..\lib\vtls\gtls.h">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.h">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\nssg.h">\r
                                </File>\r
                                <File\r
                                        RelativePath="..\..\..\..\lib\vtls\polarssl_threadlock.h">\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.h">\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.h">\r
                                </File>\r
                        </Filter>\r
similarity index 98%
rename from projects/Windows/VC7/src/curlsrc.sln
rename to projects/Windows/VC7/src/curl.sln
index 651c9b2..6955461 100644 (file)
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Global
        GlobalSection(SolutionConfiguration) = preSolution
similarity index 92%
rename from projects/Windows/VC7/src/curlsrc.vcproj
rename to projects/Windows/VC7/src/curl.vcproj
index bab5237..81e41fb 100644 (file)
@@ -2,7 +2,7 @@
 <VisualStudioProject\r
        ProjectType="Visual C++"\r
        Version="7.00"\r
-       Name="curlsrc"\r
+       Name="curl"\r
        SccProjectName=""\r
        SccLocalPath="">\r
        <Platforms>\r
@@ -35,7 +35,7 @@
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\LIB Release"\r
@@ -84,7 +84,7 @@
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\DLL Debug,..\..\..\..\..\libssh2\build\Win32\VC7\DLL Debug"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\LIB Debug"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\LIB Debug,..\..\..\..\..\libssh2\build\Win32\VC7\LIB Debug"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\DLL Release"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\DLL Release,..\..\..\..\..\libssh2\build\Win32\VC7\DLL Release"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="crypt32.lib wldap32.lib ws2_32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\LIB Release,..\..\..\..\..\libssh2\build\Win32\VC7\LIB Release"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName),..\..\..\..\..\openssl\build\Win32\VC7\DLL Debug"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                AdditionalOptions="/EHsc "\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="$(ProgramFiles)\Microsoft Platform SDK\Include,..\..\..\..\include,..\..\..\..\lib,..\..\..\..\src"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="normaliz.lib wldap32.lib ws2_32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                Name="VCLinkerTool"\r
                                AdditionalOptions="/MACHINE:I386 /FIXED:NO"\r
                                AdditionalDependencies="normaliz.lib wldap32.lib ws2_32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
                                SuppressStartupBanner="TRUE"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC7\$(ConfigurationName)"\r
                                RelativePath="..\..\..\..\lib\warnless.c">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.c">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.c">\r
                        </File>\r
                        <File\r
                                RelativePath="..\..\..\..\lib\warnless.h">\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.h">\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.h">\r
                        </File>\r
                        <File\r
similarity index 99%
rename from projects/Windows/VC8/curl.sln
rename to projects/Windows/VC8/curl-all.sln
index 0dfbd1a..9e2c22d 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 9.00
 # Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
        EndProjectSection
index e0cd36c..f844fdf 100644 (file)
@@ -74,20 +74,20 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
index 06ace96..c33e4f2 100644 (file)
@@ -42,7 +42,6 @@
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
@@ -75,7 +73,6 @@
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
@@ -94,8 +91,6 @@
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC8\DLL Debug"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC8\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC8\DLL Release"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC8\DLL Release"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC8\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC8\DLL Debug"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC8\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC8\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC8\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC8\DLL Release"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC8\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC8\DLL Release"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.c"\r
-                       >\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\conncache.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.c"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.h"\r
-                       >\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\config-win32.h"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.h"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_printf.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_rtmp.h"\r
                        >\r
                        </File>\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gskit.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gskit.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gtls.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gtls.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.c"\r
                                >\r
                                </File>\r
                                <File\r
                                >\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.c"\r
+                               >\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.c"\r
                                >\r
                                </File>\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gskit.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gskit.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gtls.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gtls.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.h"\r
                                >\r
                                </File>\r
                                <File\r
                                >\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.h"\r
+                               >\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.h"\r
                                >\r
                                </File>\r
similarity index 99%
rename from projects/Windows/VC8/src/curlsrc.sln
rename to projects/Windows/VC8/src/curl.sln
index 2e8ad07..0c43cbe 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 9.00
 # Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
similarity index 86%
rename from projects/Windows/VC8/src/curlsrc.vcproj
rename to projects/Windows/VC8/src/curl.vcproj
index 627bf97..631efa6 100644 (file)
@@ -2,9 +2,9 @@
 <VisualStudioProject\r
        ProjectType="Visual C++"\r
        Version="8.00"\r
-       Name="curlsrc"\r
+       Name="curl"\r
        ProjectGUID="{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"\r
-       RootNamespace="curlsrc"\r
+       RootNamespace="curl"\r
        >\r
        <Platforms>\r
                <Platform\r
@@ -53,7 +53,6 @@
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
@@ -70,9 +69,8 @@
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
@@ -88,8 +86,6 @@
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\LIB Release"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\LIB Release"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC8\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC8\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC8\LIB Release"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC8\LIB Release"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\DLL Release"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\DLL Release"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC8\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC8\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC8\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC8\DLL Release"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libssh2.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC8\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC8\DLL Release"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC8\$(ConfigurationName)"\r
                                SubSystem="1"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.c"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.h"\r
                        >\r
                        </File>\r
similarity index 99%
rename from projects/Windows/VC9/curl.sln
rename to projects/Windows/VC9/curl-all.sln
index 4415186..2007cf7 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 10.00
 # Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "src\curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "src\curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
        ProjectSection(ProjectDependencies) = postProject
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB} = {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}
        EndProjectSection
index acfbaca..a6619d5 100644 (file)
@@ -74,20 +74,20 @@ Global
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|Win32.Build.0 = DLL Debug|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.ActiveCfg = DLL Debug|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Debug|x64.Build.0 = DLL Debug|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|Win32.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.ActiveCfg = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL - DLL LibSSH2|x64.Build.0 = DLL Release - DLL OpenSSL - DLL LibSSH2|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Debug - DLL OpenSSL|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Debug - DLL OpenSSL|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.ActiveCfg = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|Win32.Build.0 = DLL Release - DLL OpenSSL|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.ActiveCfg = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL OpenSSL|x64.Build.0 = DLL Release - DLL OpenSSL|x64
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|Win32.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.ActiveCfg = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI - DLL WinIDN|x64.Build.0 = DLL Release - DLL Windows SSPI - DLL WinIDN|x64
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Debug - DLL Windows SSPI|Win32
-               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Debug - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.ActiveCfg = DLL Release - DLL Windows SSPI|Win32
+               {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|Win32.Build.0 = DLL Release - DLL Windows SSPI|Win32
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.ActiveCfg = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release - DLL Windows SSPI|x64.Build.0 = DLL Release - DLL Windows SSPI|x64
                {DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}.DLL Release|Win32.ActiveCfg = DLL Release|Win32
index d609a54..aae3525 100644 (file)
@@ -43,7 +43,6 @@
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
@@ -97,8 +92,6 @@
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC9\DLL Debug"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC9\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC9\DLL Release"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC9\DLL Release"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC9\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC9\DLL Debug"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC9\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC9\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win32\VC9\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC9\DLL Release"\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libeay32.lib ssleay32.lib libssh2.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\..\openssl\build\Win64\VC9\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC9\DLL Release"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Optimization="2"\r
                                InlineFunctionExpansion="1"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib;..\..\..\..\..\openssl\inc32;..\..\..\..\..\libssh2\include"\r
-                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_SSLEAY;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
+                               PreprocessorDefinitions="NDEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_OPENSSL;USE_LIBSSH2;HAVE_LIBSSH2_H"\r
                                StringPooling="true"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="_DEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="1"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
                                ManifestFile="$(IntDir)\$(TargetFileName).intermediate.manifest"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="1"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCMIDLTool"\r
                                PreprocessorDefinitions="NDEBUG"\r
                                MkTypLibCompatible="true"\r
-                               SuppressStartupBanner="true"\r
                                TargetEnvironment="3"\r
                                TypeLibraryName="$(OutDir)\$(ProjectName).tlb"\r
                                HeaderFileName=""\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib"\r
                                OutputFile="$(OutDir)\$(ProjectName).dll"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories=""\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                ImportLibrary="$(TargetDir)$(TargetName).lib"\r
                                TargetMachine="17"\r
                        />\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
+                               PreprocessorDefinitions="_DEBUG;BUILDING_LIBCURL;DEBUGBUILD;CURL_STATICLIB;USE_WINDOWS_SSPI;USE_SCHANNEL;USE_WIN32_IDN;WANT_IDN_PROTOTYPES"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName)d.lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLibrarianTool"\r
                                OutputFile="$(OutDir)\$(ProjectName).lib"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCALinkTool"\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(OutDir)\$(ProjectName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.c"\r
-                       >\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\conncache.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.c"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\..\..\..\lib\bundles.h"\r
-                       >\r
-                       </File>\r
-                       <File\r
                                RelativePath="..\..\..\..\lib\config-win32.h"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_des.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_endian.h"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\lib\curl_printf.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\lib\curl_rtmp.h"\r
                        >\r
                        </File>\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gskit.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gskit.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gtls.c"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gtls.c"\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.c"\r
                                >\r
                                </File>\r
                                <File\r
                                >\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.c"\r
+                               >\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.c"\r
                                >\r
                                </File>\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_darwinssl.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\curl_schannel.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\darwinssl.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\cyassl.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gskit.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gskit.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\gtls.h"\r
                                >\r
                                </File>\r
                                <File\r
-                                       RelativePath="..\..\..\..\lib\vtls\gtls.h"\r
+                                       RelativePath="..\..\..\..\lib\vtls\mbedtls.h"\r
                                >\r
                                </File>\r
                                <File\r
                                >\r
                                </File>\r
                                <File\r
+                                       RelativePath="..\..\..\..\lib\vtls\schannel.h"\r
+                               >\r
+                               </File>\r
+                               <File\r
                                        RelativePath="..\..\..\..\lib\vtls\vtls.h"\r
                                >\r
                                </File>\r
similarity index 99%
rename from projects/Windows/VC9/src/curlsrc.sln
rename to projects/Windows/VC9/src/curl.sln
index d673349..0fb0586 100644 (file)
@@ -1,6 +1,6 @@
 Microsoft Visual Studio Solution File, Format Version 10.00
 # Visual Studio 2008
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curlsrc", "curlsrc.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "curl", "curl.vcproj", "{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"
 EndProject
 Global
        GlobalSection(SolutionConfigurationPlatforms) = preSolution
similarity index 84%
rename from projects/Windows/VC9/src/curlsrc.vcproj
rename to projects/Windows/VC9/src/curl.vcproj
index d074b79..959e3fc 100644 (file)
@@ -2,9 +2,9 @@
 <VisualStudioProject\r
        ProjectType="Visual C++"\r
        Version="9.00"\r
-       Name="curlsrc"\r
+       Name="curl"\r
        ProjectGUID="{5228E9CE-A216-422F-A5E6-58E95E2DD71D}"\r
-       RootNamespace="curlsrc"\r
+       RootNamespace="curl"\r
        TargetFrameworkVersion="131072"\r
        >\r
        <Platforms>\r
@@ -54,7 +54,6 @@
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
@@ -91,8 +87,6 @@
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\LIB Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\LIB Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\LIB Debug;..\..\..\..\..\libssh2\build\Win32\VC9\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\LIB Debug;..\..\..\..\..\libssh2\build\Win64\VC9\LIB Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\LIB Release;..\..\..\..\..\libssh2\build\Win32\VC9\LIB Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="crypt32.lib ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\LIB Release;..\..\..\..\..\libssh2\build\Win64\VC9\LIB Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\DLL Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\DLL Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\DLL Debug;..\..\..\..\..\libssh2\build\Win32\VC9\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib libeay32.lib ssleay32.lib libssh2d.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\DLL Debug;..\..\..\..\..\libssh2\build\Win64\VC9\DLL Debug"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libeay32.lib ssleay32.lib libssh2.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win32\VC9\DLL Release;..\..\..\..\..\libssh2\build\Win32\VC9\DLL Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib libssh2.lib libeay32.lib ssleay32.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName);..\..\..\..\..\openssl\build\Win64\VC9\DLL Release;..\..\..\..\..\libssh2\build\Win64\VC9\DLL Release"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                Name="VCCLCompilerTool"\r
                                Optimization="0"\r
                                AdditionalIncludeDirectories="..\..\..\..\include;..\..\..\..\lib"\r
-                               PreprocessorDefinitions="_DEBUG;_CONSOLE;CURL_STATICLIB"\r
+                               PreprocessorDefinitions="_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB"\r
                                MinimalRebuild="true"\r
                                BasicRuntimeChecks="3"\r
                                RuntimeLibrary="3"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                                DebugInformationFormat="3"\r
                        />\r
                        <Tool\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurld.lib"\r
-                               OutputFile="$(OutDir)\curld.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName)d.exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                GenerateDebugInformation="true"\r
                                ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win32\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="1"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                                RuntimeLibrary="2"\r
                                EnableFunctionLevelLinking="true"\r
                                WarningLevel="3"\r
-                               SuppressStartupBanner="true"\r
                        />\r
                        <Tool\r
                                Name="VCManagedResourceCompilerTool"\r
                        <Tool\r
                                Name="VCLinkerTool"\r
                                AdditionalDependencies="ws2_32.lib wldap32.lib normaliz.lib libcurl.lib"\r
-                               OutputFile="$(OutDir)\curl.exe"\r
+                               OutputFile="$(OutDir)\$(ProjectName).exe"\r
                                LinkIncremental="1"\r
-                               SuppressStartupBanner="true"\r
                                AdditionalLibraryDirectories="..\..\..\..\build\Win64\VC9\$(ConfigurationName)"\r
                                SubSystem="1"\r
-                               RandomizedBaseAddress="1"\r
-                               DataExecutionPrevention="0"\r
                                TargetMachine="17"\r
                        />\r
                        <Tool\r
                        />\r
                        <Tool\r
                                Name="VCBscMakeTool"\r
-                               SuppressStartupBanner="true"\r
-                               OutputFile="$(TargetDir)$(TargetName).bsc"\r
                        />\r
                        <Tool\r
                                Name="VCFxCopTool"\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.c"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.c"\r
                        >\r
                        </File>\r
                        >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\..\..\..\src\slist_wc.h"\r
+                       >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\..\..\..\src\tool_binmode.h"\r
                        >\r
                        </File>\r
index 3703a3f..0773e07 100644 (file)
@@ -6,11 +6,11 @@ rem *                             / __| | | | |_) | |
 rem *                            | (__| |_| |  _ <| |___
 rem *                             \___|\___/|_| \_\_____|
 rem *
-rem * Copyright (C) 2012 - 2014, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) 2012 - 2016, Steve Holme, <steve_holme@hotmail.com>.
 rem *
 rem * This software is licensed as described in the file COPYING, which
 rem * you should have received as part of this distribution. The terms
-rem * are also available at http://curl.haxx.se/docs/copyright.html.
+rem * are also available at https://curl.haxx.se/docs/copyright.html.
 rem *
 rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 rem * copies of the Software, and permit persons to whom the Software is
@@ -24,13 +24,14 @@ rem ***************************************************************************
 :begin
   rem Check we are running on a Windows NT derived OS
   if not "%OS%" == "Windows_NT" goto nodos
+
+  rem Set our variables
   setlocal
-  
-  rem Display the help
+  set VC_VER=
+  set BUILD_PLATFORM=
+
+  rem Ensure we have the required arguments
   if /i "%~1" == "" goto syntax
-  if /i "%~1" == "-?" goto syntax
-  if /i "%~1" == "-h" goto syntax
-  if /i "%~1" == "-help" goto syntax
 
 :parseArgs
   if "%~1" == "" goto prerequisites
@@ -67,6 +68,10 @@ rem ***************************************************************************
     set VC_VER=12.0
     set VC_DESC=VC12
     set "VC_PATH=Microsoft Visual Studio 12.0\VC"
+  ) else if /i "%~1" == "vc14" (
+    set VC_VER=14.0
+    set VC_DESC=VC14
+    set "VC_PATH=Microsoft Visual Studio 14.0\VC"
   ) else if /i "%~1%" == "x86" (
     set BUILD_PLATFORM=x86
   ) else if /i "%~1%" == "x64" (
@@ -75,6 +80,12 @@ rem ***************************************************************************
     set BUILD_CONFIG=debug
   ) else if /i "%~1%" == "release" (
     set BUILD_CONFIG=release
+  ) else if /i "%~1" == "-?" (
+    goto syntax
+  ) else if /i "%~1" == "-h" (
+    goto syntax
+  ) else if /i "%~1" == "-help" (
+    goto syntax
   ) else (
     if not defined START_DIR (
       set START_DIR=%~1%
@@ -86,6 +97,10 @@ rem ***************************************************************************
   shift & goto parseArgs
 
 :prerequisites
+  rem Compiler and platform are required parameters.
+  if not defined VC_VER goto syntax
+  if not defined BUILD_PLATFORM goto syntax
+
   rem Default the start directory if one isn't specified
   if not defined START_DIR set START_DIR=..\..\openssl
 
@@ -105,6 +120,21 @@ rem ***************************************************************************
   rem Check we have Visual Studio installed
   if not exist "%PF%\%VC_PATH%" goto novc
 
+  rem Check we have Perl in our path
+  echo %PATH% | findstr /I /C:"\Perl" 1>nul
+  if errorlevel 1 (
+    rem It isn't so check we have it installed and set the path if it is
+    if exist "%SystemDrive%\Perl" (
+      set "PATH=%SystemDrive%\Perl\bin;%PATH%"
+    ) else (
+      if exist "%SystemDrive%\Perl64" (
+        set "PATH=%SystemDrive%\Perl64\bin;%PATH%"
+      ) else (
+        goto noperl
+      )
+    )
+  )
+
   rem Check the start directory exists
   if not exist "%START_DIR%" goto noopenssl
 
@@ -132,6 +162,7 @@ rem ***************************************************************************
     if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM%
     if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64
     if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64
+    if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64
   )
 
 :start
@@ -156,7 +187,7 @@ rem ***************************************************************************
   set OUTDIR=build\Win64\%VC_DESC%
   if not exist %OUTDIR% md %OUTDIR%
 
-  if "%BUILD_CONFIG%" == "release" goto x64release\r
+  if "%BUILD_CONFIG%" == "release" goto x64release
 
 :x64debug
   rem Configuring 64-bit Debug Build
@@ -272,6 +303,7 @@ rem ***************************************************************************
   echo vc10      - Use Visual Studio 2010
   echo vc11      - Use Visual Studio 2012
   echo vc12      - Use Visual Studio 2013
+  echo vc14      - Use Visual Studio 2015
   echo.
   echo Platform:
   echo.
@@ -308,6 +340,11 @@ rem ***************************************************************************
   echo Error: %VC_DESC% is not installed
   goto error
 
+:noperl
+  echo.
+  echo Error: Perl is not installed
+  goto error
+
 :nox64
   echo.
   echo Error: %VC_DESC% does not support 64-bit builds
diff --git a/projects/build-wolfssl.bat b/projects/build-wolfssl.bat
new file mode 100644 (file)
index 0000000..849357f
--- /dev/null
@@ -0,0 +1,353 @@
+@echo off
+rem ***************************************************************************
+rem *                                  _   _ ____  _
+rem *  Project                     ___| | | |  _ \| |
+rem *                             / __| | | | |_) | |
+rem *                            | (__| |_| |  _ <| |___
+rem *                             \___|\___/|_| \_\_____|
+rem *
+rem * Copyright (C) 2012 - 2015, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) 2015, Jay Satiro, <raysatiro@yahoo.com>.
+rem *
+rem * This software is licensed as described in the file COPYING, which
+rem * you should have received as part of this distribution. The terms
+rem * are also available at https://curl.haxx.se/docs/copyright.html.
+rem *
+rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+rem * copies of the Software, and permit persons to whom the Software is
+rem * furnished to do so, under the terms of the COPYING file.
+rem *
+rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+rem * KIND, either express or implied.
+rem *
+rem ***************************************************************************
+
+:begin
+  rem Check we are running on a Windows NT derived OS
+  if not "%OS%" == "Windows_NT" goto nodos
+
+  rem Set our variables
+  setlocal
+  set SUCCESSFUL_BUILDS=
+  set VC_VER=
+  set BUILD_PLATFORM=
+
+  rem Ensure we have the required arguments
+  if /i "%~1" == "" goto syntax
+
+:parseArgs
+  if "%~1" == "" goto prerequisites
+
+  if /i "%~1" == "vc10" (
+    set VC_VER=10.0
+    set VC_DESC=VC10
+    set VC_TOOLSET=v100
+    set "VC_PATH=Microsoft Visual Studio 10.0\VC"
+  ) else if /i "%~1" == "vc11" (
+    set VC_VER=11.0
+    set VC_DESC=VC11
+    set VC_TOOLSET=v110
+    set "VC_PATH=Microsoft Visual Studio 11.0\VC"
+  ) else if /i "%~1" == "vc12" (
+    set VC_VER=12.0
+    set VC_DESC=VC12
+    set VC_TOOLSET=v120
+    set "VC_PATH=Microsoft Visual Studio 12.0\VC"
+  ) else if /i "%~1" == "vc14" (
+    set VC_VER=14.0
+    set VC_DESC=VC14
+    set VC_TOOLSET=v140
+    set "VC_PATH=Microsoft Visual Studio 14.0\VC"
+  ) else if /i "%~1" == "x86" (
+    set BUILD_PLATFORM=x86
+  ) else if /i "%~1" == "x64" (
+    set BUILD_PLATFORM=x64
+  ) else if /i "%~1" == "debug" (
+    set BUILD_CONFIG=debug
+  ) else if /i "%~1" == "release" (
+    set BUILD_CONFIG=release
+  ) else if /i "%~1" == "-?" (
+    goto syntax
+  ) else if /i "%~1" == "-h" (
+    goto syntax
+  ) else if /i "%~1" == "-help" (
+    goto syntax
+  ) else (
+    if not defined START_DIR (
+      set START_DIR=%~1
+    ) else (
+      goto unknown
+    )
+  )
+
+  shift & goto parseArgs
+
+:prerequisites
+  rem Compiler and platform are required parameters.
+  if not defined VC_VER goto syntax
+  if not defined BUILD_PLATFORM goto syntax
+
+  rem Default the start directory if one isn't specified
+  if not defined START_DIR set START_DIR=..\..\wolfssl
+
+  rem Calculate the program files directory
+  if defined PROGRAMFILES (
+    set "PF=%PROGRAMFILES%"
+    set OS_PLATFORM=x86
+  )
+  if defined PROGRAMFILES(x86) (
+    set "PF=%PROGRAMFILES(x86)%"
+    set OS_PLATFORM=x64
+  )
+
+  rem Check we have a program files directory
+  if not defined PF goto nopf
+
+  rem Check we have Visual Studio installed
+  if not exist "%PF%\%VC_PATH%" goto novc
+
+  rem Check the start directory exists
+  if not exist "%START_DIR%" goto nowolfssl
+
+:configure
+  if "%BUILD_PLATFORM%" == "" set BUILD_PLATFORM=%OS_PLATFORM%
+
+  if "%BUILD_PLATFORM%" == "x86" (
+    set VCVARS_PLATFORM=x86
+  ) else if "%BUILD_PLATFORM%" == "x64" (
+    if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM%
+    if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64
+    if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64
+    if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64
+  )
+
+:start
+  echo.
+  call "%PF%\%VC_PATH%\vcvarsall" %VCVARS_PLATFORM%
+
+  echo.
+  set SAVED_PATH=%CD%
+  cd %START_DIR%
+  goto %BUILD_PLATFORM%
+
+:x64
+  rem Calculate our output directory
+  set OUTDIR=build\Win64\%VC_DESC%
+  if not exist %OUTDIR% md %OUTDIR%
+
+  if "%BUILD_CONFIG%" == "release" goto x64release
+
+:x64debug
+  rem Perform 64-bit Debug Build
+
+  call :build Debug x64
+  if errorlevel 1 goto error
+
+  call :build "DLL Debug" x64
+  if errorlevel 1 goto error
+
+  if "%BUILD_CONFIG%" == "debug" goto success
+
+:x64release
+  rem Perform 64-bit Release Build
+
+  call :build Release x64
+  if errorlevel 1 goto error
+
+  call :build "DLL Release" x64
+  if errorlevel 1 goto error
+
+  goto success
+
+:x86
+  rem Calculate our output directory
+  set OUTDIR=build\Win32\%VC_DESC%
+  if not exist %OUTDIR% md %OUTDIR%
+
+  if "%BUILD_CONFIG%" == "release" goto x86release
+
+:x86debug
+  rem Perform 32-bit Debug Build
+
+  call :build Debug Win32
+  if errorlevel 1 goto error
+
+  call :build "DLL Debug" Win32
+  if errorlevel 1 goto error
+
+  if "%BUILD_CONFIG%" == "debug" goto success
+
+:x86release
+  rem Perform 32-bit Release Build
+
+  call :build Release Win32
+  if errorlevel 1 goto error
+
+  call :build "DLL Release" Win32
+  if errorlevel 1 goto error
+
+  goto success
+
+:build
+  rem This function builds wolfSSL.
+  rem Usage: CALL :build <configuration> <platform>
+  rem The current directory must be the wolfSSL directory.
+  rem VS Configuration: Debug, Release, DLL Debug or DLL Release.
+  rem VS Platform: Win32 or x64.
+  rem Returns: 1 on fail, 0 on success.
+  rem An informational message should be shown before any return.
+  setlocal
+  set MSBUILD_CONFIG=%~1
+  set MSBUILD_PLATFORM=%~2
+
+  if not exist wolfssl64.sln (
+    echo.
+    echo Error: build: wolfssl64.sln not found in "%CD%"
+    exit /b 1
+  )
+
+  rem OUTDIR isn't a full path, only relative. MSBUILD_OUTDIR must be full and
+  rem not have trailing backslashes, which are handled later.
+  if "%MSBUILD_CONFIG%" == "Debug" (
+    set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\LIB Debug"
+  ) else if "%MSBUILD_CONFIG%" == "Release" (
+    set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\LIB Release"
+  ) else if "%MSBUILD_CONFIG%" == "DLL Debug" (
+    set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\DLL Debug"
+  ) else if "%MSBUILD_CONFIG%" == "DLL Release" (
+    set "MSBUILD_OUTDIR=%CD%\%OUTDIR%\DLL Release"
+  ) else (
+    echo.
+    echo Error: build: Configuration not recognized.
+    exit /b 1
+  )
+
+  if not "%MSBUILD_PLATFORM%" == "Win32" if not "%MSBUILD_PLATFORM%" == "x64" (
+    echo.
+    echo Error: build: Platform not recognized.
+    exit /b 1
+  )
+
+  copy /v /y "%~dp0\wolfssl_options.h" .\cyassl\options.h
+  if %ERRORLEVEL% neq 0 (
+    echo.
+    echo Error: build: Couldn't replace .\cyassl\options.h
+    exit /b 1
+  )
+
+  copy /v /y "%~dp0\wolfssl_options.h" .\wolfssl\options.h
+  if %ERRORLEVEL% neq 0 (
+    echo.
+    echo Error: build: Couldn't replace .\wolfssl\options.h
+    exit /b 1
+  )
+
+  rem Extra trailing \ in Dirs because otherwise it thinks a quote is escaped
+  msbuild wolfssl64.sln ^
+    -p:CustomAfterMicrosoftCommonTargets="%~dp0\wolfssl_override.props" ^
+    -p:Configuration="%MSBUILD_CONFIG%" ^
+    -p:Platform="%MSBUILD_PLATFORM%" ^
+    -p:PlatformToolset="%VC_TOOLSET%" ^
+    -p:OutDir="%MSBUILD_OUTDIR%\\" ^
+    -p:IntDir="%MSBUILD_OUTDIR%\obj\\"
+
+  if %ERRORLEVEL% neq 0 (
+    echo.
+    echo Error: Failed building wolfSSL %MSBUILD_CONFIG%^|%MSBUILD_PLATFORM%.
+    exit /b 1
+  )
+
+  rem For tests to run properly the wolfSSL directory must remain the current.
+  set "PATH=%MSBUILD_OUTDIR%;%PATH%"
+  "%MSBUILD_OUTDIR%\testsuite.exe"
+
+  if %ERRORLEVEL% neq 0 (
+    echo.
+    echo Error: Failed testing wolfSSL %MSBUILD_CONFIG%^|%MSBUILD_PLATFORM%.
+    exit /b 1
+  )
+
+  echo.
+  echo Success: Built and tested wolfSSL %MSBUILD_CONFIG%^|%MSBUILD_PLATFORM%.
+  echo.
+  echo.
+  rem This is necessary to export our local variables back to the caller.
+  endlocal & set SUCCESSFUL_BUILDS="%MSBUILD_CONFIG%|%MSBUILD_PLATFORM%" ^
+    %SUCCESSFUL_BUILDS%
+  exit /b 0
+
+:syntax
+  rem Display the help
+  echo.
+  echo Usage: build-wolfssl ^<compiler^> ^<platform^> [configuration] [directory]
+  echo.
+  echo Compiler:
+  echo.
+  echo vc10      - Use Visual Studio 2010
+  echo vc11      - Use Visual Studio 2012
+  echo vc12      - Use Visual Studio 2013
+  echo vc14      - Use Visual Studio 2015
+  echo.
+  echo Platform:
+  echo.
+  echo x86       - Perform a 32-bit build
+  echo x64       - Perform a 64-bit build
+  echo.
+  echo Configuration:
+  echo.
+  echo debug     - Perform a debug build
+  echo release   - Perform a release build
+  echo.
+  echo Other:
+  echo.
+  echo directory - Specifies the wolfSSL source directory
+  goto error
+
+:unknown
+  echo.
+  echo Error: Unknown argument '%1'
+  goto error
+
+:nodos
+  echo.
+  echo Error: Only a Windows NT based Operating System is supported
+  goto error
+
+:nopf
+  echo.
+  echo Error: Cannot obtain the directory for Program Files
+  goto error
+
+:novc
+  echo.
+  echo Error: %VC_DESC% is not installed
+  goto error
+
+:nox64
+  echo.
+  echo Error: %VC_DESC% does not support 64-bit builds
+  goto error
+
+:nowolfssl
+  echo.
+  echo Error: Cannot locate wolfSSL source directory, expected "%START_DIR%"
+  goto error
+
+:error
+  if "%OS%" == "Windows_NT" endlocal
+  exit /B 1
+
+:success
+  if defined SUCCESSFUL_BUILDS (
+    echo.
+    echo.
+    echo Build complete.
+    echo.
+    echo The following configurations were built and tested successfully:
+    echo.
+    echo %SUCCESSFUL_BUILDS%
+    echo.
+  )
+  cd %SAVED_PATH%
+  endlocal
+  exit /B 0
index 139914d..719a110 100644 (file)
@@ -6,11 +6,11 @@ rem *                             / __| | | | |_) | |
 rem *                            | (__| |_| |  _ <| |___
 rem *                             \___|\___/|_| \_\_____|
 rem *
-rem * Copyright (C) 2014, Steve Holme, <steve_holme@hotmail.com>.
+rem * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.com>.
 rem *
 rem * This software is licensed as described in the file COPYING, which
 rem * you should have received as part of this distribution. The terms
-rem * are also available at http://curl.haxx.se/docs/copyright.html.
+rem * are also available at https://curl.haxx.se/docs/copyright.html.
 rem *
 rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 rem * copies of the Software, and permit persons to whom the Software is
@@ -24,39 +24,100 @@ rem ***************************************************************************
 :begin
   rem Check we are running on a Windows NT derived OS
   if not "%OS%" == "Windows_NT" goto nodos
+
+  rem Set our variables
   setlocal
+  set CHECK_LIB=TRUE
+  set CHECK_SRC=TRUE
 
-  rem Display the help
-  if /i "%~1" == "-?" goto syntax
-  if /i "%~1" == "-h" goto syntax
-  if /i "%~1" == "-help" goto syntax
+:parseArgs
+  if "%~1" == "" goto prerequisites
+
+  if /i "%~1" == "-?" (
+    goto syntax
+  ) else if /i "%~1" == "-h" (
+    goto syntax
+  ) else if /i "%~1" == "-help" (
+    goto syntax
+  ) else if /i "%~1" == "lib" (
+    set CHECK_LIB=TRUE
+    set CHECK_SRC=FALSE
+  ) else if /i "%~1" == "src" (
+    set CHECK_LIB=FALSE
+    set CHECK_SRC=TRUE
+  ) else (
+    if not defined SRC_DIR (
+      set SRC_DIR=%~1%
+    ) else (
+      goto unknown
+    )
+  )
+
+  shift & goto parseArgs
 
 :prerequisites
-  rem Check we have Perl installed
-  if not exist "C:\Perl" (
-    if not exist "C:\Perl64" goto noperl
+  rem Check we have Perl in our path
+  echo %PATH% | findstr /I /C:"\Perl" 1>nul
+  if errorlevel 1 (
+    rem It isn't so check we have it installed and set the path if it is
+    if exist "%SystemDrive%\Perl" (
+      set "PATH=%SystemDrive%\Perl\bin;%PATH%"
+    ) else (
+      if exist "%SystemDrive%\Perl64" (
+        set "PATH=%SystemDrive%\Perl64\bin;%PATH%"
+      ) else (
+        goto noperl
+      )
+    )
   )
 
 :configure
-  if "%1" == "" set SRC_DIR=..
-  if not "%1" == "" set SRC_DIR=%~1%
+  if "%SRC_DIR%" == "" set SRC_DIR=..
   if not exist "%SRC_DIR%" goto nosrc
 
 :start
-  for /f "delims=" %%i in ('dir %SRC_DIR%\src\*.c.* /b') do @perl %SRC_DIR%\lib\checksrc.pl -D%SRC_DIR%\src "%%i"
-  for /f "delims=" %%i in ('dir %SRC_DIR%\src\*.h.* /b') do @perl %SRC_DIR%\lib\checksrc.pl -D%SRC_DIR%\src "%%i"
-  for /f "delims=" %%i in ('dir %SRC_DIR%\lib\*.c.* /b') do @perl %SRC_DIR%\lib\checksrc.pl -D%SRC_DIR%\lib "%%i"
-  for /f "delims=" %%i in ('dir %SRC_DIR%\lib\*.h.* /b') do @perl %SRC_DIR%\lib\checksrc.pl -D%SRC_DIR%\lib -Wcurl_config.h.cmake "%%i"
+  if "%CHECK_SRC%" == "TRUE" (
+    rem Check the src directory
+    if exist %SRC_DIR%\src (
+      for /f "delims=" %%i in ('dir "%SRC_DIR%\src\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\src" -Wtool_hugehelp.c "%%i"
+      for /f "delims=" %%i in ('dir "%SRC_DIR%\src\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\src" "%%i"
+    )
+  )
+
+  if "%CHECK_LIB%" == "TRUE" (
+    rem Check the lib directory
+    if exist %SRC_DIR%\lib (
+      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib" "%%i"
+      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib" -Wcurl_config.h.cmake "%%i"
+    )
+
+    rem Check the lib\vtls directory
+    if exist %SRC_DIR%\lib\vtls (
+      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vtls\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vtls" "%%i"
+      for /f "delims=" %%i in ('dir "%SRC_DIR%\lib\vtls\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\lib\vtls" "%%i"
+    )
+  )
+
   goto success
 
 :syntax
   rem Display the help
   echo.
-  echo Usage: checksrc [directory]
+  echo Usage: checksrc [product] [directory]
+  echo.
+  echo Product:
+  echo.
+  echo lib       - Scan the libcurl source
+  echo src       - Scan the command-line tool source
   echo.
   echo directory - Specifies the curl source directory
   goto success
 
+:unknown
+  echo.
+  echo Error: Unknown argument '%1'
+  goto error
+
 :nodos
   echo.
   echo Error: Only a Windows NT based Operating System is supported
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644 (file)
index 0000000..ef41454
--- /dev/null
@@ -0,0 +1,43 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2015, 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 https://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.
+#
+###########################################################################
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
+PERL = @PERL@
+
+ZSH_COMPLETION_FUNCTION_FILENAME = _curl
+
+all-local: $(ZSH_COMPLETION_FUNCTION_FILENAME)
+
+$(ZSH_COMPLETION_FUNCTION_FILENAME): zsh.pl
+if CROSSCOMPILING
+       @echo "NOTICE: we can't generate zsh completion when cross-compiling!"
+else # if not cross-compiling:
+       @if ! test -x "$(PERL)"; then echo "No perl: can't install zsh.pl"; exit 0; fi
+       $(PERL) $(srcdir)/zsh.pl $(top_builddir)/src/curl > $@
+endif
+
+install-data-local:
+if CROSSCOMPILING
+       @echo "NOTICE: we can't install zsh completion when cross-compiling!"
+else # if not cross-compiling:
+       $(MKDIR_P) $(DESTDIR)$(ZSH_FUNCTIONS_DIR)
+       $(INSTALL_DATA) $(ZSH_COMPLETION_FUNCTION_FILENAME) $(DESTDIR)$(ZSH_FUNCTIONS_DIR)/$(ZSH_COMPLETION_FUNCTION_FILENAME)
+endif
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
new file mode 100644 (file)
index 0000000..b42dfe3
--- /dev/null
@@ -0,0 +1,559 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 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@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+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 = scripts
+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-openssl.m4 \
+       $(top_srcdir)/m4/curl-override.m4 \
+       $(top_srcdir)/m4/curl-reentrant.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)/m4/xc-am-iface.m4 \
+       $(top_srcdir)/m4/xc-cc-check.m4 \
+       $(top_srcdir)/m4/xc-lt-iface.m4 \
+       $(top_srcdir)/m4/xc-translit.m4 \
+       $(top_srcdir)/m4/xc-val-flgs.m4 \
+       $(top_srcdir)/m4/zz40-xc-ovr.m4 \
+       $(top_srcdir)/m4/zz50-xc-ovr.m4 \
+       $(top_srcdir)/m4/zz60-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
+       $(top_builddir)/include/curl/curlbuild.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
+CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPFLAG_CURL_STATICLIB = @CPPFLAG_CURL_STATICLIB@
+CURLVERSION = @CURLVERSION@
+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_SMB = @CURL_DISABLE_SMB@
+CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@
+CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@
+CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@
+CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@
+CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_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@
+ENABLE_STATIC = @ENABLE_STATIC@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
+HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
+HAVE_LIBZ = @HAVE_LIBZ@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
+IDN_ENABLED = @IDN_ENABLED@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+IPV6_ENABLED = @IPV6_ENABLED@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBCURL_LIBS = @LIBCURL_LIBS@
+LIBMETALINK_CPPFLAGS = @LIBMETALINK_CPPFLAGS@
+LIBMETALINK_LDFLAGS = @LIBMETALINK_LDFLAGS@
+LIBMETALINK_LIBS = @LIBMETALINK_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MANOPT = @MANOPT@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NROFF = @NROFF@
+NSS_LIBS = @NSS_LIBS@
+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_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@
+SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
+STRIP = @STRIP@
+SUPPORT_FEATURES = @SUPPORT_FEATURES@
+SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
+USE_ARES = @USE_ARES@
+USE_AXTLS = @USE_AXTLS@
+USE_CYASSL = @USE_CYASSL@
+USE_DARWINSSL = @USE_DARWINSSL@
+USE_GNUTLS = @USE_GNUTLS@
+USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
+USE_LIBRTMP = @USE_LIBRTMP@
+USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
+USE_NGHTTP2 = @USE_NGHTTP2@
+USE_NSS = @USE_NSS@
+USE_OPENLDAP = @USE_OPENLDAP@
+USE_POLARSSL = @USE_POLARSSL@
+USE_SCHANNEL = @USE_SCHANNEL@
+USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
+USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
+VERSION = @VERSION@
+VERSIONNUM = @VERSIONNUM@
+ZLIB_LIBS = @ZLIB_LIBS@
+
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1998 - 2015, 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 https://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.
+#
+###########################################################################
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+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@
+builddir = @builddir@
+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@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ZSH_COMPLETION_FUNCTION_FILENAME = _curl
+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 ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign scripts/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
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$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 all-local
+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:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+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:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+       clean-libtool cscopelist-am ctags-am distclean \
+       distclean-generic distclean-libtool distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-data-local install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+       uninstall-am
+
+.PRECIOUS: Makefile
+
+
+all-local: $(ZSH_COMPLETION_FUNCTION_FILENAME)
+
+$(ZSH_COMPLETION_FUNCTION_FILENAME): zsh.pl
+@CROSSCOMPILING_TRUE@  @echo "NOTICE: we can't generate zsh completion when cross-compiling!"
+@CROSSCOMPILING_FALSE@ @if ! test -x "$(PERL)"; then echo "No perl: can't install zsh.pl"; exit 0; fi
+@CROSSCOMPILING_FALSE@ $(PERL) $(srcdir)/zsh.pl $(top_builddir)/src/curl > $@
+
+install-data-local:
+@CROSSCOMPILING_TRUE@  @echo "NOTICE: we can't install zsh completion when cross-compiling!"
+@CROSSCOMPILING_FALSE@ $(MKDIR_P) $(DESTDIR)$(ZSH_FUNCTIONS_DIR)
+@CROSSCOMPILING_FALSE@ $(INSTALL_DATA) $(ZSH_COMPLETION_FUNCTION_FILENAME) $(DESTDIR)$(ZSH_FUNCTIONS_DIR)/$(ZSH_COMPLETION_FUNCTION_FILENAME)
+
+# 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/scripts/zsh.pl b/scripts/zsh.pl
new file mode 100755 (executable)
index 0000000..f0d8c19
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/perl
+
+# Generate ZSH completion
+
+use strict;
+use warnings;
+
+my $curl = $ARGV[0] || 'curl';
+
+my $regex = '\s+(?:(-[^\s]+),\s)?(--[^\s]+)\s([^\s.]+)?\s+(.*)';
+my @opts = parse_main_opts('--help', $regex);
+
+my $opts_str;
+
+$opts_str .= qq{  $_ \\\n} foreach (@opts);
+chomp $opts_str;
+
+my $tmpl = <<"EOS";
+#compdef curl
+
+# curl zsh completion
+
+local curcontext="\$curcontext" state state_descr line
+typeset -A opt_args
+
+local rc=1
+
+_arguments -C -S \\
+$opts_str
+  '*:URL:_urls' && rc=0
+
+return rc
+EOS
+
+print $tmpl;
+
+sub parse_main_opts {
+    my ($cmd, $regex) = @_;
+
+    my @list;
+    my @lines = call_curl($cmd);
+
+    foreach my $line (@lines) {
+        my ($short, $long, $arg, $desc) = ($line =~ /^$regex/) or next;
+
+        my $option = '';
+
+        $desc =~ s/'/'\\''/g if defined $desc;
+        $desc =~ s/\[/\\\[/g if defined $desc;
+        $desc =~ s/\]/\\\]/g if defined $desc;
+
+        $option .= '{' . trim($short) . ',' if defined $short;
+        $option .= trim($long)  if defined $long;
+        $option .= '}' if defined $short;
+        $option .= '\'[' . trim($desc) . ']\'' if defined $desc;
+
+        $option .= ":$arg" if defined $arg;
+
+        $option .= ':_files'
+            if defined $arg and ($arg eq 'FILE' || $arg eq 'DIR');
+
+        push @list, $option;
+    }
+
+    # Sort longest first, because zsh won't complete an option listed
+    # after one that's a prefix of it.
+    @list = sort {
+        $a =~ /([^=]*)/; my $ma = $1;
+        $b =~ /([^=]*)/; my $mb = $1;
+
+        length($mb) <=> length($ma)
+    } @list;
+
+    return @list;
+}
+
+sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s };
+
+sub call_curl {
+    my ($cmd) = @_;
+    my $output = `"$curl" $cmd`;
+    if ($? == -1) {
+        die "Could not run curl: $!";
+    } elsif ((my $exit_code = $? >> 8) != 0) {
+        die "curl returned $exit_code with output:\n$output";
+    }
+    return split /\n/, $output;
+}
index 9c1fd54..cfcefb3 100644 (file)
@@ -6,18 +6,18 @@ if(USE_MANUAL)
   # embedded text. NROFF and MANOPT are set in the parent CMakeLists.txt
   add_custom_command(
     OUTPUT tool_hugehelp.c
-    COMMAND echo "#include \"tool_setup.h\"" > tool_hugehelp.c
-    COMMAND echo "#ifndef HAVE_LIBZ" >> tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_setup.h\"" > tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "#ifndef HAVE_LIBZ" >> tool_hugehelp.c
     COMMAND env LC_ALL=C "${NROFF}" ${NROFF_MANOPT}
             "${CURL_SOURCE_DIR}/docs/curl.1" |
             "${PERL}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl"
             "${CURL_SOURCE_DIR}/docs/MANUAL" >> tool_hugehelp.c
-    COMMAND echo "#else" >> tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "#else" >> tool_hugehelp.c
     COMMAND env LC_ALL=C "${NROFF}" ${NROFF_MANOPT}
             "${CURL_SOURCE_DIR}/docs/curl.1" |
             "${PERL}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" -c
             "${CURL_SOURCE_DIR}/docs/MANUAL" >> tool_hugehelp.c
-    COMMAND echo "#endif /* HAVE_LIBZ */" >> tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "#endif /* HAVE_LIBZ */" >> tool_hugehelp.c
     DEPENDS
       "${CURL_SOURCE_DIR}/docs/MANUAL"
       "${CURL_SOURCE_DIR}/docs/curl.1"
@@ -27,12 +27,13 @@ if(USE_MANUAL)
 else()
   add_custom_command(
     OUTPUT tool_hugehelp.c
-    COMMAND echo "/* built-in manual is disabled, blank function */" > tool_hugehelp.c
-    COMMAND echo "#include \"tool_hugehelp.h\"" >> tool_hugehelp.c
-    COMMAND echo "void hugehelp(void) {}" >> tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "/* built-in manual is disabled, blank function */" > tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_hugehelp.h\"" >> tool_hugehelp.c
+    COMMAND ${CMAKE_COMMAND} -E echo "void hugehelp(void) {}" >> tool_hugehelp.c
     DEPENDS
       "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h"
     VERBATIM)
+
 endif()
 
 transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
@@ -42,9 +43,10 @@ if(MSVC)
   list(APPEND CURL_SOURCE curl.rc)
 endif()
 
+# CURL_FILES comes from Makefile.inc
 add_executable(
   ${EXE_NAME}
-  ${curl_SOURCES}
+  ${CURL_FILES}
   )
 
 source_group("cURLX source files" FILES ${CURLX_CFILES})
index c485665..f1ddc29 100644 (file)
@@ -1,6 +1,28 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2005 - 2008, Gisle Vanem <gvanem@yahoo.no>.
+# Copyright (C) 2005 - 2015, 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 https://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.
+#
+#***************************************************************************
+
 #
 #  Watcom / OpenWatcom / Win32 makefile for cURL.
-#  G. Vanem <gvanem@broadpark.no>
 #
 
 .ERASE
@@ -75,7 +97,7 @@ CFLAGS += -d_WIN32_WINNT=0x0501 -dENABLE_IPV6
 !endif
 
 !ifdef %use_ssl
-CFLAGS += -wcd=138 -dUSE_OPENSSL -dUSE_SSLEAY -I"$(OPENSSL_ROOT)/inc32"
+CFLAGS += -wcd=138 -dUSE_OPENSSL -dUSE_OPENSSL -I"$(OPENSSL_ROOT)/inc32"
 !endif
 
 !ifdef %curl_static
@@ -96,7 +118,7 @@ ZLIB_ROOT = ../../zlib-1.2.8
 !ifdef %libssh2_root
 LIBSSH2_ROOT = $(%libssh2_root)
 !else
-LIBSSH2_ROOT = ../../libssh2-1.4.3
+LIBSSH2_ROOT = ../../libssh2-1.5.0
 !endif
 
 !ifdef %librtmp_root
@@ -108,7 +130,7 @@ LIBRTMP_ROOT = ../../rtmpdump-2.3
 !ifdef %openssl_root
 OPENSSL_ROOT = $(%openssl_root)
 !else
-OPENSSL_ROOT = ../../openssl-0.9.8zc
+OPENSSL_ROOT = ../../openssl-1.0.2a
 !endif
 
 !ifdef %ares_root
index f96618e..535a740 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -53,6 +53,9 @@ endif
 
 include Makefile.inc
 
+# CURL_FILES comes from Makefile.inc
+curl_SOURCES = $(CURL_FILES)
+
 # This might hold -Werror
 CFLAGS += @CURL_CFLAG_EXTRAS@
 
@@ -62,7 +65,7 @@ LIBS = $(BLANK_AT_MAKETIME)
 if USE_EXPLICIT_LIB_DEPS
 curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @LIBCURL_LIBS@
 else
-curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @NSS_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
+curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
 endif
 
 curl_LDFLAGS = @LIBMETALINK_LDFLAGS@
@@ -72,8 +75,9 @@ curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
 # if unit tests are enabled, build a static library to link them with
 if BUILD_UNITTESTS
 noinst_LTLIBRARIES = libcurltool.la
-libcurltool_la_CPPFLAGS = $(LIBMETALINK_CPPFLAGS) $(AM_CPPFLAGS)
-libcurltool_la_CFLAGS = -DUNITTESTS
+libcurltool_la_CPPFLAGS = $(LIBMETALINK_CPPFLAGS) $(AM_CPPFLAGS) \
+                          -DCURL_STATICLIB -DUNITTESTS
+libcurltool_la_CFLAGS =
 libcurltool_la_LDFLAGS = -static $(LINKFLAGS)
 libcurltool_la_SOURCES = $(curl_SOURCES)
 endif
@@ -84,11 +88,11 @@ CLEANFILES = tool_hugehelp.c
 # 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 \
      macos/curl.mcp.xml.sit.hqx                                        \
      macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp \
      macos/src/macos_main.cpp makefile.amiga curl.rc                   \
      Makefile.netware Makefile.inc Makefile.Watcom CMakeLists.txt
+EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32           \
Makefile.m32 macos/curl.mcp.xml.sit.hqx macos/MACINSTALL.TXT          \
macos/src/curl_GUSIConfig.cpp macos/src/macos_main.cpp makefile.amiga \
curl.rc Makefile.netware Makefile.inc Makefile.Watcom CMakeLists.txt  \
checksrc.whitelist
 
 MANPAGE=$(top_srcdir)/docs/curl.1
 README=$(top_srcdir)/docs/MANUAL
index 6638a01..a60b3db 100644 (file)
@@ -1,13 +1,33 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2000, Jaepil Kim, <pit@paradise.net.nz>.
+# Copyright (C) 2001 - 2015, 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 https://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.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
 #
-#  Initially written by Jaepil Kim, pit@paradise.net.nz
 ############################################################
 
 !if "$(__MAKE__)" == ""
@@ -27,7 +47,7 @@ ZLIB_PATH = ..\..\zlib-1.2.8
 
 # Edit the path below to point to the base of your OpenSSL package.
 !ifndef OPENSSL_PATH
-OPENSSL_PATH = ..\..\openssl-0.9.8zc
+OPENSSL_PATH = ..\..\openssl-1.0.2a
 !endif
 
 # Set program's name
@@ -67,7 +87,7 @@ LINKLIB  = $(LINKLIB) $(ZLIB_PATH)\zlib.lib
 
 # SSL support is enabled setting WITH_SSL=1
 !ifdef WITH_SSL
-DEFINES  = $(DEFINES) -DUSE_SSLEAY
+DEFINES  = $(DEFINES) -DUSE_OPENSSL
 INCDIRS  = $(INCDIRS);$(OPENSSL_PATH)\inc32;$(OPENSSL_PATH)\inc32\openssl
 LINKLIB  = $(LINKLIB) $(OPENSSL_PATH)\out32\ssleay32.lib $(OPENSSL_PATH)\out32\libeay32.lib
 !endif
index ed6cc0d..f3274c9 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -90,9 +100,6 @@ build_triplet = @build@
 host_triplet = @host@
 bin_PROGRAMS = curl$(EXEEXT)
 @USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \
-       $(top_srcdir)/depcomp
 subdir = src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
@@ -114,43 +121,45 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libcurltool_la_LIBADD =
-am__libcurltool_la_SOURCES_DIST = tool_binmode.c tool_bname.c \
-       tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c tool_cb_rea.c \
-       tool_cb_see.c tool_cb_wrt.c tool_cfgable.c tool_convert.c \
-       tool_dirhie.c tool_doswin.c tool_easysrc.c tool_formparse.c \
-       tool_getparam.c tool_getpass.c tool_help.c tool_helpers.c \
-       tool_homedir.c tool_hugehelp.c tool_libinfo.c tool_main.c \
-       tool_metalink.c tool_mfiles.c tool_msgs.c tool_operate.c \
-       tool_operhlp.c tool_panykey.c tool_paramhlp.c tool_parsecfg.c \
-       tool_strdup.c tool_setopt.c tool_sleep.c tool_urlglob.c \
-       tool_util.c tool_vms.c tool_writeenv.c tool_writeout.c \
-       tool_xattr.c ../lib/strtoofft.c ../lib/rawstr.c \
-       ../lib/nonblock.c ../lib/warnless.c tool_binmode.h \
-       tool_bname.h tool_cb_dbg.h tool_cb_hdr.h tool_cb_prg.h \
-       tool_cb_rea.h tool_cb_see.h tool_cb_wrt.h tool_cfgable.h \
-       tool_convert.h tool_dirhie.h tool_doswin.h tool_easysrc.h \
-       tool_formparse.h tool_getparam.h tool_getpass.h tool_help.h \
-       tool_helpers.h tool_homedir.h tool_hugehelp.h tool_libinfo.h \
-       tool_main.h tool_metalink.h tool_mfiles.h tool_msgs.h \
-       tool_operate.h tool_operhlp.h tool_panykey.h tool_paramhlp.h \
-       tool_parsecfg.h tool_sdecls.h tool_setopt.h tool_setup.h \
-       tool_sleep.h tool_strdup.h tool_urlglob.h tool_util.h \
-       tool_version.h tool_vms.h tool_writeenv.h tool_writeout.h \
-       tool_xattr.h
-am__objects_1 = libcurltool_la-tool_binmode.lo \
-       libcurltool_la-tool_bname.lo libcurltool_la-tool_cb_dbg.lo \
-       libcurltool_la-tool_cb_hdr.lo libcurltool_la-tool_cb_prg.lo \
-       libcurltool_la-tool_cb_rea.lo libcurltool_la-tool_cb_see.lo \
-       libcurltool_la-tool_cb_wrt.lo libcurltool_la-tool_cfgable.lo \
-       libcurltool_la-tool_convert.lo libcurltool_la-tool_dirhie.lo \
-       libcurltool_la-tool_doswin.lo libcurltool_la-tool_easysrc.lo \
+am__libcurltool_la_SOURCES_DIST = slist_wc.c tool_binmode.c \
+       tool_bname.c tool_cb_dbg.c tool_cb_hdr.c tool_cb_prg.c \
+       tool_cb_rea.c tool_cb_see.c tool_cb_wrt.c tool_cfgable.c \
+       tool_convert.c tool_dirhie.c tool_doswin.c tool_easysrc.c \
+       tool_formparse.c tool_getparam.c tool_getpass.c tool_help.c \
+       tool_helpers.c tool_homedir.c tool_hugehelp.c tool_libinfo.c \
+       tool_main.c tool_metalink.c tool_mfiles.c tool_msgs.c \
+       tool_operate.c tool_operhlp.c tool_panykey.c tool_paramhlp.c \
+       tool_parsecfg.c tool_strdup.c tool_setopt.c tool_sleep.c \
+       tool_urlglob.c tool_util.c tool_vms.c tool_writeenv.c \
+       tool_writeout.c tool_xattr.c ../lib/strtoofft.c \
+       ../lib/rawstr.c ../lib/nonblock.c ../lib/warnless.c slist_wc.h \
+       tool_binmode.h tool_bname.h tool_cb_dbg.h tool_cb_hdr.h \
+       tool_cb_prg.h tool_cb_rea.h tool_cb_see.h tool_cb_wrt.h \
+       tool_cfgable.h tool_convert.h tool_dirhie.h tool_doswin.h \
+       tool_easysrc.h tool_formparse.h tool_getparam.h tool_getpass.h \
+       tool_help.h tool_helpers.h tool_homedir.h tool_hugehelp.h \
+       tool_libinfo.h tool_main.h tool_metalink.h tool_mfiles.h \
+       tool_msgs.h tool_operate.h tool_operhlp.h tool_panykey.h \
+       tool_paramhlp.h tool_parsecfg.h tool_sdecls.h tool_setopt.h \
+       tool_setup.h tool_sleep.h tool_strdup.h tool_urlglob.h \
+       tool_util.h tool_version.h tool_vms.h tool_writeenv.h \
+       tool_writeout.h tool_xattr.h
+am__objects_1 = libcurltool_la-slist_wc.lo \
+       libcurltool_la-tool_binmode.lo libcurltool_la-tool_bname.lo \
+       libcurltool_la-tool_cb_dbg.lo libcurltool_la-tool_cb_hdr.lo \
+       libcurltool_la-tool_cb_prg.lo libcurltool_la-tool_cb_rea.lo \
+       libcurltool_la-tool_cb_see.lo libcurltool_la-tool_cb_wrt.lo \
+       libcurltool_la-tool_cfgable.lo libcurltool_la-tool_convert.lo \
+       libcurltool_la-tool_dirhie.lo libcurltool_la-tool_doswin.lo \
+       libcurltool_la-tool_easysrc.lo \
        libcurltool_la-tool_formparse.lo \
        libcurltool_la-tool_getparam.lo libcurltool_la-tool_getpass.lo \
        libcurltool_la-tool_help.lo libcurltool_la-tool_helpers.lo \
@@ -172,7 +181,8 @@ am__objects_2 = ../lib/libcurltool_la-strtoofft.lo \
        ../lib/libcurltool_la-warnless.lo
 am__objects_3 =
 am__objects_4 = $(am__objects_1) $(am__objects_2) $(am__objects_3)
-@BUILD_UNITTESTS_TRUE@am_libcurltool_la_OBJECTS = $(am__objects_4)
+am__objects_5 = $(am__objects_4)
+@BUILD_UNITTESTS_TRUE@am_libcurltool_la_OBJECTS = $(am__objects_5)
 libcurltool_la_OBJECTS = $(am_libcurltool_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -185,30 +195,31 @@ libcurltool_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
 @BUILD_UNITTESTS_TRUE@am_libcurltool_la_rpath =
 am__installdirs = "$(DESTDIR)$(bindir)"
 PROGRAMS = $(bin_PROGRAMS)
-am__objects_5 = curl-tool_binmode.$(OBJEXT) curl-tool_bname.$(OBJEXT) \
-       curl-tool_cb_dbg.$(OBJEXT) curl-tool_cb_hdr.$(OBJEXT) \
-       curl-tool_cb_prg.$(OBJEXT) curl-tool_cb_rea.$(OBJEXT) \
-       curl-tool_cb_see.$(OBJEXT) curl-tool_cb_wrt.$(OBJEXT) \
-       curl-tool_cfgable.$(OBJEXT) curl-tool_convert.$(OBJEXT) \
-       curl-tool_dirhie.$(OBJEXT) curl-tool_doswin.$(OBJEXT) \
-       curl-tool_easysrc.$(OBJEXT) curl-tool_formparse.$(OBJEXT) \
-       curl-tool_getparam.$(OBJEXT) curl-tool_getpass.$(OBJEXT) \
-       curl-tool_help.$(OBJEXT) curl-tool_helpers.$(OBJEXT) \
-       curl-tool_homedir.$(OBJEXT) curl-tool_hugehelp.$(OBJEXT) \
-       curl-tool_libinfo.$(OBJEXT) curl-tool_main.$(OBJEXT) \
-       curl-tool_metalink.$(OBJEXT) curl-tool_mfiles.$(OBJEXT) \
-       curl-tool_msgs.$(OBJEXT) curl-tool_operate.$(OBJEXT) \
-       curl-tool_operhlp.$(OBJEXT) curl-tool_panykey.$(OBJEXT) \
-       curl-tool_paramhlp.$(OBJEXT) curl-tool_parsecfg.$(OBJEXT) \
-       curl-tool_strdup.$(OBJEXT) curl-tool_setopt.$(OBJEXT) \
-       curl-tool_sleep.$(OBJEXT) curl-tool_urlglob.$(OBJEXT) \
-       curl-tool_util.$(OBJEXT) curl-tool_vms.$(OBJEXT) \
-       curl-tool_writeenv.$(OBJEXT) curl-tool_writeout.$(OBJEXT) \
-       curl-tool_xattr.$(OBJEXT)
-am__objects_6 = ../lib/curl-strtoofft.$(OBJEXT) \
+am__objects_6 = curl-slist_wc.$(OBJEXT) curl-tool_binmode.$(OBJEXT) \
+       curl-tool_bname.$(OBJEXT) curl-tool_cb_dbg.$(OBJEXT) \
+       curl-tool_cb_hdr.$(OBJEXT) curl-tool_cb_prg.$(OBJEXT) \
+       curl-tool_cb_rea.$(OBJEXT) curl-tool_cb_see.$(OBJEXT) \
+       curl-tool_cb_wrt.$(OBJEXT) curl-tool_cfgable.$(OBJEXT) \
+       curl-tool_convert.$(OBJEXT) curl-tool_dirhie.$(OBJEXT) \
+       curl-tool_doswin.$(OBJEXT) curl-tool_easysrc.$(OBJEXT) \
+       curl-tool_formparse.$(OBJEXT) curl-tool_getparam.$(OBJEXT) \
+       curl-tool_getpass.$(OBJEXT) curl-tool_help.$(OBJEXT) \
+       curl-tool_helpers.$(OBJEXT) curl-tool_homedir.$(OBJEXT) \
+       curl-tool_hugehelp.$(OBJEXT) curl-tool_libinfo.$(OBJEXT) \
+       curl-tool_main.$(OBJEXT) curl-tool_metalink.$(OBJEXT) \
+       curl-tool_mfiles.$(OBJEXT) curl-tool_msgs.$(OBJEXT) \
+       curl-tool_operate.$(OBJEXT) curl-tool_operhlp.$(OBJEXT) \
+       curl-tool_panykey.$(OBJEXT) curl-tool_paramhlp.$(OBJEXT) \
+       curl-tool_parsecfg.$(OBJEXT) curl-tool_strdup.$(OBJEXT) \
+       curl-tool_setopt.$(OBJEXT) curl-tool_sleep.$(OBJEXT) \
+       curl-tool_urlglob.$(OBJEXT) curl-tool_util.$(OBJEXT) \
+       curl-tool_vms.$(OBJEXT) curl-tool_writeenv.$(OBJEXT) \
+       curl-tool_writeout.$(OBJEXT) curl-tool_xattr.$(OBJEXT)
+am__objects_7 = ../lib/curl-strtoofft.$(OBJEXT) \
        ../lib/curl-rawstr.$(OBJEXT) ../lib/curl-nonblock.$(OBJEXT) \
        ../lib/curl-warnless.$(OBJEXT)
-am_curl_OBJECTS = $(am__objects_5) $(am__objects_6) $(am__objects_3)
+am__objects_8 = $(am__objects_6) $(am__objects_7) $(am__objects_3)
+am_curl_OBJECTS = $(am__objects_8)
 curl_OBJECTS = $(am_curl_OBJECTS)
 curl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -273,6 +284,8 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+       $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -333,7 +346,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -355,6 +368,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -390,6 +404,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -401,17 +416,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -457,6 +473,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -474,11 +491,11 @@ top_srcdir = @top_srcdir@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -523,6 +540,7 @@ CURLX_HFILES = \
        ../lib/warnless.h
 
 CURL_CFILES = \
+       slist_wc.c \
        tool_binmode.c \
        tool_bname.c \
        tool_cb_dbg.c \
@@ -564,6 +582,7 @@ CURL_CFILES = \
        tool_xattr.c
 
 CURL_HFILES = \
+       slist_wc.h \
        tool_binmode.h \
        tool_bname.h \
        tool_cb_dbg.h \
@@ -608,8 +627,13 @@ CURL_HFILES = \
        tool_xattr.h
 
 CURL_RCFILES = curl.rc
-curl_SOURCES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
-@USE_EXPLICIT_LIB_DEPS_FALSE@curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @NSS_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
+
+# curl_SOURCES is special and gets assigned in src/Makefile.am
+CURL_FILES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
+
+# CURL_FILES comes from Makefile.inc
+curl_SOURCES = $(CURL_FILES)
+@USE_EXPLICIT_LIB_DEPS_FALSE@curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@
 @USE_EXPLICIT_LIB_DEPS_TRUE@curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @LIBCURL_LIBS@
 curl_LDFLAGS = @LIBMETALINK_LDFLAGS@
 curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
@@ -617,17 +641,19 @@ curl_DEPENDENCIES = $(top_builddir)/lib/libcurl.la
 
 # if unit tests are enabled, build a static library to link them with
 @BUILD_UNITTESTS_TRUE@noinst_LTLIBRARIES = libcurltool.la
-@BUILD_UNITTESTS_TRUE@libcurltool_la_CPPFLAGS = $(LIBMETALINK_CPPFLAGS) $(AM_CPPFLAGS)
-@BUILD_UNITTESTS_TRUE@libcurltool_la_CFLAGS = -DUNITTESTS
+@BUILD_UNITTESTS_TRUE@libcurltool_la_CPPFLAGS = $(LIBMETALINK_CPPFLAGS) $(AM_CPPFLAGS) \
+@BUILD_UNITTESTS_TRUE@                          -DCURL_STATICLIB -DUNITTESTS
+
+@BUILD_UNITTESTS_TRUE@libcurltool_la_CFLAGS = 
 @BUILD_UNITTESTS_TRUE@libcurltool_la_LDFLAGS = -static $(LINKFLAGS)
 @BUILD_UNITTESTS_TRUE@libcurltool_la_SOURCES = $(curl_SOURCES)
 BUILT_SOURCES = tool_hugehelp.c
 CLEANFILES = tool_hugehelp.c
-EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32 Makefile.m32 \
      macos/curl.mcp.xml.sit.hqx                                        \
      macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp \
      macos/src/macos_main.cpp makefile.amiga curl.rc                   \
      Makefile.netware Makefile.inc Makefile.Watcom CMakeLists.txt
+EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32           \
Makefile.m32 macos/curl.mcp.xml.sit.hqx macos/MACINSTALL.TXT          \
macos/src/curl_GUSIConfig.cpp macos/src/macos_main.cpp makefile.amiga \
curl.rc Makefile.netware Makefile.inc Makefile.Watcom CMakeLists.txt  \
checksrc.whitelist
 
 MANPAGE = $(top_srcdir)/docs/curl.1
 README = $(top_srcdir)/docs/MANUAL
@@ -650,7 +676,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign src/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -659,7 +684,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -775,6 +800,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-rawstr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-strtoofft.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/libcurltool_la-warnless.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-slist_wc.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_binmode.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_bname.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_cb_dbg.Po@am__quote@
@@ -814,6 +840,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_writeenv.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_writeout.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/curl-tool_xattr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-slist_wc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_binmode.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_bname.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurltool_la-tool_cb_dbg.Plo@am__quote@
@@ -878,6 +905,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
+libcurltool_la-slist_wc.lo: slist_wc.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-slist_wc.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-slist_wc.Tpo -c -o libcurltool_la-slist_wc.lo `test -f 'slist_wc.c' || echo '$(srcdir)/'`slist_wc.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-slist_wc.Tpo $(DEPDIR)/libcurltool_la-slist_wc.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='slist_wc.c' object='libcurltool_la-slist_wc.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o libcurltool_la-slist_wc.lo `test -f 'slist_wc.c' || echo '$(srcdir)/'`slist_wc.c
+
 libcurltool_la-tool_binmode.lo: tool_binmode.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -MT libcurltool_la-tool_binmode.lo -MD -MP -MF $(DEPDIR)/libcurltool_la-tool_binmode.Tpo -c -o libcurltool_la-tool_binmode.lo `test -f 'tool_binmode.c' || echo '$(srcdir)/'`tool_binmode.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libcurltool_la-tool_binmode.Tpo $(DEPDIR)/libcurltool_la-tool_binmode.Plo
@@ -1179,6 +1213,20 @@ libcurltool_la-tool_xattr.lo: tool_xattr.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurltool_la_CPPFLAGS) $(CPPFLAGS) $(libcurltool_la_CFLAGS) $(CFLAGS) -c -o ../lib/libcurltool_la-warnless.lo `test -f '../lib/warnless.c' || echo '$(srcdir)/'`../lib/warnless.c
 
+curl-slist_wc.o: slist_wc.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-slist_wc.o -MD -MP -MF $(DEPDIR)/curl-slist_wc.Tpo -c -o curl-slist_wc.o `test -f 'slist_wc.c' || echo '$(srcdir)/'`slist_wc.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/curl-slist_wc.Tpo $(DEPDIR)/curl-slist_wc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='slist_wc.c' object='curl-slist_wc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-slist_wc.o `test -f 'slist_wc.c' || echo '$(srcdir)/'`slist_wc.c
+
+curl-slist_wc.obj: slist_wc.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-slist_wc.obj -MD -MP -MF $(DEPDIR)/curl-slist_wc.Tpo -c -o curl-slist_wc.obj `if test -f 'slist_wc.c'; then $(CYGPATH_W) 'slist_wc.c'; else $(CYGPATH_W) '$(srcdir)/slist_wc.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/curl-slist_wc.Tpo $(DEPDIR)/curl-slist_wc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='slist_wc.c' object='curl-slist_wc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o curl-slist_wc.obj `if test -f 'slist_wc.c'; then $(CYGPATH_W) 'slist_wc.c'; else $(CYGPATH_W) '$(srcdir)/slist_wc.c'; fi`
+
 curl-tool_binmode.o: tool_binmode.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT curl-tool_binmode.o -MD -MP -MF $(DEPDIR)/curl-tool_binmode.Tpo -c -o curl-tool_binmode.o `test -f 'tool_binmode.c' || echo '$(srcdir)/'`tool_binmode.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/curl-tool_binmode.Tpo $(DEPDIR)/curl-tool_binmode.Po
@@ -2002,6 +2050,8 @@ uninstall-am: uninstall-binPROGRAMS
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
 
+.PRECIOUS: Makefile
+
 
 # remove targets if the command fails
 .DELETE_ON_ERROR:
index 401a635..1aa153c 100644 (file)
@@ -23,6 +23,7 @@ CURLX_HFILES = \
        ../lib/warnless.h
 
 CURL_CFILES = \
+       slist_wc.c \
        tool_binmode.c \
        tool_bname.c \
        tool_cb_dbg.c \
@@ -64,6 +65,7 @@ CURL_CFILES = \
        tool_xattr.c
 
 CURL_HFILES = \
+       slist_wc.h \
        tool_binmode.h \
        tool_bname.h \
        tool_cb_dbg.h \
@@ -109,5 +111,5 @@ CURL_HFILES = \
 
 CURL_RCFILES = curl.rc
 
-curl_SOURCES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
-
+# curl_SOURCES is special and gets assigned in src/Makefile.am
+CURL_FILES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
index e54175c..076fc5e 100644 (file)
@@ -1,10 +1,32 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 1999 - 2015, 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 https://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 curl.exe with MingW (GCC-3.2 or later)
-## and optionally OpenSSL (0.9.8), libssh2 (1.3), zlib (1.2.5), librtmp (2.3)
+## and optionally OpenSSL (1.0.2a), libssh2 (1.5), zlib (1.2.8), librtmp (2.4)
 ##
 ## Usage:   mingw32-make -f Makefile.m32 CFG=-feature1[-feature2][-feature3][...]
-## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-spi-winidn
+## Example: mingw32-make -f Makefile.m32 CFG=-zlib-ssl-sspi-winidn
 ##
 ## Hint: you can also set environment vars to control the build, f.e.:
 ## set ZLIB_PATH=c:/zlib-1.2.8
@@ -18,19 +40,19 @@ ZLIB_PATH = ../../zlib-1.2.8
 endif
 # Edit the path below to point to the base of your OpenSSL package.
 ifndef OPENSSL_PATH
-OPENSSL_PATH = ../../openssl-0.9.8zc
+OPENSSL_PATH = ../../openssl-1.0.2a
 endif
 # Edit the path below to point to the base of your LibSSH2 package.
 ifndef LIBSSH2_PATH
-LIBSSH2_PATH = ../../libssh2-1.4.3
+LIBSSH2_PATH = ../../libssh2-1.5.0
 endif
 # Edit the path below to point to the base of your librtmp package.
 ifndef LIBRTMP_PATH
-LIBRTMP_PATH = ../../librtmp-2.3
+LIBRTMP_PATH = ../../librtmp-2.4
 endif
 # Edit the path below to point to the base of your libmetalink package.
 ifndef LIBMETALINK_PATH
-LIBMETALINK_PATH = ../../libmetalink-0.1.2
+LIBMETALINK_PATH = ../../libmetalink-0.1.3
 endif
 # Edit the path below to point to the base of your libexpat package.
 ifndef LIBEXPAT_PATH
@@ -38,15 +60,15 @@ LIBEXPAT_PATH = ../../expat-2.1.0
 endif
 # Edit the path below to point to the base of your libxml2 package.
 ifndef LIBXML2_PATH
-LIBXML2_PATH = ../../libxml2-2.9.0
+LIBXML2_PATH = ../../libxml2-2.9.2
 endif
 # Edit the path below to point to the base of your libidn package.
 ifndef LIBIDN_PATH
-LIBIDN_PATH = ../../libidn-1.18
+LIBIDN_PATH = ../../libidn-1.32
 endif
 # Edit the path below to point to the base of your MS IDN package.
 # Microsoft Internationalized Domain Names (IDN) Mitigation APIs 1.1
-# http://www.microsoft.com/downloads/en/details.aspx?FamilyID=ad6158d7-ddba-416a-9109-07607425a815
+# https://www.microsoft.com/en-us/download/details.aspx?id=734
 ifndef WINIDN_PATH
 WINIDN_PATH = ../../Microsoft IDN Mitigation APIs
 endif
@@ -56,7 +78,7 @@ LDAP_SDK = c:/novell/ndk/cldapsdk/win32
 endif
 # Edit the path below to point to the base of your nghttp2 package.
 ifndef NGHTTP2_PATH
-NGHTTP2_PATH = ../../nghttp2-0.6.7
+NGHTTP2_PATH = ../../nghttp2-1.0.0
 endif
 
 PROOT = ..
@@ -67,14 +89,14 @@ LIBCARES_PATH = $(PROOT)/ares
 endif
 
 CC     = $(CROSSPREFIX)gcc
-CFLAGS = -g -O2 -Wall
+CFLAGS = $(CURL_CFLAG_EXTRAS) -g -O2 -Wall
 CFLAGS += -fno-strict-aliasing
 # comment LDFLAGS below to keep debug info
-LDFLAGS        = -s
+LDFLAGS        = $(CURL_LDFLAG_EXTRAS) $(CURL_LDFLAG_EXTRAS_EXE) -s
 AR     = $(CROSSPREFIX)ar
 RC     = $(CROSSPREFIX)windres
 RCFLAGS        = --include-dir=$(PROOT)/include -O COFF
-STRIP   = $(CROSSPREFIX)strip -g
+STRIP  = $(CROSSPREFIX)strip -g
 
 # We may need these someday
 # PERL = perl
@@ -83,17 +105,19 @@ STRIP   = $(CROSSPREFIX)strip -g
 # Set environment var ARCH to your architecture to override autodetection.
 ifndef ARCH
 ifeq ($(findstring x86_64,$(shell $(CC) -dumpmachine)),x86_64)
-ARCH    = w64
+ARCH   = w64
 else
-ARCH    = w32
+ARCH   = w32
 endif
 endif
 
 ifeq ($(ARCH),w64)
-CFLAGS += -D_AMD64_
+CFLAGS  += -m64 -D_AMD64_
+LDFLAGS += -m64
 RCFLAGS += -F pe-x86-64
 else
-CFLAGS += -m32
+CFLAGS  += -m32
+LDFLAGS += -m32
 RCFLAGS += -F pe-i386
 endif
 
@@ -144,7 +168,9 @@ ZLIB = 1
 endif
 ifeq ($(findstring -ssh2,$(CFG)),-ssh2)
 SSH2 = 1
+ifneq ($(findstring -winssl,$(CFG)),-winssl)
 SSL = 1
+endif
 ZLIB = 1
 endif
 ifeq ($(findstring -ssl,$(CFG)),-ssl)
@@ -212,6 +238,11 @@ endif
 ifdef SSH2
   CFLAGS += -DUSE_LIBSSH2 -DHAVE_LIBSSH2_H
   curl_LDADD += -L"$(LIBSSH2_PATH)/win32" -lssh2
+  ifdef WINSSL
+    ifndef DYN
+      curl_LDADD += -lbcrypt -lcrypt32
+    endif
+  endif
 endif
 ifdef SSL
   ifndef OPENSSL_INCLUDE
@@ -241,7 +272,7 @@ ifdef SSL
     OPENSSL_LIBS += -lgdi32 -lcrypt32
   endif
   INCLUDES += -I"$(OPENSSL_INCLUDE)"
-  CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL
+  CFLAGS += -DUSE_OPENSSL
   curl_LDADD += -L"$(OPENSSL_LIBPATH)" $(OPENSSL_LIBS)
 endif
 ifdef ZLIB
@@ -340,4 +371,3 @@ endif
 
 distclean vclean: clean
        @$(call DEL, $(curl_PROGRAMS))
-
index b6b4861..3e4f654 100644 (file)
@@ -1,9 +1,31 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2004 - 2014, Guenter Knauf, <http://www.gknw.net/phpbb>.
+# Copyright (C) 2001 - 2015, 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 https://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 curl.nlm (NetWare version - gnu make)
-## Use: make -f Makefile.netware
 ##
-## Comments to: Guenter Knauf http://www.gknw.net/phpbb
+## Use: make -f Makefile.netware
 #
 #################################################################
 
@@ -19,12 +41,12 @@ endif
 
 # Edit the path below to point to the base of your OpenSSL package.
 ifndef OPENSSL_PATH
-OPENSSL_PATH = ../../openssl-0.9.8zc
+OPENSSL_PATH = ../../openssl-1.0.2a
 endif
 
 # Edit the path below to point to the base of your LibSSH2 package.
 ifndef LIBSSH2_PATH
-LIBSSH2_PATH = ../../libssh2-1.4.3
+LIBSSH2_PATH = ../../libssh2-1.5.0
 endif
 
 # Edit the path below to point to the base of your axTLS package.
@@ -80,7 +102,7 @@ endif
 TARGET  = curl
 VERSION        = $(LIBCURL_VERSION)
 COPYR  = Copyright (C) $(LIBCURL_COPYRIGHT_STR)
-DESCR  = cURL $(LIBCURL_VERSION_STR) ($(LIBARCH)) - http://curl.haxx.se
+DESCR  = cURL $(LIBCURL_VERSION_STR) ($(LIBARCH)) - https://curl.haxx.se
 MTSAFE = YES
 STACK  = 64000
 SCREEN = $(TARGET) commandline utility
index 348a763..fd051ef 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
@@ -56,7 +56,7 @@ PROGRAM_NAME = curl.exe
 \r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH = ../../openssl-0.9.8zc\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -77,7 +77,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -95,7 +95,7 @@ ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"
 ZLIB_LIBS      = zlib.lib\r
 ZLIB_IMP_LIBS  = zdll.lib\r
 \r
-SSL_CFLAGS     = /DUSE_SSLEAY\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
 SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
 SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
 SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
@@ -145,6 +145,7 @@ RELEASE_OBJS= \
        rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
+       slist_wc.obj \\r
        tool_binmoder.obj \\r
        tool_bnamer.obj \\r
        tool_cb_dbgr.obj \\r
@@ -190,6 +191,7 @@ DEBUG_OBJS= \
        rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
+       slist_wc.obj \\r
        tool_binmoded.obj \\r
        tool_bnamed.obj \\r
        tool_cb_dbgd.obj \\r
@@ -367,6 +369,8 @@ strtoofftr.obj: ../lib/strtoofft.c
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnless.obj: ../lib/warnless.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoder.obj: tool_binmode.c\r
        $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamer.obj: tool_bname.c\r
@@ -455,6 +459,8 @@ strtoofftd.obj: ../lib/strtoofft.c
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnlessd.obj: ../lib/warnless.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoded.obj: tool_binmode.c\r
        $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamed.obj: tool_bname.c\r
diff --git a/src/Makefile.vc11 b/src/Makefile.vc11
new file mode 100644 (file)
index 0000000..872c401
--- /dev/null
@@ -0,0 +1,550 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-users.\r
+\r
+#############################################################\r
+#\r
+## Makefile for building curl.exe with MSVC11\r
+## Use: nmake -f makefile.vc11 [release | debug] [CFG=release-ssl]\r
+##      (default is release)\r
+## "nmake -f makefile.vc11 CFG=release-ssl" statically links OpenSSL\r
+## into curl.exe producing a standalone SSL-enabled executable.\r
+##\r
+#\r
+#############################################################\r
+\r
+PROGRAM_NAME = curl.exe\r
+\r
+# -------------------------------------------\r
+# Verify that current subdir is curl's 'src'\r
+# -------------------------------------------\r
+\r
+!IF ! EXIST(.\tool_main.c)\r
+!  MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.\r
+!  MESSAGE Change to curl's 'src' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC11 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+########################################################\r
+## Nothing more to do below this line!\r
+\r
+ZLIB_CFLAGS    = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"\r
+ZLIB_LIBS      = zlib.lib\r
+ZLIB_IMP_LIBS  = zdll.lib\r
+\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
+SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
+SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
+WINLIBS        = ws2_32.lib wldap32.lib advapi32.lib\r
+\r
+WINSSL_CFLAGS  = /DUSE_SCHANNEL\r
+#WINSSL_LIBS    = gdi32.lib user32.lib\r
+\r
+!IFDEF USE_IDN\r
+WINLIBS        = $(WINLIBS) normaliz.lib\r
+!ENDIF\r
+\r
+# Runtime library configuration\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+## Release\r
+CCR   = cl.exe $(RTLIB) /O2 /DNDEBUG\r
+LINKR = link.exe /incremental:no /libpath:"../lib"\r
+RCR   = rc.exe /dDEBUGBUILD=0\r
+\r
+## Debug\r
+CCD   = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1\r
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"\r
+RCD   = rc.exe /dDEBUGBUILD=1\r
+\r
+CFLAGS   = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+LFLAGS   = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)\r
+RESFLAGS = /i../include\r
+\r
+# This manifest thing is for VC8, enabled by the maketgz script that\r
+# builds the VC8 version of this makefile. Left commented out in the VC11\r
+# version!\r
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+RELEASE_OBJS= \\r
+       nonblockr.obj \\r
+       rawstrr.obj \\r
+       strtoofftr.obj \\r
+       warnless.obj \\r
+       slist_wc.obj \\r
+       tool_binmoder.obj \\r
+       tool_bnamer.obj \\r
+       tool_cb_dbgr.obj \\r
+       tool_cb_hdrr.obj \\r
+       tool_cb_prgr.obj \\r
+       tool_cb_rear.obj \\r
+       tool_cb_seer.obj \\r
+       tool_cb_wrtr.obj \\r
+       tool_cfgabler.obj \\r
+       tool_convertr.obj \\r
+       tool_dirhier.obj \\r
+       tool_doswinr.obj \\r
+       tool_easysrcr.obj \\r
+       tool_formparser.obj \\r
+       tool_getparamr.obj \\r
+       tool_getpassr.obj \\r
+       tool_helpr.obj \\r
+       tool_helpersr.obj \\r
+       tool_homedirr.obj \\r
+       tool_hugehelpr.obj \\r
+       tool_libinfor.obj \\r
+       tool_mainr.obj \\r
+       tool_metalinkr.obj \\r
+       tool_mfilesr.obj \\r
+       tool_msgsr.obj \\r
+       tool_operater.obj \\r
+       tool_operhlpr.obj \\r
+       tool_panykeyr.obj \\r
+       tool_paramhlpr.obj \\r
+       tool_parsecfgr.obj \\r
+       tool_setoptr.obj \\r
+       tool_sleepr.obj \\r
+       tool_urlglobr.obj \\r
+       tool_utilr.obj \\r
+       tool_vmsr.obj \\r
+       tool_writeenvr.obj \\r
+       tool_writeoutr.obj \\r
+       tool_xattrr.obj \\r
+       curlr.res\r
+\r
+DEBUG_OBJS= \\r
+       nonblockd.obj \\r
+       rawstrd.obj \\r
+       strtoofftd.obj \\r
+       warnlessd.obj \\r
+       slist_wc.obj \\r
+       tool_binmoded.obj \\r
+       tool_bnamed.obj \\r
+       tool_cb_dbgd.obj \\r
+       tool_cb_hdrd.obj \\r
+       tool_cb_prgd.obj \\r
+       tool_cb_read.obj \\r
+       tool_cb_seed.obj \\r
+       tool_cb_wrtd.obj \\r
+       tool_cfgabled.obj \\r
+       tool_convertd.obj \\r
+       tool_dirhied.obj \\r
+       tool_doswind.obj \\r
+       tool_easysrcd.obj \\r
+       tool_formparsed.obj \\r
+       tool_getparamd.obj \\r
+       tool_getpassd.obj \\r
+       tool_helpd.obj \\r
+       tool_helpersd.obj \\r
+       tool_homedird.obj \\r
+       tool_hugehelpd.obj \\r
+       tool_libinfod.obj \\r
+       tool_maind.obj \\r
+       tool_metalinkd.obj \\r
+       tool_mfilesd.obj \\r
+       tool_msgsd.obj \\r
+       tool_operated.obj \\r
+       tool_operhlpd.obj \\r
+       tool_panykeyd.obj \\r
+       tool_paramhlpd.obj \\r
+       tool_parsecfgd.obj \\r
+       tool_setoptd.obj \\r
+       tool_sleepd.obj \\r
+       tool_urlglobd.obj \\r
+       tool_utild.obj \\r
+       tool_vmsd.obj \\r
+       tool_writeenvd.obj \\r
+       tool_writeoutd.obj \\r
+       tool_xattrd.obj \\r
+       curld.res\r
+\r
+#################################################\r
+# If CFG not specified, use static libs\r
+\r
+CFLAGS         = $(CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)\r
+\r
+#################################################\r
+# release dynamic library\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl and zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with winssl and zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(WINSSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(WINSSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+LINKLIBS       = $(LINKLIBS) $(WINLIBS)\r
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) $(WINLIBS)\r
+\r
+all : release\r
+\r
+release: $(RELEASE_OBJS)\r
+       $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+debug: $(DEBUG_OBJS)\r
+       $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+## Release\r
+nonblockr.obj: ../lib/nonblock.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrr.obj: ../lib/rawstr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftr.obj: ../lib/strtoofft.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnless.obj: ../lib/warnless.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoder.obj: tool_binmode.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamer.obj: tool_bname.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgr.obj: tool_cb_dbg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrr.obj: tool_cb_hdr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgr.obj: tool_cb_prg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_rear.obj: tool_cb_rea.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seer.obj: tool_cb_see.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtr.obj: tool_cb_wrt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabler.obj: tool_cfgable.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertr.obj: tool_convert.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhier.obj: tool_dirhie.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswinr.obj: tool_doswin.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcr.obj: tool_easysrc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparser.obj: tool_formparse.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamr.obj: tool_getparam.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassr.obj: tool_getpass.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpr.obj: tool_help.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersr.obj: tool_helpers.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedirr.obj: tool_homedir.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpr.obj: tool_hugehelp.c\r
+       $(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfor.obj: tool_libinfo.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_mainr.obj: tool_main.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkr.obj: tool_metalink.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesr.obj: tool_mfiles.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsr.obj: tool_msgs.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operater.obj: tool_operate.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpr.obj: tool_operhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyr.obj: tool_panykey.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpr.obj: tool_paramhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgr.obj: tool_parsecfg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptr.obj: tool_setopt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepr.obj: tool_sleep.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobr.obj: tool_urlglob.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utilr.obj: tool_util.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsr.obj: tool_vms.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvr.obj: tool_writeenv.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutr.obj: tool_writeout.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrr.obj: tool_xattr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curlr.res : curl.rc\r
+       $(RCR) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+## Debug\r
+nonblockd.obj: ../lib/nonblock.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrd.obj: ../lib/rawstr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftd.obj: ../lib/strtoofft.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnlessd.obj: ../lib/warnless.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoded.obj: tool_binmode.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamed.obj: tool_bname.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgd.obj: tool_cb_dbg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrd.obj: tool_cb_hdr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgd.obj: tool_cb_prg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_read.obj: tool_cb_rea.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seed.obj: tool_cb_see.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtd.obj: tool_cb_wrt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabled.obj: tool_cfgable.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertd.obj: tool_convert.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhied.obj: tool_dirhie.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswind.obj: tool_doswin.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcd.obj: tool_easysrc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparsed.obj: tool_formparse.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamd.obj: tool_getparam.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassd.obj: tool_getpass.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpd.obj: tool_help.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersd.obj: tool_helpers.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedird.obj: tool_homedir.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpd.obj: tool_hugehelp.c\r
+       $(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfod.obj: tool_libinfo.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_maind.obj: tool_main.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkd.obj: tool_metalink.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesd.obj: tool_mfiles.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsd.obj: tool_msgs.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operated.obj: tool_operate.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpd.obj: tool_operhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyd.obj: tool_panykey.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpd.obj: tool_paramhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgd.obj: tool_parsecfg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptd.obj: tool_setopt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepd.obj: tool_sleep.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobd.obj: tool_urlglob.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utild.obj: tool_util.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsd.obj: tool_vms.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvd.obj: tool_writeenv.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutd.obj: tool_writeout.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrd.obj: tool_xattr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curld.res : curl.rc\r
+       $(RCD) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+clean:\r
+       @-erase $(PROGRAM_NAME) 2> NUL\r
+       @-erase $(RELEASE_OBJS) 2> NUL\r
+       @-erase $(DEBUG_OBJS) 2> NUL\r
+       @-erase *.idb 2> NUL\r
+       @-erase *.pdb 2> NUL\r
+       @-erase *.pch 2> NUL\r
+       @-erase *.ilk 2> NUL\r
diff --git a/src/Makefile.vc12 b/src/Makefile.vc12
new file mode 100644 (file)
index 0000000..544a073
--- /dev/null
@@ -0,0 +1,550 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-users.\r
+\r
+#############################################################\r
+#\r
+## Makefile for building curl.exe with MSVC12\r
+## Use: nmake -f makefile.vc12 [release | debug] [CFG=release-ssl]\r
+##      (default is release)\r
+## "nmake -f makefile.vc12 CFG=release-ssl" statically links OpenSSL\r
+## into curl.exe producing a standalone SSL-enabled executable.\r
+##\r
+#\r
+#############################################################\r
+\r
+PROGRAM_NAME = curl.exe\r
+\r
+# -------------------------------------------\r
+# Verify that current subdir is curl's 'src'\r
+# -------------------------------------------\r
+\r
+!IF ! EXIST(.\tool_main.c)\r
+!  MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.\r
+!  MESSAGE Change to curl's 'src' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC12 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+########################################################\r
+## Nothing more to do below this line!\r
+\r
+ZLIB_CFLAGS    = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"\r
+ZLIB_LIBS      = zlib.lib\r
+ZLIB_IMP_LIBS  = zdll.lib\r
+\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
+SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
+SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
+WINLIBS        = ws2_32.lib wldap32.lib advapi32.lib\r
+\r
+WINSSL_CFLAGS  = /DUSE_SCHANNEL\r
+#WINSSL_LIBS    = gdi32.lib user32.lib\r
+\r
+!IFDEF USE_IDN\r
+WINLIBS        = $(WINLIBS) normaliz.lib\r
+!ENDIF\r
+\r
+# Runtime library configuration\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+## Release\r
+CCR   = cl.exe $(RTLIB) /O2 /DNDEBUG\r
+LINKR = link.exe /incremental:no /libpath:"../lib"\r
+RCR   = rc.exe /dDEBUGBUILD=0\r
+\r
+## Debug\r
+CCD   = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1\r
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"\r
+RCD   = rc.exe /dDEBUGBUILD=1\r
+\r
+CFLAGS   = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+LFLAGS   = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)\r
+RESFLAGS = /i../include\r
+\r
+# This manifest thing is for VC8, enabled by the maketgz script that\r
+# builds the VC8 version of this makefile. Left commented out in the VC12\r
+# version!\r
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+RELEASE_OBJS= \\r
+       nonblockr.obj \\r
+       rawstrr.obj \\r
+       strtoofftr.obj \\r
+       warnless.obj \\r
+       slist_wc.obj \\r
+       tool_binmoder.obj \\r
+       tool_bnamer.obj \\r
+       tool_cb_dbgr.obj \\r
+       tool_cb_hdrr.obj \\r
+       tool_cb_prgr.obj \\r
+       tool_cb_rear.obj \\r
+       tool_cb_seer.obj \\r
+       tool_cb_wrtr.obj \\r
+       tool_cfgabler.obj \\r
+       tool_convertr.obj \\r
+       tool_dirhier.obj \\r
+       tool_doswinr.obj \\r
+       tool_easysrcr.obj \\r
+       tool_formparser.obj \\r
+       tool_getparamr.obj \\r
+       tool_getpassr.obj \\r
+       tool_helpr.obj \\r
+       tool_helpersr.obj \\r
+       tool_homedirr.obj \\r
+       tool_hugehelpr.obj \\r
+       tool_libinfor.obj \\r
+       tool_mainr.obj \\r
+       tool_metalinkr.obj \\r
+       tool_mfilesr.obj \\r
+       tool_msgsr.obj \\r
+       tool_operater.obj \\r
+       tool_operhlpr.obj \\r
+       tool_panykeyr.obj \\r
+       tool_paramhlpr.obj \\r
+       tool_parsecfgr.obj \\r
+       tool_setoptr.obj \\r
+       tool_sleepr.obj \\r
+       tool_urlglobr.obj \\r
+       tool_utilr.obj \\r
+       tool_vmsr.obj \\r
+       tool_writeenvr.obj \\r
+       tool_writeoutr.obj \\r
+       tool_xattrr.obj \\r
+       curlr.res\r
+\r
+DEBUG_OBJS= \\r
+       nonblockd.obj \\r
+       rawstrd.obj \\r
+       strtoofftd.obj \\r
+       warnlessd.obj \\r
+       slist_wc.obj \\r
+       tool_binmoded.obj \\r
+       tool_bnamed.obj \\r
+       tool_cb_dbgd.obj \\r
+       tool_cb_hdrd.obj \\r
+       tool_cb_prgd.obj \\r
+       tool_cb_read.obj \\r
+       tool_cb_seed.obj \\r
+       tool_cb_wrtd.obj \\r
+       tool_cfgabled.obj \\r
+       tool_convertd.obj \\r
+       tool_dirhied.obj \\r
+       tool_doswind.obj \\r
+       tool_easysrcd.obj \\r
+       tool_formparsed.obj \\r
+       tool_getparamd.obj \\r
+       tool_getpassd.obj \\r
+       tool_helpd.obj \\r
+       tool_helpersd.obj \\r
+       tool_homedird.obj \\r
+       tool_hugehelpd.obj \\r
+       tool_libinfod.obj \\r
+       tool_maind.obj \\r
+       tool_metalinkd.obj \\r
+       tool_mfilesd.obj \\r
+       tool_msgsd.obj \\r
+       tool_operated.obj \\r
+       tool_operhlpd.obj \\r
+       tool_panykeyd.obj \\r
+       tool_paramhlpd.obj \\r
+       tool_parsecfgd.obj \\r
+       tool_setoptd.obj \\r
+       tool_sleepd.obj \\r
+       tool_urlglobd.obj \\r
+       tool_utild.obj \\r
+       tool_vmsd.obj \\r
+       tool_writeenvd.obj \\r
+       tool_writeoutd.obj \\r
+       tool_xattrd.obj \\r
+       curld.res\r
+\r
+#################################################\r
+# If CFG not specified, use static libs\r
+\r
+CFLAGS         = $(CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)\r
+\r
+#################################################\r
+# release dynamic library\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl and zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with winssl and zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(WINSSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(WINSSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+LINKLIBS       = $(LINKLIBS) $(WINLIBS)\r
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) $(WINLIBS)\r
+\r
+all : release\r
+\r
+release: $(RELEASE_OBJS)\r
+       $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+debug: $(DEBUG_OBJS)\r
+       $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+## Release\r
+nonblockr.obj: ../lib/nonblock.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrr.obj: ../lib/rawstr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftr.obj: ../lib/strtoofft.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnless.obj: ../lib/warnless.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoder.obj: tool_binmode.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamer.obj: tool_bname.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgr.obj: tool_cb_dbg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrr.obj: tool_cb_hdr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgr.obj: tool_cb_prg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_rear.obj: tool_cb_rea.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seer.obj: tool_cb_see.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtr.obj: tool_cb_wrt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabler.obj: tool_cfgable.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertr.obj: tool_convert.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhier.obj: tool_dirhie.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswinr.obj: tool_doswin.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcr.obj: tool_easysrc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparser.obj: tool_formparse.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamr.obj: tool_getparam.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassr.obj: tool_getpass.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpr.obj: tool_help.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersr.obj: tool_helpers.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedirr.obj: tool_homedir.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpr.obj: tool_hugehelp.c\r
+       $(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfor.obj: tool_libinfo.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_mainr.obj: tool_main.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkr.obj: tool_metalink.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesr.obj: tool_mfiles.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsr.obj: tool_msgs.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operater.obj: tool_operate.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpr.obj: tool_operhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyr.obj: tool_panykey.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpr.obj: tool_paramhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgr.obj: tool_parsecfg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptr.obj: tool_setopt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepr.obj: tool_sleep.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobr.obj: tool_urlglob.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utilr.obj: tool_util.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsr.obj: tool_vms.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvr.obj: tool_writeenv.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutr.obj: tool_writeout.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrr.obj: tool_xattr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curlr.res : curl.rc\r
+       $(RCR) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+## Debug\r
+nonblockd.obj: ../lib/nonblock.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrd.obj: ../lib/rawstr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftd.obj: ../lib/strtoofft.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnlessd.obj: ../lib/warnless.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoded.obj: tool_binmode.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamed.obj: tool_bname.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgd.obj: tool_cb_dbg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrd.obj: tool_cb_hdr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgd.obj: tool_cb_prg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_read.obj: tool_cb_rea.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seed.obj: tool_cb_see.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtd.obj: tool_cb_wrt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabled.obj: tool_cfgable.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertd.obj: tool_convert.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhied.obj: tool_dirhie.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswind.obj: tool_doswin.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcd.obj: tool_easysrc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparsed.obj: tool_formparse.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamd.obj: tool_getparam.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassd.obj: tool_getpass.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpd.obj: tool_help.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersd.obj: tool_helpers.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedird.obj: tool_homedir.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpd.obj: tool_hugehelp.c\r
+       $(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfod.obj: tool_libinfo.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_maind.obj: tool_main.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkd.obj: tool_metalink.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesd.obj: tool_mfiles.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsd.obj: tool_msgs.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operated.obj: tool_operate.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpd.obj: tool_operhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyd.obj: tool_panykey.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpd.obj: tool_paramhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgd.obj: tool_parsecfg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptd.obj: tool_setopt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepd.obj: tool_sleep.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobd.obj: tool_urlglob.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utild.obj: tool_util.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsd.obj: tool_vms.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvd.obj: tool_writeenv.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutd.obj: tool_writeout.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrd.obj: tool_xattr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curld.res : curl.rc\r
+       $(RCD) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+clean:\r
+       @-erase $(PROGRAM_NAME) 2> NUL\r
+       @-erase $(RELEASE_OBJS) 2> NUL\r
+       @-erase $(DEBUG_OBJS) 2> NUL\r
+       @-erase *.idb 2> NUL\r
+       @-erase *.pdb 2> NUL\r
+       @-erase *.pch 2> NUL\r
+       @-erase *.ilk 2> NUL\r
diff --git a/src/Makefile.vc14 b/src/Makefile.vc14
new file mode 100644 (file)
index 0000000..9719ae8
--- /dev/null
@@ -0,0 +1,550 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-users.\r
+\r
+#############################################################\r
+#\r
+## Makefile for building curl.exe with MSVC14\r
+## Use: nmake -f makefile.vc14 [release | debug] [CFG=release-ssl]\r
+##      (default is release)\r
+## "nmake -f makefile.vc14 CFG=release-ssl" statically links OpenSSL\r
+## into curl.exe producing a standalone SSL-enabled executable.\r
+##\r
+#\r
+#############################################################\r
+\r
+PROGRAM_NAME = curl.exe\r
+\r
+# -------------------------------------------\r
+# Verify that current subdir is curl's 'src'\r
+# -------------------------------------------\r
+\r
+!IF ! EXIST(.\tool_main.c)\r
+!  MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.\r
+!  MESSAGE Change to curl's 'src' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC14 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+########################################################\r
+## Nothing more to do below this line!\r
+\r
+ZLIB_CFLAGS    = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"\r
+ZLIB_LIBS      = zlib.lib\r
+ZLIB_IMP_LIBS  = zdll.lib\r
+\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
+SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
+SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
+WINLIBS        = ws2_32.lib wldap32.lib advapi32.lib\r
+\r
+WINSSL_CFLAGS  = /DUSE_SCHANNEL\r
+#WINSSL_LIBS    = gdi32.lib user32.lib\r
+\r
+!IFDEF USE_IDN\r
+WINLIBS        = $(WINLIBS) normaliz.lib\r
+!ENDIF\r
+\r
+# Runtime library configuration\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+## Release\r
+CCR   = cl.exe $(RTLIB) /O2 /DNDEBUG\r
+LINKR = link.exe /incremental:no /libpath:"../lib"\r
+RCR   = rc.exe /dDEBUGBUILD=0\r
+\r
+## Debug\r
+CCD   = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /RTC1\r
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"\r
+RCD   = rc.exe /dDEBUGBUILD=1\r
+\r
+CFLAGS   = /I../lib /I../include /nologo /W3 /EHsc /DWIN32 /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+LFLAGS   = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)\r
+RESFLAGS = /i../include\r
+\r
+# This manifest thing is for VC8, enabled by the maketgz script that\r
+# builds the VC8 version of this makefile. Left commented out in the VC14\r
+# version!\r
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+RELEASE_OBJS= \\r
+       nonblockr.obj \\r
+       rawstrr.obj \\r
+       strtoofftr.obj \\r
+       warnless.obj \\r
+       slist_wc.obj \\r
+       tool_binmoder.obj \\r
+       tool_bnamer.obj \\r
+       tool_cb_dbgr.obj \\r
+       tool_cb_hdrr.obj \\r
+       tool_cb_prgr.obj \\r
+       tool_cb_rear.obj \\r
+       tool_cb_seer.obj \\r
+       tool_cb_wrtr.obj \\r
+       tool_cfgabler.obj \\r
+       tool_convertr.obj \\r
+       tool_dirhier.obj \\r
+       tool_doswinr.obj \\r
+       tool_easysrcr.obj \\r
+       tool_formparser.obj \\r
+       tool_getparamr.obj \\r
+       tool_getpassr.obj \\r
+       tool_helpr.obj \\r
+       tool_helpersr.obj \\r
+       tool_homedirr.obj \\r
+       tool_hugehelpr.obj \\r
+       tool_libinfor.obj \\r
+       tool_mainr.obj \\r
+       tool_metalinkr.obj \\r
+       tool_mfilesr.obj \\r
+       tool_msgsr.obj \\r
+       tool_operater.obj \\r
+       tool_operhlpr.obj \\r
+       tool_panykeyr.obj \\r
+       tool_paramhlpr.obj \\r
+       tool_parsecfgr.obj \\r
+       tool_setoptr.obj \\r
+       tool_sleepr.obj \\r
+       tool_urlglobr.obj \\r
+       tool_utilr.obj \\r
+       tool_vmsr.obj \\r
+       tool_writeenvr.obj \\r
+       tool_writeoutr.obj \\r
+       tool_xattrr.obj \\r
+       curlr.res\r
+\r
+DEBUG_OBJS= \\r
+       nonblockd.obj \\r
+       rawstrd.obj \\r
+       strtoofftd.obj \\r
+       warnlessd.obj \\r
+       slist_wc.obj \\r
+       tool_binmoded.obj \\r
+       tool_bnamed.obj \\r
+       tool_cb_dbgd.obj \\r
+       tool_cb_hdrd.obj \\r
+       tool_cb_prgd.obj \\r
+       tool_cb_read.obj \\r
+       tool_cb_seed.obj \\r
+       tool_cb_wrtd.obj \\r
+       tool_cfgabled.obj \\r
+       tool_convertd.obj \\r
+       tool_dirhied.obj \\r
+       tool_doswind.obj \\r
+       tool_easysrcd.obj \\r
+       tool_formparsed.obj \\r
+       tool_getparamd.obj \\r
+       tool_getpassd.obj \\r
+       tool_helpd.obj \\r
+       tool_helpersd.obj \\r
+       tool_homedird.obj \\r
+       tool_hugehelpd.obj \\r
+       tool_libinfod.obj \\r
+       tool_maind.obj \\r
+       tool_metalinkd.obj \\r
+       tool_mfilesd.obj \\r
+       tool_msgsd.obj \\r
+       tool_operated.obj \\r
+       tool_operhlpd.obj \\r
+       tool_panykeyd.obj \\r
+       tool_paramhlpd.obj \\r
+       tool_parsecfgd.obj \\r
+       tool_setoptd.obj \\r
+       tool_sleepd.obj \\r
+       tool_urlglobd.obj \\r
+       tool_utild.obj \\r
+       tool_vmsd.obj \\r
+       tool_writeenvd.obj \\r
+       tool_writeoutd.obj \\r
+       tool_xattrd.obj \\r
+       curld.res\r
+\r
+#################################################\r
+# If CFG not specified, use static libs\r
+\r
+CFLAGS         = $(CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)\r
+\r
+#################################################\r
+# release dynamic library\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl and zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with winssl and zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(WINSSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(WINSSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+LINKLIBS       = $(LINKLIBS) $(WINLIBS)\r
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) $(WINLIBS)\r
+\r
+all : release\r
+\r
+release: $(RELEASE_OBJS)\r
+       $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+debug: $(DEBUG_OBJS)\r
+       $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+## Release\r
+nonblockr.obj: ../lib/nonblock.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrr.obj: ../lib/rawstr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftr.obj: ../lib/strtoofft.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnless.obj: ../lib/warnless.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoder.obj: tool_binmode.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamer.obj: tool_bname.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgr.obj: tool_cb_dbg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrr.obj: tool_cb_hdr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgr.obj: tool_cb_prg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_rear.obj: tool_cb_rea.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seer.obj: tool_cb_see.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtr.obj: tool_cb_wrt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabler.obj: tool_cfgable.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertr.obj: tool_convert.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhier.obj: tool_dirhie.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswinr.obj: tool_doswin.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcr.obj: tool_easysrc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparser.obj: tool_formparse.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamr.obj: tool_getparam.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassr.obj: tool_getpass.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpr.obj: tool_help.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersr.obj: tool_helpers.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedirr.obj: tool_homedir.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpr.obj: tool_hugehelp.c\r
+       $(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfor.obj: tool_libinfo.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_mainr.obj: tool_main.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkr.obj: tool_metalink.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesr.obj: tool_mfiles.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsr.obj: tool_msgs.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operater.obj: tool_operate.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpr.obj: tool_operhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyr.obj: tool_panykey.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpr.obj: tool_paramhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgr.obj: tool_parsecfg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptr.obj: tool_setopt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepr.obj: tool_sleep.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobr.obj: tool_urlglob.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utilr.obj: tool_util.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsr.obj: tool_vms.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvr.obj: tool_writeenv.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutr.obj: tool_writeout.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrr.obj: tool_xattr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curlr.res : curl.rc\r
+       $(RCR) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+## Debug\r
+nonblockd.obj: ../lib/nonblock.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrd.obj: ../lib/rawstr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftd.obj: ../lib/strtoofft.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnlessd.obj: ../lib/warnless.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoded.obj: tool_binmode.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamed.obj: tool_bname.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgd.obj: tool_cb_dbg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrd.obj: tool_cb_hdr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgd.obj: tool_cb_prg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_read.obj: tool_cb_rea.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seed.obj: tool_cb_see.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtd.obj: tool_cb_wrt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabled.obj: tool_cfgable.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertd.obj: tool_convert.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhied.obj: tool_dirhie.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswind.obj: tool_doswin.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcd.obj: tool_easysrc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparsed.obj: tool_formparse.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamd.obj: tool_getparam.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassd.obj: tool_getpass.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpd.obj: tool_help.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersd.obj: tool_helpers.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedird.obj: tool_homedir.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpd.obj: tool_hugehelp.c\r
+       $(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfod.obj: tool_libinfo.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_maind.obj: tool_main.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkd.obj: tool_metalink.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesd.obj: tool_mfiles.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsd.obj: tool_msgs.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operated.obj: tool_operate.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpd.obj: tool_operhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyd.obj: tool_panykey.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpd.obj: tool_paramhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgd.obj: tool_parsecfg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptd.obj: tool_setopt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepd.obj: tool_sleep.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobd.obj: tool_urlglob.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utild.obj: tool_util.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsd.obj: tool_vms.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvd.obj: tool_writeenv.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutd.obj: tool_writeout.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrd.obj: tool_xattr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curld.res : curl.rc\r
+       $(RCD) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+clean:\r
+       @-erase $(PROGRAM_NAME) 2> NUL\r
+       @-erase $(RELEASE_OBJS) 2> NUL\r
+       @-erase $(DEBUG_OBJS) 2> NUL\r
+       @-erase *.idb 2> NUL\r
+       @-erase *.pdb 2> NUL\r
+       @-erase *.pch 2> NUL\r
+       @-erase *.ilk 2> NUL\r
index c8693af..08ea74e 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
@@ -56,7 +56,7 @@ PROGRAM_NAME = curl.exe
 \r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH = ../../openssl-0.9.8zc\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -77,7 +77,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -95,7 +95,7 @@ ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"
 ZLIB_LIBS      = zlib.lib\r
 ZLIB_IMP_LIBS  = zdll.lib\r
 \r
-SSL_CFLAGS     = /DUSE_SSLEAY\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
 SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
 SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
 SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
@@ -145,6 +145,7 @@ RELEASE_OBJS= \
        rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
+       slist_wc.obj \\r
        tool_binmoder.obj \\r
        tool_bnamer.obj \\r
        tool_cb_dbgr.obj \\r
@@ -190,6 +191,7 @@ DEBUG_OBJS= \
        rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
+       slist_wc.obj \\r
        tool_binmoded.obj \\r
        tool_bnamed.obj \\r
        tool_cb_dbgd.obj \\r
@@ -367,6 +369,8 @@ strtoofftr.obj: ../lib/strtoofft.c
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnless.obj: ../lib/warnless.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoder.obj: tool_binmode.c\r
        $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamer.obj: tool_bname.c\r
@@ -455,6 +459,8 @@ strtoofftd.obj: ../lib/strtoofft.c
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnlessd.obj: ../lib/warnless.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoded.obj: tool_binmode.c\r
        $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamed.obj: tool_bname.c\r
diff --git a/src/Makefile.vc7 b/src/Makefile.vc7
new file mode 100644 (file)
index 0000000..8861b84
--- /dev/null
@@ -0,0 +1,550 @@
+#***************************************************************************\r
+#                                  _   _ ____  _\r
+#  Project                     ___| | | |  _ \| |\r
+#                             / __| | | | |_) | |\r
+#                            | (__| |_| |  _ <| |___\r
+#                             \___|\___/|_| \_\_____|\r
+#\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+#\r
+# This software is licensed as described in the file COPYING, which\r
+# you should have received as part of this distribution. The terms\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
+#\r
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
+# copies of the Software, and permit persons to whom the Software is\r
+# furnished to do so, under the terms of the COPYING file.\r
+#\r
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY\r
+# KIND, either express or implied.\r
+#\r
+#***************************************************************************\r
+\r
+# All files in the Makefile.vc* series are generated automatically from the\r
+# one made for MSVC version 6. Alas, if you want to do changes to any of the\r
+# files and send back to the project, edit the version six, make your diff and\r
+# mail curl-users.\r
+\r
+#############################################################\r
+#\r
+## Makefile for building curl.exe with MSVC7\r
+## Use: nmake -f makefile.vc6 [release | debug] [CFG=release-ssl]\r
+##      (default is release)\r
+## "nmake -f makefile.vc6 CFG=release-ssl" statically links OpenSSL\r
+## into curl.exe producing a standalone SSL-enabled executable.\r
+##\r
+#\r
+#############################################################\r
+\r
+PROGRAM_NAME = curl.exe\r
+\r
+# -------------------------------------------\r
+# Verify that current subdir is curl's 'src'\r
+# -------------------------------------------\r
+\r
+!IF ! EXIST(.\tool_main.c)\r
+!  MESSAGE Can not process this makefile from outside of curl's 'src' subdirectory.\r
+!  MESSAGE Change to curl's 'src' subdirectory, and try again.\r
+!  ERROR   See previous message.\r
+!ENDIF\r
+\r
+# ------------------------------------------------\r
+# Makefile.msvc.names provides libcurl file names\r
+# ------------------------------------------------\r
+\r
+!INCLUDE ..\winbuild\Makefile.msvc.names\r
+\r
+\r
+!IFNDEF OPENSSL_PATH\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
+!ENDIF\r
+\r
+!IFNDEF ZLIB_PATH\r
+ZLIB_PATH = ../../zlib-1.2.8\r
+!ENDIF\r
+\r
+!IFNDEF MACHINE\r
+MACHINE  = X86\r
+!ENDIF\r
+\r
+# USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication\r
+# without an openssl installation and offers the ability to authenticate\r
+# using the "current logged in user". Since at least with MSVC7 the sspi.h\r
+# header is broken it is either required to install the Windows SDK,\r
+# or to fix sspi.h with adding this define at the beginning of sspi.h:\r
+# #define FreeCredentialHandle FreeCredentialsHandle\r
+#\r
+# If, for some reason the Windows SDK is installed but not installed\r
+# in the default location, you can specify WINDOWS_SDK_PATH.\r
+# It can be downloaded from:\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
+\r
+# WINDOWS_SSPI = 1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+!IFNDEF WINDOWS_SDK_PATH\r
+WINDOWS_SDK_PATH = "$(PROGRAMFILES)\Microsoft SDK"\r
+!ENDIF\r
+!ENDIF\r
+\r
+########################################################\r
+## Nothing more to do below this line!\r
+\r
+ZLIB_CFLAGS    = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)"\r
+ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"\r
+ZLIB_LIBS      = zlib.lib\r
+ZLIB_IMP_LIBS  = zdll.lib\r
+\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
+SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
+SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
+SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
+WINLIBS        = ws2_32.lib wldap32.lib advapi32.lib\r
+\r
+WINSSL_CFLAGS  = /DUSE_SCHANNEL\r
+#WINSSL_LIBS    = gdi32.lib user32.lib\r
+\r
+!IFDEF USE_IDN\r
+WINLIBS        = $(WINLIBS) normaliz.lib\r
+!ENDIF\r
+\r
+# Runtime library configuration\r
+RTLIB   = /MD\r
+RTLIBD  = /MDd\r
+\r
+!IF "$(RTLIBCFG)" == "static"\r
+RTLIB  = /MT\r
+RTLIBD = /MTd\r
+!ENDIF\r
+\r
+## Release\r
+CCR   = cl.exe $(RTLIB) /O2 /DNDEBUG\r
+LINKR = link.exe /incremental:no /libpath:"../lib"\r
+RCR   = rc.exe /dDEBUGBUILD=0\r
+\r
+## Debug\r
+CCD   = cl.exe $(RTLIBD) /Gm /ZI /Od /D_DEBUG /GZ\r
+LINKD = link.exe /incremental:yes /debug /libpath:"../lib"\r
+RCD   = rc.exe /dDEBUGBUILD=1\r
+\r
+CFLAGS   = /I../lib /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /D_BIND_TO_CURRENT_VCLIBS_VERSION=1\r
+LFLAGS   = /nologo /out:$(PROGRAM_NAME) /subsystem:console /machine:$(MACHINE)\r
+RESFLAGS = /i../include\r
+\r
+# This manifest thing is for VC8, enabled by the maketgz script that\r
+# builds the VC8 version of this makefile. Left commented out in the VC7\r
+# version!\r
+#MANIFESTTOOL = mt -manifest $(PROGRAM_NAME).manifest -outputresource:$(PROGRAM_NAME);1\r
+\r
+!IFDEF WINDOWS_SSPI\r
+CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include\r
+!ENDIF\r
+\r
+RELEASE_OBJS= \\r
+       nonblockr.obj \\r
+       rawstrr.obj \\r
+       strtoofftr.obj \\r
+       warnless.obj \\r
+       slist_wc.obj \\r
+       tool_binmoder.obj \\r
+       tool_bnamer.obj \\r
+       tool_cb_dbgr.obj \\r
+       tool_cb_hdrr.obj \\r
+       tool_cb_prgr.obj \\r
+       tool_cb_rear.obj \\r
+       tool_cb_seer.obj \\r
+       tool_cb_wrtr.obj \\r
+       tool_cfgabler.obj \\r
+       tool_convertr.obj \\r
+       tool_dirhier.obj \\r
+       tool_doswinr.obj \\r
+       tool_easysrcr.obj \\r
+       tool_formparser.obj \\r
+       tool_getparamr.obj \\r
+       tool_getpassr.obj \\r
+       tool_helpr.obj \\r
+       tool_helpersr.obj \\r
+       tool_homedirr.obj \\r
+       tool_hugehelpr.obj \\r
+       tool_libinfor.obj \\r
+       tool_mainr.obj \\r
+       tool_metalinkr.obj \\r
+       tool_mfilesr.obj \\r
+       tool_msgsr.obj \\r
+       tool_operater.obj \\r
+       tool_operhlpr.obj \\r
+       tool_panykeyr.obj \\r
+       tool_paramhlpr.obj \\r
+       tool_parsecfgr.obj \\r
+       tool_setoptr.obj \\r
+       tool_sleepr.obj \\r
+       tool_urlglobr.obj \\r
+       tool_utilr.obj \\r
+       tool_vmsr.obj \\r
+       tool_writeenvr.obj \\r
+       tool_writeoutr.obj \\r
+       tool_xattrr.obj \\r
+       curlr.res\r
+\r
+DEBUG_OBJS= \\r
+       nonblockd.obj \\r
+       rawstrd.obj \\r
+       strtoofftd.obj \\r
+       warnlessd.obj \\r
+       slist_wc.obj \\r
+       tool_binmoded.obj \\r
+       tool_bnamed.obj \\r
+       tool_cb_dbgd.obj \\r
+       tool_cb_hdrd.obj \\r
+       tool_cb_prgd.obj \\r
+       tool_cb_read.obj \\r
+       tool_cb_seed.obj \\r
+       tool_cb_wrtd.obj \\r
+       tool_cfgabled.obj \\r
+       tool_convertd.obj \\r
+       tool_dirhied.obj \\r
+       tool_doswind.obj \\r
+       tool_easysrcd.obj \\r
+       tool_formparsed.obj \\r
+       tool_getparamd.obj \\r
+       tool_getpassd.obj \\r
+       tool_helpd.obj \\r
+       tool_helpersd.obj \\r
+       tool_homedird.obj \\r
+       tool_hugehelpd.obj \\r
+       tool_libinfod.obj \\r
+       tool_maind.obj \\r
+       tool_metalinkd.obj \\r
+       tool_mfilesd.obj \\r
+       tool_msgsd.obj \\r
+       tool_operated.obj \\r
+       tool_operhlpd.obj \\r
+       tool_panykeyd.obj \\r
+       tool_paramhlpd.obj \\r
+       tool_parsecfgd.obj \\r
+       tool_setoptd.obj \\r
+       tool_sleepd.obj \\r
+       tool_urlglobd.obj \\r
+       tool_utild.obj \\r
+       tool_vmsd.obj \\r
+       tool_writeenvd.obj \\r
+       tool_writeoutd.obj \\r
+       tool_xattrd.obj \\r
+       curld.res\r
+\r
+#################################################\r
+# If CFG not specified, use static libs\r
+\r
+CFLAGS         = $(CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG)\r
+\r
+#################################################\r
+# release dynamic library\r
+\r
+!IF "$(CFG)" == "release-dll"\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with zlib\r
+\r
+!IF "$(CFG)" == "release-zlib"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl\r
+\r
+!IF "$(CFG)" == "release-ssl"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with ssl and zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with winssl and zlib\r
+\r
+!IF "$(CFG)" == "release-winssl-zlib"\r
+CFLAGS         = $(CFLAGS) $(WINSSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(WINSSL_LIBS) $(ZLIB_LIBS)\r
+LFLAGS         = $(LFLAGS) $(WINSSL_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl\r
+\r
+!IF "$(CFG)" == "release-ssl-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release static library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS) /DCURL_STATICLIB\r
+LINKLIBS       = $(LIBCURL_STA_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_STA_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+#################################################\r
+# release dynamic library with dynamic ssl and dynamic zlib\r
+\r
+!IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll"\r
+CFLAGS         = $(CFLAGS) $(SSL_CFLAGS) $(ZLIB_CFLAGS)\r
+LINKLIBS       = $(LIBCURL_IMP_LIB_REL) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LINKLIBS_DEBUG = $(LIBCURL_IMP_LIB_DBG) $(SSL_LIBS) $(ZLIB_IMP_LIBS)\r
+LFLAGS         = $(LFLAGS) $(SSL_IMP_LFLAGS) $(ZLIB_LFLAGS)\r
+!ENDIF\r
+\r
+LINKLIBS       = $(LINKLIBS) $(WINLIBS)\r
+LINKLIBS_DEBUG = $(LINKLIBS_DEBUG) $(WINLIBS)\r
+\r
+all : release\r
+\r
+release: $(RELEASE_OBJS)\r
+       $(LINKR) $(LFLAGS) $(LINKLIBS) $(RELEASE_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+debug: $(DEBUG_OBJS)\r
+       $(LINKD) $(LFLAGS) $(LINKLIBS_DEBUG) $(DEBUG_OBJS)\r
+        $(MANIFESTTOOL)\r
+\r
+## Release\r
+nonblockr.obj: ../lib/nonblock.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrr.obj: ../lib/rawstr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftr.obj: ../lib/strtoofft.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnless.obj: ../lib/warnless.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoder.obj: tool_binmode.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamer.obj: tool_bname.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgr.obj: tool_cb_dbg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrr.obj: tool_cb_hdr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgr.obj: tool_cb_prg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_rear.obj: tool_cb_rea.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seer.obj: tool_cb_see.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtr.obj: tool_cb_wrt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabler.obj: tool_cfgable.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertr.obj: tool_convert.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhier.obj: tool_dirhie.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswinr.obj: tool_doswin.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcr.obj: tool_easysrc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparser.obj: tool_formparse.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamr.obj: tool_getparam.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassr.obj: tool_getpass.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpr.obj: tool_help.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersr.obj: tool_helpers.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedirr.obj: tool_homedir.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpr.obj: tool_hugehelp.c\r
+       $(CCR) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfor.obj: tool_libinfo.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_mainr.obj: tool_main.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkr.obj: tool_metalink.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesr.obj: tool_mfiles.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsr.obj: tool_msgs.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operater.obj: tool_operate.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpr.obj: tool_operhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyr.obj: tool_panykey.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpr.obj: tool_paramhlp.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgr.obj: tool_parsecfg.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptr.obj: tool_setopt.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepr.obj: tool_sleep.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobr.obj: tool_urlglob.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utilr.obj: tool_util.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsr.obj: tool_vms.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvr.obj: tool_writeenv.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutr.obj: tool_writeout.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrr.obj: tool_xattr.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curlr.res : curl.rc\r
+       $(RCR) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+## Debug\r
+nonblockd.obj: ../lib/nonblock.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/nonblock.c\r
+rawstrd.obj: ../lib/rawstr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/rawstr.c\r
+strtoofftd.obj: ../lib/strtoofft.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
+warnlessd.obj: ../lib/warnless.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
+tool_binmoded.obj: tool_binmode.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
+tool_bnamed.obj: tool_bname.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_bname.c\r
+tool_cb_dbgd.obj: tool_cb_dbg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_dbg.c\r
+tool_cb_hdrd.obj: tool_cb_hdr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_hdr.c\r
+tool_cb_prgd.obj: tool_cb_prg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_prg.c\r
+tool_cb_read.obj: tool_cb_rea.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_rea.c\r
+tool_cb_seed.obj: tool_cb_see.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_see.c\r
+tool_cb_wrtd.obj: tool_cb_wrt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cb_wrt.c\r
+tool_cfgabled.obj: tool_cfgable.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_cfgable.c\r
+tool_convertd.obj: tool_convert.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_convert.c\r
+tool_dirhied.obj: tool_dirhie.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_dirhie.c\r
+tool_doswind.obj: tool_doswin.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_doswin.c\r
+tool_easysrcd.obj: tool_easysrc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_easysrc.c\r
+tool_formparsed.obj: tool_formparse.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_formparse.c\r
+tool_getparamd.obj: tool_getparam.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getparam.c\r
+tool_getpassd.obj: tool_getpass.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_getpass.c\r
+tool_helpd.obj: tool_help.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_help.c\r
+tool_helpersd.obj: tool_helpers.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_helpers.c\r
+tool_homedird.obj: tool_homedir.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_homedir.c\r
+tool_hugehelpd.obj: tool_hugehelp.c\r
+       $(CCD) $(CFLAGS) /Zm200 /Fo"$@" tool_hugehelp.c\r
+tool_libinfod.obj: tool_libinfo.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_libinfo.c\r
+tool_maind.obj: tool_main.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_main.c\r
+tool_metalinkd.obj: tool_metalink.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_metalink.c\r
+tool_mfilesd.obj: tool_mfiles.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_mfiles.c\r
+tool_msgsd.obj: tool_msgs.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_msgs.c\r
+tool_operated.obj: tool_operate.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operate.c\r
+tool_operhlpd.obj: tool_operhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_operhlp.c\r
+tool_panykeyd.obj: tool_panykey.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_panykey.c\r
+tool_paramhlpd.obj: tool_paramhlp.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_paramhlp.c\r
+tool_parsecfgd.obj: tool_parsecfg.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_parsecfg.c\r
+tool_setoptd.obj: tool_setopt.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c\r
+tool_sleepd.obj: tool_sleep.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobd.obj: tool_urlglob.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
+tool_utild.obj: tool_util.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_util.c\r
+tool_vmsd.obj: tool_vms.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_vms.c\r
+tool_writeenvd.obj: tool_writeenv.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeenv.c\r
+tool_writeoutd.obj: tool_writeout.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_writeout.c\r
+tool_xattrd.obj: tool_xattr.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_xattr.c\r
+curld.res : curl.rc\r
+       $(RCD) $(RESFLAGS) /Fo"$@" curl.rc\r
+\r
+clean:\r
+       @-erase $(PROGRAM_NAME) 2> NUL\r
+       @-erase $(RELEASE_OBJS) 2> NUL\r
+       @-erase $(DEBUG_OBJS) 2> NUL\r
+       @-erase *.idb 2> NUL\r
+       @-erase *.pdb 2> NUL\r
+       @-erase *.pch 2> NUL\r
+       @-erase *.ilk 2> NUL\r
index 7243799..004d784 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
@@ -56,7 +56,7 @@ PROGRAM_NAME = curl.exe
 \r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH = ../../openssl-0.9.8zc\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -77,7 +77,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -95,7 +95,7 @@ ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"
 ZLIB_LIBS      = zlib.lib\r
 ZLIB_IMP_LIBS  = zdll.lib\r
 \r
-SSL_CFLAGS     = /DUSE_SSLEAY\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
 SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
 SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
 SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
@@ -145,6 +145,7 @@ RELEASE_OBJS= \
        rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
+       slist_wc.obj \\r
        tool_binmoder.obj \\r
        tool_bnamer.obj \\r
        tool_cb_dbgr.obj \\r
@@ -190,6 +191,7 @@ DEBUG_OBJS= \
        rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
+       slist_wc.obj \\r
        tool_binmoded.obj \\r
        tool_bnamed.obj \\r
        tool_cb_dbgd.obj \\r
@@ -367,6 +369,8 @@ strtoofftr.obj: ../lib/strtoofft.c
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnless.obj: ../lib/warnless.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoder.obj: tool_binmode.c\r
        $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamer.obj: tool_bname.c\r
@@ -455,6 +459,8 @@ strtoofftd.obj: ../lib/strtoofft.c
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnlessd.obj: ../lib/warnless.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoded.obj: tool_binmode.c\r
        $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamed.obj: tool_bname.c\r
index 9d60e63..e2e2a71 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
@@ -56,7 +56,7 @@ PROGRAM_NAME = curl.exe
 \r
 \r
 !IFNDEF OPENSSL_PATH\r
-OPENSSL_PATH = ../../openssl-0.9.8zc\r
+OPENSSL_PATH = ../../openssl-1.0.2a\r
 !ENDIF\r
 \r
 !IFNDEF ZLIB_PATH\r
@@ -77,7 +77,7 @@ MACHINE  = X86
 # If, for some reason the Windows SDK is installed but not installed\r
 # in the default location, you can specify WINDOWS_SDK_PATH.\r
 # It can be downloaded from:\r
-# http://www.microsoft.com/msdownload/platformsdk/sdkupdate/\r
+# https://msdn.microsoft.com/windows/bb980924.aspx\r
 \r
 # WINDOWS_SSPI = 1\r
 \r
@@ -95,7 +95,7 @@ ZLIB_LFLAGS    = "/LIBPATH:$(ZLIB_PATH)"
 ZLIB_LIBS      = zlib.lib\r
 ZLIB_IMP_LIBS  = zdll.lib\r
 \r
-SSL_CFLAGS     = /DUSE_SSLEAY\r
+SSL_CFLAGS     = /DUSE_OPENSSL\r
 SSL_LFLAGS     = /LIBPATH:"$(OPENSSL_PATH)/out32"\r
 SSL_IMP_LFLAGS = /LIBPATH:"$(OPENSSL_PATH)/out32dll"\r
 SSL_LIBS       = libeay32.lib ssleay32.lib gdi32.lib user32.lib\r
@@ -145,6 +145,7 @@ RELEASE_OBJS= \
        rawstrr.obj \\r
        strtoofftr.obj \\r
        warnless.obj \\r
+       slist_wc.obj \\r
        tool_binmoder.obj \\r
        tool_bnamer.obj \\r
        tool_cb_dbgr.obj \\r
@@ -190,6 +191,7 @@ DEBUG_OBJS= \
        rawstrd.obj \\r
        strtoofftd.obj \\r
        warnlessd.obj \\r
+       slist_wc.obj \\r
        tool_binmoded.obj \\r
        tool_bnamed.obj \\r
        tool_cb_dbgd.obj \\r
@@ -367,6 +369,8 @@ strtoofftr.obj: ../lib/strtoofft.c
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnless.obj: ../lib/warnless.c\r
        $(CCR) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoder.obj: tool_binmode.c\r
        $(CCR) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamer.obj: tool_bname.c\r
@@ -455,6 +459,8 @@ strtoofftd.obj: ../lib/strtoofft.c
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/strtoofft.c\r
 warnlessd.obj: ../lib/warnless.c\r
        $(CCD) $(CFLAGS) /Fo"$@" ../lib/warnless.c\r
+slist_wc.obj: slist_wc.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" slist_wc.c\r
 tool_binmoded.obj: tool_binmode.c\r
        $(CCD) $(CFLAGS) /Fo"$@" tool_binmode.c\r
 tool_bnamed.obj: tool_bname.c\r
diff --git a/src/checksrc.whitelist b/src/checksrc.whitelist
new file mode 100644 (file)
index 0000000..b078ac1
--- /dev/null
@@ -0,0 +1,3 @@
+ * 'name=@filename,filename2,filename3'
+ * 'name=@filename;type=image/gif,filename2,filename3'
+  file = fopen(name, "r"); /* VMS */
index 3db59bd..30ae444 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -44,7 +44,7 @@ BEGIN
   BEGIN
     BLOCK "040904b0"
     BEGIN
-      VALUE "CompanyName",      "cURL, http://curl.haxx.se/\0"
+      VALUE "CompanyName",      "cURL, https://curl.haxx.se/\0"
       VALUE "FileDescription",  "The cURL executable\0"
       VALUE "FileVersion",      CURL_VERSION "\0"
       VALUE "InternalName",     "curl\0"
@@ -52,7 +52,7 @@ BEGIN
       VALUE "ProductName",      "The cURL executable\0"
       VALUE "ProductVersion",   CURL_VERSION "\0"
       VALUE "LegalCopyright",   "© " CURL_COPYRIGHT "\0"
-      VALUE "License",          "http://curl.haxx.se/docs/copyright.html\0"
+      VALUE "License",          "https://curl.haxx.se/docs/copyright.html\0"
     END
   END
 
index d342859..6a6c8f9 100644 (file)
@@ -1,6 +1,28 @@
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
 #
-#  Adapted for djgpp2 / Watt-32 / DOS by
-#  Gisle Vanem <gvanem@broadpark.no>
+# Copyright (C) 2003 - 2007, Gisle Vanem <gvanem@yahoo.no>.
+# Copyright (C) 2003 - 2015, 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 https://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.
+#
+#***************************************************************************
+
+#
+#  Adapted for djgpp2 / Watt-32 / DOS
 #
 
 DEPEND_PREREQ = # tool_hugehelp.c
index 7ed86f7..74a4b82 100644 (file)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
@@ -54,6 +54,9 @@ while (<STDIN>) {
     # this should be removed:
     $line =~ s/(\b.|_\b)//g;
 
+    # remove trailing CR from line. msysgit checks out files as line+CRLF
+    $line =~ s/\r$//;
+
     if($line =~ /^([ \t]*\n|curl)/i) {
         # cut off headers and empty lines
         $wline++; # count number of cut off lines
@@ -90,7 +93,12 @@ open(READ, "<$README") ||
     die "couldn't read the README infile $README";
 
 while(<READ>) {
-    push @out, $_;
+    my $line = $_;
+
+    # remove trailing CR from line. msysgit checks out files as line+CRLF
+    $line =~ s/\r$//;
+
+    push @out, $line;
 }
 close(READ);
 
diff --git a/src/slist_wc.c b/src/slist_wc.c
new file mode 100644 (file)
index 0000000..5233b1b
--- /dev/null
@@ -0,0 +1,72 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 "tool_setup.h"
+
+#ifndef CURL_DISABLE_LIBCURL_OPTION
+
+#include "slist_wc.h"
+
+/* The last #include files should be: */
+#include "memdebug.h"
+
+/*
+ * slist_wc_append() appends a string to the linked list. This function can be
+ * used as an initialization function as well as an append function.
+ */
+struct slist_wc *slist_wc_append(struct slist_wc *list,
+                                 const char *data)
+{
+  struct curl_slist *new_item = curl_slist_append(NULL, data);
+
+  if(!new_item)
+    return NULL;
+
+  if(!list) {
+    list = malloc(sizeof(struct slist_wc));
+
+    if(!list) {
+      curl_slist_free_all(new_item);
+      return NULL;
+    }
+
+    list->first = new_item;
+    list->last = new_item;
+    return list;
+  }
+
+  list->last->next = new_item;
+  list->last = list->last->next;
+  return list;
+}
+
+/* be nice and clean up resources */
+void slist_wc_free_all(struct slist_wc *list)
+{
+  if(!list)
+    return;
+
+  curl_slist_free_all(list->first);
+  free(list);
+}
+
+#endif /* CURL_DISABLE_LIBCURL_OPTION */
diff --git a/src/slist_wc.h b/src/slist_wc.h
new file mode 100644 (file)
index 0000000..d894312
--- /dev/null
@@ -0,0 +1,56 @@
+#ifndef HEADER_CURL_SLIST_WC_H
+#define HEADER_CURL_SLIST_WC_H
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 "tool_setup.h"
+#ifndef CURL_DISABLE_LIBCURL_OPTION
+
+/* linked-list structure with last node cache for easysrc */
+struct slist_wc {
+  struct curl_slist *first;
+  struct curl_slist *last;
+};
+
+/*
+ * NAME curl_slist_wc_append()
+ *
+ * DESCRIPTION
+ *
+ * Appends a string to a linked list. If no list exists, it will be created
+ * first. Returns the new list, after appending.
+ */
+struct slist_wc *slist_wc_append(struct slist_wc *, const char *);
+
+/*
+ * NAME curl_slist_free_all()
+ *
+ * DESCRIPTION
+ *
+ * free a previously built curl_slist_wc.
+ */
+void slist_wc_free_all(struct slist_wc *);
+
+#endif /* CURL_DISABLE_LIBCURL_OPTION */
+
+#endif /* HEADER_CURL_SLIST_WC_H */
+
index 5495ba4..5ca64cd 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index b5cb08d..8b445ae 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2778305..5cc5c15 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 69cf92c..61b97b4 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 4add67c..97a5c92 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -79,7 +79,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
       /* Ok, this is somewhat hackish but we do it undocumented for now */
       config->trace_stream = config->errors;  /* aka stderr */
     else {
-      config->trace_stream = fopen(config->trace_dump, "w");
+      config->trace_stream = fopen(config->trace_dump, FOPEN_WRITETEXT);
       config->trace_fopened = TRUE;
     }
   }
@@ -88,7 +88,7 @@ int tool_debug_cb(CURL *handle, curl_infotype type,
     output = config->trace_stream;
 
   if(!output) {
-    warnf(operation, "Failed to create/open output");
+    warnf(config, "Failed to create/open output");
     return 0;
   }
 
index d0ed7b0..7ac15cf 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index ef340f7..5be02aa 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -28,6 +28,7 @@
 #include "curlx.h"
 
 #include "tool_cfgable.h"
+#include "tool_doswin.h"
 #include "tool_msgs.h"
 #include "tool_cb_hdr.h"
 
@@ -61,7 +62,8 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
 
 #ifdef DEBUGBUILD
   if(size * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
-    warnf(heads->config, "Header data exceeds single call write limit!\n");
+    warnf(heads->config->global, "Header data exceeds single call write "
+          "limit!\n");
     return failure;
   }
 #endif
@@ -74,6 +76,8 @@ size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
     size_t rc = fwrite(ptr, size, nmemb, heads->stream);
     if(rc != cb)
       return rc;
+    /* flush the stream to send off what we got earlier */
+    (void)fflush(heads->stream);
   }
 
   /*
@@ -178,15 +182,12 @@ static char *parse_filename(const char *ptr, size_t len)
   }
 
   /* scan for the end letter and stop there */
-  q = p;
-  while(*q) {
-    if(q[1] && (q[0] == '\\'))
-      q++;
-    else if(q[0] == stop)
+  for(q = p; *q; ++q) {
+    if(*q == stop) {
+      *q = '\0';
       break;
-    q++;
+    }
   }
-  *q = '\0';
 
   /* make sure the file name doesn't end in \r or \n */
   q = strchr(p, '\r');
@@ -200,6 +201,17 @@ static char *parse_filename(const char *ptr, size_t len)
   if(copy != p)
     memmove(copy, p, strlen(p) + 1);
 
+#if defined(MSDOS) || defined(WIN32)
+  {
+    char *sanitized;
+    SANITIZEcode sc = sanitize_file_name(&sanitized, copy, 0);
+    Curl_safefree(copy);
+    if(sc)
+      return NULL;
+    copy = sanitized;
+  }
+#endif /* MSDOS || WIN32 */
+
   /* in case we built debug enabled, we allow an evironment variable
    * named CURL_TESTDIR to prefix the given file name to put it into a
    * specific directory
index bd50431..bb54bbb 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 9e3c5fb..eae80fe 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index c635be8..d62b4a0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 4565a15..88137ae 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4294166..5fbc793 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2f49e1d..621d440 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index ceb22d6..b07741d 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index dfbf95c..0413457 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 #include "memdebug.h" /* keep this as LAST include */
 
+/* create a local file for writing, return TRUE on success */
+bool tool_create_output_file(struct OutStruct *outs)
+{
+  struct GlobalConfig *global = outs->config->global;
+  FILE *file;
+
+  if(!outs->filename || !*outs->filename) {
+    warnf(global, "Remote filename has no length!\n");
+    return FALSE;
+  }
+
+  if(outs->is_cd_filename) {
+    /* don't overwrite existing files */
+    file = fopen(outs->filename, "rb");
+    if(file) {
+      fclose(file);
+      warnf(global, "Refusing to overwrite %s: %s\n", outs->filename,
+            strerror(EEXIST));
+      return FALSE;
+    }
+  }
+
+  /* open file for writing */
+  file = fopen(outs->filename, "wb");
+  if(!file) {
+    warnf(global, "Failed to create the file %s: %s\n", outs->filename,
+          strerror(errno));
+    return FALSE;
+  }
+  outs->s_isreg = TRUE;
+  outs->fopened = TRUE;
+  outs->stream = file;
+  outs->bytes = 0;
+  outs->init = 0;
+  return TRUE;
+}
+
 /*
 ** callback for CURLOPT_WRITEFUNCTION
 */
@@ -55,13 +92,14 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
 #ifdef DEBUGBUILD
   if(config->include_headers) {
     if(sz * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
-      warnf(config, "Header data size exceeds single call write limit!\n");
+      warnf(config->global, "Header data size exceeds single call write "
+            "limit!\n");
       return failure;
     }
   }
   else {
     if(sz * nmemb > (size_t)CURL_MAX_WRITE_SIZE) {
-      warnf(config, "Data size exceeds single call write limit!\n");
+      warnf(config->global, "Data size exceeds single call write limit!\n");
       return failure;
     }
   }
@@ -90,44 +128,14 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
         check_fails = TRUE;
     }
     if(check_fails) {
-      warnf(config, "Invalid output struct data for write callback\n");
+      warnf(config->global, "Invalid output struct data for write callback\n");
       return failure;
     }
   }
 #endif
 
-  if(!outs->stream) {
-    FILE *file;
-
-    if(!outs->filename || !*outs->filename) {
-      warnf(config, "Remote filename has no length!\n");
-      return failure;
-    }
-
-    if(outs->is_cd_filename) {
-      /* don't overwrite existing files */
-      file = fopen(outs->filename, "rb");
-      if(file) {
-        fclose(file);
-        warnf(config, "Refusing to overwrite %s: %s\n", outs->filename,
-              strerror(EEXIST));
-        return failure;
-      }
-    }
-
-    /* open file for writing */
-    file = fopen(outs->filename, "wb");
-    if(!file) {
-      warnf(config, "Failed to create the file %s: %s\n", outs->filename,
-            strerror(errno));
-      return failure;
-    }
-    outs->s_isreg = TRUE;
-    outs->fopened = TRUE;
-    outs->stream = file;
-    outs->bytes = 0;
-    outs->init = 0;
-  }
+  if(!outs->stream && !tool_create_output_file(outs))
+    return failure;
 
   rc = fwrite(buffer, sz, nmemb, outs->stream);
 
@@ -149,4 +157,3 @@ size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
 
   return rc;
 }
-
index 380d8dd..fc60be0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -29,5 +29,8 @@
 
 size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata);
 
+/* create a local file for writing, return TRUE on success */
+bool tool_create_output_file(struct OutStruct *outs);
+
 #endif /* HEADER_CURL_TOOL_CB_WRT_H */
 
index c9ee417..6c2aced 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -40,6 +40,7 @@ void config_init(struct OperationConfig* config)
                         ~(CURLPROTO_FILE | CURLPROTO_SCP | CURLPROTO_SMB |
                           CURLPROTO_SMBS);
   config->proto_redir_present = FALSE;
+  config->proto_default = NULL;
 }
 
 static void free_config_fields(struct OperationConfig *config)
@@ -113,10 +114,11 @@ static void free_config_fields(struct OperationConfig *config)
   Curl_safefree(config->customrequest);
   Curl_safefree(config->krblevel);
 
-  Curl_safefree(config->xoauth2_bearer);
+  Curl_safefree(config->oauth_bearer);
 
   Curl_safefree(config->unix_socket_path);
   Curl_safefree(config->writeout);
+  Curl_safefree(config->proto_default);
 
   curl_slist_free_all(config->quote);
   curl_slist_free_all(config->postquote);
@@ -136,6 +138,8 @@ static void free_config_fields(struct OperationConfig *config)
 
   Curl_safefree(config->socksproxy);
   Curl_safefree(config->socks5_gssapi_service);
+  Curl_safefree(config->proxy_service_name);
+  Curl_safefree(config->service_name);
 
   Curl_safefree(config->ftp_account);
   Curl_safefree(config->ftp_alternative_to_user);
index cf8d563..fb6c7ae 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -51,6 +51,7 @@ struct OperationConfig {
   bool proto_present;
   long proto_redir;
   bool proto_redir_present;
+  char *proto_default;
   curl_off_t resume_from;
   char *postfields;
   curl_off_t postfieldsize;
@@ -126,6 +127,7 @@ struct OperationConfig {
   bool globoff;
   bool use_httpget;
   bool insecure_ok;         /* set TRUE to allow insecure SSL connects */
+  bool verifystatus;
   bool create_dirs;
   bool ftp_create_dirs;
   bool ftp_skip_ip;
@@ -165,8 +167,12 @@ struct OperationConfig {
   int socksver;             /* set to CURLPROXY_SOCKS* define */
   char *socks5_gssapi_service;  /* set service name for gssapi principal
                                  * default rcmd */
+  char *proxy_service_name; /* set service name for proxy negotiation
+                             * default HTTP */
   int socks5_gssapi_nec ;   /* The NEC reference server does not protect
                              * the encryption type exchange */
+  char *service_name;       /* set negotiation service name
+                             * default HTTP */
 
   bool tcp_nodelay;
   long req_retry;           /* number of retries */
@@ -177,6 +183,7 @@ struct OperationConfig {
   char *ftp_alternative_to_user;  /* send command if USER/PASS fails */
   int ftp_filemethod;
   long tftp_blksize;        /* TFTP BLKSIZE option */
+  bool tftp_no_options;     /* do not send TFTP options requests */
   bool ignorecl;            /* --ignore-content-length */
   bool disable_sessionid;
 
@@ -194,6 +201,7 @@ struct OperationConfig {
   bool xattr;               /* store metadata in extended attributes */
   long gssapi_delegation;
   bool ssl_allow_beast;     /* allow this SSL vulnerability */
+  bool ssl_no_revoke;       /* disable SSL certificate revocation checks */
 
   bool use_metalink;        /* process given URLs as metalink XML file */
   metalinkfile *metalinkfile_list; /* point to the first node */
@@ -201,11 +209,13 @@ struct OperationConfig {
 #ifdef CURLDEBUG
   bool test_event_based;
 #endif
-  char *xoauth2_bearer;           /* XOAUTH2 bearer token */
+  char *oauth_bearer;             /* OAuth 2.0 bearer token */
   bool nonpn;                     /* enable/disable TLS NPN extension */
   bool noalpn;                    /* enable/disable TLS ALPN extension */
   char *unix_socket_path;         /* path to Unix domain socket */
-
+  bool falsestart;
+  bool path_as_is;
+  double expect100timeout;
   struct GlobalConfig *global;
   struct OperationConfig *prev;
   struct OperationConfig *next;   /* Always last in the struct */
index ecce036..d0f5dcb 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 32d473f..d1b1d23 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 5965f7a..b65db41 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -129,7 +129,7 @@ CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
           snprintf(dirbuildup, outlen, "%s%s", DIR_CHAR, tempdir);
       }
       if(access(dirbuildup, F_OK) == -1) {
-        if(-1 == mkdir(dirbuildup,(mode_t)0000750)) {
+        if(-1 == mkdir(dirbuildup, (mode_t)0000750)) {
           show_dir_errno(errors, dirbuildup);
           result = CURLE_WRITE_ERROR;
           break; /* get out of loop */
index 5f19575..cc67687 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index dd6e8bb..aed657a 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -85,44 +85,259 @@ __pragma(warning(pop))
 #  include <fcntl.h>                /* _use_lfn(f) prototype */
 #endif
 
-static const char *msdosify (const char *file_name);
-static char *rename_if_dos_device_name (char *file_name);
+#ifndef UNITTESTS
+static SANITIZEcode truncate_dryrun(const char *path,
+                                    const size_t truncate_pos);
+#ifdef MSDOS
+static SANITIZEcode msdosify(char **const sanitized, const char *file_name,
+                             int flags);
+#endif
+static SANITIZEcode rename_if_reserved_dos_device_name(char **const sanitized,
+                                                       const char *file_name,
+                                                       int flags);
+#endif /* !UNITTESTS (static declarations used if no unit tests) */
 
-/*
- * sanitize_dos_name: returns a newly allocated string holding a
- * valid file name which will be a transformation of given argument
- * in case this wasn't already a valid file name.
- *
- * This function takes ownership of given argument, free'ing it before
- * returning. Caller is responsible of free'ing returned string. Upon
- * out of memory condition function returns NULL.
- */
 
-char *sanitize_dos_name(char *file_name)
+/*
+Sanitize a file or path name.
+
+All banned characters are replaced by underscores, for example:
+f?*foo => f__foo
+f:foo::$DATA => f_foo__$DATA
+f:\foo:bar => f__foo_bar
+f:\foo:bar => f:\foo:bar   (flag SANITIZE_ALLOW_PATH)
+
+This function was implemented according to the guidelines in 'Naming Files,
+Paths, and Namespaces' section 'Naming Conventions'.
+https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx
+
+Flags
+-----
+SANITIZE_ALLOW_COLONS:     Allow colons.
+Without this flag colons are sanitized.
+
+SANITIZE_ALLOW_PATH:       Allow path separators and colons.
+Without this flag path separators and colons are sanitized.
+
+SANITIZE_ALLOW_RESERVED:   Allow reserved device names.
+Without this flag a reserved device name is renamed (COM1 => _COM1) unless it's
+in a UNC prefixed path.
+
+SANITIZE_ALLOW_TRUNCATE:   Allow truncating a long filename.
+Without this flag if the sanitized filename or path will be too long an error
+occurs. With this flag the filename --and not any other parts of the path-- may
+be truncated to at least a single character. A filename followed by an
+alternate data stream (ADS) cannot be truncated in any case.
+
+Success: (SANITIZE_ERR_OK) *sanitized points to a sanitized copy of file_name.
+Failure: (!= SANITIZE_ERR_OK) *sanitized is NULL.
+*/
+SANITIZEcode sanitize_file_name(char **const sanitized, const char *file_name,
+                                int flags)
 {
-  char new_name[PATH_MAX];
+  char *p, *target;
+  size_t len;
+  SANITIZEcode sc;
+  size_t max_sanitized_len;
+
+  if(!sanitized)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  *sanitized = NULL;
 
   if(!file_name)
-    return NULL;
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  if((flags & SANITIZE_ALLOW_PATH)) {
+#ifndef MSDOS
+    if(file_name[0] == '\\' && file_name[1] == '\\')
+      /* UNC prefixed path \\ (eg \\?\C:\foo) */
+      max_sanitized_len = 32767-1;
+    else
+#endif
+      max_sanitized_len = PATH_MAX-1;
+  }
+  else
+    /* The maximum length of a filename.
+       FILENAME_MAX is often the same as PATH_MAX, in other words it is 260 and
+       does not discount the path information therefore we shouldn't use it. */
+    max_sanitized_len = (PATH_MAX-1 > 255) ? 255 : PATH_MAX-1;
+
+  len = strlen(file_name);
+  if(len > max_sanitized_len) {
+    if(!(flags & SANITIZE_ALLOW_TRUNCATE) ||
+       truncate_dryrun(file_name, max_sanitized_len))
+      return SANITIZE_ERR_INVALID_PATH;
+
+    len = max_sanitized_len;
+  }
+
+  target = malloc(len + 1);
+  if(!target)
+    return SANITIZE_ERR_OUT_OF_MEMORY;
+
+  strncpy(target, file_name, len);
+  target[len] = '\0';
+
+#ifndef MSDOS
+  if((flags & SANITIZE_ALLOW_PATH) && !strncmp(target, "\\\\?\\", 4))
+    /* Skip the literal path prefix \\?\ */
+    p = target + 4;
+  else
+#endif
+    p = target;
+
+  /* replace control characters and other banned characters */
+  for(; *p; ++p) {
+    const char *banned;
+
+    if((1 <= *p && *p <= 31) ||
+       (!(flags & (SANITIZE_ALLOW_COLONS|SANITIZE_ALLOW_PATH)) && *p == ':') ||
+       (!(flags & SANITIZE_ALLOW_PATH) && (*p == '/' || *p == '\\'))) {
+      *p = '_';
+      continue;
+    }
+
+    for(banned = "|<>\"?*"; *banned; ++banned) {
+      if(*p == *banned) {
+        *p = '_';
+        break;
+      }
+    }
+  }
 
-  if(strlen(file_name) >= PATH_MAX)
-    file_name[PATH_MAX-1] = '\0'; /* truncate it */
+  /* remove trailing spaces and periods if not allowing paths */
+  if(!(flags & SANITIZE_ALLOW_PATH) && len) {
+    char *clip = NULL;
+
+    p = &target[len];
+    do {
+      --p;
+      if(*p != ' ' && *p != '.')
+        break;
+      clip = p;
+    } while(p != target);
+
+    if(clip) {
+      *clip = '\0';
+      len = clip - target;
+    }
+  }
 
-  strcpy(new_name, msdosify(file_name));
+#ifdef MSDOS
+  sc = msdosify(&p, target, flags);
+  free(target);
+  if(sc)
+    return sc;
+  target = p;
+  len = strlen(target);
+
+  if(len > max_sanitized_len) {
+    free(target);
+    return SANITIZE_ERR_INVALID_PATH;
+  }
+#endif
 
-  Curl_safefree(file_name);
+  if(!(flags & SANITIZE_ALLOW_RESERVED)) {
+    sc = rename_if_reserved_dos_device_name(&p, target, flags);
+    free(target);
+    if(sc)
+      return sc;
+    target = p;
+    len = strlen(target);
+
+    if(len > max_sanitized_len) {
+      free(target);
+      return SANITIZE_ERR_INVALID_PATH;
+    }
+  }
 
-  return strdup(rename_if_dos_device_name(new_name));
+  *sanitized = target;
+  return SANITIZE_ERR_OK;
 }
 
-/* The following functions are taken with modification from the DJGPP
- * port of tar 1.12. They use algorithms originally from DJTAR. */
 
-static const char *msdosify (const char *file_name)
+/*
+Test if truncating a path to a file will leave at least a single character in
+the filename. Filenames suffixed by an alternate data stream can't be
+truncated. This performs a dry run, nothing is modified.
+
+Good truncate_pos 9:    C:\foo\bar  =>  C:\foo\ba
+Good truncate_pos 6:    C:\foo      =>  C:\foo
+Good truncate_pos 5:    C:\foo      =>  C:\fo
+Bad* truncate_pos 5:    C:foo       =>  C:foo
+Bad truncate_pos 5:     C:\foo:ads  =>  C:\fo
+Bad truncate_pos 9:     C:\foo:ads  =>  C:\foo:ad
+Bad truncate_pos 5:     C:\foo\bar  =>  C:\fo
+Bad truncate_pos 5:     C:\foo\     =>  C:\fo
+Bad truncate_pos 7:     C:\foo\     =>  C:\foo\
+Error truncate_pos 7:   C:\foo      =>  (pos out of range)
+Bad truncate_pos 1:     C:\foo\     =>  C
+
+* C:foo is ambiguous, C could end up being a drive or file therefore something
+  like C:superlongfilename can't be truncated.
+
+Returns
+SANITIZE_ERR_OK: Good -- 'path' can be truncated
+SANITIZE_ERR_INVALID_PATH: Bad -- 'path' cannot be truncated
+!= SANITIZE_ERR_OK && != SANITIZE_ERR_INVALID_PATH: Error
+*/
+SANITIZEcode truncate_dryrun(const char *path, const size_t truncate_pos)
 {
-  static char dos_name[PATH_MAX];
+  size_t len;
+
+  if(!path)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  len = strlen(path);
+
+  if(truncate_pos > len)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  if(!len || !truncate_pos)
+    return SANITIZE_ERR_INVALID_PATH;
+
+  if(strpbrk(&path[truncate_pos - 1], "\\/:"))
+    return SANITIZE_ERR_INVALID_PATH;
+
+  /* C:\foo can be truncated but C:\foo:ads can't */
+  if(truncate_pos > 1) {
+    const char *p = &path[truncate_pos - 1];
+    do {
+      --p;
+      if(*p == ':')
+        return SANITIZE_ERR_INVALID_PATH;
+    } while(p != path && *p != '\\' && *p != '/');
+  }
+
+  return SANITIZE_ERR_OK;
+}
+
+/* The functions msdosify, rename_if_dos_device_name and __crt0_glob_function
+ * were taken with modification from the DJGPP port of tar 1.12. They use
+ * algorithms originally from DJTAR.
+ */
+
+/*
+Extra sanitization MSDOS for file_name.
+
+This is a supporting function for sanitize_file_name.
+
+Warning: This is an MSDOS legacy function and was purposely written in a way
+that some path information may pass through. For example drive letter names
+(C:, D:, etc) are allowed to pass through. For sanitizing a filename use
+sanitize_file_name.
+
+Success: (SANITIZE_ERR_OK) *sanitized points to a sanitized copy of file_name.
+Failure: (!= SANITIZE_ERR_OK) *sanitized is NULL.
+*/
+#if defined(MSDOS) || defined(UNITTESTS)
+SANITIZEcode msdosify(char **const sanitized, const char *file_name,
+                      int flags)
+{
+  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;
@@ -131,6 +346,19 @@ static const char *msdosify (const char *file_name)
   const char *illegal_aliens = illegal_chars_dos;
   size_t len = sizeof(illegal_chars_dos) - 1;
 
+  if(!sanitized)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  *sanitized = NULL;
+
+  if(!file_name)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  if(strlen(file_name) > PATH_MAX-1 &&
+     (!(flags & SANITIZE_ALLOW_TRUNCATE) ||
+      truncate_dryrun(file_name, PATH_MAX-1)))
+    return SANITIZE_ERR_INVALID_PATH;
+
   /* Support for Windows 9X VFAT systems, when available. */
   if(_use_lfn(file_name)) {
     illegal_aliens = illegal_chars_w95;
@@ -140,22 +368,35 @@ static const char *msdosify (const char *file_name)
   /* Get past the drive letter, if any. */
   if(s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') {
     *d++ = *s++;
-    *d++ = *s++;
+    *d = ((flags & (SANITIZE_ALLOW_COLONS|SANITIZE_ALLOW_PATH))) ? ':' : '_';
+    ++d, ++s;
   }
 
   for(idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) {
     if(memchr(illegal_aliens, *s, len)) {
+
+      if((flags & (SANITIZE_ALLOW_COLONS|SANITIZE_ALLOW_PATH)) && *s == ':')
+        *d = ':';
+      else if((flags & SANITIZE_ALLOW_PATH) && (*s == '/' || *s == '\\'))
+        *d = *s;
       /* 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] == '/'))) {
+      else if(*s == '.') {
+        if((flags & SANITIZE_ALLOW_PATH) && idx == 0 &&
+           (s[1] == '/' || s[1] == '\\' ||
+            (s[1] == '.' && (s[2] == '/' || s[2] == '\\')))) {
           /* Copy "./" and "../" verbatim.  */
           *d++ = *s++;
-          if(*s == '.')
+          if(d == dlimit)
+            break;
+          if(*s == '.') {
             *d++ = *s++;
+            if(d == dlimit)
+              break;
+          }
           *d = *s;
         }
         else if(idx == 0)
@@ -177,12 +418,22 @@ static const char *msdosify (const char *file_name)
       else if(*s == '+' && s[1] == '+') {
         if(idx - 2 == dot_idx) { /* .c++, .h++ etc. */
           *d++ = 'x';
+          if(d == dlimit)
+            break;
           *d   = 'x';
         }
         else {
           /* libg++ etc.  */
-          memcpy (d, "plus", 4);
-          d += 3;
+          if(dlimit - d < 4) {
+            *d++ = 'x';
+            if(d == dlimit)
+              break;
+            *d   = 'x';
+          }
+          else {
+            memcpy (d, "plus", 4);
+            d += 3;
+          }
         }
         s++;
         idx++;
@@ -192,44 +443,168 @@ static const char *msdosify (const char *file_name)
     }
     else
       *d = *s;
-    if(*s == '/') {
+    if(*s == '/' || *s == '\\') {
       idx = 0;
       dot_idx = -1;
     }
     else
       idx++;
   }
-
   *d = '\0';
-  return dos_name;
+
+  if(*s) {
+    /* dos_name is truncated, check that truncation requirements are met,
+       specifically truncating a filename suffixed by an alternate data stream
+       or truncating the entire filename is not allowed. */
+    if(!(flags & SANITIZE_ALLOW_TRUNCATE) || strpbrk(s, "\\/:") ||
+       truncate_dryrun(dos_name, d - dos_name))
+      return SANITIZE_ERR_INVALID_PATH;
+  }
+
+  *sanitized = strdup(dos_name);
+  return (*sanitized ? SANITIZE_ERR_OK : SANITIZE_ERR_OUT_OF_MEMORY);
 }
+#endif /* MSDOS || UNITTESTS */
 
-static char *rename_if_dos_device_name (char *file_name)
+/*
+Rename file_name if it's a reserved dos device name.
+
+This is a supporting function for sanitize_file_name.
+
+Warning: This is an MSDOS legacy function and was purposely written in a way
+that some path information may pass through. For example drive letter names
+(C:, D:, etc) are allowed to pass through. For sanitizing a filename use
+sanitize_file_name.
+
+Success: (SANITIZE_ERR_OK) *sanitized points to a sanitized copy of file_name.
+Failure: (!= SANITIZE_ERR_OK) *sanitized is NULL.
+*/
+SANITIZEcode rename_if_reserved_dos_device_name(char **const sanitized,
+                                                const char *file_name,
+                                                int flags)
 {
   /* We could have a file whose name is a device on MS-DOS.  Trying to
    * retrieve such a file would fail at best and wedge us at worst.  We need
    * to rename such files. */
-  char *base;
-  struct_stat st_buf;
+  char *p, *base;
   char fname[PATH_MAX];
+#ifdef MSDOS
+  struct_stat st_buf;
+#endif
+
+  if(!sanitized)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  *sanitized = NULL;
+
+  if(!file_name)
+    return SANITIZE_ERR_BAD_ARGUMENT;
+
+  /* Ignore UNC prefixed paths, they are allowed to contain a reserved name. */
+#ifndef MSDOS
+  if((flags & SANITIZE_ALLOW_PATH) &&
+     file_name[0] == '\\' && file_name[1] == '\\') {
+    size_t len = strlen(file_name);
+    *sanitized = malloc(len + 1);
+    if(!*sanitized)
+      return SANITIZE_ERR_OUT_OF_MEMORY;
+    strncpy(*sanitized, file_name, len + 1);
+    return SANITIZE_ERR_OK;
+  }
+#endif
+
+  if(strlen(file_name) > PATH_MAX-1 &&
+     (!(flags & SANITIZE_ALLOW_TRUNCATE) ||
+      truncate_dryrun(file_name, PATH_MAX-1)))
+    return SANITIZE_ERR_INVALID_PATH;
 
   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))) {
-    size_t blen = strlen(base);
 
-    if(strlen(fname) >= PATH_MAX-1) {
-      /* Make room for the '_' */
-      blen--;
-      base[blen] = '\0';
+  /* Rename reserved device names that are known to be accessible without \\.\
+     Examples: CON => _CON, CON.EXT => CON_EXT, CON:ADS => CON_ADS
+     https://support.microsoft.com/en-us/kb/74496
+     https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx
+     */
+  for(p = fname; p; p = (p == fname && fname != base ? base : NULL)) {
+    size_t p_len;
+    int x = (curl_strnequal(p, "CON", 3) ||
+             curl_strnequal(p, "PRN", 3) ||
+             curl_strnequal(p, "AUX", 3) ||
+             curl_strnequal(p, "NUL", 3)) ? 3 :
+            (curl_strnequal(p, "CLOCK$", 6)) ? 6 :
+            (curl_strnequal(p, "COM", 3) || curl_strnequal(p, "LPT", 3)) ?
+              (('1' <= p[3] && p[3] <= '9') ? 4 : 3) : 0;
+
+    if(!x)
+      continue;
+
+    /* the devices may be accessible with an extension or ADS, for
+       example CON.AIR and 'CON . AIR' and CON:AIR access console */
+
+    for(; p[x] == ' '; ++x)
+      ;
+
+    if(p[x] == '.') {
+      p[x] = '_';
+      continue;
+    }
+    else if(p[x] == ':') {
+      if(!(flags & (SANITIZE_ALLOW_COLONS|SANITIZE_ALLOW_PATH))) {
+        p[x] = '_';
+        continue;
+      }
+      ++x;
+    }
+    else if(p[x]) /* no match */
+      continue;
+
+    /* p points to 'CON' or 'CON ' or 'CON:', etc */
+    p_len = strlen(p);
+
+    /* Prepend a '_' */
+    if(strlen(fname) == PATH_MAX-1) {
+      --p_len;
+      if(!(flags & SANITIZE_ALLOW_TRUNCATE) || truncate_dryrun(p, p_len))
+        return SANITIZE_ERR_INVALID_PATH;
+      p[p_len] = '\0';
+    }
+    memmove(p + 1, p, p_len + 1);
+    p[0] = '_';
+    ++p_len;
+
+    /* if fname was just modified then the basename pointer must be updated */
+    if(p == fname)
+      base = basename(fname);
+  }
+
+  /* This is the legacy portion from rename_if_dos_device_name that checks for
+     reserved device names. It only works on MSDOS. On Windows XP the stat
+     check errors with EINVAL if the device name is reserved. On Windows
+     Vista/7/8 it sets mode S_IFREG (regular file or device). According to MSDN
+     stat doc the latter behavior is correct, but that doesn't help us identify
+     whether it's a reserved device name and not a regular file name. */
+#ifdef MSDOS
+  if(base && ((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) {
+    /* Prepend a '_' */
+    size_t blen = strlen(base);
+    if(blen) {
+      if(strlen(fname) == PATH_MAX-1) {
+        --blen;
+        if(!(flags & SANITIZE_ALLOW_TRUNCATE) || truncate_dryrun(base, blen))
+          return SANITIZE_ERR_INVALID_PATH;
+        base[blen] = '\0';
+      }
+      memmove(base + 1, base, blen + 1);
+      base[0] = '_';
+      ++blen;
     }
-    /* Prepend a '_'.  */
-    memmove(base + 1, base, blen + 1);
-    base[0] = '_';
-    strcpy(file_name, fname);
   }
-  return file_name;
+#endif
+
+  *sanitized = strdup(fname);
+  return (*sanitized ? SANITIZE_ERR_OK : SANITIZE_ERR_OUT_OF_MEMORY);
 }
 
 #if defined(MSDOS) && (defined(__DJGPP__) || defined(__GO32__))
index cd216db..f649ef0 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
 
 #if defined(MSDOS) || defined(WIN32)
 
-char *sanitize_dos_name(char *file_name);
+#define SANITIZE_ALLOW_COLONS    (1<<0)  /* Allow colons */
+#define SANITIZE_ALLOW_PATH      (1<<1)  /* Allow path separators and colons */
+#define SANITIZE_ALLOW_RESERVED  (1<<2)  /* Allow reserved device names */
+#define SANITIZE_ALLOW_TRUNCATE  (1<<3)  /* Allow truncating a long filename */
+
+typedef enum {
+  SANITIZE_ERR_OK = 0,           /* 0 - OK */
+  SANITIZE_ERR_INVALID_PATH,     /* 1 - the path is invalid */
+  SANITIZE_ERR_BAD_ARGUMENT,     /* 2 - bad function parameter */
+  SANITIZE_ERR_OUT_OF_MEMORY,    /* 3 - out of memory */
+  SANITIZE_ERR_LAST /* never use! */
+} SANITIZEcode;
+
+SANITIZEcode sanitize_file_name(char **const sanitized, const char *file_name,
+                                int flags);
+#ifdef UNITTESTS
+SANITIZEcode truncate_dryrun(const char *path, const size_t truncate_pos);
+SANITIZEcode msdosify(char **const sanitized, const char *file_name,
+                      int flags);
+SANITIZEcode rename_if_reserved_dos_device_name(char **const sanitized,
+                                                const char *file_name,
+                                                int flags);
+#endif /* UNITTESTS */
 
 #if defined(MSDOS) && (defined(__DJGPP__) || defined(__GO32__))
 
index 3db27bb..c2dccf9 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -21,6 +21,8 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
+#include "slist_wc.h"
+
 #ifndef CURL_DISABLE_LIBCURL_OPTION
 
 #define ENABLE_CURLX_PRINTF
 
 /* global variable definitions, for easy-interface source code generation */
 
-struct curl_slist *easysrc_decl = NULL; /* Variable declarations */
-struct curl_slist *easysrc_data = NULL; /* Build slists, forms etc. */
-struct curl_slist *easysrc_code = NULL; /* Setopt calls */
-struct curl_slist *easysrc_toohard = NULL; /* Unconvertible setopt */
-struct curl_slist *easysrc_clean = NULL;  /* Clean up allocated data */
+struct slist_wc *easysrc_decl = NULL; /* Variable declarations */
+struct slist_wc *easysrc_data = NULL; /* Build slists, forms etc. */
+struct slist_wc *easysrc_code = NULL; /* Setopt calls */
+struct slist_wc *easysrc_toohard = NULL; /* Unconvertible setopt */
+struct slist_wc *easysrc_clean = NULL;  /* Clean up allocated data */
 int easysrc_form_count = 0;
 int easysrc_slist_count = 0;
 
 static const char *const srchead[]={
   "/********* Sample code generated by the curl command line tool **********",
   " * All curl_easy_setopt() options are documented at:",
-  " * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html",
+  " * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html",
   " ************************************************************************/",
   "#include <curl/curl.h>",
   "",
@@ -77,24 +79,23 @@ static const char *const srcend[]={
 /* Clean up all source code if we run out of memory */
 static void easysrc_free(void)
 {
-  curl_slist_free_all(easysrc_decl);
+  slist_wc_free_all(easysrc_decl);
   easysrc_decl = NULL;
-  curl_slist_free_all(easysrc_data);
+  slist_wc_free_all(easysrc_data);
   easysrc_data = NULL;
-  curl_slist_free_all(easysrc_code);
+  slist_wc_free_all(easysrc_code);
   easysrc_code = NULL;
-  curl_slist_free_all(easysrc_toohard);
+  slist_wc_free_all(easysrc_toohard);
   easysrc_toohard = NULL;
-  curl_slist_free_all(easysrc_clean);
+  slist_wc_free_all(easysrc_clean);
   easysrc_clean = NULL;
 }
 
 /* Add a source line to the main code or remarks */
-CURLcode easysrc_add(struct curl_slist **plist, const char *line)
+CURLcode easysrc_add(struct slist_wc **plist, const char *line)
 {
   CURLcode ret = CURLE_OK;
-  struct curl_slist *list =
-    curl_slist_append(*plist, line);
+  struct slist_wc *list = slist_wc_append(*plist, line);
   if(!list) {
     easysrc_free();
     ret = CURLE_OUT_OF_MEMORY;
@@ -104,7 +105,7 @@ CURLcode easysrc_add(struct curl_slist **plist, const char *line)
   return ret;
 }
 
-CURLcode easysrc_addf(struct curl_slist **plist, const char *fmt, ...)
+CURLcode easysrc_addf(struct slist_wc **plist, const char *fmt, ...)
 {
   CURLcode ret;
   char *bufp;
@@ -143,12 +144,14 @@ CURLcode easysrc_perform(void)
     for(i=0; ((c = srchard[i]) != NULL); i++)
       CHKRET(easysrc_add(&easysrc_code, c));
     /* Each unconverted option */
-    for(ptr=easysrc_toohard; ptr; ptr = ptr->next)
-      CHKRET(easysrc_add(&easysrc_code, ptr->data));
+    if(easysrc_toohard) {
+      for(ptr=easysrc_toohard->first; ptr; ptr = ptr->next)
+        CHKRET(easysrc_add(&easysrc_code, ptr->data));
+    }
     CHKRET(easysrc_add(&easysrc_code, ""));
     CHKRET(easysrc_add(&easysrc_code, "*/"));
 
-    curl_slist_free_all(easysrc_toohard);
+    slist_wc_free_all(easysrc_toohard);
     easysrc_toohard = NULL;
   }
 
@@ -172,38 +175,40 @@ void dumpeasysrc(struct GlobalConfig *config)
   struct curl_slist *ptr;
   char *o = config->libcurl;
 
-  if(o) {
-    FILE *out;
-    bool fopened = FALSE;
-    if(strcmp(o, "-")) {
-      out = fopen(o, "w");
-      fopened = TRUE;
-    }
-    else
-      out = stdout;
-    if(!out)
-      warnf(config->current, "Failed to open %s to write libcurl code!\n", o);
-    else {
-      int i;
-      const char *c;
-
-      for(i=0; ((c = srchead[i]) != NULL); i++)
-        fprintf(out, "%s\n", c);
-
-      /* Declare variables used for complex setopt values */
-      for(ptr=easysrc_decl; ptr; ptr = ptr->next)
-        fprintf(out, "  %s\n", ptr->data);
+  FILE *out;
+  bool fopened = FALSE;
+  if(strcmp(o, "-")) {
+    out = fopen(o, FOPEN_WRITETEXT);
+    fopened = TRUE;
+  }
+  else
+    out = stdout;
+  if(!out)
+    warnf(config, "Failed to open %s to write libcurl code!\n", o);
+  else {
+    int i;
+    const char *c;
 
-      /* Set up complex values for setopt calls */
-      if(easysrc_data) {
-        fprintf(out, "\n");
+    for(i=0; ((c = srchead[i]) != NULL); i++)
+      fprintf(out, "%s\n", c);
 
-        for(ptr=easysrc_data; ptr; ptr = ptr->next)
-          fprintf(out, "  %s\n", ptr->data);
-      }
+    /* Declare variables used for complex setopt values */
+    if(easysrc_decl) {
+      for(ptr=easysrc_decl->first; ptr; ptr = ptr->next)
+        fprintf(out, "  %s\n", ptr->data);
+    }
 
+    /* Set up complex values for setopt calls */
+    if(easysrc_data) {
       fprintf(out, "\n");
-      for(ptr=easysrc_code; ptr; ptr = ptr->next) {
+
+      for(ptr=easysrc_data->first; ptr; ptr = ptr->next)
+        fprintf(out, "  %s\n", ptr->data);
+    }
+
+    fprintf(out, "\n");
+    if(easysrc_code) {
+      for(ptr=easysrc_code->first; ptr; ptr = ptr->next) {
         if(ptr->data[0]) {
           fprintf(out, "  %s\n", ptr->data);
         }
@@ -211,16 +216,18 @@ void dumpeasysrc(struct GlobalConfig *config)
           fprintf(out, "\n");
         }
       }
+    }
 
-      for(ptr=easysrc_clean; ptr; ptr = ptr->next)
+    if(easysrc_clean) {
+      for(ptr=easysrc_clean->first; ptr; ptr = ptr->next)
         fprintf(out, "  %s\n", ptr->data);
+    }
 
-      for(i=0; ((c = srcend[i]) != NULL); i++)
-        fprintf(out, "%s\n", c);
+    for(i=0; ((c = srcend[i]) != NULL); i++)
+      fprintf(out, "%s\n", c);
 
-      if(fopened)
-        fclose(out);
-    }
+    if(fopened)
+      fclose(out);
   }
 
   easysrc_free();
index 07a4b78..54607b8 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 
 /* global variable declarations, for easy-interface source code generation */
 
-extern struct curl_slist *easysrc_decl; /* Variable declarations */
-extern struct curl_slist *easysrc_data; /* Build slists, forms etc. */
-extern struct curl_slist *easysrc_code; /* Setopt calls etc. */
-extern struct curl_slist *easysrc_toohard; /* Unconvertible setopt */
-extern struct curl_slist *easysrc_clean;  /* Clean up (reverse order) */
+extern struct slist_wc *easysrc_decl; /* Variable declarations */
+extern struct slist_wc *easysrc_data; /* Build slists, forms etc. */
+extern struct slist_wc *easysrc_code; /* Setopt calls etc. */
+extern struct slist_wc *easysrc_toohard; /* Unconvertible setopt */
+extern struct slist_wc *easysrc_clean;  /* Clean up (reverse order) */
 
 extern int easysrc_form_count;  /* Number of curl_httppost variables */
 extern int easysrc_slist_count; /* Number of curl_slist variables */
 
 extern CURLcode easysrc_init(void);
-extern CURLcode easysrc_add(struct curl_slist **plist, const char *bupf);
-extern CURLcode easysrc_addf(struct curl_slist **plist, const char *fmt, ...);
+extern CURLcode easysrc_add(struct slist_wc **plist, const char *bupf);
+extern CURLcode easysrc_addf(struct slist_wc **plist,
+                             const char *fmt, ...);
 extern CURLcode easysrc_perform(void);
 extern CURLcode easysrc_cleanup(void);
 
index 1dcd897..76c27a3 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -206,7 +206,8 @@ int formparse(struct OperationConfig *config,
             /* verify that this is a fine type specifier */
             if(2 != sscanf(type, "%127[^/]/%127[^;,\n]",
                            type_major, type_minor)) {
-              warnf(config, "Illegally formatted content-type field!\n");
+              warnf(config->global,
+                    "Illegally formatted content-type field!\n");
               Curl_safefree(contents);
               FreeMultiInfo(&multi_start, &multi_current);
               return 2; /* illegal content-type syntax! */
@@ -246,7 +247,7 @@ int formparse(struct OperationConfig *config,
             semicolon = (';' == *ptr) ? TRUE : FALSE;
             if(*unknown) {
               *word_end = '\0';
-              warnf(config, "skip unknown form field: %s\n", unknown);
+              warnf(config->global, "skip unknown form field: %s\n", unknown);
             }
           }
         }
@@ -257,7 +258,7 @@ int formparse(struct OperationConfig *config,
 
         if(*contp && !AddMultiFiles(contp, type, filename, &multi_start,
                           &multi_current)) {
-          warnf(config, "Error building form post!\n");
+          warnf(config->global, "Error building form post!\n");
           Curl_safefree(contents);
           FreeMultiInfo(&multi_start, &multi_current);
           return 3;
@@ -291,7 +292,7 @@ int formparse(struct OperationConfig *config,
         if(curl_formadd(httppost, last_post,
                         CURLFORM_COPYNAME, name,
                         CURLFORM_ARRAY, forms, CURLFORM_END) != 0) {
-          warnf(config, "curl_formadd failed!\n");
+          warnf(config->global, "curl_formadd failed!\n");
           Curl_safefree(forms);
           Curl_safefree(contents);
           return 5;
@@ -323,8 +324,8 @@ int formparse(struct OperationConfig *config,
 
         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);
+          warnf(config->global, "curl_formadd failed, possibly the file %s is "
+                "bad!\n", contp + 1);
           Curl_safefree(contents);
           return 6;
         }
@@ -332,7 +333,7 @@ int formparse(struct OperationConfig *config,
       else {
 #ifdef CURL_DOES_CONVERSIONS
         if(convert_to_network(contp, strlen(contp))) {
-          warnf(config, "curl_formadd failed!\n");
+          warnf(config->global, "curl_formadd failed!\n");
           Curl_safefree(contents);
           return 7;
         }
@@ -343,7 +344,7 @@ int formparse(struct OperationConfig *config,
         info[i].option = CURLFORM_END;
         if(curl_formadd(httppost, last_post,
                         CURLFORM_ARRAY, info, CURLFORM_END) != 0) {
-          warnf(config, "curl_formadd failed!\n");
+          warnf(config->global, "curl_formadd failed!\n");
           Curl_safefree(contents);
           return 8;
         }
@@ -352,10 +353,9 @@ int formparse(struct OperationConfig *config,
 
   }
   else {
-    warnf(config, "Illegally formatted input field!\n");
+    warnf(config->global, "Illegally formatted input field!\n");
     return 1;
   }
   Curl_safefree(contents);
   return 0;
 }
-
index f773626..ce7a292 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3932ccb..61f5046 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -145,7 +145,7 @@ static const struct LongShort aliases[]= {
   {"$v", "ssl-reqd",                 FALSE},
          /* 'ssl-reqd' new in 7.20.0, previously this was ftp-ssl-reqd */
   {"$w", "sessionid",                FALSE},
-         /* ¡sessionid' listed as --no-sessionid in the help */
+         /* 'sessionid' listed as --no-sessionid in the help */
   {"$x", "ftp-ssl-control",          FALSE},
   {"$y", "ftp-ssl-ccc",              FALSE},
   {"$j", "ftp-ssl-ccc-mode",         TRUE},
@@ -158,10 +158,8 @@ static const struct LongShort aliases[]= {
   {"$3", "keepalive-time",           TRUE},
   {"$4", "post302",                  FALSE},
   {"$5", "noproxy",                  TRUE},
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
   {"$6", "socks5-gssapi-service",    TRUE},
   {"$7", "socks5-gssapi-nec",        FALSE},
-#endif
   {"$8", "proxy1.0",                 TRUE},
   {"$9", "tftp-blksize",             TRUE},
   {"$A", "mail-from",                TRUE},
@@ -177,6 +175,12 @@ static const struct LongShort aliases[]= {
   {"$K", "sasl-ir",                  FALSE},
   {"$L", "test-event",               FALSE},
   {"$M", "unix-socket",              TRUE},
+  {"$N", "path-as-is",               FALSE},
+  {"$O", "proxy-service-name",       TRUE},
+  {"$P", "service-name",             TRUE},
+  {"$Q", "proto-default",            TRUE},
+  {"$R", "expect100-timeout",        TRUE},
+  {"$S", "tftp-no-options",          FALSE},
   {"0",   "http1.0",                 FALSE},
   {"01",  "http1.1",                 FALSE},
   {"02",  "http2",                   FALSE},
@@ -195,6 +199,7 @@ static const struct LongShort aliases[]= {
   {"c",  "cookie-jar",               TRUE},
   {"C",  "continue-at",              TRUE},
   {"d",  "data",                     TRUE},
+  {"dr", "data-raw",                 TRUE},
   {"da", "data-ascii",               TRUE},
   {"db", "data-binary",              TRUE},
   {"de", "data-urlencode",           TRUE},
@@ -217,6 +222,9 @@ static const struct LongShort aliases[]= {
   {"En", "ssl-allow-beast",          FALSE},
   {"Eo", "login-options",            TRUE},
   {"Ep", "pinnedpubkey",             TRUE},
+  {"Eq", "cert-status",              FALSE},
+  {"Er", "false-start",              FALSE},
+  {"Es", "ssl-no-revoke",            FALSE},
   {"f",  "fail",                     FALSE},
   {"F",  "form",                     TRUE},
   {"Fs", "form-string",              TRUE},
@@ -489,8 +497,8 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       case 'b': /* egd-file */
         GetStr(&config->egd_file, nextarg);
         break;
-      case 'B': /* XOAUTH2 Bearer */
-        GetStr(&config->xoauth2_bearer, nextarg);
+      case 'B': /* OAuth 2.0 bearer token */
+        GetStr(&config->oauth_bearer, nextarg);
         break;
       case 'c': /* connect-timeout */
         err = str2udouble(&config->connecttimeout, nextarg);
@@ -522,7 +530,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       case 'g': /* --trace */
         GetStr(&global->trace_dump, nextarg);
         if(global->tracetype && (global->tracetype != TRACE_BIN))
-          warnf(config, "--trace overrides an earlier trace/verbose option\n");
+          warnf(global, "--trace overrides an earlier trace/verbose option\n");
         global->tracetype = TRACE_BIN;
         break;
       case 'G': /* --npn */
@@ -531,7 +539,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       case 'h': /* --trace-ascii */
         GetStr(&global->trace_dump, nextarg);
         if(global->tracetype && (global->tracetype != TRACE_ASCII))
-          warnf(config,
+          warnf(global,
                 "--trace-ascii overrides an earlier trace/verbose option\n");
         global->tracetype = TRACE_ASCII;
         break;
@@ -567,7 +575,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
           /* for plain bytes, leave as-is */
           break;
         default:
-          warnf(config, "unsupported rate unit. Use G, M, K or B!\n");
+          warnf(global, "unsupported rate unit. Use G, M, K or B!\n");
           return PARAM_BAD_USE;
         }
         config->recvpersecond = value;
@@ -675,9 +683,9 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
 
       case 'v': /* --stderr */
         if(strcmp(nextarg, "-")) {
-          FILE *newfile = fopen(nextarg, "wt");
+          FILE *newfile = fopen(nextarg, FOPEN_WRITETEXT);
           if(!newfile)
-            warnf(config, "Failed to open %s!\n", nextarg);
+            warnf(global, "Failed to open %s!\n", nextarg);
           else {
             if(global->errors_fopened)
               fclose(global->errors);
@@ -829,7 +837,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         else {
           config->localportrange -= config->localport;
           if(config->localportrange < 1) {
-            warnf(config, "bad range input\n");
+            warnf(global, "bad range input\n");
             return PARAM_BAD_USE;
           }
         }
@@ -861,7 +869,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         break;
       case 'z': /* --libcurl */
 #ifdef CURL_DISABLE_LIBCURL_OPTION
-        warnf(config,
+        warnf(global,
               "--libcurl option was disabled at build-time!\n");
         return PARAM_OPTION_UNKNOWN;
 #else
@@ -892,14 +900,12 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         /* This specifies the noproxy list */
         GetStr(&config->noproxy, nextarg);
         break;
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
       case '6': /* --socks5-gssapi-service */
         GetStr(&config->socks5_gssapi_service, nextarg);
         break;
       case '7': /* --socks5-gssapi-nec*/
         config->socks5_gssapi_nec = toggle;
         break;
-#endif
       case '8': /* --proxy1.0 */
         /* http 1.0 proxy */
         GetStr(&config->proxy, nextarg);
@@ -949,7 +955,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
           int mlmaj, mlmin, mlpatch;
           metalink_get_version(&mlmaj, &mlmin, &mlpatch);
           if((mlmaj*10000)+(mlmin*100)+mlpatch < CURL_REQ_LIBMETALINK_VERS) {
-            warnf(config,
+            warnf(global,
                   "--metalink option cannot be used because the version of "
                   "the linked libmetalink library is too old. "
                   "Required: %d.%d.%d, found %d.%d.%d\n",
@@ -962,7 +968,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
           else
             config->use_metalink = toggle;
 #else
-          warnf(config, "--metalink option is ignored because the binary is "
+          warnf(global, "--metalink option is ignored because the binary is "
                 "built without the Metalink support.\n");
 #endif
           break;
@@ -974,12 +980,35 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
 #ifdef CURLDEBUG
         config->test_event_based = toggle;
 #else
-        warnf(config, "--test-event is ignored unless a debug build!\n");
+        warnf(global, "--test-event is ignored unless a debug build!\n");
 #endif
         break;
       case 'M': /* --unix-socket */
         GetStr(&config->unix_socket_path, nextarg);
         break;
+      case 'N': /* --path-as-is */
+        config->path_as_is = toggle;
+        break;
+      case 'O': /* --proxy-service-name */
+        GetStr(&config->proxy_service_name, nextarg);
+        break;
+      case 'P': /* --service-name */
+        GetStr(&config->service_name, nextarg);
+        break;
+      case 'Q': /* --proto-default */
+        GetStr(&config->proto_default, nextarg);
+        err = check_protocol(config->proto_default);
+        if(err)
+          return err;
+        break;
+      case 'R': /* --expect100-timeout */
+        err = str2udouble(&config->expect100timeout, nextarg);
+        if(err)
+          return err;
+        break;
+      case 'S': /* --tftp-no-options */
+        config->tftp_no_options = toggle;
+        break;
       }
       break;
     case '#': /* --progress-bar */
@@ -1093,6 +1122,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       char *postdata = NULL;
       FILE *file;
       size_t size = 0;
+      bool raw_mode = (subletter == 'r');
 
       if(subletter == 'e') { /* --data-urlencode*/
         /* [name]=[content], we encode the content part only
@@ -1118,7 +1148,6 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         }
         if('@' == is_file) {
           /* a '@' letter, it means that a file name or - (stdin) follows */
-
           if(curlx_strequal("-", p)) {
             file = stdin;
             set_binmode(stdin);
@@ -1126,7 +1155,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
           else {
             file = fopen(p, "rb");
             if(!file)
-              warnf(config,
+              warnf(global,
                     "Couldn't read data from file \"%s\", this makes "
                     "an empty POST.\n", nextarg);
           }
@@ -1179,7 +1208,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
             return PARAM_NO_MEM;
         }
       }
-      else if('@' == *nextarg) {
+      else if('@' == *nextarg && !raw_mode) {
         /* the data begins with a '@' letter, it means that a file name
            or - (stdin) follows */
         nextarg++; /* pass the @ */
@@ -1192,7 +1221,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         else {
           file = fopen(nextarg, "rb");
           if(!file)
-            warnf(config, "Couldn't read data from file \"%s\", this makes "
+            warnf(global, "Couldn't read data from file \"%s\", this makes "
                   "an empty POST.\n", nextarg);
         }
 
@@ -1309,7 +1338,7 @@ 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"))
+        if(config->engine && curlx_raw_equal(config->engine, "list"))
           return PARAM_ENGINES_REQUESTED;
         break;
       case 'g': /* CA info PEM file */
@@ -1363,6 +1392,19 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         GetStr(&config->pinnedpubkey, nextarg);
         break;
 
+      case 'q': /* --cert-status */
+        config->verifystatus = TRUE;
+        break;
+
+      case 'r': /* --false-start */
+        config->falsestart = TRUE;
+        break;
+
+      case 's': /* --ssl-no-revoke */
+        if(curlinfo->features & CURL_VERSION_SSL)
+          config->ssl_no_revoke = TRUE;
+        break;
+
       default: /* certificate file */
       {
         char *certname, *passphrase;
@@ -1390,7 +1432,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
                    &config->last_post,
                    (subletter=='s')?TRUE:FALSE)) /* 's' means literal string */
         return PARAM_BAD_USE;
-      if(SetHTTPrequest(config, HTTPREQ_POST, &config->httpreq))
+      if(SetHTTPrequest(config, HTTPREQ_FORMPOST, &config->httpreq))
         return PARAM_BAD_USE;
       break;
 
@@ -1436,7 +1478,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       break;
     case 'J': /* --remote-header-name */
       if(config->include_headers) {
-        warnf(config,
+        warnf(global,
               "--include and --remote-header-name cannot be combined.\n");
         return PARAM_BAD_USE;
       }
@@ -1447,7 +1489,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       break;
     case 'K': /* parse config file */
       if(parseconfig(nextarg, global))
-        warnf(config, "error trying read config from the '%s' file\n",
+        warnf(global, "error trying read config from the '%s' file\n",
               nextarg);
       break;
     case 'l':
@@ -1474,7 +1516,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
 #ifdef USE_MANUAL
         return PARAM_MANUAL_REQUESTED;
 #else
-        warnf(config,
+        warnf(global,
               "built-in manual was disabled at build-time!\n");
         return PARAM_OPTION_UNKNOWN;
 #endif
@@ -1593,7 +1635,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
       if(ISDIGIT(*nextarg) && !strchr(nextarg, '-')) {
         char buffer[32];
         curl_off_t off;
-        warnf(config,
+        warnf(global,
               "A specified range MUST include at least one dash (-). "
               "Appending one for you!\n");
         off = curlx_strtoofft(nextarg, NULL, 10);
@@ -1609,7 +1651,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         tmp_range = nextarg;
         while(*tmp_range != '\0') {
           if(!ISDIGIT(*tmp_range) && *tmp_range != '-' && *tmp_range != ',') {
-            warnf(config,"Invalid character is found in given range. "
+            warnf(global, "Invalid character is found in given range. "
                   "A specified range MUST have only digits in "
                   "\'start\'-\'stop\'. The server's response to this "
                   "request is uncertain.\n");
@@ -1698,7 +1740,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         if(!global->trace_dump)
           return PARAM_NO_MEM;
         if(global->tracetype && (global->tracetype != TRACE_PLAIN))
-          warnf(config,
+          warnf(global,
                 "-v, --verbose overrides an earlier trace/verbose option\n");
         global->tracetype = TRACE_PLAIN;
       }
@@ -1725,7 +1767,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         }
         else {
           fname = nextarg;
-          file = fopen(nextarg, "r");
+          file = fopen(nextarg, FOPEN_READTEXT);
         }
         err = file2string(&config->writeout, file);
         if(file && (file != stdin))
@@ -1733,7 +1775,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         if(err)
           return err;
         if(!config->writeout)
-          warnf(config, "Failed to read %s", fname);
+          warnf(global, "Failed to read %s", fname);
       }
       else
         GetStr(&config->writeout, nextarg);
@@ -1791,7 +1833,7 @@ ParameterError getparameter(char *flag,    /* f or -long-flag */
         if(-1 == stat(nextarg, &statbuf)) {
           /* failed, remove time condition */
           config->timecond = CURL_TIMECOND_NONE;
-          warnf(config,
+          warnf(global,
                 "Illegal date format for -z, --timecond (and not "
                 "a file name). Disabling time condition. "
                 "See curl_getdate(3) for valid date syntax.\n");
index ef4366b..0c85c69 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -37,6 +37,7 @@ typedef enum {
   PARAM_BAD_NUMERIC,
   PARAM_NEGATIVE_NUMERIC,
   PARAM_LIBCURL_DOESNT_SUPPORT,
+  PARAM_LIBCURL_UNSUPPORTED_PROTOCOL,
   PARAM_NO_MEM,
   PARAM_NEXT_OPERATION,
   PARAM_LAST
index 4c8dcb9..8e3e5fa 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -52,9 +52,9 @@
 #  endif
 #endif
 
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 #include "tool_getpass.h"
 
 #include "memdebug.h" /* keep this as LAST include */
@@ -229,7 +229,7 @@ char *getpass_r(const char *prompt, /* prompt to display */
   bool disabled;
   int fd = open("/dev/tty", O_RDONLY);
   if(-1 == fd)
-    fd = 1; /* use stdin if the tty couldn't be used */
+    fd = STDIN_FILENO; /* use stdin if the tty couldn't be used */
 
   disabled = ttyecho(FALSE, fd); /* disable terminal echo */
 
@@ -246,7 +246,7 @@ char *getpass_r(const char *prompt, /* prompt to display */
     (void)ttyecho(TRUE, fd); /* enable echo */
   }
 
-  if(1 != fd)
+  if(STDIN_FILENO != fd)
     close(fd);
 
   return password; /* return pointer to buffer */
index d4fc7e2..95dd779 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 424a2fa..a1a6fb4 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -52,6 +52,7 @@ static const char *const helptext[] = {
   "     --cacert FILE   CA certificate to verify peer against (SSL)",
   "     --capath DIR    CA directory to verify peer against (SSL)",
   " -E, --cert CERT[:PASSWD]  Client certificate file and password (SSL)",
+  "     --cert-status   Verify the status of the server certificate (SSL)",
   "     --cert-type TYPE  Certificate file type (DER/PEM/ENG) (SSL)",
   "     --ciphers LIST  SSL ciphers to use (SSL)",
   "     --compressed    Request compressed response (using deflate or gzip)",
@@ -64,6 +65,7 @@ static const char *const helptext[] = {
   "     --crlf          Convert LF to CRLF in upload",
   "     --crlfile FILE  Get a CRL list in PEM format from the given file",
   " -d, --data DATA     HTTP POST data (H)",
+  "     --data-raw DATA  HTTP POST data, '@' allowed (H)",
   "     --data-ascii DATA  HTTP POST ASCII data (H)",
   "     --data-binary DATA  HTTP POST binary data (H)",
   "     --data-urlencode DATA  HTTP POST data url encoded (H)",
@@ -81,7 +83,9 @@ static const char *const helptext[] = {
 #ifdef USE_ENVIRONMENT
   "     --environment   Write results to environment variables (RISC OS)",
 #endif
+  "     --expect100-timeout SECONDS How long to wait for 100-continue (H)",
   " -f, --fail          Fail silently (no output at all) on HTTP errors (H)",
+  "     --false-start   Enable TLS False Start.",
   " -F, --form CONTENT  Specify HTTP multipart POST data (H)",
   "     --form-string STRING  Specify HTTP multipart POST data (H)",
   "     --ftp-account DATA  Account data string (F)",
@@ -140,7 +144,7 @@ static const char *const helptext[] = {
   " -n, --netrc         Must read .netrc for user name and password",
   "     --netrc-optional  Use either .netrc or URL; overrides -n",
   "     --netrc-file FILE  Specify FILE for netrc",
-  " -:  --next          "
+  " -:, --next          "
   "Allows the following URL to use a separate set of options",
   "     --no-alpn       Disable the ALPN TLS extension (H)",
   " -N, --no-buffer     Disable buffering of the output stream",
@@ -152,8 +156,8 @@ static const char *const helptext[] = {
   "     --oauth2-bearer TOKEN  OAuth 2 Bearer Token (IMAP, POP3, SMTP)",
   " -o, --output FILE   Write to FILE instead of stdout",
   "     --pass PASS     Pass phrase for the private key (SSL/SSH)",
-  "     --pinnedpubkey FILE  Public key (PEM/DER) to verify peer against "
-  "(OpenSSL/GnuTLS/GSKit only)",
+  "     --path-as-is    Do not squash .. sequences in URL path",
+  "     --pinnedpubkey FILE/HASHES Public key to verify peer against (SSL)",
   "     --post301       "
   "Do not switch to GET after following a 301 redirect (H)",
   "     --post302       "
@@ -162,7 +166,8 @@ static const char *const helptext[] = {
   "Do not switch to GET after following a 303 redirect (H)",
   " -#, --progress-bar  Display transfer progress as a progress bar",
   "     --proto PROTOCOLS  Enable/disable PROTOCOLS",
-  "     --proto-redir PROTOCOLS  Enable/disable PROTOCOLS on redirect",
+  "     --proto-default PROTOCOL  Use PROTOCOL for any URL missing a scheme",
+  "     --proto-redir PROTOCOLS   Enable/disable PROTOCOLS on redirect",
   " -x, --proxy [PROTOCOL://]HOST[:PORT]  Use proxy on given port",
   "     --proxy-anyauth  Pick \"any\" proxy authentication method (H)",
   "     --proxy-basic   Use Basic authentication on the proxy (H)",
@@ -170,6 +175,8 @@ static const char *const helptext[] = {
   "     --proxy-negotiate  "
   "Use HTTP Negotiate (SPNEGO) authentication on the proxy (H)",
   "     --proxy-ntlm    Use NTLM authentication on the proxy (H)",
+  "     --proxy-service-name NAME  SPNEGO proxy service name",
+  "     --service-name NAME  SPNEGO service name",
   " -U, --proxy-user USER[:PASSWORD]  Proxy user and password",
   "     --proxy1.0 HOST[:PORT]  Use HTTP/1.0 proxy on given port",
   " -p, --proxytunnel   Operate through a HTTP proxy tunnel (using CONNECT)",
@@ -198,10 +205,8 @@ static const char *const helptext[] = {
   "     --socks5 HOST[:PORT]  SOCKS5 proxy on given host + port",
   "     --socks5-hostname HOST[:PORT]  "
   "SOCKS5 proxy, pass host name to proxy",
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
   "     --socks5-gssapi-service NAME  SOCKS5 proxy service name for GSS-API",
   "     --socks5-gssapi-nec  Compatibility with NEC SOCKS5 server",
-#endif
   " -Y, --speed-limit RATE  "
   "Stop transfers below RATE for 'speed-time' secs",
   " -y, --speed-time SECONDS  "
@@ -211,12 +216,14 @@ static const char *const helptext[] = {
   " -2, --sslv2         Use SSLv2 (SSL)",
   " -3, --sslv3         Use SSLv3 (SSL)",
   "     --ssl-allow-beast  Allow security flaw to improve interop (SSL)",
+  "     --ssl-no-revoke    Disable cert revocation checks (WinSSL)",
   "     --stderr FILE   Where to redirect stderr (use \"-\" for stdout)",
   "     --tcp-nodelay   Use the TCP_NODELAY option",
   " -t, --telnet-option OPT=VAL  Set telnet option",
   "     --tftp-blksize VALUE  Set TFTP BLKSIZE option (must be >512)",
-  " -z, --time-cond TIME  Transfer based on a time condition",
-  " -1, --tlsv1         Use => TLSv1 (SSL)",
+  "     --tftp-no-options  Do not send TFTP options requests",
+  " -z, --time-cond TIME   Transfer based on a time condition",
+  " -1, --tlsv1         Use >= TLSv1 (SSL)",
   "     --tlsv1.0       Use TLSv1.0 (SSL)",
   "     --tlsv1.1       Use TLSv1.1 (SSL)",
   "     --tlsv1.2       Use TLSv1.2 (SSL)",
@@ -312,6 +319,9 @@ void tool_version_info(void)
 #ifdef USE_METALINK
     printf("Metalink ");
 #endif
+#ifdef USE_LIBPSL
+    printf("PSL ");
+#endif
     puts(""); /* newline */
   }
 }
index 9ef5006..43432d7 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index dbf32f8..fef1459 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -58,6 +58,8 @@ const char *param2text(int res)
     return "expected a positive numerical parameter";
   case PARAM_LIBCURL_DOESNT_SUPPORT:
     return "the installed libcurl version doesn't support this";
+  case PARAM_LIBCURL_UNSUPPORTED_PROTOCOL:
+    return "a specified protocol is unsupported by libcurl";
   case PARAM_NO_MEM:
     return "out of memory";
   default:
@@ -67,11 +69,48 @@ const char *param2text(int res)
 
 int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store)
 {
+  /* this mirrors the HttpReq enum in tool_sdecls.h */
+  const char *reqname[]= {
+    "", /* unspec */
+    "GET (-G, --get)",
+    "HEAD (-I, --head)",
+    "multipart formpost (-F, --form)",
+    "POST (-d, --data)"
+  };
+
   if((*store == HTTPREQ_UNSPEC) ||
      (*store == req)) {
     *store = req;
     return 0;
   }
-  warnf(config, "You can only select one HTTP request!\n");
+  warnf(config->global, "You can only select one HTTP request method! "
+        "You asked for both %s and %s.\n",
+        reqname[req], reqname[*store]);
+
   return 1;
 }
+
+void customrequest_helper(struct OperationConfig *config, HttpReq req,
+                          char *method)
+{
+  /* this mirrors the HttpReq enum in tool_sdecls.h */
+  const char *dflt[]= {
+    "GET",
+    "GET",
+    "HEAD",
+    "POST",
+    "POST"
+  };
+
+  if(!method)
+    ;
+  else if(curl_strequal(method, dflt[req])) {
+    notef(config->global, "Unnecessary use of -X or --request, %s is already "
+          "inferred.\n", dflt[req]);
+  }
+  else if(curl_strequal(method, "head")) {
+    warnf(config->global,
+          "Setting custom HTTP method to HEAD with -X/--request may not work "
+          "the way you want. Consider using -I/--head instead.\n");
+  }
+}
index 73bcfc7..9ede16e 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -28,5 +28,8 @@ const char *param2text(int res);
 int SetHTTPrequest(struct OperationConfig *config, HttpReq req,
                    HttpReq *store);
 
+void customrequest_helper(struct OperationConfig *config, HttpReq req,
+                          char *method);
+
 #endif /* HEADER_CURL_TOOL_HELPERS_H */
 
index 11bb4ef..ccf04b5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -44,11 +44,11 @@ static char *GetEnv(const char *variable, char do_expand)
     env = buf1;
     variable = buf1;
   }
-  if(do_expand && strchr(variable,'%')) {
+  if(do_expand && strchr(variable, '%')) {
     /* buf2 == variable if not expanded */
     rc = ExpandEnvironmentStrings (variable, buf2, sizeof(buf2));
     if(rc > 0 && rc < sizeof(buf2) &&
-       !strchr(buf2,'%'))    /* no vars still unexpanded */
+       !strchr(buf2, '%'))    /* no vars still unexpanded */
       env = buf2;
   }
 #else
index d588615..98d94b8 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3010880..e2dfe8d 100644 (file)
@@ -2,7 +2,7 @@
 #ifndef HAVE_LIBZ
 /*
  * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Sun Dec 28 14:36:38 2014
+ * Generation time: Tue Mar 22 10:34:41 2016
  */
 #ifdef USE_MANUAL
 #include "tool_hugehelp.h"
@@ -214,16 +214,16 @@ void hugehelp(void)
 "       -2, --sslv2\n"
 "              (SSL) Forces curl to use SSL version 2 when negotiating  with  a\n"
 "              remote  SSL  server.  Sometimes curl is built without SSLv2 sup-\n"
-"              port. SSLv2 is widely considered insecure.\n"
+"              port. SSLv2 is widely considered insecure (see RFC 6176).\n"
 "\n"
 "       -3, --sslv3\n"
 "              (SSL) Forces curl to use SSL version 3 when negotiating  with  a\n"
 "              remote  SSL  server.  Sometimes curl is built without SSLv3 sup-\n"
-"              port.\n"
+"              port. SSLv3 is widely considered insecure (see RFC 7568).\n"
 "\n"
-"       -4, --ipv4\n"
 , stdout);
  fputs(
+"       -4, --ipv4\n"
 "              This option tells curl to resolve names to IPv4 addresses  only,\n"
 "              and not for example try IPv6.\n"
 "\n"
@@ -279,11 +279,11 @@ void hugehelp(void)
 , stdout);
  fputs(
 "              should  be used in this session if they match. Using this method\n"
-"              also activates the \"cookie parser\" which will make  curl  record\n"
+"              also activates the cookie engine 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"
-"              the Netscape/Mozilla cookie file format.\n"
+"              the file to read cookies from should be plain HTTP headers (Set-\n"
+"              Cookie style) or the Netscape/Mozilla cookie file format.\n"
 "\n"
 , stdout);
  fputs(
@@ -291,50 +291,68 @@ void hugehelp(void)
 "              cookies  will  be written to the file. To store cookies, use the\n"
 "              -c, --cookie-jar option.\n"
 "\n"
+"              Exercise caution if you  are  using  this  option  and  multiple\n"
+"              transfers may occur.  If you use the NAME1=VALUE1; format, or in\n"
+"              a file use the Set-Cookie format and  don't  specify  a  domain,\n"
+, stdout);
+ fputs(
+"              then the cookie is sent for any domain (even after redirects are\n"
+"              followed) and cannot be modified by a server-set cookie. If  the\n"
+"              cookie  engine is enabled and a server sets a cookie of the same\n"
+"              name then both will be sent on a future transfer to that server,\n"
+"              likely  not  what  you  intended.  To address these issues set a\n"
+"              domain in Set-Cookie (doing that will  include  sub-domains)  or\n"
+, stdout);
+ fputs(
+"              use the Netscape format.\n"
+"\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       -B, --use-ascii\n"
-"              (FTP/LDAP) Enable ASCII transfer. For  FTP,  this  can  also  be\n"
-"              enforced  by  using an URL that ends with \";type=A\". This option\n"
-, stdout);
- fputs(
+"              (FTP/LDAP)  Enable  ASCII  transfer.  For  FTP, this can also be\n"
+"              enforced by using an URL that ends with \";type=A\".  This  option\n"
 "              causes data sent to stdout to be in text mode for win32 systems.\n"
 "\n"
 "       --basic\n"
-"              (HTTP) Tells curl to use  HTTP  Basic  authentication  with  the\n"
-"              remote  host.  This  is  the  default and this option is usually\n"
+"              (HTTP)  Tells  curl  to  use  HTTP Basic authentication with the\n"
+, stdout);
+ fputs(
+"              remote host. This is the default  and  this  option  is  usually\n"
 "              pointless, unless you use it to override a previously set option\n"
-"              that  sets  a  different  authentication method (such as --ntlm,\n"
+"              that sets a different authentication  method  (such  as  --ntlm,\n"
 "              --digest, or --negotiate).\n"
 "\n"
-, stdout);
- fputs(
 "              Used together with -u, --user and -x, --proxy.\n"
 "\n"
 "              See also --proxy-basic.\n"
 "\n"
 "       -c, --cookie-jar <file name>\n"
-"              (HTTP) Specify to which file you want curl to write all  cookies\n"
-"              after  a completed operation. Curl writes all cookies previously\n"
-"              read from a specified file as well as all cookies received  from\n"
-"              remote server(s). If no cookies are known, no data will be writ-\n"
+"              (HTTP)  Specify to which file you want curl to write all cookies\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"
+"              after a completed operation. Curl writes all cookies  previously\n"
+"              read  from a specified file as well as all cookies received from\n"
+"              remote server(s). If no cookies are known, no data 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"
 "              cookies will be written to stdout.\n"
 "\n"
-"              This command line option will activate the  cookie  engine  that\n"
+, stdout);
+ fputs(
+"              This  command  line  option will activate the cookie engine that\n"
 "              makes curl record and use cookies. Another way to activate it is\n"
 "              to use the -b, --cookie option.\n"
 "\n"
 "              If the cookie jar can't be created or written to, the whole curl\n"
+"              operation won't fail or even report an error clearly.  Using  -v\n"
+"              will get a warning displayed, but that is the only visible feed-\n"
 , stdout);
  fputs(
-"              operation  won't  fail or even report an error clearly. Using -v\n"
-"              will get a warning displayed, but that is the only visible feed-\n"
 "              back you get about this possibly lethal situation.\n"
 "\n"
+"              Since 7.43.0 cookies that were imported in the Set-Cookie format\n"
+"              without a domain name are not exported by this option.\n"
+"\n"
 "              If  this  option  is used several times, the last specified file\n"
 "              name will be used.\n"
 "\n"
@@ -359,13 +377,13 @@ void hugehelp(void)
 "              (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"
-"              http://www.openssl.org/docs/apps/ciphers.html\n"
+"              https://www.openssl.org/docs/apps/ciphers.html\n"
 "\n"
 "              NSS  ciphers  are  done differently than OpenSSL and GnuTLS. The\n"
 , stdout);
  fputs(
 "              full list of NSS ciphers is in the NSSCipherSuite entry at  this\n"
-"              URL:                                          http://git.fedora-\n"
+"              URL:                                         https://git.fedora-\n"
 "              hosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
@@ -425,38 +443,44 @@ void hugehelp(void)
  fputs(
 "              application/x-www-form-urlencoded.  Compare to -F, --form.\n"
 "\n"
-"              -d,  --data  is  the  same  as --data-ascii. To post data purely\n"
-"              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"
+"              -d, --data is the same as --data-ascii. --data-raw is almost the\n"
+"              same but does not have a special interpretation of the @ charac-\n"
+"              ter.  To  post  data  purely  binary, you should instead use the\n"
+"              --data-binary option.  To URL-encode the value of a  form  field\n"
+"              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"
 , stdout);
  fputs(
+"              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"
 "              '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. Multiple files can also be specified. Post-\n"
 , stdout);
  fputs(
+"              file name to read the data from, or - if you want curl  to  read\n"
+"              the data from stdin. Multiple files can also be specified. Post-\n"
 "              ing data from a file named 'foobar'  would  thus  be  done  with\n"
 "              --data  @foobar.  When  --data  is told to read from a file like\n"
-"              that, carriage returns and newlines will be stripped out.\n"
+"              that, carriage returns and newlines will be stripped out. If you\n"
+"              don't  want the @ character to have a special interpretation use\n"
+, stdout);
+ fputs(
+"              --data-raw instead.\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"
 "              that  an  HTTP site sends to you. Cookies from the headers could\n"
-, stdout);
- fputs(
 "              then be read in a  second  curl  invocation  by  using  the  -b,\n"
 "              --cookie  option! The -c, --cookie-jar option is a better way to\n"
 "              store cookies.\n"
 "\n"
+, stdout);
+ fputs(
 "              When used in FTP, the FTP server response lines  are  considered\n"
 "              being \"headers\" and thus are saved there.\n"
 "\n"
@@ -466,30 +490,35 @@ void hugehelp(void)
 "              See -d, --data.\n"
 "\n"
 "       --data-binary <data>\n"
-, stdout);
- fputs(
 "              (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"
+, stdout);
+ fputs(
 "              filename.   Data  is  posted in a similar manner as --data-ascii\n"
 "              does, except that newlines and carriage  returns  are  preserved\n"
 "              and conversions are never done.\n"
 "\n"
 "              If  this  option  is  used several times, the ones following the\n"
+"              first will append data as described in -d, --data.\n"
+"\n"
+"       --data-raw <data>\n"
+"              (HTTP) This posts data similarly to --data but without the  spe-\n"
 , stdout);
  fputs(
-"              first will append data as described in -d, --data.\n"
+"              cial  interpretation of the @ character. See -d, --data.  (Added\n"
+"              in 7.43.0)\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"
 "              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"
 , stdout);
  fputs(
+"              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"
@@ -498,10 +527,10 @@ void hugehelp(void)
 "\n"
 "              =content\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(
+"                     on. The preceding = symbol is not included in the data.\n"
+"\n"
 "              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"
@@ -510,11 +539,11 @@ void hugehelp(void)
 "              @filename\n"
 "                     This  will  make  curl  load  data  from  the  given file\n"
 "                     (including any newlines), URL-encode that data  and  pass\n"
+, stdout);
+ fputs(
 "                     it on in the POST.\n"
 "\n"
 "              name@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"
 "                     it  on  in  the  POST.  The  name part gets an equal sign\n"
@@ -522,9 +551,9 @@ void hugehelp(void)
 "                     that the name is expected to be URL-encoded already.\n"
 "\n"
 "       --delegation LEVEL\n"
-"              Set LEVEL to tell the server what it is allowed to delegate when\n"
 , stdout);
  fputs(
+"              Set LEVEL to tell the server what it is allowed to delegate when\n"
 "              it comes to user credentials. Used with GSS/kerberos.\n"
 "\n"
 "              none   Don't allow any delegation.\n"
@@ -536,9 +565,9 @@ void hugehelp(void)
 "              always Unconditionally allow the server to delegate.\n"
 "\n"
 "       --digest\n"
-"              (HTTP) Enables HTTP Digest authentication. This is an  authenti-\n"
 , stdout);
  fputs(
+"              (HTTP) Enables HTTP Digest authentication. This is an  authenti-\n"
 "              cation  scheme  that  prevents the password from being sent over\n"
 "              the wire in clear text. Use this in combination with the  normal\n"
 "              -u,  --user  option  to  set  user  name  and password. See also\n"
@@ -547,9 +576,9 @@ void hugehelp(void)
 "              If this option is used several times,  only  the  first  one  is\n"
 "              used.\n"
 "\n"
-"       --disable-eprt\n"
 , stdout);
  fputs(
+"       --disable-eprt\n"
 "              (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"
@@ -563,36 +592,42 @@ void hugehelp(void)
 "              --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
 "              is an alias for --disable-eprt.\n"
 "\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"
+"              If the server is an IPv6 host, this option will have  no  effect\n"
+"              as EPRT is necessary then.\n"
+"\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"
 , stdout);
  fputs(
-"              doing  passive  FTP  transfers.  Curl will normally always first\n"
-"              attempt to use EPSV before PASV, but with this option,  it  will\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"
 "              --epsv can be used to explicitly enable EPSV again and --no-epsv\n"
 "              is an alias for --disable-epsv.\n"
 "\n"
+"              If  the  server is an IPv6 host, this option will have no effect\n"
+, stdout);
+ fputs(
+"              as EPSV is necessary then.\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"
-, stdout);
- fputs(
 "       --dns-interface <interface>\n"
 "              Tell  curl  to  send  outgoing DNS requests through <interface>.\n"
 "              This option is a counterpart  to  --interface  (which  does  not\n"
 "              affect  DNS). The supplied string must be an interface name (not\n"
 "              an address).\n"
 "\n"
-"              This option requires that libcurl  was  built  with  a  resolver\n"
-"              backend  that supports this operation. The c-ares backend is the\n"
 , stdout);
  fputs(
+"              This option requires that libcurl  was  built  with  a  resolver\n"
+"              backend  that supports this operation. The c-ares backend is the\n"
 "              only such one. (Added in 7.33.0)\n"
 "\n"
 "       --dns-ipv4-addr <ip-address>\n"
@@ -600,10 +635,10 @@ void hugehelp(void)
 "              so  that the DNS requests originate from this address. The argu-\n"
 "              ment should be a single IPv4 address.\n"
 "\n"
-"              This option requires that libcurl  was  built  with  a  resolver\n"
-"              backend  that supports this operation. The c-ares backend is the\n"
 , stdout);
  fputs(
+"              This option requires that libcurl  was  built  with  a  resolver\n"
+"              backend  that supports this operation. The c-ares backend is the\n"
 "              only such one.  (Added in 7.33.0)\n"
 "\n"
 "       --dns-ipv6-addr <ip-address>\n"
@@ -611,31 +646,31 @@ void hugehelp(void)
 "              so  that the DNS requests originate from this address. The argu-\n"
 "              ment should be a single IPv6 address.\n"
 "\n"
-"              This option requires that libcurl  was  built  with  a  resolver\n"
-"              backend  that supports this operation. The c-ares backend is the\n"
 , stdout);
  fputs(
+"              This option requires that libcurl  was  built  with  a  resolver\n"
+"              backend  that supports this operation. The c-ares backend is the\n"
 "              only such one.  (Added in 7.33.0)\n"
 "\n"
 "       --dns-servers <ip-address,ip-address>\n"
 "              Set the list of DNS servers to be used  instead  of  the  system\n"
 "              default.  The list of IP addresses should be separated with com-\n"
 "              mas. Port numbers may also optionally be given as :<port-number>\n"
+, stdout);
+ fputs(
 "              after each IP address.\n"
 "\n"
 "              This  option  requires  that  libcurl  was built with a resolver\n"
-, stdout);
- fputs(
 "              backend that supports this operation. The c-ares backend is  the\n"
 "              only such one.  (Added in 7.33.0)\n"
 "\n"
 "       -e, --referer <URL>\n"
 "              (HTTP) Sends the \"Referrer 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"
 , stdout);
  fputs(
+"              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"
 "              even if you don't set an initial --referer.\n"
 "\n"
@@ -643,92 +678,103 @@ void hugehelp(void)
 "\n"
 "       -E, --cert <certificate[:password]>\n"
 "              (SSL) Tells curl to use the specified  client  certificate  file\n"
-"              when getting a file with HTTPS, FTPS or another SSL-based proto-\n"
-"              col. The certificate must be in PKCS#12 format if  using  Secure\n"
 , stdout);
  fputs(
+"              when getting a file with HTTPS, FTPS or another SSL-based proto-\n"
+"              col. The certificate must be in PKCS#12 format if  using  Secure\n"
 "              Transport,  or  PEM  format  if  using any other engine.  If the\n"
 "              optional password isn't specified, it will be queried for on the\n"
 "              terminal.  Note  that  this  option assumes a \"certificate\" file\n"
-"              that is the private key and  the  private  certificate  concate-\n"
-"              nated! See --cert and --key to specify them independently.\n"
-"\n"
-"              If  curl  is  built against the NSS SSL library then this option\n"
+"              that is the private key and the client certificate concatenated!\n"
 , stdout);
  fputs(
+"              See --cert and --key to specify them independently.\n"
+"\n"
+"              If  curl  is  built against the NSS SSL library then this option\n"
 "              can tell curl the nickname of the 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. If you\n"
-"              want to use a file from the current directory, please precede it\n"
-"              with  \"./\"  prefix, in order to avoid confusion with a nickname.\n"
 , stdout);
  fputs(
+"              want to use a file from the current directory, please precede it\n"
+"              with  \"./\"  prefix, in order to avoid confusion with a nickname.\n"
 "              If the nickname contains \":\", it needs to be preceded by \"\\\"  so\n"
 "              that  it  is not recognized as password delimiter.  If the nick-\n"
 "              name contains \"\\\", it needs to be escaped as \"\\\\\" so that it  is\n"
 "              not recognized as an escape character.\n"
 "\n"
-"              (iOS  and  Mac OS X only) If curl is built against Secure Trans-\n"
-"              port, then the certificate string can either be the  name  of  a\n"
 , stdout);
  fputs(
+"              (iOS  and  Mac OS X only) If curl is built against Secure Trans-\n"
+"              port, then the certificate string can either be the  name  of  a\n"
 "              certificate/private  key  in the system or user keychain, or the\n"
 "              path to a PKCS#12-encoded certificate and private  key.  If  you\n"
 "              want to use a file from the current directory, please precede it\n"
 "              with \"./\" prefix, in order to avoid confusion with a nickname.\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"
-, stdout);
- fputs(
 "              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"
 "              available at run-time.\n"
 "\n"
 "       --environment\n"
 "              (RISC  OS ONLY) Sets a range of environment variables, using the\n"
+, stdout);
+ fputs(
 "              names the -w option supports, to allow easier extraction of use-\n"
 "              ful information after having run curl.\n"
 "\n"
 "       --egd-file <file>\n"
-, stdout);
- fputs(
 "              (SSL)  Specify  the  path  name  to the Entropy Gathering Daemon\n"
 "              socket. The socket is used to seed the  random  engine  for  SSL\n"
 "              connections. See also the --random-file option.\n"
 "\n"
+"       --expect100-timeout <seconds>\n"
+"              (HTTP) Maximum time in seconds that you allow curl to wait for a\n"
+, stdout);
+ fputs(
+"              100-continue response when curl emits an  Expects:  100-continue\n"
+"              header  in  its  request.  By default curl will wait one second.\n"
+"              This option accepts decimal values! When curl stops waiting,  it\n"
+"              will continue as if the response has been received.\n"
+"\n"
+"              (Added in 7.47.0)\n"
+"\n"
 "       --cert-type <type>\n"
 "              (SSL)  Tells curl what certificate type the provided certificate\n"
+, stdout);
+ fputs(
 "              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"
 "              certificate(s)  must be in PEM format. Normally curl is built to\n"
+, stdout);
+ fputs(
 "              use a default file for this, so this option is typically used to\n"
 "              alter that default file.\n"
 "\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"
+, stdout);
+ fputs(
 "              tory as curl.exe, or in the Current Working Directory, or in any\n"
 "              folder along your PATH.\n"
 "\n"
-, stdout);
- fputs(
 "              If curl is built against  the  NSS  SSL  library,  the  NSS  PEM\n"
 "              PKCS#11  module  (libnsspem.so)  needs  to be available for this\n"
 "              option to work properly.\n"
@@ -736,73 +782,108 @@ void hugehelp(void)
 "              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.  Multiple paths can be provided by separating\n"
 , stdout);
  fputs(
+"              (SSL) Tells curl to use the specified certificate  directory  to\n"
+"              verify  the  peer.  Multiple paths can be provided by separating\n"
 "              them with \":\" (e.g.  \"path1:path2:path3\"). The certificates must\n"
 "              be  in  PEM  format,  and  if curl is built against OpenSSL, the\n"
 "              directory must have been processed using  the  c_rehash  utility\n"
 "              supplied  with OpenSSL. Using --capath can allow OpenSSL-powered\n"
+, stdout);
+ fputs(
 "              curl to make SSL-connections much more  efficiently  than  using\n"
 "              --cacert if the --cacert file contains many CA certificates.\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is set, the default capath value will be ignored,\n"
 "              and if it is used several times, the last one will be used.\n"
 "\n"
-"       --pinnedpubkey <pinned public key>\n"
-"              (SSL) Tells curl to use the specified public key file to  verify\n"
-"              the  peer.  The  file must contain a single public key in PEM or\n"
-"              DER format.\n"
+"       --pinnedpubkey <pinned public key (hashes)>\n"
+"              (SSL) Tells curl to  use  the  specified  public  key  file  (or\n"
+, stdout);
+ fputs(
+"              hashes)  to  verify the peer. This can be a path to a file which\n"
+"              contains a single public key in PEM or DER format, or any number\n"
+"              of base64 encoded sha256 hashes preceded by 'sha256//' and sepa-\n"
+"              rated by ';'\n"
 "\n"
 "              When negotiating a TLS or SSL connection,  the  server  sends  a\n"
+"              certificate  indicating  its identity. A public key is extracted\n"
 , stdout);
  fputs(
-"              certificate  indicating  its identity. A public key is extracted\n"
 "              from this certificate and if it does not exactly match the  pub-\n"
 "              lic  key provided to this option, curl will abort the connection\n"
 "              before sending or receiving any data.\n"
 "\n"
-"              This is currently only implemented in the  OpenSSL,  GnuTLS  and\n"
-"              GSKit backends.\n"
+"              Added in 7.39.0 for OpenSSL, GnuTLS and GSKit. Added  in  7.43.0\n"
+"              for  NSS  and wolfSSL/CyaSSL. sha256 support added in 7.44.0 for\n"
+"              OpenSSL, GnuTLS, NSS and wolfSSL/CyaSSL. Other SSL backends  not\n"
+"              supported.\n"
 "\n"
+, stdout);
+ fputs(
 "              If this option is used several times, the last one will be used.\n"
+"\n"
+"       --cert-status\n"
+"              (SSL)  Tells curl to verify the status of the server certificate\n"
+"              by using the Certificate Status Request (aka. OCSP stapling) TLS\n"
+"              extension.\n"
+"\n"
+"              If  this option is enabled and the server sends an invalid (e.g.\n"
+"              expired) response, if the response suggests that the server cer-\n"
 , stdout);
  fputs(
-"              (Added in 7.39.0)\n"
+"              tificate  has  been  revoked, or no response at all is received,\n"
+"              the verification fails.\n"
+"\n"
+"              This is currently only implemented in the  OpenSSL,  GnuTLS  and\n"
+"              NSS backends.  (Added in 7.41.0)\n"
+"\n"
+"       --false-start\n"
+"\n"
+"              (SSL)  Tells  curl  to use false start during the TLS handshake.\n"
+"              False start is a mode where a  TLS  client  will  start  sending\n"
+, stdout);
+ fputs(
+"              application data before verifying the server's Finished message,\n"
+"              thus saving a round trip when performing a full handshake.\n"
+"\n"
+"              This is currently only implemented in the NSS and Secure  Trans-\n"
+"              port  (on  iOS  7.0  or  later, or OS X 10.9 or later) backends.\n"
+"              (Added in 7.42.0)\n"
 "\n"
 "       -f, --fail\n"
 "              (HTTP) Fail silently (no output at all) on server  errors.  This\n"
+, stdout);
+ fputs(
 "              is  mostly done to better enable scripts etc to better deal with\n"
 "              failed attempts. In normal cases when an 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(
 "              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"
 "              authentication is involved (response codes 401 and 407).\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"
-, stdout);
- fputs(
 "              using  the  Content-Type  multipart/form-data  according  to RFC\n"
 "              2388. This enables uploading of binary files etc. To  force  the\n"
+, stdout);
+ fputs(
 "              'content'  part  to  be  a  file, prefix the file name with an @\n"
 "              sign. To just get the content part from a file, prefix the  file\n"
 "              name  with  the symbol <. The difference between @ and < is then\n"
 "              that @ makes a file get attached in the post as a  file  upload,\n"
-, stdout);
- fputs(
 "              while  the  <  makes  a text field and just get the contents for\n"
 "              that text field from a file.\n"
 "\n"
+, stdout);
+ fputs(
 "              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"
@@ -810,9 +891,11 @@ void hugehelp(void)
 "              curl -F password=@/etc/passwd www.mypasswords.com\n"
 "\n"
 "              To read content from stdin instead of a file, use - as the file-\n"
+"              name.  This  goes  for both @ and < constructs. Unfortunately it\n"
+"              does not support reading the file from a named pipe or  similar,\n"
 , stdout);
  fputs(
-"              name. This goes for both @ and < constructs.\n"
+"              as it needs the full size before the transfer starts.\n"
 "\n"
 "              You  can  also  tell  curl  what  Content-Type  to  use by using\n"
 "              'type=', in a manner similar to:\n"
@@ -897,10 +980,11 @@ void hugehelp(void)
 "                     operates  on  the  file  \"normally\" (like in the multicwd\n"
 "                     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(
+"              (Added in 7.15.1)\n"
+"\n"
 "       --ftp-pasv\n"
 "              (FTP)  Use  passive mode for the data connection. Passive is the\n"
 "              internal default behavior, but using this option can be used  to\n"
@@ -908,10 +992,10 @@ void hugehelp(void)
 "\n"
 "              If  this  option  is  used  several times, only the first one is\n"
 "              used. Undoing an enforced passive really isn't  doable  but  you\n"
-"              must then instead enforce the correct -P, --ftp-port again.\n"
-"\n"
 , stdout);
  fputs(
+"              must then instead enforce the correct -P, --ftp-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"
@@ -919,10 +1003,10 @@ void hugehelp(void)
 "              (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(
+"              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"
@@ -1028,6 +1112,14 @@ void hugehelp(void)
 "\n"
 "              # curl -H \"X-First-Name: Joe\" http://192.168.0.1/\n"
 "\n"
+"              WARNING:  headers  set  with  this  option  will  be  set in all\n"
+"              requests - even after redirects are  followed,  like  when  told\n"
+"              with  -L,  --location. This can lead to the header being sent to\n"
+"              other hosts than the original host, so sensitive headers  should\n"
+"              be used with caution combined with following redirects.\n"
+"\n"
+, stdout);
+ fputs(
 "              This  option  can  be  used multiple times to add/replace/remove\n"
 "              multiple headers.\n"
 "\n"
@@ -1035,33 +1127,36 @@ void hugehelp(void)
 "              (SCP/SFTP) Pass a string containing 32 hexadecimal  digits.  The\n"
 "              string  should  be the 128 bit MD5 checksum of the remote host's\n"
 "              public key, curl will refuse the connection with the host unless\n"
-, stdout);
- fputs(
 "              the md5sums match. (Added in 7.17.1)\n"
 "\n"
 "       --ignore-content-length\n"
-"              (HTTP)  Ignore  the  Content-Length header. This is particularly\n"
+, stdout);
+ fputs(
+"              For HTTP, Ignore the Content-Length header. This is particularly\n"
 "              useful for servers running Apache 1.x, which will report  incor-\n"
 "              rect Content-Length for files larger than 2 gigabytes.\n"
 "\n"
+"              For  FTP (since 7.46.0), skip the RETR command to figure out the\n"
+"              size before downloading a file.\n"
+"\n"
 "       -i, --include\n"
-"              (HTTP)  Include  the  HTTP-header in the output. The HTTP-header\n"
-"              includes things like server-name, date of  the  document,  HTTP-\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"
 "              version and more...\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 an FTP or FILE file, curl displays\n"
+"              the  command  HEAD which this uses to get nothing but the header\n"
+"              of a document. When used on an FTP or FILE file,  curl  displays\n"
 "              the file size and last modification time only.\n"
 "\n"
 "       --interface <name>\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"
+"              Perform  an operation using a specified interface. You can enter\n"
+"              interface name, IP address or host name. An example  could  look\n"
 "              like:\n"
 "\n"
 "               curl --interface eth0:1 http://www.netscape.com/\n"
@@ -1070,287 +1165,299 @@ void hugehelp(void)
 "\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"
 "              server-specified   Content-Disposition   filename   instead   of\n"
+, stdout);
+ fputs(
 "              extracting a filename from the URL.\n"
 "\n"
+"              If  the  server  specifies a file name and a file with that name\n"
+"              already exists in the current working directory it will  not  be\n"
+"              overwritten and an error will occur. If the server doesn't spec-\n"
+"              ify a file name then this option has no effect.\n"
+"\n"
+"              There's no attempt to decode %-sequences (yet) in  the  provided\n"
 , stdout);
  fputs(
-"              There's no attempt to decode %-sequences (yet) in  the  provided\n"
 "              file name, so this option may provide you with rather unexpected\n"
 "              file names.\n"
 "\n"
+"              WARNING: Exercise judicious use of this  option,  especially  on\n"
+"              Windows.  A  rogue  server  could  send you the name of a DLL or\n"
+"              other file that could possibly be loaded automatically  by  Win-\n"
+"              dows or some third party software.\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"
+"              (SSL)  This  option explicitly allows curl to perform \"insecure\"\n"
 , stdout);
  fputs(
-"              by  default.  This  makes  all connections considered \"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"
 "              fail unless -k, --insecure is used.\n"
 "\n"
-"              See    this    online    resource    for    further     details:\n"
-"              http://curl.haxx.se/docs/sslcerts.html\n"
+"              See     this    online    resource    for    further    details:\n"
+"              https://curl.haxx.se/docs/sslcerts.html\n"
 "\n"
 "       -K, --config <config file>\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"
 , stdout);
  fputs(
-"              written  which  then will be used as if they were written on the\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"
 "              actual command line.\n"
 "\n"
-"              Options and their parameters must be specified on the same  con-\n"
-"              fig  file  line,  separated  by whitespace, colon, or the equals\n"
-"              sign. Long option names can optionally be given  in  the  config\n"
-"              file  without  the initial double dashes and if so, the colon or\n"
+"              Options  and their parameters must be specified on the same con-\n"
+"              fig file line, separated by whitespace,  colon,  or  the  equals\n"
 , stdout);
  fputs(
-"              equals characters can be used as separators. If  the  option  is\n"
-"              specified  with  one  or  two  dashes,  there can be no colon or\n"
+"              sign.  Long  option  names can optionally be given in the config\n"
+"              file without the initial double dashes and if so, the  colon  or\n"
+"              equals  characters  can  be used as separators. If the option is\n"
+"              specified with one or two dashes,  there  can  be  no  colon  or\n"
 "              equals character between the option and its parameter.\n"
 "\n"
 "              If the parameter is to contain whitespace, the parameter must be\n"
-"              enclosed  within  quotes.  Within  double  quotes, the following\n"
-"              escape sequences are available: \\\\, \\\", \\t, \\n,  \\r  and  \\v.  A\n"
 , stdout);
  fputs(
-"              backslash  preceding  any  other letter is ignored. If the first\n"
+"              enclosed within quotes.  Within  double  quotes,  the  following\n"
+"              escape  sequences  are  available:  \\\\, \\\", \\t, \\n, \\r and \\v. A\n"
+"              backslash preceding any other letter is ignored.  If  the  first\n"
 "              column of a config line is a '#' character, the rest of the line\n"
 "              will be treated as a comment. Only write one option per physical\n"
 "              line in the config file.\n"
 "\n"
-"              Specify the filename to -K, --config as '-' to  make  curl  read\n"
-"              the file from stdin.\n"
-"\n"
-"              Note  that  to  be able to specify a URL in the config file, you\n"
 , stdout);
  fputs(
-"              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"
+"              Specify  the  filename  to -K, --config as '-' to make curl read\n"
+"              the 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"
 "              this:\n"
 "\n"
-"              url = \"http://curl.haxx.se/docs/\"\n"
+"              url = \"https://curl.haxx.se/docs/\"\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"
+"              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(
-"              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"
-"              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"
-, stdout);
- fputs(
-"              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"
-"              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"
 "              output = \"curlhere.html\"\n"
 "              user-agent = \"superagent/1.0\"\n"
 "\n"
-, stdout);
- fputs(
 "              # and fetch another URL too\n"
 "              url = \"curl.haxx.se/docs/manpage.html\"\n"
 "              -O\n"
 "              referer = \"http://nowhereatall.com/\"\n"
 "              # --- 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"
-"       --keepalive-time <seconds>\n"
-"              This  option  sets  the  time  a connection needs to remain idle\n"
 , stdout);
  fputs(
-"              before sending keepalive probes and the time between  individual\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"
 "              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"
-"              If this option is used several times, the last one will be used.\n"
 , stdout);
  fputs(
+"              If this option is used several times, the last one will be used.\n"
 "              If unspecified, the option defaults to 60 seconds.\n"
 "\n"
 "       --key <key>\n"
 "              (SSL/SSH) Private key file name. Allows you to provide your pri-\n"
-"              vate key in this separate file. For SSH, if not specified,  curl\n"
-"              tries   the  following  candidates  in  order:  '~/.ssh/id_rsa',\n"
+"              vate  key in this separate file. For SSH, if not specified, curl\n"
+"              tries  the  following  candidates  in  order:   '~/.ssh/id_rsa',\n"
 "              '~/.ssh/id_dsa', './id_rsa', './id_dsa'.\n"
 "\n"
+, stdout);
+ fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --key-type <type>\n"
-, stdout);
- fputs(
-"              (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"
+"              (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"
 "              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"
-"              entered and should be one of 'clear', 'safe', 'confidential', or\n"
+"              (FTP)  Enable Kerberos authentication and use. The level must be\n"
 , stdout);
  fputs(
-"              'private'. Should you use a level that  is  not  one  of  these,\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"
 "              'private' will instead be used.\n"
 "\n"
-"              This  option  requires  a  library built with kerberos4 support.\n"
-"              This is not very common. Use -V, --version to see if  your  curl\n"
+"              This option requires a library  built  with  kerberos4  support.\n"
+"              This  is  not very common. Use -V, --version to see if your curl\n"
 "              supports it.\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"
 , stdout);
  fputs(
-"              only view. This is  especially  useful  if  the  user  wants  to\n"
-"              machine-parse  the contents of an FTP directory since the normal\n"
-"              directory view doesn't use a standard look or format. When  used\n"
-"              like  this,  the  option causes a NLST command to be sent to the\n"
+"              (FTP) When listing an FTP directory, this switch forces a  name-\n"
+"              only  view.  This  is  especially  useful  if  the user wants to\n"
+"              machine-parse the contents of an FTP directory since the  normal\n"
+"              directory  view doesn't use a standard look or format. When used\n"
+"              like this, the option causes a NLST command to be  sent  to  the\n"
 "              server instead of LIST.\n"
 "\n"
-"              Note: Some FTP servers list only  files  in  their  response  to\n"
 , stdout);
  fputs(
+"              Note:  Some  FTP  servers  list  only files in their response to\n"
 "              NLST; they do not include sub-directories and symbolic links.\n"
 "\n"
-"              (POP3)  When  retrieving a specific email from POP3, this switch\n"
-"              forces a LIST command to be performed instead of RETR.  This  is\n"
-"              particularly  useful if the user wants to see if a specific mes-\n"
+"              (POP3) When retrieving a specific email from POP3,  this  switch\n"
+"              forces  a  LIST command to be performed instead of RETR. This is\n"
+"              particularly useful if the user wants to see if a specific  mes-\n"
 "              sage id exists on the server and what size it is.\n"
 "\n"
-"              Note: When combined with -X, --request  <command>,  this  option\n"
 , stdout);
  fputs(
+"              Note:  When  combined  with -X, --request <command>, this option\n"
 "              can be used to send an UIDL command instead, so the user may use\n"
-"              the email's unique identifier rather than  it's  message  id  to\n"
+"              the  email's  unique  identifier  rather than it's message id to\n"
 "              make the request. (Added in 7.21.5)\n"
 "\n"
 "       -L, --location\n"
-"              (HTTP/HTTPS)  If  the server reports that the requested page has\n"
+"              (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"
 , stdout);
  fputs(
+"              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"
-"              tion-trusted  on how to change this. You can limit the amount of\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(
+"              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"
-"              request using the same unmodified method.\n"
-"\n"
+"              code was any other 3xx code, curl  will  re-send  the  following\n"
 , stdout);
  fputs(
-"              You can tell curl to not change the non-GET  request  method  to\n"
-"              GET  after  a  30x  response  by using the dedicated options for\n"
-"              that: --post301, --post302 and -post303.\n"
+"              request using the same unmodified method.\n"
 "\n"
-"       --libcurl <file>\n"
-"              Append this option to any ordinary curl command  line,  and  you\n"
-"              will  get a libcurl-using C source code written to the file that\n"
-"              does the equivalent of what your command-line operation does!\n"
+"              You  can  tell  curl to not change the non-GET request method to\n"
+"              GET after a 30x response by  using  the  dedicated  options  for\n"
+"              that: --post301, --post302 and --post303.\n"
 "\n"
+"       --libcurl <file>\n"
+"              Append  this  option  to any ordinary curl command line, and you\n"
+"              will get a libcurl-using C source code written to the file  that\n"
 , stdout);
  fputs(
-"              If this option is used several times, the last given  file  name\n"
+"              does the equivalent of what your command-line operation does!\n"
+"\n"
+"              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 - for\n"
+"              Specify the maximum transfer rate you want curl  to  use  -  for\n"
 "              both downloads and uploads. This feature is useful if you have a\n"
 "              limited pipe and you'd like your transfer not to use your entire\n"
-"              bandwidth. To make it slower than it otherwise would be.\n"
-"\n"
 , stdout);
  fputs(
-"              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"
+"              bandwidth. To make it slower than it otherwise would be.\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"
-"              transfer. It means that curl might use higher transfer speeds in\n"
+"              The given rate is the average speed counted  during  the  entire\n"
 , stdout);
  fputs(
+"              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"
+"              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"
 "       --local-port <num>[-num]\n"
-"              Set a preferred number or range of local port numbers to use for\n"
 , stdout);
  fputs(
-"              the connection(s).  Note that  port  numbers  by  nature  are  a\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"
 "              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"
 "       --location-trusted\n"
-"              (HTTP/HTTPS)  Like  -L,  --location,  but will allow sending the\n"
-"              name + password to all hosts that the site may redirect to. This\n"
+"              (HTTP/HTTPS) Like -L, --location, but  will  allow  sending  the\n"
 , stdout);
  fputs(
+"              name + password to all hosts that the site may redirect to. This\n"
 "              may or may not introduce a security breach if the site redirects\n"
-"              you to a site to which  you'll  send  your  authentication  info\n"
+"              you  to  a  site  to  which you'll send your authentication info\n"
 "              (which is plaintext in the case of HTTP Basic authentication).\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"
+"              Maximum time in seconds that you allow the  whole  operation  to\n"
 , stdout);
  fputs(
-"              ing  for  hours due to slow networks or links going down.  Since\n"
+"              take.   This is useful for preventing your batch jobs from hang-\n"
+"              ing for hours due to slow networks or links going  down.   Since\n"
 "              7.32.0, this option accepts decimal values, but the actual time-\n"
 "              out will decrease in accuracy as the specified timeout increases\n"
 "              in decimal precision.  See also the --connect-timeout option.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       --login-options <options>\n"
 , stdout);
  fputs(
+"       --login-options <options>\n"
 "              Specify the login options to use during server authentication.\n"
 "\n"
-"              You can use the  login  options  to  specify  protocol  specific\n"
-"              options  that may be used during authentication. At present only\n"
-"              IMAP, POP3 and SMTP support login options. For more  information\n"
-"              about  the  login options please see RFC 2384, RFC 5092 and IETF\n"
+"              You  can  use  the  login  options  to specify protocol specific\n"
+"              options that may be used during authentication. At present  only\n"
+"              IMAP,  POP3 and SMTP support login options. For more information\n"
+"              about the login options please see RFC 2384, RFC 5092  and  IETF\n"
 "              draft draft-earhart-url-smtp-00.txt (Added in 7.34.0).\n"
 "\n"
 , stdout);
@@ -1358,14 +1465,14 @@ void hugehelp(void)
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --mail-auth <address>\n"
-"              (SMTP) Specify a single address. This will be  used  to  specify\n"
-"              the  authentication  address  (identity)  of a submitted message\n"
+"              (SMTP)  Specify  a  single address. This will be used to specify\n"
+"              the authentication address (identity)  of  a  submitted  message\n"
 "              that is being relayed to another server.\n"
 "\n"
 "              (Added in 7.25.0)\n"
 "\n"
 "       --mail-from <address>\n"
-"              (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"
 , stdout);
@@ -1373,52 +1480,52 @@ void hugehelp(void)
 "              (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"
+"              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"
+"              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"
 , stdout);
  fputs(
-"              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"
 "       --mail-rcpt <address>\n"
 "              (SMTP) Specify a single address, user name or mailing list name.\n"
-"              When performing a mail transfer, the recipient should specify  a\n"
+"              When  performing a mail transfer, the recipient should specify a\n"
 "              valid email address to send the mail to. (Added in 7.20.0)\n"
 "\n"
-"              When  performing  an  address  verification  (VRFY command), the\n"
+"              When performing an  address  verification  (VRFY  command),  the\n"
 , stdout);
  fputs(
-"              recipient should be specified as the user name or user name  and\n"
+"              recipient  should be specified as the user name or user name and\n"
 "              domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)\n"
 "\n"
 "              When performing a mailing list expand (EXPN command), the recip-\n"
-"              ient should be specified using the mailing list  name,  such  as\n"
+"              ient  should  be  specified using the mailing list name, such as\n"
 "              \"Friends\" or \"London-Office\".  (Added in 7.34.0)\n"
 "\n"
 "       --max-redirs <num>\n"
-"              Set  maximum  number  of  redirection-followings allowed. If -L,\n"
+"              Set maximum number of  redirection-followings  allowed.  If  -L,\n"
 , stdout);
  fputs(
 "              --location is used, this option can be used to prevent curl from\n"
-"              following  redirections  \"in absurdum\". By default, the limit is\n"
-"              set to 50 redirections. Set this option to -1 to make it  limit-\n"
+"              following redirections \"in absurdum\". By default, the  limit  is\n"
+"              set  to 50 redirections. Set this option to -1 to make it limit-\n"
 "              less.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --metalink\n"
-"              This  option  can  tell curl to parse and process a given URI as\n"
+"              This option can tell curl to parse and process a  given  URI  as\n"
 , stdout);
  fputs(
-"              Metalink file (both version 3 and 4 (RFC  5854)  are  supported)\n"
-"              and  make use of the mirrors listed within for failover if there\n"
-"              are errors (such as the file or server not being available).  It\n"
-"              will  also  verify  the hash of the file after the download com-\n"
-"              pletes. The Metalink file itself is downloaded and processed  in\n"
+"              Metalink  file  (both  version 3 and 4 (RFC 5854) are supported)\n"
+"              and make use of the mirrors listed within for failover if  there\n"
+"              are  errors (such as the file or server not being available). It\n"
+"              will also verify the hash of the file after  the  download  com-\n"
+"              pletes.  The Metalink file itself is downloaded and processed in\n"
 "              memory and not stored in the local file system.\n"
 "\n"
 , stdout);
@@ -1432,13 +1539,13 @@ void hugehelp(void)
 "\n"
 "              curl --metalink file://example.metalink\n"
 "\n"
-"              Please note that if FILE protocol is disabled, there is  no  way\n"
-"              to  use  a local Metalink file at the time of this writing. Also\n"
+"              Please  note  that if FILE protocol is disabled, there is no way\n"
+"              to use a local Metalink file at the time of this  writing.  Also\n"
 , stdout);
  fputs(
 "              note  that  if  --metalink  and  --include  are  used  together,\n"
-"              --include  will be ignored. This is because including headers in\n"
-"              the response will break Metalink parser and if the  headers  are\n"
+"              --include will be ignored. This is because including headers  in\n"
+"              the  response  will break Metalink parser and if the headers are\n"
 "              included in the file described in Metalink file, hash check will\n"
 "              fail.\n"
 "\n"
@@ -1447,19 +1554,19 @@ void hugehelp(void)
 "       -n, --netrc\n"
 , stdout);
  fputs(
-"              Makes curl scan the .netrc  (_netrc  on  Windows)  file  in  the\n"
+"              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"
-"              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"
+"              cally  used for FTP on Unix. If used with HTTP, curl will enable\n"
+"              user authentication. See netrc(5) ftp(1) for details on the file\n"
+"              format.  Curl  will  not  complain if that file doesn't have the\n"
+"              right permissions (it should not be either world- or group-read-\n"
 , stdout);
  fputs(
-"              readable). The environment variable \"HOME\" is used to  find  the\n"
-"              home directory.\n"
+"              able).  The environment variable \"HOME\" is used to find the home\n"
+"              directory.\n"
 "\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"
+"              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"
@@ -1468,112 +1575,112 @@ void hugehelp(void)
 , stdout);
  fputs(
 "              Disables the buffering of the output stream. In normal work sit-\n"
-"              uations, curl will use a standard buffered  output  stream  that\n"
+"              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"
-"              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"
 , stdout);
  fputs(
 "       --netrc-file\n"
-"              This option is similar to --netrc, except that you  provide  the\n"
-"              path  (absolute  or relative) to the netrc file that Curl should\n"
-"              use.  You can only specify one netrc  file  per  invocation.  If\n"
-"              several  --netrc-file  options  are  provided, only the last one\n"
+"              This  option  is similar to --netrc, except that you provide the\n"
+"              path (absolute or relative) to the netrc file that  Curl  should\n"
+"              use.   You  can  only  specify one netrc file per invocation. If\n"
+"              several --netrc-file options are provided,  only  the  last  one\n"
 "              will be used.  (Added in 7.21.5)\n"
 "\n"
-"              This option overrides any use of --netrc as  they  are  mutually\n"
+"              This  option  overrides  any use of --netrc as they are mutually\n"
 , stdout);
  fputs(
 "              exclusive.  It will also abide by --netrc-optional if specified.\n"
 "\n"
 "       --netrc-optional\n"
-"              Very  similar to --netrc, but this option makes the .netrc usage\n"
+"              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 Negotiate (SPNEGO) authentication.\n"
 "\n"
-"              If you want to enable Negotiate (SPNEGO) for  proxy  authentica-\n"
+"              If  you  want to enable Negotiate (SPNEGO) for proxy authentica-\n"
 "              tion, then use --proxy-negotiate.\n"
 "\n"
 , stdout);
  fputs(
-"              This  option  requires a library built with GSS-API or SSPI sup-\n"
-"              port. Use -V, --version  to  see  if  your  curl  supports  GSS-\n"
+"              This option requires a library built with GSS-API or  SSPI  sup-\n"
+"              port.  Use  -V,  --version  to  see  if  your curl supports GSS-\n"
 "              API/SSPI and SPNEGO.\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"
+"              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,  only  the  first  one  is\n"
+"              If  this  option  is  used  several times, only the first one is\n"
 "              used.\n"
 "\n"
 "       --no-keepalive\n"
 "              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"
+"              (SSL) Disable curl's use of SSL session-ID caching.  By  default\n"
 , stdout);
  fputs(
-"              all transfers are done using the cache. Note that while  nothing\n"
-"              should  ever  get  hurt  by attempting to reuse SSL session-IDs,\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"
 "              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"
+"              Note  that  this  is the negated option name documented. You can\n"
 "              thus use --sessionid to enforce session-ID caching.\n"
 "\n"
 , stdout);
  fputs(
 "       --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"
+"              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"
 , stdout);
  fputs(
-"              match  local.com,  local.com:80,  and  www.local.com,  but   not\n"
+"              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"
 , stdout);
  fputs(
-"              behavior  should  not be endorsed, you should encourage everyone\n"
-"              who uses NTLM to switch to a public and  documented  authentica-\n"
+"              behavior should not be endorsed, you should  encourage  everyone\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  -V,\n"
+"              This  option  requires a library built with SSL support. Use -V,\n"
 "              --version to see if your curl supports NTLM.\n"
 "\n"
 , stdout);
  fputs(
-"              If  this  option  is  used  several times, only the first one is\n"
+"              If this option is used several times,  only  the  first  one  is\n"
 "              used.\n"
 "\n"
 "       -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);
@@ -1584,97 +1691,103 @@ void hugehelp(void)
 "\n"
 "                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"
 , 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"
+"              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"
 "              off.)\n"
 "\n"
-"              The remote file name to use for saving  is  extracted  from  the\n"
-"              given URL, nothing else.\n"
+"              The  file will be saved in the current working directory. If you\n"
+"              want the file saved in a  different  directory,  make  sure  you\n"
+"              change  the  current working directory before invoking curl with\n"
+"              this option.\n"
 "\n"
-"              Consequentially,  the  file will be saved in the current working\n"
-"              directory. If you want the file saved in a different  directory,\n"
 , stdout);
  fputs(
-"              make sure you change current working directory before you invoke\n"
-"              curl with the -O, --remote-name flag!\n"
+"              The remote file name to use for saving  is  extracted  from  the\n"
+"              given  URL,  nothing  else,  and if it already exists it will be\n"
+"              overwritten. If you want the server to be  able  to  choose  the\n"
+"              file name refer to -J, --remote-header-name which can be used in\n"
+"              addition to this option. If the server chooses a file  name  and\n"
+"              that name already exists it will not be overwritten.\n"
 "\n"
+, stdout);
+ fputs(
 "              There is no URL decoding done on the file name. If it has %20 or\n"
-"              other  URL  encoded parts of the name, they will end up as-is as\n"
+"              other URL encoded parts of the name, they will end up  as-is  as\n"
 "              file name.\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"
 "       --oauth2-bearer\n"
-, stdout);
- fputs(
 "              (IMAP, POP3, SMTP) Specify the Bearer Token for OAUTH 2.0 server\n"
 "              authentication. The Bearer Token is used in conjunction with the\n"
-"              user  name  which  can  be specified as part of the --url or -u,\n"
+, stdout);
+ fputs(
+"              user name which can be specified as part of  the  --url  or  -u,\n"
 "              --user options.\n"
 "\n"
-"              The Bearer Token and user name are formatted  according  to  RFC\n"
+"              The  Bearer  Token  and user name are formatted according to RFC\n"
 "              6750.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --proxy-header <header>\n"
+"              (HTTP) Extra header to include in the request when sending  HTTP\n"
+"              to a proxy. You may specify any number of extra headers. This is\n"
 , stdout);
  fputs(
-"              (HTTP)  Extra header to include in the request when sending HTTP\n"
-"              to a proxy. You may specify any number of extra headers. This is\n"
-"              the  equivalent option to -H, --header but is for proxy communi-\n"
-"              cation only like in CONNECT requests when you  want  a  separate\n"
-"              header  sent  to  the proxy to what is sent to the actual remote\n"
+"              the equivalent option to -H, --header but is for proxy  communi-\n"
+"              cation  only  like  in CONNECT requests when you want a separate\n"
+"              header sent to the proxy to what is sent to  the  actual  remote\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"
+, stdout);
+ fputs(
 "              returns, they will only mess things up for you.\n"
 "\n"
-"              Headers  specified  with  this  option  will  not be included in\n"
+"              Headers specified with this  option  will  not  be  included  in\n"
 "              requests that curl knows will not be sent to a proxy.\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"
-, stdout);
- fputs(
 "              (Added in 7.37.0)\n"
 "       -p, --proxytunnel\n"
 "              When an HTTP proxy is used (-x, --proxy), this option will cause\n"
-"              non-HTTP protocols  to  attempt  to  tunnel  through  the  proxy\n"
-"              instead  of merely using it to do HTTP-like operations. The tun-\n"
-"              nel approach is made with the HTTP  proxy  CONNECT  request  and\n"
-"              requires that the proxy allows direct connect to the remote port\n"
 , stdout);
  fputs(
+"              non-HTTP  protocols  to  attempt  to  tunnel  through  the proxy\n"
+"              instead of merely using it to do HTTP-like operations. The  tun-\n"
+"              nel  approach  is  made  with the HTTP proxy CONNECT request and\n"
+"              requires that the proxy allows direct connect to the remote port\n"
 "              number curl wants to tunnel through to.\n"
 "\n"
 "       -P, --ftp-port <address>\n"
-"              (FTP) Reverses the default initiator/listener  roles  when  con-\n"
-"              necting  with  FTP.  This  switch makes curl use active mode. In\n"
-"              practice, curl then tells the server  to  connect  back  to  the\n"
-"              client's specified address and port, while passive mode asks the\n"
-"              server to setup an IP address and port for  it  to  connect  to.\n"
+"              (FTP)  Reverses  the  default initiator/listener roles when con-\n"
 , stdout);
  fputs(
+"              necting with FTP. This switch makes curl  use  active  mode.  In\n"
+"              practice,  curl  then  tells  the  server to connect back to the\n"
+"              client's specified address and port, while passive mode asks the\n"
+"              server  to  setup  an  IP address and port for it to connect to.\n"
 "              <address> should be one of:\n"
 "\n"
 "              interface\n"
-"                     i.e  \"eth0\"  to  specify which interface's IP address you\n"
+"                     i.e \"eth0\" to specify which interface's  IP  address  you\n"
+, stdout);
+ fputs(
 "                     want to use (Unix only)\n"
 "\n"
 "              IP address\n"
@@ -1683,84 +1796,91 @@ void hugehelp(void)
 "              host name\n"
 "                     i.e \"my.host.domain\" to specify the machine\n"
 "\n"
-"              -      make curl pick the same IP address that is  already  used\n"
-, stdout);
- fputs(
+"              -      make  curl  pick the same IP address that is already used\n"
 "                     for the control connection\n"
 "\n"
-"       If  this  option is used several times, the last one will be used. Dis-\n"
-"       able the use of PORT with --ftp-pasv. Disable the attempt  to  use  the\n"
-"       EPRT  command  instead  of PORT by using --disable-eprt. EPRT is really\n"
-"       PORT++.\n"
+"              If this option is used several times, the last one will be used.\n"
+, stdout);
+ fputs(
+"              Disable  the use of PORT with --ftp-pasv. Disable the attempt to\n"
+"              use the EPRT command instead of PORT  by  using  --disable-eprt.\n"
+"              EPRT is really PORT++.\n"
 "\n"
-"       Starting in 7.19.5, you can append \":[start]-[end]\" to the right of the\n"
-"       address,  to tell curl what TCP port range to use. That means you spec-\n"
+"              Starting in 7.19.5, you can append \":[start]-[end]\" to the right\n"
+"              of the address, to tell curl what TCP port range  to  use.  That\n"
+"              means you specify a port range, from a lower to a higher number.\n"
 , stdout);
  fputs(
-"       ify a port range, from a lower to a  higher  number.  A  single  number\n"
-"       works  as well, but do note that it increases the risk of failure since\n"
-"       the port may not be available.\n"
+"              A single number works as well, but do note that it increases the\n"
+"              risk of failure since the port may not be available.\n"
 "\n"
 "       --pass <phrase>\n"
 "              (SSL/SSH) Passphrase for the private key\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
-"       --post301\n"
-"              (HTTP) Tells curl to respect RFC  2616/10.3.2  and  not  convert\n"
+"       --path-as-is\n"
+"              Tell  curl  to  not handle sequences of /../ or /./ in the given\n"
+"              URL path. Normally curl will squash or merge them  according  to\n"
 , stdout);
  fputs(
-"              POST  requests  into GET requests when following a 301 redirect-\n"
-"              ion. The non-RFC behaviour is ubiquitous  in  web  browsers,  so\n"
-"              curl  does  the  conversion  by default to maintain consistency.\n"
-"              However, a server may require a POST to remain a POST after such\n"
-"              a  redirection.  This  option  is meaningful only when using -L,\n"
-"              --location (Added in 7.17.1)\n"
+"              standards but with this option set you tell it not to do that.\n"
 "\n"
-"       --post302\n"
+"              (Added in 7.42.0)\n"
+"\n"
+"       --post301\n"
+"              (HTTP) Tells curl to respect RFC 7230/6.4.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"
 , stdout);
  fputs(
-"              (HTTP) Tells curl to respect RFC  2616/10.3.2  and  not  convert\n"
-"              POST  requests  into GET requests when following a 302 redirect-\n"
-"              ion. The non-RFC behaviour is ubiquitous  in  web  browsers,  so\n"
-"              curl  does  the  conversion  by default to maintain consistency.\n"
-"              However, a server may require a POST to remain a POST after such\n"
-"              a  redirection.  This  option  is meaningful only when using -L,\n"
+"              server  may  require  a POST to remain a POST after such a redi-\n"
+"              rection. This option is meaningful only when using  -L,  --loca-\n"
+"              tion (Added in 7.17.1)\n"
+"\n"
+"       --post302\n"
+"              (HTTP) Tells curl to respect RFC 7230/6.4.3 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"
 , stdout);
  fputs(
-"              --location (Added in 7.19.1)\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,  --loca-\n"
+"              tion (Added in 7.19.1)\n"
 "\n"
 "       --post303\n"
-"              (HTTP) Tells curl to respect RFC  2616/10.3.2  and  not  convert\n"
-"              POST  requests  into GET requests when following a 303 redirect-\n"
-"              ion. The non-RFC behaviour is ubiquitous  in  web  browsers,  so\n"
-"              curl  does  the  conversion  by default to maintain consistency.\n"
-"              However, a server may require a POST to remain a POST after such\n"
+"              (HTTP) Tells curl to respect RFC 7230/6.4.4 and not convert POST\n"
+"              requests into GET requests when following a 303 redirection. The\n"
 , stdout);
  fputs(
-"              a  redirection.  This  option  is meaningful only when using -L,\n"
-"              --location (Added in 7.26.0)\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,  --loca-\n"
+"              tion (Added in 7.26.0)\n"
 "\n"
 "       --proto <protocols>\n"
-"              Tells  curl  to  use  the  listed  protocols  for  its   initial\n"
+"              Tells   curl  to  use  the  listed  protocols  for  its  initial\n"
+, stdout);
+ fputs(
 "              retrieval. Protocols are evaluated left to right, are comma sep-\n"
-"              arated, and are each a protocol name or 'all',  optionally  pre-\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"
+"              -  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(
+"              =  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"
 "              For example:\n"
 "\n"
 "              --proto -ftps  uses the default protocols, but disables ftps\n"
@@ -1769,145 +1889,187 @@ void hugehelp(void)
 "                             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"
+"                             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"
+"              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"
+, stdout);
+ fputs(
+"              is the same as concatenating the protocols into one instance  of\n"
 "              the option.\n"
 "\n"
 "              (Added in 7.20.2)\n"
 "\n"
+"       --proto-default <protocol>\n"
+"              Tells curl to use protocol for any URL missing a scheme name.\n"
+"\n"
+"              Example:\n"
+"\n"
+"              --proto-default https ftp.mozilla.org\n"
+"                     https://ftp.mozilla.org\n"
+"\n"
+"       An  unknown or unsupported protocol causes error CURLE_UNSUPPORTED_PRO-\n"
+"       TOCOL.\n"
+"\n"
+, stdout);
+ fputs(
+"       This option does not change the default proxy protocol (http).\n"
+"\n"
+"       Without this option curl would make a guess  based  on  the  host,  see\n"
+"       --url for details.\n"
+"\n"
+"       (Added in 7.45.0)\n"
+"\n"
 "       --proto-redir <protocols>\n"
-"              Tells curl to use the listed protocols  after  a  redirect.  See\n"
+"              Tells  curl to use the listed protocols on redirect. See --proto\n"
+"              for how protocols are represented.\n"
+"\n"
+"              Example:\n"
+"\n"
+"              --proto-redir -all,http,https\n"
+"                     Allow only HTTP and HTTPS on redirect.\n"
+"\n"
 , stdout);
  fputs(
-"              --proto for how protocols are represented.\n"
+"       By default curl will allow all protocols  on  redirect  except  several\n"
+"       disabled  for security reasons: Since 7.19.4 FILE and SCP are disabled,\n"
+"       and since 7.40.0 SMB and SMBS are also disabled. Specifying all or +all\n"
+"       enables  all  protocols on redirect, including those disabled for secu-\n"
+"       rity.\n"
 "\n"
-"              (Added in 7.20.2)\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"
+"              Tells curl to pick a suitable authentication method when  commu-\n"
+, stdout);
+ fputs(
+"              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"
+"              remote host. Basic is the  default  authentication  method  curl\n"
 "              uses with proxies.\n"
 "\n"
 "       --proxy-digest\n"
-"              Tells curl to use HTTP Digest authentication when  communicating\n"
+, stdout);
+ fputs(
+"              Tells  curl to use HTTP Digest authentication when communicating\n"
 "              with the given proxy. Use --digest for enabling HTTP Digest with\n"
 "              a remote host.\n"
 "\n"
 "       --proxy-negotiate\n"
-, stdout);
- fputs(
-"              Tells curl to use HTTP Negotiate  (SPNEGO)  authentication  when\n"
+"              Tells  curl  to  use HTTP Negotiate (SPNEGO) authentication when\n"
 "              communicating with the given proxy. Use --negotiate for enabling\n"
 "              HTTP Negotiate (SPNEGO) with a remote host. (Added in 7.17.1)\n"
 "\n"
 "       --proxy-ntlm\n"
-"              Tells curl to use HTTP NTLM  authentication  when  communicating\n"
+, stdout);
+ fputs(
+"              Tells  curl  to  use HTTP NTLM authentication when communicating\n"
 "              with the given proxy. Use --ntlm for enabling NTLM with a remote\n"
 "              host.\n"
 "\n"
-"       --proxy1.0 <proxyhost[:port]>\n"
+"       --proxy-service-name <servicename>\n"
+"              This  option  allows  you  to  change the service name for proxy\n"
+"              negotiation.\n"
+"\n"
+"              Examples:  --proxy-negotiate   proxy-name   --proxy-service-name\n"
+"              sockd would use sockd/proxy-name.  (Added in 7.43.0).\n"
+"\n"
 , stdout);
  fputs(
-"              Use the specified HTTP 1.0 proxy. If  the  port  number  is  not\n"
+"       --proxy1.0 <proxyhost[:port]>\n"
+"              Use  the  specified  HTTP  1.0  proxy. If the port number is not\n"
 "              specified, it is assumed at port 1080.\n"
 "\n"
-"              The  only difference between this and the HTTP proxy option (-x,\n"
+"              The only difference between this and the HTTP proxy option  (-x,\n"
 "              --proxy), is that attempts to use CONNECT through the proxy will\n"
 "              specify an HTTP 1.0 protocol instead of the default HTTP 1.1.\n"
 "\n"
 "       --pubkey <key>\n"
-"              (SSH)  Public  key  file name. Allows you to provide your public\n"
 , stdout);
  fputs(
+"              (SSH) Public key file name. Allows you to  provide  your  public\n"
 "              key in this separate file.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "              (As of 7.39.0, curl attempts to automatically extract the public\n"
-"              key  from the private key file, so passing this option is gener-\n"
+"              key from the private key file, so passing this option is  gener-\n"
 "              ally not required. Note that this public key extraction requires\n"
-"              libcurl  to  be linked against a copy of libssh2 1.2.8 or higher\n"
-"              that is itself linked against OpenSSL.)\n"
-"\n"
 , stdout);
  fputs(
-"       -q     If used as the first parameter on the command line,  the  curlrc\n"
-"              config  file will not be read and used. See the -K, --config for\n"
+"              libcurl to be linked against a copy of libssh2 1.2.8  or  higher\n"
+"              that is itself linked against OpenSSL.)\n"
+"\n"
+"       -q     If  used  as the first parameter on the command line, the curlrc\n"
+"              config file will not be read and used. See the -K, --config  for\n"
 "              details on the default config file search path.\n"
 "\n"
 "       -Q, --quote <command>\n"
-"              (FTP/SFTP) Send an arbitrary command to the remote FTP  or  SFTP\n"
-"              server.  Quote commands are sent BEFORE the transfer takes place\n"
-"              (just after the initial PWD command in an FTP  transfer,  to  be\n"
+"              (FTP/SFTP)  Send  an arbitrary command to the remote FTP or SFTP\n"
 , stdout);
  fputs(
+"              server. Quote commands are sent BEFORE the transfer takes  place\n"
+"              (just  after  the  initial PWD command in an FTP transfer, to be\n"
 "              exact). To make commands take place after a successful transfer,\n"
-"              prefix them with a dash '-'.  To make  commands  be  sent  after\n"
+"              prefix  them  with  a  dash '-'.  To make commands be sent after\n"
 "              curl has changed the working directory, just before the transfer\n"
-"              command(s), prefix the command with a '+'  (this  is  only  sup-\n"
-"              ported  for FTP). You may specify any number of commands. If the\n"
+"              command(s),  prefix  the  command  with a '+' (this is only sup-\n"
+, stdout);
+ fputs(
+"              ported for FTP). You may specify any number of commands. If  the\n"
 "              server returns failure for one of the commands, the entire oper-\n"
+"              ation will be aborted. You must send syntactically  correct  FTP\n"
+"              commands  as  RFC 959 defines to FTP servers, or one of the com-\n"
+"              mands listed below to SFTP servers.  This  option  can  be  used\n"
+"              multiple  times. When speaking to an FTP server, prefix the com-\n"
 , stdout);
  fputs(
-"              ation  will  be aborted. You must send syntactically correct FTP\n"
-"              commands as RFC 959 defines to FTP servers, or one of  the  com-\n"
-"              mands  listed  below  to  SFTP servers.  This option can be used\n"
-"              multiple times. When speaking to an FTP server, prefix the  com-\n"
 "              mand with an asterisk (*) to make curl continue even if the com-\n"
 "              mand fails as by default curl will stop at first failure.\n"
 "\n"
-, stdout);
- fputs(
-"              SFTP is a binary protocol. Unlike for FTP, curl interprets  SFTP\n"
-"              quote  commands  itself before sending them to the server.  File\n"
+"              SFTP  is a binary protocol. Unlike for FTP, curl interprets SFTP\n"
+"              quote commands itself before sending them to the  server.   File\n"
 "              names may be quoted shell-style to embed spaces or special char-\n"
-"              acters.   Following is the list of all supported SFTP quote com-\n"
+"              acters.  Following is the list of all supported SFTP quote  com-\n"
 "              mands:\n"
 "\n"
-"              chgrp group file\n"
-"                     The chgrp command sets the group ID of the file named  by\n"
 , stdout);
  fputs(
-"                     the  file  operand to the group ID specified by the group\n"
+"              chgrp group file\n"
+"                     The  chgrp command sets the group ID of the file named by\n"
+"                     the file operand to the group ID specified by  the  group\n"
 "                     operand. The group operand is a decimal integer group ID.\n"
 "\n"
 "              chmod mode file\n"
-"                     The chmod command modifies the  file  mode  bits  of  the\n"
+"                     The  chmod  command  modifies  the  file mode bits of the\n"
 "                     specified file. The mode operand is an octal integer mode\n"
 "                     number.\n"
 "\n"
-"              chown user file\n"
-"                     The chown command sets the owner of the file named by the\n"
 , stdout);
  fputs(
-"                     file  operand  to the user ID specified by the user oper-\n"
+"              chown user file\n"
+"                     The chown command sets the owner of the file named by the\n"
+"                     file operand to the user ID specified by the  user  oper-\n"
 "                     and. The user operand is a decimal integer user ID.\n"
 "\n"
 "              ln source_file target_file\n"
 "                     The ln and symlink commands create a symbolic link at the\n"
-"                     target_file  location  pointing  to the source_file loca-\n"
+"                     target_file location pointing to  the  source_file  loca-\n"
 "                     tion.\n"
 "\n"
-"              mkdir directory_name\n"
-"                     The mkdir command creates  the  directory  named  by  the\n"
 , stdout);
  fputs(
+"              mkdir directory_name\n"
+"                     The  mkdir  command  creates  the  directory named by the\n"
 "                     directory_name operand.\n"
 "\n"
 "              pwd    The pwd command returns the absolute pathname of the cur-\n"
@@ -1915,27 +2077,27 @@ void hugehelp(void)
 "\n"
 "              rename source target\n"
 "                     The rename command renames the file or directory named by\n"
-"                     the  source  operand to the destination path named by the\n"
+"                     the source operand to the destination path named  by  the\n"
+, stdout);
+ fputs(
 "                     target operand.\n"
 "\n"
 "              rm file\n"
-, stdout);
- fputs(
 "                     The rm command removes the file specified by the file op-\n"
 "                     erand.\n"
 "\n"
 "              rmdir directory\n"
-"                     The  rmdir  command removes the directory entry specified\n"
+"                     The rmdir command removes the directory  entry  specified\n"
 "                     by the directory operand, provided it is empty.\n"
 "\n"
 "              symlink source_file target_file\n"
 "                     See ln.\n"
 "\n"
 "       -r, --range <range>\n"
-"              (HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial  docu-\n"
 , stdout);
  fputs(
-"              ment)  from  a  HTTP/1.1,  FTP  or  SFTP server or a local FILE.\n"
+"              (HTTP/FTP/SFTP/FILE)  Retrieve a byte range (i.e a partial docu-\n"
+"              ment) from a HTTP/1.1, FTP or  SFTP  server  or  a  local  FILE.\n"
 "              Ranges can be specified in a number of ways.\n"
 "\n"
 "              0-499     specifies the first 500 bytes\n"
@@ -1946,140 +2108,145 @@ void hugehelp(void)
 "\n"
 "              9500-     specifies the bytes from offset 9500 and forward\n"
 "\n"
-"              0-0,-1    specifies the first and last byte only(*)(H)\n"
-"\n"
-"              500-700,600-799\n"
 , stdout);
  fputs(
-"                        specifies 300 bytes from offset 500(H)\n"
+"              0-0,-1    specifies the first and last byte only(*)(HTTP)\n"
 "\n"
 "              100-199,500-599\n"
-"                        specifies two separate 100-byte ranges(*)(H)\n"
+"                        specifies two separate 100-byte ranges(*) (HTTP)\n"
 "\n"
-"       (*) = NOTE that this will cause the server to reply  with  a  multipart\n"
-"       response!\n"
+"              (*)  = NOTE that this will cause the server to reply with a mul-\n"
+"              tipart response!\n"
 "\n"
-"       Only  digit characters (0-9) are valid in the 'start' and 'stop' fields\n"
-"       of the 'start-stop' range syntax. If a non-digit character is given  in\n"
-"       the  range, the server's response will be unspecified, depending on the\n"
+"              Only digit characters (0-9) are valid in the 'start' and  'stop'\n"
+"              fields  of the 'start-stop' range syntax. If a non-digit charac-\n"
 , stdout);
  fputs(
-"       server's configuration.\n"
+"              ter is given in the range, the server's response will be unspec-\n"
+"              ified, depending on the server's configuration.\n"
 "\n"
-"       You should also be aware that many HTTP/1.1 servers do  not  have  this\n"
-"       feature  enabled,  so  that  when  you  attempt  to get a range, you'll\n"
-"       instead get the whole document.\n"
-"\n"
-"       FTP and SFTP range downloads only support the simple 'start-stop'  syn-\n"
-"       tax  (optionally  with  one of the numbers omitted). FTP use depends on\n"
-"       the extended FTP command SIZE.\n"
-"\n"
-"       If this option is used several times, the last one will be used.\n"
+"              You  should also be aware that many HTTP/1.1 servers do not have\n"
+"              this feature enabled, so that when you attempt to get  a  range,\n"
+"              you'll instead get the whole document.\n"
 "\n"
+"              FTP  and  SFTP  range  downloads only support the simple 'start-\n"
 , stdout);
  fputs(
+"              stop' syntax (optionally with one of the numbers  omitted).  FTP\n"
+"              use depends on the extended FTP command SIZE.\n"
+"\n"
+"              If this option is used several times, the last one will be used.\n"
+"\n"
 "       -R, --remote-time\n"
-"              When used, this will make curl attempt to figure out  the  time-\n"
-"              stamp  of  the  remote  file,  and if that is available make the\n"
+"              When  used,  this will make curl attempt to figure out the time-\n"
+"              stamp of the remote file, and if  that  is  available  make  the\n"
 "              local file get that same timestamp.\n"
 "\n"
 "       --random-file <file>\n"
+, stdout);
+ fputs(
 "              (SSL) Specify the path name to file containing what will be con-\n"
-"              sidered  as  random  data.  The  data is used to seed the random\n"
+"              sidered as random data. The data is  used  to  seed  the  random\n"
 "              engine for SSL connections.  See also the --egd-file option.\n"
 "\n"
-, stdout);
- fputs(
 "       --raw  (HTTP) When used, it disables all internal HTTP decoding of con-\n"
-"              tent  or  transfer  encodings  and  instead makes them passed on\n"
+"              tent or transfer encodings and  instead  makes  them  passed  on\n"
 "              unaltered, raw. (Added in 7.16.2)\n"
 "\n"
 "       --remote-name-all\n"
-"              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"
-"              you want to disable that for a specific URL after --remote-name-\n"
 , stdout);
  fputs(
-"              all  has  been  used,  you  must use \"-o -\" or --no-remote-name.\n"
+"              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"
+"              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"
 "              (Added in 7.19.0)\n"
 "\n"
 "       --resolve <host:port:address>\n"
-"              Provide a custom address for a  specific  host  and  port  pair.\n"
-"              Using  this,  you  can make the curl requests(s) use a specified\n"
-"              address and prevent the otherwise normally resolved  address  to\n"
-"              be  used.  Consider it a sort of /etc/hosts alternative provided\n"
+"              Provide  a  custom  address  for  a specific host and port pair.\n"
+, stdout);
+ fputs(
+"              Using this, you can make the curl requests(s)  use  a  specified\n"
+"              address  and  prevent the otherwise normally resolved address to\n"
+"              be used. Consider it a sort of /etc/hosts  alternative  provided\n"
+"              on  the  command line. The port number should be the number used\n"
+"              for the specific protocol the host will be used  for.  It  means\n"
+"              you  need several entries if you want to provide address for the\n"
 , stdout);
  fputs(
-"              on the command line. The port number should be the  number  used\n"
-"              for  the  specific  protocol the host will be used for. It means\n"
-"              you need several entries if you want to provide address for  the\n"
 "              same host but different ports.\n"
 "\n"
-"              This  option  can  be  used many times to add many host names to\n"
+"              This option can be used many times to add  many  host  names  to\n"
 "              resolve.\n"
 "\n"
 "              (Added in 7.21.3)\n"
 "\n"
 "       --retry <num>\n"
+"              If  a  transient  error is returned when curl tries to perform a\n"
+"              transfer, it will retry this number of times before  giving  up.\n"
+"              Setting  the  number to 0 makes curl do no retries (which is the\n"
 , stdout);
  fputs(
-"              If a transient error is returned when curl tries  to  perform  a\n"
-"              transfer,  it  will retry this number of times before giving up.\n"
-"              Setting the number to 0 makes curl do no retries (which  is  the\n"
-"              default).  Transient  error  means either: a timeout, an FTP 4xx\n"
+"              default). Transient error means either: a timeout,  an  FTP  4xx\n"
 "              response code or an HTTP 5xx response code.\n"
 "\n"
-"              When curl is about to retry a transfer, it will first  wait  one\n"
+"              When  curl  is about to retry a transfer, it will first wait one\n"
+"              second and then for all forthcoming retries it will  double  the\n"
+"              waiting  time until it reaches 10 minutes which then will be the\n"
+"              delay between the rest of the retries.  By  using  --retry-delay\n"
 , stdout);
  fputs(
-"              second  and  then for all forthcoming retries it will double the\n"
-"              waiting time until it reaches 10 minutes which then will be  the\n"
-"              delay  between  the rest of the retries.  By using --retry-delay\n"
-"              you  disable  this  exponential  backoff  algorithm.  See   also\n"
-"              --retry-max-time  to  limit  the total time allowed for retries.\n"
+"              you   disable  this  exponential  backoff  algorithm.  See  also\n"
+"              --retry-max-time to limit the total time  allowed  for  retries.\n"
 "              (Added in 7.12.3)\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --retry-delay <seconds>\n"
-"              Make curl sleep this amount of time before  each  retry  when  a\n"
-"              transfer  has  failed  with  a  transient  error (it changes the\n"
-"              default backoff time algorithm between retries). This option  is\n"
-"              only  interesting if --retry is also used. Setting this delay to\n"
+"              Make  curl  sleep  this  amount of time before each retry when a\n"
+"              transfer has failed with  a  transient  error  (it  changes  the\n"
 , stdout);
  fputs(
-"              zero will make curl use the default  backoff  time.   (Added  in\n"
+"              default  backoff time algorithm between retries). This option is\n"
+"              only interesting if --retry is also used. Setting this delay  to\n"
+"              zero  will  make  curl  use the default backoff time.  (Added in\n"
 "              7.12.3)\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --retry-max-time <seconds>\n"
-"              The  retry  timer  is  reset  before the first transfer attempt.\n"
-"              Retries will be done as usual (see --retry) as long as the timer\n"
-"              hasn't reached this given limit. Notice that if the timer hasn't\n"
+"              The retry timer is reset  before  the  first  transfer  attempt.\n"
 , stdout);
  fputs(
-"              reached the limit, the request will be made and  while  perform-\n"
-"              ing,  it may take longer than this given time period. To limit a\n"
-"              single request's maximum time, use  -m,  --max-time.   Set  this\n"
+"              Retries will be done as usual (see --retry) as long as the timer\n"
+"              hasn't reached this given limit. Notice that if the timer hasn't\n"
+"              reached  the  limit, the request will be made and while perform-\n"
+"              ing, it may take longer than this given time period. To limit  a\n"
+"              single  request's  maximum  time,  use -m, --max-time.  Set this\n"
 "              option to zero to not timeout retries. (Added in 7.12.3)\n"
 "\n"
+, stdout);
+ fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       -s, --silent\n"
-"              Silent  or  quiet  mode. Don't show progress meter or error mes-\n"
-, stdout);
- fputs(
-"              sages.  Makes Curl mute. It will still output the data  you  ask\n"
+"              Silent or quiet mode. Don't show progress meter  or  error  mes-\n"
+"              sages.   Makes  Curl mute. It will still output the data you ask\n"
 "              for, potentially even to the terminal/stdout unless you redirect\n"
 "              it.\n"
 "\n"
 "       --sasl-ir\n"
-"              Enable initial  response  in  SASL  authentication.   (Added  in\n"
+"              Enable  initial  response  in  SASL  authentication.   (Added in\n"
 "              7.31.0)\n"
 "\n"
+, stdout);
+ fputs(
+"       --service-name <servicename>\n"
+"              This option allows you to change the service name for SPNEGO.\n"
+"\n"
+"              Examples:   --negotiate   --service-name   sockd    would    use\n"
+"              sockd/server-name.  (Added in 7.43.0).\n"
+"\n"
 "       -S, --show-error\n"
 "              When  used  with  -s  it  makes curl show an error message if it\n"
 "              fails.\n"
@@ -2116,57 +2283,62 @@ void hugehelp(void)
 "              WARNING: this option loosens the SSL security, and by using this\n"
 "              flag you ask for exactly that.  (Added in 7.25.0)\n"
 "\n"
-"       --socks4 <host[:port]>\n"
-"              Use the specified SOCKS4 proxy. If the port number is not speci-\n"
+"       --ssl-no-revoke\n"
+"              (WinSSL) This option tells curl to disable  certificate  revoca-\n"
 , stdout);
  fputs(
+"              tion checks.  WARNING: this option loosens the SSL security, and\n"
+"              by using this flag you ask for exactly that.  (Added in 7.44.0)\n"
+"\n"
+"       --socks4 <host[:port]>\n"
+"              Use the specified SOCKS4 proxy. If the port number is not speci-\n"
 "              fied, it is assumed at port 1080. (Added in 7.15.2)\n"
 "\n"
 "              This  option  overrides any previous use of -x, --proxy, as they\n"
 "              are mutually exclusive.\n"
 "\n"
+, stdout);
+ fputs(
 "              Since 7.21.7, this option is superfluous since you can specify a\n"
 "              socks4 proxy with -x, --proxy using a socks4:// protocol prefix.\n"
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --socks4a <host[:port]>\n"
-, stdout);
- fputs(
 "              Use the specified SOCKS4a proxy. If the port number is not spec-\n"
 "              ified, it is assumed at port 1080. (Added in 7.18.0)\n"
 "\n"
 "              This option overrides any previous use of -x, --proxy,  as  they\n"
+, stdout);
+ fputs(
 "              are mutually exclusive.\n"
 "\n"
 "              Since 7.21.7, this option is superfluous since you can specify a\n"
 "              socks4a proxy with -x, --proxy using a socks4a:// protocol  pre-\n"
 "              fix.\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       --socks5-hostname <host[:port]>\n"
 "              Use  the  specified  SOCKS5 proxy (and let the proxy resolve the\n"
 "              host name). If the port number is not specified, it  is  assumed\n"
+, stdout);
+ fputs(
 "              at port 1080. (Added in 7.18.0)\n"
 "\n"
 "              This  option  overrides any previous use of -x, --proxy, as they\n"
 "              are mutually exclusive.\n"
 "\n"
-, stdout);
- fputs(
 "              Since 7.21.7, this option is superfluous since you can specify a\n"
 "              socks5 hostname proxy with -x, --proxy using a socks5h:// proto-\n"
 "              col prefix.\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
+, stdout);
+ fputs(
 "              (This  option  was  previously  wrongly  documented  and used as\n"
 "              --socks without the number appended.)\n"
 "\n"
 "       --socks5 <host[:port]>\n"
-, stdout);
- fputs(
 "              Use the specified SOCKS5 proxy  -  but  resolve  the  host  name\n"
 "              locally.  If  the port number is not specified, it is assumed at\n"
 "              port 1080.\n"
@@ -2174,10 +2346,10 @@ void hugehelp(void)
 "              This option overrides any previous use of -x, --proxy,  as  they\n"
 "              are mutually exclusive.\n"
 "\n"
-"              Since 7.21.7, this option is superfluous since you can specify a\n"
-"              socks5 proxy with -x, --proxy using a socks5:// protocol prefix.\n"
 , stdout);
  fputs(
+"              Since 7.21.7, this option is superfluous since you can specify a\n"
+"              socks5 proxy with -x, --proxy using a socks5:// protocol prefix.\n"
 "              If this option is used several times, the last one will be used.\n"
 "              (This  option  was  previously  wrongly  documented  and used as\n"
 "              --socks without the number appended.)\n"
@@ -2185,33 +2357,33 @@ void hugehelp(void)
 "              This option (as well as --socks4) does not work with IPV6,  FTPS\n"
 "              or LDAP.\n"
 "\n"
+, stdout);
+ fputs(
 "       --socks5-gssapi-service <servicename>\n"
 "              The default service name for a socks server is rcmd/server-fqdn.\n"
 "              This option allows you to change it.\n"
 "\n"
-, stdout);
- fputs(
 "              Examples:  --socks5  proxy-name  --socks5-gssapi-service   sockd\n"
 "              would  use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-\n"
 "              service sockd/real-name  would  use  sockd/real-name  for  cases\n"
 "              where  the proxy-name does not match the principal name.  (Added\n"
+, stdout);
+ fputs(
 "              in 7.19.4).\n"
 "\n"
 "       --socks5-gssapi-nec\n"
 "              As part of the GSS-API negotiation a protection mode is  negoti-\n"
-, stdout);
- fputs(
 "              ated.  RFC  1961 says in section 4.3/4.4 it should be protected,\n"
 "              but the NEC  reference  implementation  does  not.   The  option\n"
 "              --socks5-gssapi-nec  allows the unprotected exchange of the pro-\n"
 "              tection mode negotiation. (Added in 7.19.4).\n"
 "\n"
 "       --stderr <file>\n"
+, stdout);
+ fputs(
 "              Redirect all writes to stderr to the specified file instead.  If\n"
 "              the file name is a plain '-', it is instead written to stdout.\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       -t, --telnet-option <OPT=val>\n"
@@ -2221,31 +2393,31 @@ void hugehelp(void)
 "\n"
 "              XDISPLOC=<X display> Sets the X display location.\n"
 "\n"
+, stdout);
+ fputs(
 "              NEW_ENV=<var,val> Sets an environment variable.\n"
 "\n"
 "       -T, --upload-file <file>\n"
 "              This  transfers  the  specified local file to the remote URL. If\n"
-, stdout);
- fputs(
 "              there is no file part in the specified URL, Curl will append the\n"
 "              local file name. NOTE that you must use a trailing / on the last\n"
 "              directory to really prove to Curl that there is no file name  or\n"
 "              curl will think that your last directory name is the remote file\n"
+, stdout);
+ fputs(
 "              name to use. That will most likely cause the upload operation to\n"
 "              fail. If this is used on an HTTP(S) server, the PUT command will\n"
 "              be used.\n"
 "\n"
-, stdout);
- fputs(
 "              Use the file name \"-\" (a single dash) to use stdin instead of  a\n"
 "              given  file.   Alternately,  the file name \".\" (a single period)\n"
 "              may be specified instead of \"-\" to  use  stdin  in  non-blocking\n"
 "              mode  to  allow  reading  server  output  while  stdin  is being\n"
+, stdout);
+ fputs(
 "              uploaded.\n"
 "\n"
 "              You can specify one -T for each URL on the command line. Each -T\n"
-, stdout);
- fputs(
 "              + URL pair specifies what to upload and to where. curl also sup-\n"
 "              ports \"globbing\" of the -T argument, meaning that you can upload\n"
 "              multiple  files  to  a single URL by using the same URL globbing\n"
@@ -2255,11 +2427,11 @@ void hugehelp(void)
 "\n"
 "              or even\n"
 "\n"
+, stdout);
+ fputs(
 "              curl -T \"img[1-1000].png\" ftp://ftp.picturemania.com/upload/\n"
 "\n"
 "       --tcp-nodelay\n"
-, stdout);
- fputs(
 "              Turn on the TCP_NODELAY option. See the curl_easy_setopt(3)  man\n"
 "              page for details about this option. (Added in 7.11.2)\n"
 "\n"
@@ -2268,13 +2440,23 @@ void hugehelp(void)
 "              size that curl will try to use when transferring data to or from\n"
 "              a TFTP server. By default 512 bytes will be used.\n"
 "\n"
-"              If this option is used several times, the last one will be used.\n"
-"\n"
 , stdout);
  fputs(
+"              If this option is used several times, the last one will be used.\n"
+"\n"
 "              (Added in 7.20.0)\n"
+"       --tftp-no-options\n"
+"              (TFTP) Tells curl not to send TFTP options requests.\n"
+"\n"
+"              This  option  improves  interop with some legacy servers that do\n"
+"              not acknowledge or properly implement TFTP  options.  When  this\n"
+"              option is used --tftp-blksize is ignored.\n"
+"\n"
+"              (Added in 7.48.0)\n"
 "\n"
 "       --tlsauthtype <authtype>\n"
+, stdout);
+ fputs(
 "              Set  TLS  authentication  type.  Currently,  the  only supported\n"
 "              option is \"SRP\",  for  TLS-SRP  (RFC  5054).  If  --tlsuser  and\n"
 "              --tlspassword  are specified but --tlsauthtype is not, then this\n"
@@ -2282,9 +2464,9 @@ void hugehelp(void)
 "\n"
 "       --tlspassword <password>\n"
 "              Set password for use with the TLS authentication  method  speci-\n"
+"              fied  with  --tlsauthtype.  Requires that --tlsuser also be set.\n"
 , stdout);
  fputs(
-"              fied  with  --tlsauthtype.  Requires that --tlsuser also be set.\n"
 "              (Added in 7.21.4)\n"
 "\n"
 "       --tlsuser <user>\n"
@@ -2297,9 +2479,9 @@ void hugehelp(void)
 "              remote TLS server.  (Added in 7.34.0)\n"
 "\n"
 "       --tlsv1.1\n"
+"              (SSL) Forces curl to use TLS version 1.1 when negotiating with a\n"
 , stdout);
  fputs(
-"              (SSL) Forces curl to use TLS version 1.1 when negotiating with a\n"
 "              remote TLS server.  (Added in 7.34.0)\n"
 "\n"
 "       --tlsv1.2\n"
@@ -2311,11 +2493,11 @@ void hugehelp(void)
 "              of the algorithms curl supports, and uncompress the  data  while\n"
 "              receiving it.\n"
 "\n"
-, stdout);
- fputs(
 "              (Added in 7.21.6)\n"
 "\n"
 "       --trace <file>\n"
+, stdout);
+ fputs(
 "              Enables  a  full  trace  dump of all incoming and outgoing data,\n"
 "              including descriptive information, to the given output file. Use\n"
 "              \"-\" as filename to have the output sent to stdout.\n"
@@ -2366,8 +2548,8 @@ void hugehelp(void)
  fputs(
 "              When using Kerberos V5 with a Windows based  server  you  should\n"
 "              include  the  Windows domain name in the user name, in order for\n"
-"              the server to succesfully obtain a Kerberos Ticket. If you don't\n"
-"              then the initial authentication handshake may fail.\n"
+"              the server to successfully obtain  a  Kerberos  Ticket.  If  you\n"
+"              don't then the initial authentication handshake may fail.\n"
 "\n"
 "              When  using  NTLM,  the user name can be specified simply as the\n"
 "              user name, without the domain, if there is a single  domain  and\n"
@@ -2405,25 +2587,34 @@ void hugehelp(void)
 "              Specify a URL to fetch. This option is  mostly  handy  when  you\n"
 "              want to specify URL(s) in a config file.\n"
 "\n"
-"              This  option  may  be used any number of times. To control where\n"
+"              If  the given URL is missing a scheme name (such as \"http://\" or\n"
 , stdout);
  fputs(
-"              this URL is written, use the -o, --output or the  -O,  --remote-\n"
+"              \"ftp://\" etc) then curl will make a guess based on the host.  If\n"
+"              the  outermost  sub-domain  name  matches DICT, FTP, IMAP, LDAP,\n"
+"              POP3 or SMTP then that protocol will  be  used,  otherwise  HTTP\n"
+"              will be used. Since 7.45.0 guessing can be disabled by setting a\n"
+"              default protocol, see --proto-default for details.\n"
+"\n"
+"              This option may be used any number of times.  To  control  where\n"
+, stdout);
+ fputs(
+"              this  URL  is written, use the -o, --output or the -O, --remote-\n"
 "              name options.\n"
 "       -v, --verbose\n"
-"              Be  more  verbose/talkative  during  the  operation.  Useful for\n"
-"              debugging and seeing what's going on \"under the  hood\".  A  line\n"
-"              starting  with  '>'  means \"header data\" sent by curl, '<' means\n"
-"              \"header data\" received by curl that is hidden in  normal  cases,\n"
+"              Be more  verbose/talkative  during  the  operation.  Useful  for\n"
+"              debugging  and  seeing  what's going on \"under the hood\". A line\n"
+"              starting with '>' means \"header data\" sent by  curl,  '<'  means\n"
+"              \"header  data\"  received by curl that is hidden in normal cases,\n"
 , stdout);
  fputs(
-"              and  a  line starting with '*' means additional info provided by\n"
+"              and a line starting with '*' means additional info  provided  by\n"
 "              curl.\n"
 "\n"
-"              Note that if you only want  HTTP  headers  in  the  output,  -i,\n"
+"              Note  that  if  you  only  want  HTTP headers in the output, -i,\n"
 "              --include might be the option you're looking for.\n"
 "\n"
-"              If  you think this option still doesn't give you enough details,\n"
+"              If you think this option still doesn't give you enough  details,\n"
 "              consider using --trace or --trace-ascii instead.\n"
 "\n"
 "              This option overrides previous uses of --trace-ascii or --trace.\n"
@@ -2434,38 +2625,38 @@ void hugehelp(void)
 "\n"
 "       -w, --write-out <format>\n"
 "              Make curl display information on stdout after a completed trans-\n"
-"              fer.  The  format  is a string that may contain plain text mixed\n"
-"              with any number of variables. The format can be specified  as  a\n"
-"              literal  \"string\",  or  you can have curl read the format from a\n"
-"              file with \"@filename\" and to tell curl to read the  format  from\n"
+"              fer. The format is a string that may contain  plain  text  mixed\n"
+"              with  any  number of variables. The format can be specified as a\n"
+"              literal \"string\", or you can have curl read the  format  from  a\n"
+"              file  with  \"@filename\" and to tell curl to read the format from\n"
 , stdout);
  fputs(
 "              stdin you write \"@-\".\n"
 "\n"
-"              The  variables  present in the output format will be substituted\n"
-"              by the value or text that curl thinks fit, as  described  below.\n"
-"              All  variables are specified as %{variable_name} and to output a\n"
-"              normal % you just write them as %%. You can output a newline  by\n"
+"              The variables present in the output format will  be  substituted\n"
+"              by  the  value or text that curl thinks fit, as described below.\n"
+"              All variables are specified as %{variable_name} and to output  a\n"
+"              normal  % you just write them as %%. You can output a newline by\n"
 "              using \\n, a carriage return with \\r and a tab space with \\t.\n"
 "\n"
 , stdout);
  fputs(
 "              NOTE: The %-symbol is a special symbol in the win32-environment,\n"
-"              where all occurrences of %  must  be  doubled  when  using  this\n"
+"              where  all  occurrences  of  %  must  be doubled when using this\n"
 "              option.\n"
 "\n"
 "              The variables available are:\n"
 "\n"
-"              content_type   The  Content-Type  of  the requested document, if\n"
+"              content_type   The Content-Type of the  requested  document,  if\n"
 "                             there was any.\n"
 "\n"
 "              filename_effective\n"
-"                             The ultimate filename that curl  writes  out  to.\n"
+"                             The  ultimate  filename  that curl writes out to.\n"
 , stdout);
  fputs(
-"                             This  is only meaningful if curl is told to write\n"
-"                             to a file  with  the  --remote-name  or  --output\n"
-"                             option.  It's most useful in combination with the\n"
+"                             This is only meaningful if curl is told to  write\n"
+"                             to  a  file  with  the  --remote-name or --output\n"
+"                             option. It's most useful in combination with  the\n"
 "                             --remote-header-name option. (Added in 7.25.1)\n"
 "\n"
 "              ftp_entry_path The initial path curl ended up in when logging on\n"
@@ -2474,43 +2665,43 @@ void hugehelp(void)
 , stdout);
  fputs(
 "              http_code      The numerical response code that was found in the\n"
-"                             last retrieved HTTP(S)  or  FTP(s)  transfer.  In\n"
-"                             7.18.2  the alias response_code was added to show\n"
+"                             last  retrieved  HTTP(S)  or  FTP(s) transfer. In\n"
+"                             7.18.2 the alias response_code was added to  show\n"
 "                             the same info.\n"
 "\n"
-"              http_connect   The numerical code that was  found  in  the  last\n"
-"                             response   (from  a  proxy)  to  a  curl  CONNECT\n"
+"              http_connect   The  numerical  code  that  was found in the last\n"
+"                             response  (from  a  proxy)  to  a  curl   CONNECT\n"
 "                             request. (Added in 7.12.4)\n"
 "\n"
 , stdout);
  fputs(
-"              local_ip       The IP address of  the  local  end  of  the  most\n"
-"                             recently  done connection - can be either IPv4 or\n"
+"              local_ip       The  IP  address  of  the  local  end of the most\n"
+"                             recently done connection - can be either IPv4  or\n"
 "                             IPv6 (Added in 7.29.0)\n"
 "\n"
-"              local_port     The local port number of the most  recently  done\n"
+"              local_port     The  local  port number of the most recently done\n"
 "                             connection (Added in 7.29.0)\n"
 "\n"
-"              num_connects   Number  of new connects made in the recent trans-\n"
+"              num_connects   Number of new connects made in the recent  trans-\n"
 "                             fer. (Added in 7.12.3)\n"
 "\n"
 , stdout);
  fputs(
-"              num_redirects  Number of redirects that  were  followed  in  the\n"
+"              num_redirects  Number  of  redirects  that  were followed in the\n"
 "                             request. (Added in 7.12.3)\n"
 "\n"
-"              redirect_url   When  an HTTP request was made without -L to fol-\n"
+"              redirect_url   When an HTTP request was made without -L to  fol-\n"
 "                             low redirects, this variable will show the actual\n"
-"                             URL  a  redirect  would  take  you  to. (Added in\n"
+"                             URL a redirect  would  take  you  to.  (Added  in\n"
 "                             7.18.2)\n"
 "\n"
-"              remote_ip      The remote IP address of the most  recently  done\n"
+"              remote_ip      The  remote  IP address of the most recently done\n"
 , stdout);
  fputs(
 "                             connection - can be either IPv4 or IPv6 (Added in\n"
 "                             7.29.0)\n"
 "\n"
-"              remote_port    The remote port number of the most recently  done\n"
+"              remote_port    The  remote port number of the most recently done\n"
 "                             connection (Added in 7.29.0)\n"
 "\n"
 "              size_download  The total amount of bytes that were downloaded.\n"
@@ -2520,7 +2711,7 @@ void hugehelp(void)
 "\n"
 , stdout);
  fputs(
-"              size_request   The total amount of bytes that were sent  in  the\n"
+"              size_request   The  total  amount of bytes that were sent in the\n"
 "                             HTTP request.\n"
 "\n"
 "              size_upload    The total amount of bytes that were uploaded.\n"
@@ -2528,36 +2719,36 @@ void hugehelp(void)
 "              speed_download The average download speed that curl measured for\n"
 "                             the complete download. Bytes per second.\n"
 "\n"
-"              speed_upload   The average upload speed that curl  measured  for\n"
+"              speed_upload   The  average  upload speed that curl measured for\n"
 "                             the complete upload. Bytes per second.\n"
 "\n"
 , stdout);
  fputs(
 "              ssl_verify_result\n"
-"                             The  result of the SSL peer certificate verifica-\n"
+"                             The result of the SSL peer certificate  verifica-\n"
 "                             tion that was requested. 0 means the verification\n"
 "                             was successful. (Added in 7.19.0)\n"
 "\n"
 "              time_appconnect\n"
-"                             The  time,  in  seconds,  it  took from the start\n"
-"                             until the SSL/SSH/etc  connect/handshake  to  the\n"
+"                             The time, in seconds,  it  took  from  the  start\n"
+"                             until  the  SSL/SSH/etc  connect/handshake to the\n"
 , stdout);
  fputs(
 "                             remote host was completed. (Added in 7.19.0)\n"
 "\n"
-"              time_connect   The  time,  in  seconds,  it  took from the start\n"
-"                             until the TCP connect  to  the  remote  host  (or\n"
+"              time_connect   The time, in seconds,  it  took  from  the  start\n"
+"                             until  the  TCP  connect  to  the remote host (or\n"
 "                             proxy) was completed.\n"
 "\n"
 "              time_namelookup\n"
-"                             The  time,  in  seconds,  it  took from the start\n"
+"                             The time, in seconds,  it  took  from  the  start\n"
 "                             until the name resolving was completed.\n"
 "\n"
 "              time_pretransfer\n"
 , stdout);
  fputs(
-"                             The time, in seconds,  it  took  from  the  start\n"
-"                             until  the file transfer was just about to begin.\n"
+"                             The  time,  in  seconds,  it  took from the start\n"
+"                             until the file transfer was just about to  begin.\n"
 "                             This includes all pre-transfer commands and nego-\n"
 "                             tiations that are specific to the particular pro-\n"
 "                             tocol(s) involved.\n"
@@ -2565,56 +2756,56 @@ void hugehelp(void)
 "              time_redirect  The time, in seconds, it took for all redirection\n"
 , stdout);
  fputs(
-"                             steps  include  name lookup, connect, pretransfer\n"
-"                             and transfer before  the  final  transaction  was\n"
-"                             started.  time_redirect shows the complete execu-\n"
-"                             tion time for multiple  redirections.  (Added  in\n"
+"                             steps include name lookup,  connect,  pretransfer\n"
+"                             and  transfer  before  the  final transaction was\n"
+"                             started. time_redirect shows the complete  execu-\n"
+"                             tion  time  for  multiple redirections. (Added in\n"
 "                             7.12.3)\n"
 "\n"
 "              time_starttransfer\n"
-"                             The  time,  in  seconds,  it  took from the start\n"
+"                             The time, in seconds,  it  took  from  the  start\n"
 , stdout);
  fputs(
-"                             until the first byte was just about to be  trans-\n"
-"                             ferred.  This  includes time_pretransfer and also\n"
-"                             the time  the  server  needed  to  calculate  the\n"
+"                             until  the first byte was just about to be trans-\n"
+"                             ferred. This includes time_pretransfer  and  also\n"
+"                             the  time  the  server  needed  to  calculate the\n"
 "                             result.\n"
 "\n"
-"              time_total     The  total time, in seconds, that the full opera-\n"
+"              time_total     The total time, in seconds, that the full  opera-\n"
 "                             tion lasted. The time will be displayed with mil-\n"
 "                             lisecond resolution.\n"
 "\n"
 , stdout);
  fputs(
 "              url_effective  The URL that was fetched last. This is most mean-\n"
-"                             ingful if you've told curl  to  follow  location:\n"
+"                             ingful  if  you've  told curl to follow location:\n"
 "                             headers.\n"
 "\n"
-"       If this option is used several times, the last one will be used.\n"
+"              If this option is used several times, the last one will be used.\n"
 "\n"
 "       -x, --proxy <[protocol://][user:password@]proxyhost[:port]>\n"
 "              Use the specified proxy.\n"
 "\n"
-"              The  proxy  string can be specified with a protocol:// prefix to\n"
+"              The proxy string can be specified with a protocol://  prefix  to\n"
 , stdout);
  fputs(
-"              specify alternative proxy protocols. Use socks4://,  socks4a://,\n"
+"              specify  alternative proxy protocols. Use socks4://, socks4a://,\n"
 "              socks5:// or socks5h:// to request the specific SOCKS version to\n"
-"              be used. No protocol specified, http:// and all others  will  be\n"
+"              be  used.  No protocol specified, http:// and all others will be\n"
 "              treated as HTTP proxies. (The protocol support was added in curl\n"
 "              7.21.7)\n"
 "\n"
-"              If the port number is not specified in the proxy string,  it  is\n"
+"              If  the  port number is not specified in the proxy string, it is\n"
 "              assumed to be 1080.\n"
 "\n"
 , stdout);
  fputs(
-"              This  option  overrides  existing environment variables that set\n"
-"              the proxy to use. If there's an environment variable  setting  a\n"
+"              This option overrides existing environment  variables  that  set\n"
+"              the  proxy  to use. If there's an environment variable setting a\n"
 "              proxy, you can set proxy to \"\" to override it.\n"
 "\n"
 "              All operations that are performed over an HTTP proxy will trans-\n"
-"              parently be converted to HTTP. It means  that  certain  protocol\n"
+"              parently  be  converted  to HTTP. It means that certain protocol\n"
 "              specific operations might not be available. This is not the case\n"
 , stdout);
  fputs(
@@ -2622,11 +2813,11 @@ void hugehelp(void)
 "              ytunnel option.\n"
 "\n"
 "              User and password that might be provided in the proxy string are\n"
-"              URL decoded by curl. This allows you to pass in special  charac-\n"
+"              URL  decoded by curl. This allows you to pass in special charac-\n"
 "              ters such as @ by using %40 or pass in a colon with %3a.\n"
 "\n"
-"              The  proxy host can be specified the exact same way as the proxy\n"
-"              environment variables, including the protocol  prefix  (http://)\n"
+"              The proxy host can be specified the exact same way as the  proxy\n"
+"              environment  variables,  including the protocol prefix (http://)\n"
 , stdout);
  fputs(
 "              and the embedded user + password.\n"
@@ -2635,38 +2826,45 @@ void hugehelp(void)
 "\n"
 "       -X, --request <command>\n"
 "              (HTTP) Specifies a custom request method to use when communicat-\n"
-"              ing with the HTTP server.  The specified request  will  be  used\n"
-"              instead  of  the  method otherwise used (which defaults to GET).\n"
-"              Read the HTTP 1.1 specification for  details  and  explanations.\n"
+"              ing  with the HTTP server.  The specified request method will be\n"
+"              used instead of the method otherwise  used  (which  defaults  to\n"
+"              GET).  Read  the HTTP 1.1 specification for details and explana-\n"
 , stdout);
  fputs(
-"              Common  additional  HTTP  requests  include  PUT and DELETE, but\n"
-"              related technologies like WebDAV offers PROPFIND, COPY, MOVE and\n"
-"              more.\n"
+"              tions. Common additional HTTP requests include PUT  and  DELETE,\n"
+"              but related technologies like WebDAV offers PROPFIND, COPY, MOVE\n"
+"              and more.\n"
 "\n"
-"              Normally  you  don't  need  this option. All sorts of GET, HEAD,\n"
+"              Normally you don't need this option. All  sorts  of  GET,  HEAD,\n"
 "              POST and PUT requests are rather invoked by using dedicated com-\n"
 "              mand line options.\n"
 "\n"
-"              This  option  only  changes  the  actual  word  used in the HTTP\n"
+"              This option only changes  the  actual  word  used  in  the  HTTP\n"
 , stdout);
  fputs(
-"              request, it does not alter the way curl behaves. So for  example\n"
-"              if  you  want  to make a proper HEAD request, using -X HEAD will\n"
+"              request,  it does not alter the way curl behaves. So for example\n"
+"              if you want to make a proper HEAD request, using  -X  HEAD  will\n"
 "              not suffice. You need to use the -I, --head option.\n"
 "\n"
+"              The method string you set with -X will be used for all requests,\n"
+"              which if you for example use -L, --location may cause unintended\n"
+"              side-effects  when  curl doesn't change request method according\n"
+, stdout);
+ fputs(
+"              to the HTTP 30x response codes - and similar.\n"
+"\n"
 "              (FTP) Specifies a custom FTP command to use instead of LIST when\n"
 "              doing file lists with FTP.\n"
 "\n"
 "              (POP3) Specifies a custom POP3 command to use instead of LIST or\n"
 "              RETR. (Added in 7.26.0)\n"
 "\n"
-, stdout);
- fputs(
 "              (IMAP) Specifies a custom IMAP command to use instead  of  LIST.\n"
 "              (Added in 7.30.0)\n"
 "\n"
 "              (SMTP) Specifies a custom SMTP command to use instead of HELP or\n"
+, stdout);
+ fputs(
 "              VRFY. (Added in 7.34.0)\n"
 "\n"
 "              If this option is used several times, the last one will be used.\n"
@@ -2674,21 +2872,21 @@ void hugehelp(void)
 "       --xattr\n"
 "              When saving output to a file, this option tells  curl  to  store\n"
 "              certain  file  metadata  in extended file attributes. Currently,\n"
-, stdout);
- fputs(
 "              the URL is stored in the xdg.origin.url attribute and, for HTTP,\n"
 "              the  content  type  is stored in the mime_type attribute. If the\n"
+, stdout);
+ fputs(
 "              file system does not support extended attributes, a  warning  is\n"
 "              issued.\n"
 "\n"
 "       -y, --speed-time <time>\n"
 "              If a download is slower than speed-limit bytes per second during\n"
 "              a speed-time period, the download gets aborted. If speed-time is\n"
-, stdout);
- fputs(
 "              used, the default speed-limit will be 1 unless set with -Y.\n"
 "\n"
 "              This  option  controls  transfers  and thus will not affect slow\n"
+, stdout);
+ fputs(
 "              connects etc. If this is a concern for you, try  the  --connect-\n"
 "              timeout option.\n"
 "\n"
@@ -2696,20 +2894,20 @@ void hugehelp(void)
 "\n"
 "       -Y, --speed-limit <speed>\n"
 "              If a download is slower than this given speed (in bytes per sec-\n"
-, stdout);
- fputs(
 "              ond) for speed-time seconds it gets aborted. speed-time  is  set\n"
 "              with -y and is 30 if not set.\n"
 "\n"
+, stdout);
+ fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
 "       -z, --time-cond <date expression>|<file>\n"
 "              (HTTP/FTP)  Request a file that has been modified later than the\n"
 "              given time and date, or one that has been modified  before  that\n"
 "              time.  The <date expression> can be all sorts of date strings or\n"
+"              if it doesn't match any internal ones, it is taken as a filename\n"
 , stdout);
  fputs(
-"              if it doesn't match any internal ones, it is taken as a filename\n"
 "              and  tries  to  get  the  modification  date (mtime) from <file>\n"
 "              instead. See the curl_getdate(3) man pages for  date  expression\n"
 "              details.\n"
@@ -2718,10 +2916,10 @@ void hugehelp(void)
 "              a document that is older than the given date/time, default is  a\n"
 "              document that is newer than the specified date/time.\n"
 "\n"
-, stdout);
- fputs(
 "              If this option is used several times, the last one will be used.\n"
 "\n"
+, stdout);
+ fputs(
 "       -h, --help\n"
 "              Usage  help.  This lists all current command line options with a\n"
 "              short description.\n"
@@ -2732,10 +2930,10 @@ void hugehelp(void)
 "       -V, --version\n"
 "              Displays information about curl and the libcurl version it uses.\n"
 "              The first line includes the full version of  curl,  libcurl  and\n"
-, stdout);
- fputs(
 "              other 3rd party libraries linked with the executable.\n"
 "\n"
+, stdout);
+ fputs(
 "              The  second  line (starts with \"Protocols:\") shows all protocols\n"
 "              that libcurl reports to support.\n"
 "\n"
@@ -2746,9 +2944,9 @@ void hugehelp(void)
 "\n"
 "              krb4   Krb4 for FTP is supported.\n"
 "\n"
+"              SSL    SSL  versions of various protocols are supported, such as\n"
 , stdout);
  fputs(
-"              SSL    SSL  versions of various protocols are supported, such as\n"
 "                     HTTPS, FTPS, POP3S and so on.\n"
 "\n"
 "              libz   Automatic decompression of compressed files over HTTP  is\n"
@@ -2760,9 +2958,9 @@ void hugehelp(void)
 "                     more error-tracking and memory debugging etc.  For  curl-\n"
 "                     developers only!\n"
 "\n"
+"              AsynchDNS\n"
 , stdout);
  fputs(
-"              AsynchDNS\n"
 "                     This  curl  uses asynchronous name resolves. Asynchronous\n"
 "                     name resolves can be done using either the c-ares or  the\n"
 "                     threaded resolver backends.\n"
@@ -2775,9 +2973,9 @@ void hugehelp(void)
 "\n"
 "              IDN    This curl supports IDN - international domain names.\n"
 "\n"
+"              GSS-API\n"
 , stdout);
  fputs(
-"              GSS-API\n"
 "                     GSS-API is supported.\n"
 "\n"
 "              SSPI   SSPI is supported.\n"
@@ -3083,7 +3281,7 @@ void hugehelp(void)
 "       is found in the separate THANKS file.\n"
 "\n"
 "WWW\n"
-"       http://curl.haxx.se\n"
+"       https://curl.haxx.se\n"
 "\n"
 "FTP\n"
 "       ftp://ftp.sunet.se/pub/www/utilities/curl/\n"
@@ -3098,7 +3296,7 @@ void hugehelp(void)
  fputs(
 "  from the curl web pages, located at:\n"
 "\n"
-"        http://curl.haxx.se\n"
+"        https://curl.haxx.se\n"
 "\n"
 "SIMPLE USAGE\n"
 "\n"
@@ -3637,8 +3835,8 @@ void hugehelp(void)
 "  stored cookies which match the request as it follows the location.  The\n"
 "  file \"empty.txt\" may be a nonexistent file.\n"
 "\n"
-"  Alas, to both read and write cookies from a netscape cookie file, you can\n"
-"  set both -b and -c to use the same file:\n"
+"  To read and write cookies from a netscape cookie file, you can set both -b\n"
+"  and -c to use the same file:\n"
 "\n"
 , stdout);
  fputs(
@@ -4049,7 +4247,7 @@ void hugehelp(void)
  fputs(
 "  http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm\n"
 "\n"
-"  RFC 2255, \"The LDAP URL Format\" http://curl.haxx.se/rfc/rfc2255.txt\n"
+"  RFC 2255, \"The LDAP URL Format\" https://curl.haxx.se/rfc/rfc2255.txt\n"
 "\n"
 "  To show you an example, this is how I can get all people from my local LDAP\n"
 "  server that has a certain sub-domain in their email address:\n"
@@ -4268,7 +4466,7 @@ void hugehelp(void)
  fputs(
 "  For your convenience, we have several open mailing lists to discuss curl,\n"
 "  its development and things relevant to this. Get all info at\n"
-"  http://curl.haxx.se/mail/. Some of the lists available are:\n"
+"  https://curl.haxx.se/mail/. Some of the lists available are:\n"
 "\n"
 "  curl-users\n"
 "\n"
@@ -4311,7 +4509,7 @@ void hugehelp(void) {}
 #else
 /*
  * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Sun Dec 28 14:36:38 2014
+ * Generation time: Tue Mar 22 10:34:41 2016
  */
 #ifdef USE_MANUAL
 #include "tool_hugehelp.h"
@@ -4319,4089 +4517,4282 @@ void hugehelp(void) {}
 #include "memdebug.h" /* keep this as LAST include */
 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 162028
-     to 48958 bytes. You can disable the use of compressed help
+     Thanks to this operation, the size of this data shrunk from 170377
+     to 51273 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,
-  0x6b, 0x7b, 0x1b, 0xd7, 0x91, 0x2e, 0xfa, 0x9d, 0xbf, 0xa2, 0x07, 0x39,
-  0x19, 0x90, 0x09, 0x00, 0x5e, 0x74, 0xb1, 0xc5, 0x48, 0x1e, 0xd3, 0x14,
-  0x65, 0x73, 0x4c, 0x89, 0xdc, 0x04, 0x65, 0x3b, 0xdb, 0xf6, 0xa3, 0xa7,
-  0x01, 0x34, 0xc9, 0x0e, 0x81, 0x6e, 0xa4, 0xbb, 0x41, 0x8a, 0x99, 0xc9,
-  0xfc, 0xf6, 0x53, 0xf5, 0x56, 0xd5, 0x5a, 0xab, 0x2f, 0x20, 0x65, 0x4f,
-  0x9c, 0x33, 0xfb, 0x9c, 0xe3, 0x99, 0x88, 0x24, 0xd0, 0xbd, 0xae, 0xb5,
-  0x6a, 0xd5, 0xf5, 0xad, 0x28, 0x7a, 0xec, 0xbf, 0x0f, 0xf8, 0xdf, 0x07,
-  0xfa, 0x8f, 0x7e, 0x6e, 0x44, 0xd1, 0x59, 0x91, 0xff, 0x25, 0x99, 0x56,
-  0xdd, 0xcf, 0x7e, 0xf8, 0xf0, 0x9f, 0x91, 0xfc, 0x1f, 0xbd, 0xf3, 0x13,
-  0xfd, 0xdc, 0x78, 0xb0, 0xed, 0xed, 0xc8, 0xbf, 0xf0, 0x9f, 0x1f, 0xb6,
-  0xa2, 0xc7, 0x5e, 0xf8, 0xcf, 0x68, 0x13, 0x2f, 0x7c, 0xd0, 0x1e, 0x5e,
-  0xf2, 0xef, 0x1f, 0x3e, 0x3c, 0xdc, 0xc9, 0x4f, 0x3c, 0x2a, 0xfe, 0x67,
-  0x9b, 0xdf, 0xfb, 0xe9, 0x03, 0xff, 0x4a, 0x9f, 0x6c, 0x6c, 0xbc, 0x3b,
-  0x78, 0x7b, 0x64, 0xaf, 0x4e, 0x57, 0xc5, 0x3c, 0x1a, 0x46, 0x55, 0x11,
-  0x67, 0xe5, 0x65, 0x52, 0x44, 0x71, 0xf4, 0xfe, 0xfc, 0x64, 0x63, 0x63,
-  0xfc, 0xe7, 0x77, 0xa7, 0x67, 0xe3, 0xe3, 0x71, 0xed, 0xb1, 0x1f, 0xf3,
-  0x65, 0x95, 0xe6, 0x59, 0xf9, 0x73, 0xf4, 0x23, 0x3d, 0x34, 0x1a, 0x8d,
-  0x7e, 0xde, 0xd8, 0x78, 0x7d, 0x34, 0x3e, 0x3c, 0x3f, 0x3e, 0xbb, 0x38,
-  0x3e, 0x7d, 0x57, 0x7b, 0x36, 0x4a, 0xcb, 0x88, 0x1a, 0xab, 0xf2, 0x7c,
-  0x4e, 0xff, 0xf8, 0xf6, 0x67, 0x71, 0x15, 0x47, 0x97, 0x45, 0xbe, 0x88,
-  0xf2, 0x82, 0xbf, 0x88, 0xa3, 0x32, 0x29, 0x6e, 0x93, 0x62, 0x10, 0xad,
-  0xca, 0x34, 0xbb, 0x8a, 0xf2, 0x2c, 0x89, 0xf2, 0xcb, 0xa8, 0xba, 0x4e,
-  0xac, 0xb9, 0x72, 0xb5, 0x5c, 0xe6, 0x45, 0x95, 0xcc, 0xa2, 0x65, 0x91,
-  0x57, 0xf9, 0x34, 0x9f, 0x97, 0xd1, 0xe6, 0xeb, 0xe3, 0xc3, 0x8b, 0x41,
-  0xf4, 0xe6, 0xf8, 0xe4, 0x88, 0xfe, 0xbd, 0x38, 0xc3, 0x3f, 0xe3, 0x41,
-  0xf4, 0xf5, 0xe9, 0xd9, 0x37, 0x47, 0xe7, 0x83, 0xe8, 0x9b, 0x0b, 0xfe,
-  0x8c, 0xff, 0xa5, 0x0f, 0xa3, 0xe3, 0xb7, 0x07, 0x67, 0x03, 0x6b, 0x8e,
-  0xff, 0xe0, 0x0f, 0x4f, 0x5e, 0xd3, 0x87, 0xf2, 0x83, 0xff, 0x3c, 0x3b,
-  0x3d, 0x7b, 0xa2, 0x3f, 0xf8, 0xcf, 0xf3, 0x8b, 0xb7, 0xf4, 0xed, 0xf9,
-  0xc5, 0x98, 0xfe, 0x1d, 0x1f, 0xf2, 0x3f, 0xe8, 0x65, 0xfc, 0xf6, 0x2b,
-  0xfc, 0x33, 0x76, 0xcd, 0x8d, 0xdf, 0xca, 0xe7, 0xe8, 0xe9, 0xe2, 0xe8,
-  0xe4, 0xdd, 0xd1, 0x45, 0x14, 0x67, 0xb3, 0xe8, 0x82, 0x9e, 0xdf, 0x1a,
-  0x45, 0x17, 0xd7, 0x49, 0x34, 0xcd, 0x17, 0x0b, 0xfe, 0x88, 0x56, 0x64,
-  0x96, 0x94, 0xe9, 0x55, 0x46, 0x53, 0xa1, 0x99, 0xdf, 0xe5, 0xc5, 0x4d,
-  0x14, 0xdd, 0xa5, 0xd5, 0x75, 0xbe, 0xaa, 0xac, 0xb9, 0x15, 0xad, 0x46,
-  0x94, 0x66, 0x55, 0x52, 0xc4, 0x53, 0x5e, 0xeb, 0xd1, 0x46, 0x6d, 0x55,
-  0xf3, 0x4b, 0x5a, 0xc3, 0x92, 0x16, 0x6d, 0xb2, 0x2a, 0xe7, 0x79, 0x3c,
-  0xe3, 0xa5, 0xa2, 0x57, 0x2e, 0x57, 0xb4, 0xc8, 0x45, 0x3a, 0xbd, 0x29,
-  0xa3, 0x79, 0x7a, 0x93, 0xf0, 0x42, 0x7d, 0xbc, 0xb7, 0x85, 0x1b, 0x48,
-  0xa3, 0xf1, 0x8a, 0xd6, 0x34, 0x1b, 0x5a, 0x73, 0x55, 0x3a, 0x8d, 0xb9,
-  0x03, 0xac, 0x5c, 0xb4, 0x5a, 0x72, 0x6b, 0xb2, 0x62, 0xd1, 0x32, 0x2f,
-  0xe9, 0xa5, 0xf1, 0xf8, 0x84, 0x46, 0x9e, 0x65, 0x09, 0xc6, 0x51, 0x0e,
-  0xe8, 0x8f, 0xfc, 0x26, 0x4d, 0xe8, 0x97, 0xcb, 0x74, 0x9e, 0x44, 0xb2,
-  0xa3, 0xae, 0x39, 0xde, 0xda, 0xa8, 0x48, 0xca, 0xd5, 0x22, 0xa1, 0xd5,
-  0x7b, 0x9b, 0x54, 0xf1, 0x3c, 0xcd, 0x6e, 0xe8, 0x57, 0x9e, 0xf8, 0x22,
-  0x2f, 0x92, 0x51, 0x74, 0x50, 0x46, 0xf7, 0xf9, 0x8a, 0x26, 0x3c, 0x9f,
-  0xd3, 0x9e, 0x27, 0xd1, 0x24, 0x99, 0xe7, 0x77, 0x03, 0xde, 0xe9, 0x28,
-  0x5b, 0x2d, 0x26, 0xd4, 0x40, 0x7e, 0xe9, 0x9b, 0x8b, 0xab, 0x15, 0x35,
-  0x27, 0x4f, 0x2f, 0x62, 0x9a, 0x13, 0xbd, 0x5b, 0x44, 0xd7, 0x09, 0xcd,
-  0xb9, 0x5c, 0xa6, 0xd9, 0xbf, 0xd4, 0xd7, 0x85, 0x96, 0x76, 0x99, 0xdf,
-  0x25, 0x05, 0xad, 0xec, 0xe4, 0x3e, 0xa2, 0x45, 0x98, 0x08, 0x11, 0x5e,
-  0x12, 0x91, 0x45, 0x31, 0x35, 0xe1, 0x08, 0x70, 0x58, 0x24, 0xf3, 0x98,
-  0x89, 0xc9, 0xf5, 0x31, 0xa2, 0x4d, 0x4c, 0x1c, 0xb5, 0xe9, 0xab, 0x9b,
-  0x4f, 0xb6, 0xf0, 0xf2, 0x8c, 0x66, 0x92, 0xce, 0x4b, 0xda, 0x06, 0x3e,
-  0x16, 0xfa, 0x0c, 0x6f, 0x2a, 0x1f, 0x13, 0xa2, 0xcd, 0xfb, 0xac, 0x8a,
-  0x3f, 0xa2, 0x7b, 0xa5, 0xcd, 0xe1, 0x2c, 0x59, 0x26, 0xd9, 0x2c, 0xc9,
-  0xaa, 0x51, 0xf4, 0xe7, 0x7c, 0xd5, 0xa7, 0xbe, 0x2f, 0x53, 0x5a, 0x83,
-  0x58, 0x9b, 0xa2, 0x9e, 0x89, 0x08, 0xa6, 0x45, 0xba, 0x0c, 0xb6, 0x22,
-  0xcf, 0x68, 0xcf, 0xa3, 0xf3, 0x37, 0x87, 0xd1, 0x93, 0x17, 0x9f, 0x3f,
-  0xf7, 0x7b, 0x4e, 0x0d, 0x44, 0xd3, 0x38, 0xa3, 0x19, 0x27, 0xd3, 0xf4,
-  0xf2, 0x3e, 0x5a, 0xac, 0xe6, 0x55, 0xba, 0xa4, 0xd5, 0xa7, 0xce, 0x4b,
-  0x3e, 0x40, 0xcb, 0xb8, 0xa8, 0x4a, 0x26, 0x02, 0x7c, 0x80, 0xb9, 0xdf,
-  0x15, 0x69, 0xc5, 0x07, 0x09, 0xdf, 0xd1, 0x08, 0x93, 0xaa, 0xb4, 0xe6,
-  0x98, 0xd6, 0xa8, 0x9f, 0x09, 0xd1, 0x16, 0x2d, 0x6d, 0x5c, 0x52, 0xa7,
-  0xfb, 0x1b, 0x9e, 0x87, 0x5c, 0x57, 0xd5, 0x72, 0x7f, 0x7b, 0xbb, 0x4c,
-  0xab, 0x64, 0xf4, 0x1f, 0x74, 0x0e, 0x07, 0xd5, 0x5d, 0x3e, 0xa8, 0xae,
-  0x8b, 0x24, 0xf9, 0xfb, 0x88, 0x68, 0xd8, 0x3d, 0x49, 0xfd, 0xde, 0xeb,
-  0xc0, 0xae, 0x92, 0x8a, 0x7a, 0xf8, 0xeb, 0x2a, 0xc9, 0xb8, 0x45, 0x1a,
-  0x47, 0x3c, 0x5f, 0x5e, 0xc7, 0xb4, 0x9d, 0x09, 0x51, 0x23, 0x9f, 0x6c,
-  0x22, 0x18, 0x1e, 0x95, 0x9c, 0xed, 0x1f, 0x7f, 0x6e, 0x77, 0x7a, 0x89,
-  0x3e, 0xe9, 0xdf, 0x91, 0xbe, 0x15, 0xd3, 0x6a, 0x53, 0x6f, 0xdb, 0x4c,
-  0x65, 0x3f, 0xee, 0x0e, 0x77, 0x77, 0x76, 0x7e, 0x1e, 0x55, 0x1f, 0xab,
-  0x4f, 0x7e, 0x65, 0x67, 0xc7, 0xbf, 0xc4, 0x4f, 0x6f, 0xf2, 0xac, 0xa3,
-  0x39, 0x11, 0x0e, 0x0f, 0xe1, 0x6f, 0x49, 0x91, 0x97, 0x5b, 0x9d, 0x8d,
-  0xcd, 0x93, 0x8a, 0x8e, 0x5d, 0xd0, 0x52, 0x3c, 0xfc, 0x5b, 0xbd, 0xeb,
-  0x77, 0x49, 0x09, 0xca, 0xf1, 0x33, 0x8e, 0xe2, 0x82, 0xa8, 0x37, 0xaf,
-  0x3c, 0x93, 0x1a, 0xd0, 0xd1, 0xac, 0xdc, 0xfa, 0xd0, 0xc9, 0xa3, 0xa7,
-  0x89, 0xbd, 0xc5, 0x73, 0xe6, 0x6c, 0x65, 0x94, 0x25, 0x1f, 0xdd, 0x59,
-  0x27, 0x1e, 0x90, 0xc4, 0xd3, 0xeb, 0x28, 0xa7, 0x23, 0x50, 0x74, 0x6c,
-  0x44, 0x9c, 0xdd, 0x8f, 0xf2, 0xe2, 0x6a, 0x3b, 0x2e, 0xa6, 0xd7, 0xe9,
-  0x2d, 0x2d, 0xc6, 0x8b, 0x17, 0xcf, 0x87, 0xf4, 0xcf, 0x8b, 0x9f, 0xb7,
-  0x6f, 0xf3, 0x39, 0xad, 0xcd, 0xd3, 0x9f, 0xb7, 0x79, 0x93, 0xff, 0x23,
-  0x1e, 0x4c, 0x06, 0xd3, 0xbf, 0x8f, 0xae, 0xab, 0xc5, 0x7c, 0x2d, 0xe9,
-  0x50, 0x63, 0x51, 0xbc, 0xc8, 0x57, 0x59, 0xe5, 0xc8, 0x85, 0xa8, 0xae,
-  0x0a, 0xd8, 0x13, 0x1d, 0x58, 0x3a, 0xa5, 0x4c, 0xdc, 0x4c, 0x45, 0x7c,
-  0xee, 0xe8, 0x88, 0xfa, 0x03, 0x59, 0x4d, 0xaf, 0x69, 0xee, 0x44, 0x3e,
-  0xb1, 0xce, 0xbf, 0x4a, 0x63, 0x3e, 0x9a, 0xc4, 0x21, 0x98, 0x63, 0xa1,
-  0x29, 0xe9, 0x2c, 0xa5, 0xe7, 0xf2, 0x62, 0x96, 0x14, 0x75, 0x42, 0xc6,
-  0x70, 0xfc, 0x78, 0x22, 0x5a, 0xcb, 0x25, 0x75, 0xbe, 0x62, 0x66, 0x87,
-  0xb3, 0xc6, 0x2d, 0xd0, 0x29, 0xbd, 0xa2, 0x65, 0xa2, 0xa5, 0x61, 0xd2,
-  0xe2, 0x95, 0xbb, 0x8f, 0xde, 0xd1, 0xfe, 0x09, 0x87, 0x08, 0x28, 0x50,
-  0x76, 0xab, 0x63, 0xd5, 0xee, 0xee, 0xee, 0xd6, 0x93, 0xd2, 0xfe, 0x6e,
-  0x8b, 0x9a, 0x82, 0xd7, 0xba, 0x28, 0x60, 0x7f, 0xaf, 0xfe, 0xc2, 0xf7,
-  0xc4, 0x44, 0x3d, 0x39, 0xd3, 0x40, 0xfe, 0xe3, 0xef, 0x01, 0x3d, 0xdc,
-  0xf1, 0xb7, 0x69, 0x76, 0x9b, 0xdf, 0xd0, 0x1a, 0xe0, 0x96, 0x8b, 0x6b,
-  0xeb, 0x1b, 0x31, 0x9f, 0x58, 0x2c, 0x2b, 0x77, 0x7d, 0x30, 0xa1, 0xd0,
-  0x47, 0x93, 0x78, 0x32, 0xbf, 0x8f, 0xae, 0xe3, 0xdb, 0x84, 0xa7, 0xbe,
-  0x24, 0x0a, 0xe2, 0xc5, 0x20, 0xb6, 0x3e, 0x07, 0x9f, 0xd1, 0x83, 0x3b,
-  0xcb, 0x57, 0x13, 0x3a, 0xfc, 0x7f, 0x5d, 0xe5, 0x95, 0xac, 0x51, 0x7c,
-  0x9b, 0xa7, 0xb3, 0xda, 0x5d, 0x79, 0x9d, 0x30, 0xc3, 0xe1, 0x8e, 0x71,
-  0x89, 0x10, 0xc3, 0xe3, 0x91, 0xe2, 0x08, 0xa4, 0x15, 0x5f, 0x47, 0xc4,
-  0xaa, 0x68, 0x59, 0xf2, 0x28, 0xba, 0xca, 0x99, 0x7e, 0xc1, 0x20, 0x41,
-  0x80, 0xb4, 0x3f, 0xd7, 0x31, 0xdf, 0x3a, 0xb4, 0x02, 0x8e, 0x42, 0x8b,
-  0x04, 0xbc, 0x12, 0x9b, 0x16, 0xcf, 0x07, 0x72, 0xbb, 0xf0, 0x3b, 0xc9,
-  0xc7, 0x78, 0xc1, 0x8c, 0xa8, 0xff, 0xaf, 0xfd, 0x41, 0xd4, 0xff, 0xb7,
-  0x3e, 0xf8, 0x7c, 0xff, 0x0f, 0x7d, 0xbf, 0xe5, 0x24, 0x2e, 0xdd, 0xa6,
-  0x33, 0xbe, 0x28, 0x68, 0x26, 0xc7, 0x67, 0xb7, 0xcf, 0xa3, 0xbf, 0xf1,
-  0xdd, 0x4e, 0xbc, 0x30, 0xf9, 0x68, 0xf4, 0x62, 0x73, 0xa3, 0xb7, 0x23,
-  0x62, 0x8a, 0xf1, 0x92, 0x2f, 0xf9, 0xa4, 0x98, 0x12, 0x71, 0xc5, 0x57,
-  0x44, 0x4e, 0x74, 0x57, 0x5a, 0x73, 0xdc, 0x3e, 0xbf, 0x22, 0xd3, 0x22,
-  0x06, 0x16, 0x65, 0xf1, 0x82, 0xe8, 0xf5, 0x84, 0x47, 0x94, 0x66, 0xed,
-  0x0d, 0xfd, 0xf1, 0x32, 0xf9, 0x7c, 0x67, 0x7f, 0xff, 0xc9, 0xef, 0xf7,
-  0x9e, 0x25, 0xd5, 0xf5, 0xce, 0xcf, 0xdb, 0xee, 0x91, 0xe3, 0x4b, 0x2c,
-  0xbb, 0x51, 0xa2, 0x0d, 0x82, 0x6e, 0x61, 0xc7, 0xc5, 0xe9, 0x7d, 0xfa,
-  0x3d, 0xb9, 0x4c, 0x3f, 0x0e, 0x4c, 0x9e, 0x91, 0x13, 0x11, 0x13, 0x85,
-  0xd0, 0xfe, 0xf1, 0xe1, 0xb5, 0xe6, 0xae, 0x56, 0x49, 0x49, 0x2b, 0x79,
-  0x77, 0x1d, 0x57, 0x91, 0x6b, 0x40, 0x76, 0x76, 0x91, 0x5e, 0x5d, 0x57,
-  0xd1, 0x5d, 0xcc, 0x97, 0xc1, 0x71, 0x25, 0x4d, 0xf0, 0x2d, 0x4c, 0x57,
-  0xc0, 0x65, 0x4c, 0xbc, 0x9c, 0xf7, 0x10, 0x57, 0xee, 0xc4, 0x4b, 0x00,
-  0x15, 0x51, 0xbc, 0x6c, 0x88, 0x17, 0x77, 0x26, 0x71, 0xc9, 0x67, 0x2a,
-  0xa3, 0xa3, 0x5b, 0xd1, 0x1d, 0xbe, 0xe2, 0xbf, 0xae, 0xe9, 0x96, 0xc6,
-  0x1a, 0xe8, 0x40, 0x71, 0x91, 0xbd, 0xe1, 0xed, 0xe4, 0xbd, 0x71, 0x97,
-  0x0b, 0x6d, 0xd2, 0x40, 0xb7, 0xd9, 0xbd, 0x51, 0xd2, 0xd9, 0x23, 0xbe,
-  0xe1, 0x28, 0xa3, 0xc7, 0xec, 0xaf, 0x27, 0xf3, 0xc4, 0x18, 0xe3, 0x92,
-  0x2f, 0x72, 0xb9, 0xae, 0x69, 0xf0, 0xc1, 0x64, 0x69, 0xd1, 0xe2, 0x1b,
-  0x16, 0x19, 0x1a, 0x82, 0x09, 0x5e, 0x9b, 0xe5, 0x44, 0x64, 0x34, 0x5a,
-  0x62, 0x93, 0x3c, 0x33, 0x66, 0x7e, 0x58, 0x15, 0x10, 0x39, 0xb5, 0xc9,
-  0x1f, 0xa6, 0x15, 0xdf, 0x01, 0x90, 0x32, 0x69, 0xbc, 0xb4, 0x28, 0x10,
-  0x14, 0x89, 0x85, 0x06, 0xf3, 0xc7, 0xf5, 0x45, 0xcf, 0x46, 0xb7, 0x24,
-  0x45, 0x90, 0xc0, 0x98, 0xb8, 0xb7, 0x70, 0xdf, 0x4e, 0x59, 0x76, 0x99,
-  0xd3, 0x79, 0x99, 0xe6, 0x45, 0xc1, 0x12, 0x39, 0xef, 0xe0, 0x44, 0x58,
-  0xdc, 0x22, 0xa1, 0x6b, 0x3e, 0x5c, 0xce, 0x94, 0x2f, 0x1c, 0x62, 0x35,
-  0x24, 0x37, 0x80, 0x99, 0xd0, 0xfd, 0x0e, 0x6e, 0x8c, 0x89, 0x63, 0x74,
-  0xdc, 0xf6, 0x74, 0x9a, 0x2c, 0xab, 0xb2, 0x6b, 0x4e, 0xb6, 0xe1, 0x34,
-  0x9c, 0x22, 0xe1, 0x95, 0x0f, 0x85, 0x22, 0xac, 0xab, 0xbb, 0x94, 0x21,
-  0x17, 0x99, 0x9c, 0x41, 0x72, 0x52, 0xe9, 0x56, 0xad, 0x02, 0x6d, 0x10,
-  0x47, 0xc3, 0x9a, 0x2f, 0x78, 0xa0, 0xfc, 0x70, 0x29, 0x27, 0x15, 0x9c,
-  0x93, 0x37, 0x52, 0x24, 0x61, 0xe9, 0x97, 0x2f, 0x15, 0x5a, 0x4f, 0xd7,
-  0x38, 0xf5, 0xea, 0xf6, 0x94, 0xbb, 0x2f, 0x49, 0x87, 0xa0, 0x9b, 0x76,
-  0x56, 0x5e, 0x93, 0x70, 0x54, 0xea, 0xc9, 0x4e, 0x17, 0x44, 0x33, 0xb7,
-  0xbc, 0xbf, 0xcb, 0x24, 0x99, 0x8d, 0xa2, 0xd3, 0x4b, 0x66, 0xb0, 0x05,
-  0x0d, 0xba, 0xc2, 0xd7, 0xcc, 0xf3, 0x69, 0xdd, 0x66, 0x10, 0xb2, 0xdd,
-  0xd1, 0x92, 0xa1, 0x04, 0xcc, 0x9b, 0x29, 0x8d, 0x16, 0x3b, 0x62, 0x2e,
-  0x37, 0xaf, 0x5f, 0x10, 0x38, 0x87, 0xc4, 0xc8, 0x79, 0x78, 0x93, 0x24,
-  0x02, 0x25, 0x4e, 0x92, 0xea, 0x2e, 0x49, 0x5c, 0x73, 0x65, 0x42, 0x97,
-  0x12, 0x6f, 0x9a, 0x48, 0x66, 0x60, 0x86, 0xbc, 0xb4, 0x67, 0xe7, 0xa7,
-  0x5f, 0x9f, 0x1f, 0x8d, 0xc7, 0xd1, 0xdb, 0xa3, 0x8b, 0xa3, 0xf3, 0xda,
-  0x4a, 0x67, 0x79, 0xb1, 0xc0, 0x8e, 0xce, 0xd2, 0x72, 0x39, 0x8f, 0xef,
-  0x79, 0xab, 0x69, 0x26, 0x57, 0x05, 0x9f, 0xac, 0x45, 0xc2, 0x17, 0xc4,
-  0x6c, 0x05, 0x4e, 0x16, 0xe5, 0xc4, 0x1f, 0x62, 0x95, 0x48, 0x99, 0x99,
-  0x40, 0x8c, 0xcd, 0xae, 0xfc, 0x4a, 0x13, 0xc7, 0xd1, 0x7b, 0x8e, 0x2f,
-  0x3a, 0xb7, 0x1f, 0x2c, 0x1a, 0x42, 0xf9, 0x18, 0xf8, 0xcf, 0x64, 0x99,
-  0x4a, 0xcc, 0x89, 0x68, 0x36, 0x5d, 0x80, 0xd9, 0xd1, 0x4f, 0x2f, 0x0d,
-  0x26, 0x97, 0x24, 0x0a, 0xd3, 0xdd, 0xd7, 0x20, 0x0d, 0x37, 0x4e, 0xac,
-  0x2b, 0x74, 0x1a, 0x56, 0x72, 0xa8, 0x73, 0x1a, 0xeb, 0x22, 0xcd, 0x88,
-  0xc0, 0x88, 0x20, 0xf5, 0x94, 0x33, 0x25, 0xd0, 0x58, 0x2f, 0x85, 0x27,
-  0xe8, 0x8a, 0xd4, 0x95, 0x25, 0x7a, 0x99, 0x36, 0x9b, 0xb8, 0xa0, 0x9b,
-  0x1e, 0x06, 0x45, 0xa4, 0xc9, 0xfc, 0x7a, 0xc2, 0xac, 0x89, 0x35, 0x06,
-  0x12, 0xed, 0x92, 0xce, 0xde, 0xdc, 0x7d, 0x42, 0x6f, 0xd0, 0xd8, 0xe8,
-  0x36, 0xe1, 0x0b, 0xe2, 0x3a, 0x69, 0xae, 0x22, 0x1d, 0x22, 0xf0, 0x96,
-  0xbb, 0xb4, 0xc4, 0xa1, 0xba, 0xcb, 0x57, 0x73, 0x92, 0xcf, 0xf9, 0x81,
-  0xd5, 0x12, 0x2f, 0x50, 0x57, 0x4b, 0x7f, 0x7a, 0x16, 0xe9, 0x47, 0x5e,
-  0xf5, 0x66, 0x2b, 0x34, 0x34, 0xfa, 0x73, 0x49, 0x9b, 0x20, 0xc3, 0x19,
-  0x35, 0x79, 0x2b, 0xb8, 0x46, 0x6b, 0x0f, 0xf9, 0xb4, 0x80, 0xdd, 0x9d,
-  0x9d, 0x8e, 0x2f, 0xf8, 0xee, 0x3c, 0x7b, 0x7f, 0x41, 0x0d, 0xd1, 0xe5,
-  0x59, 0x56, 0xb4, 0x9d, 0xfc, 0x62, 0x96, 0x40, 0x39, 0xb2, 0xe6, 0x68,
-  0xd7, 0x52, 0x1c, 0x71, 0xc8, 0x06, 0xd6, 0xa5, 0x8c, 0x51, 0xb4, 0x47,
-  0x26, 0x5e, 0xd3, 0x1d, 0xe5, 0xf6, 0xf3, 0x2f, 0x45, 0x9b, 0x5f, 0x6c,
-  0xd1, 0x76, 0x0f, 0x5d, 0x73, 0x3f, 0xf2, 0xd3, 0xb8, 0xb5, 0xcb, 0x74,
-  0x91, 0xce, 0xe3, 0x40, 0x42, 0x51, 0x4e, 0xc4, 0x74, 0xed, 0xce, 0xe3,
-  0x94, 0xd8, 0x2e, 0x06, 0xed, 0x55, 0x24, 0x5e, 0x41, 0x9c, 0x66, 0xbf,
-  0x51, 0x33, 0xbe, 0x48, 0x21, 0x03, 0x2e, 0x53, 0xb7, 0x70, 0xbc, 0x63,
-  0x7c, 0xcc, 0x6b, 0xcb, 0xd4, 0xdc, 0xb5, 0xd6, 0xb2, 0x31, 0x27, 0x87,
-  0x0e, 0xee, 0x16, 0xae, 0x37, 0x89, 0x8b, 0x9e, 0xe3, 0x60, 0xa2, 0x18,
-  0x53, 0xa3, 0x57, 0x2b, 0x1a, 0xbc, 0xac, 0xea, 0x20, 0x1a, 0xfe, 0x8e,
-  0x47, 0xce, 0xfa, 0x91, 0x3b, 0xd1, 0x24, 0x77, 0x67, 0xb3, 0xd1, 0xc6,
-  0x29, 0xf4, 0x72, 0xa7, 0xc4, 0x9f, 0x8a, 0xfa, 0x1e, 0x09, 0xfb, 0x17,
-  0x7d, 0x20, 0x12, 0x8d, 0x9b, 0xa4, 0xaf, 0x3b, 0xa2, 0xc1, 0x98, 0x96,
-  0x90, 0x98, 0xc9, 0x5b, 0x1e, 0xba, 0x76, 0xa6, 0x3a, 0x3f, 0xf6, 0x89,
-  0x96, 0x95, 0x66, 0xe5, 0xae, 0xe4, 0xd9, 0x2c, 0xe5, 0xef, 0x88, 0xd8,
-  0x89, 0x51, 0xaf, 0x12, 0x08, 0xb7, 0x3a, 0xc7, 0x85, 0x9f, 0x1b, 0x6b,
-  0x4b, 0xe5, 0x35, 0x09, 0xc7, 0x51, 0x4f, 0x18, 0xca, 0x90, 0xbb, 0xe9,
-  0xf1, 0xc2, 0x2e, 0x1a, 0x9d, 0xd0, 0x5c, 0x66, 0x7a, 0x59, 0xa9, 0x80,
-  0x41, 0xdb, 0xb7, 0x88, 0xef, 0x43, 0x49, 0x14, 0x2c, 0x07, 0x23, 0xcf,
-  0x0b, 0x77, 0x6f, 0xd3, 0xcd, 0xb0, 0x64, 0x99, 0x40, 0x59, 0x11, 0x78,
-  0x3a, 0xce, 0x4f, 0x29, 0x43, 0x1b, 0x90, 0xd0, 0xc3, 0x4f, 0x5e, 0x5d,
-  0xdb, 0xa3, 0xc1, 0xfd, 0x10, 0xd3, 0xdc, 0x98, 0xc7, 0xb1, 0xda, 0x36,
-  0x33, 0xf6, 0x95, 0x17, 0xa2, 0xbc, 0xcf, 0x73, 0xe6, 0x3a, 0x3d, 0x11,
-  0xbd, 0x74, 0xe4, 0x18, 0x3a, 0x13, 0xd6, 0x10, 0xbb, 0xca, 0x7f, 0x5a,
-  0x73, 0x6e, 0xd8, 0xba, 0x5c, 0xe5, 0xa3, 0x43, 0xf3, 0x0b, 0x35, 0xc6,
-  0x22, 0xd1, 0x0d, 0x50, 0x32, 0x59, 0xd9, 0xba, 0x83, 0xda, 0x88, 0x63,
-  0xf7, 0x2b, 0x39, 0x1c, 0x10, 0xe4, 0x1b, 0x2b, 0x5f, 0x42, 0xb6, 0x56,
-  0x7e, 0xec, 0x66, 0x46, 0x33, 0x9a, 0xa5, 0xc4, 0xd2, 0x88, 0xaf, 0xda,
-  0xce, 0x78, 0x7d, 0xa3, 0x43, 0x96, 0xbb, 0x6f, 0x09, 0xe9, 0xac, 0x3a,
-  0x87, 0x9c, 0xd5, 0xc6, 0x34, 0x3c, 0xa5, 0x9d, 0x3a, 0xc1, 0x3c, 0x86,
-  0xb7, 0x11, 0x9f, 0x06, 0x92, 0x7e, 0xf9, 0x68, 0x0c, 0x4f, 0x4f, 0x6e,
-  0x03, 0xaa, 0x66, 0x05, 0x31, 0xe3, 0xeb, 0x76, 0x00, 0x25, 0x7c, 0x92,
-  0xe7, 0xa4, 0x87, 0xf9, 0xa9, 0xb1, 0xf2, 0x94, 0x64, 0xcc, 0xac, 0x74,
-  0x47, 0x87, 0x43, 0xf9, 0x0a, 0x2d, 0xdf, 0x93, 0x02, 0x10, 0x5f, 0xc5,
-  0xa9, 0xa3, 0x37, 0x65, 0x6c, 0xee, 0xd9, 0x2c, 0xd7, 0xc7, 0x79, 0xa7,
-  0xf8, 0x22, 0x57, 0x1e, 0xb2, 0xc2, 0x7d, 0x97, 0xf0, 0xbc, 0x88, 0x09,
-  0xe0, 0x24, 0x6b, 0xb3, 0x90, 0x7e, 0xac, 0xb9, 0x09, 0xe4, 0x3d, 0x16,
-  0x9d, 0xc0, 0x09, 0x21, 0x08, 0x51, 0x93, 0xbd, 0x51, 0xf4, 0x4d, 0x7e,
-  0x97, 0xc0, 0x24, 0x05, 0x31, 0x35, 0x65, 0xa3, 0x0a, 0x49, 0x34, 0x77,
-  0x49, 0xb4, 0x20, 0x09, 0x8a, 0x56, 0x13, 0x97, 0x28, 0x3e, 0xa3, 0x71,
-  0x7a, 0xd1, 0x3b, 0xbf, 0x43, 0xb7, 0x6e, 0x12, 0x6e, 0x27, 0x2f, 0xe5,
-  0x44, 0x44, 0x9b, 0xb8, 0xa4, 0xa7, 0xbc, 0x58, 0xcb, 0xca, 0xcf, 0xc2,
-  0xad, 0x07, 0xb1, 0xcd, 0x32, 0x38, 0x5c, 0x7c, 0x63, 0xd1, 0x08, 0xa2,
-  0xcf, 0x46, 0xbb, 0x2f, 0x46, 0x3b, 0x23, 0x16, 0xa9, 0x93, 0xdb, 0x34,
-  0x5f, 0x95, 0xd4, 0x3b, 0x86, 0x12, 0x05, 0x6f, 0x26, 0x05, 0x8b, 0xda,
-  0xf9, 0xd5, 0xd5, 0x5c, 0x2e, 0xf0, 0xed, 0xfc, 0xf2, 0x32, 0xb8, 0xe3,
-  0x8b, 0x64, 0x29, 0xa2, 0x3c, 0x2f, 0x8e, 0x1e, 0x3a, 0xe1, 0x71, 0xe1,
-  0xe5, 0xae, 0xcb, 0xe9, 0xf5, 0xe3, 0xe1, 0xef, 0x68, 0xa3, 0x87, 0xc6,
-  0x8d, 0x86, 0xc4, 0x8c, 0x1a, 0x26, 0xc7, 0xb7, 0x6c, 0x9a, 0x09, 0xaf,
-  0x44, 0xcf, 0xba, 0x44, 0x60, 0x4b, 0x41, 0x5a, 0xee, 0x43, 0x6a, 0x21,
-  0x72, 0xec, 0x2c, 0x30, 0xf8, 0x04, 0x44, 0x46, 0xcc, 0x29, 0x9b, 0xc5,
-  0x05, 0x69, 0xd2, 0x6c, 0x37, 0xa2, 0x87, 0xf9, 0xb4, 0xc5, 0x42, 0xee,
-  0x03, 0xe1, 0x79, 0x9e, 0xc4, 0x86, 0xfb, 0x3c, 0xc0, 0x50, 0xab, 0x36,
-  0xae, 0x43, 0x57, 0x41, 0x29, 0x23, 0x53, 0x51, 0x34, 0xf6, 0x92, 0x89,
-  0x67, 0xde, 0xa6, 0x77, 0x5e, 0xe6, 0xf3, 0x79, 0x7e, 0xc7, 0x97, 0x08,
-  0x0b, 0x93, 0xc1, 0xb6, 0xda, 0x76, 0x94, 0x65, 0x3e, 0x4d, 0xc5, 0x70,
-  0xa4, 0x8b, 0x0e, 0x5d, 0x19, 0x56, 0x4e, 0x7e, 0xb5, 0xd4, 0xdb, 0x9d,
-  0xc5, 0xd6, 0x92, 0x38, 0x49, 0xe4, 0xf4, 0x7e, 0x98, 0x8a, 0x1a, 0xcd,
-  0xf9, 0x4b, 0x4f, 0x8e, 0xa4, 0xb2, 0x62, 0x1a, 0x49, 0xca, 0xfa, 0xd8,
-  0x9d, 0xe9, 0xed, 0xe9, 0xd4, 0xb3, 0xc6, 0xe0, 0xa8, 0x0e, 0x1a, 0xcd,
-  0x95, 0x2b, 0x6a, 0x83, 0xd6, 0x7b, 0x96, 0xb2, 0x7d, 0x90, 0xb4, 0x27,
-  0x31, 0xf9, 0x89, 0xac, 0x4f, 0xaf, 0x4d, 0x57, 0x65, 0x45, 0x82, 0xa6,
-  0xf5, 0x2a, 0x4d, 0x51, 0xbf, 0x44, 0x92, 0x07, 0x4c, 0x67, 0x8d, 0xe6,
-  0x88, 0xe8, 0x3e, 0x1b, 0x3d, 0x79, 0x3e, 0xda, 0x09, 0x08, 0x61, 0x87,
-  0xd7, 0x99, 0x55, 0xab, 0xdd, 0xd1, 0x4e, 0xe3, 0xf1, 0x4d, 0xbe, 0xd3,
-  0xb7, 0x6c, 0xc9, 0x6b, 0x6b, 0x8e, 0xdb, 0xde, 0xce, 0x01, 0xbd, 0x19,
-  0xde, 0x64, 0x72, 0x67, 0xa7, 0xde, 0x3c, 0xe5, 0x7a, 0xa7, 0x1d, 0xce,
-  0x20, 0x0e, 0xca, 0x7d, 0x48, 0xf7, 0xf9, 0xbe, 0xb4, 0xb4, 0x3b, 0xda,
-  0x0d, 0xb6, 0x5e, 0x87, 0xb3, 0xdb, 0x3d, 0x9c, 0x36, 0x01, 0x34, 0x06,
-  0xb3, 0x6b, 0x42, 0xb3, 0x48, 0x4a, 0xae, 0xdf, 0x46, 0x73, 0xa6, 0xaa,
-  0xe9, 0x8b, 0xb6, 0x64, 0xba, 0x48, 0x4f, 0x6a, 0x8b, 0x84, 0x11, 0xed,
-  0x7d, 0xc2, 0xf2, 0x80, 0x4c, 0x52, 0xd2, 0xb2, 0xb8, 0x5f, 0xda, 0x10,
-  0xbf, 0x35, 0xb2, 0x2a, 0x18, 0xea, 0x9e, 0x0c, 0xb0, 0x83, 0x74, 0x70,
-  0xb1, 0xe0, 0x62, 0xe0, 0x91, 0xaf, 0xe8, 0xde, 0x2a, 0xe6, 0xd0, 0x9a,
-  0xcc, 0xf0, 0x49, 0x8c, 0x84, 0xf8, 0x5b, 0x3a, 0xaf, 0x94, 0x20, 0xc5,
-  0x3a, 0xc5, 0x7d, 0x8d, 0x9a, 0xa3, 0x7b, 0x60, 0x36, 0xc4, 0x0d, 0xb3,
-  0x65, 0xd6, 0x78, 0xe1, 0xb5, 0x70, 0x61, 0x15, 0xb5, 0xdf, 0x9d, 0xbd,
-  0xa3, 0x99, 0x9d, 0x8c, 0xf9, 0xe6, 0x23, 0xd5, 0x54, 0x56, 0x08, 0x9f,
-  0xd2, 0xb2, 0x1a, 0x6f, 0xf7, 0xa2, 0x30, 0x49, 0xc1, 0x8d, 0xe6, 0xda,
-  0x23, 0x36, 0x83, 0x00, 0x1b, 0xa0, 0xe9, 0xdb, 0x22, 0x26, 0xad, 0x0d,
-  0x73, 0xd5, 0x59, 0x94, 0xdc, 0xfc, 0x48, 0x7a, 0x6e, 0xad, 0x0e, 0xa4,
-  0x03, 0x28, 0x83, 0xae, 0xe5, 0xfa, 0xbb, 0xb2, 0xb2, 0xbc, 0x2a, 0x59,
-  0x72, 0x95, 0x57, 0x7c, 0xa4, 0xed, 0x33, 0x7a, 0x66, 0xd8, 0x68, 0x0e,
-  0xab, 0x86, 0x01, 0x81, 0x33, 0x89, 0x7e, 0xa6, 0xaa, 0x08, 0xef, 0x35,
-  0x69, 0x5a, 0xc4, 0xd5, 0xc0, 0x0d, 0x36, 0x1e, 0x5a, 0xd8, 0xe7, 0xad,
-  0x85, 0x8d, 0xe7, 0x6b, 0x57, 0x96, 0xbb, 0x3a, 0x38, 0xa1, 0xe9, 0xf1,
-  0xba, 0x06, 0xcb, 0x8a, 0xcf, 0x82, 0x65, 0x85, 0xb9, 0xd7, 0x16, 0x76,
-  0xfd, 0xca, 0x62, 0x69, 0x3f, 0x79, 0x6d, 0xb9, 0x13, 0xe9, 0xaa, 0x79,
-  0x2c, 0x4b, 0xd5, 0xf6, 0x3e, 0x65, 0x6d, 0x83, 0xc5, 0x95, 0x4f, 0xa3,
-  0xbd, 0x16, 0xcb, 0x5a, 0xfe, 0x36, 0x8b, 0xbb, 0xcb, 0x8c, 0xaa, 0x9a,
-  0x97, 0xb7, 0x2d, 0xbe, 0x40, 0x93, 0xde, 0x62, 0x0b, 0x09, 0x1b, 0xea,
-  0x42, 0xbe, 0xc0, 0xcb, 0xec, 0xd9, 0xc2, 0x47, 0x31, 0xe2, 0xd9, 0x04,
-  0x9c, 0x91, 0x24, 0x6e, 0x9d, 0xc3, 0x45, 0x5e, 0xc9, 0xcb, 0x32, 0xf4,
-  0x91, 0x37, 0xba, 0x72, 0xab, 0xfe, 0x6e, 0xd6, 0xe1, 0x8c, 0x76, 0x06,
-  0xfe, 0xf7, 0xdd, 0x26, 0x0b, 0xe7, 0x3b, 0xd8, 0x7d, 0x8b, 0x35, 0x24,
-  0x39, 0xa1, 0x2a, 0x72, 0x18, 0x8c, 0x6a, 0x43, 0xc4, 0xad, 0x48, 0x9c,
-  0x71, 0x4a, 0x3a, 0x1c, 0xf1, 0xc8, 0xcd, 0xb4, 0xe6, 0x2d, 0x33, 0x59,
-  0x92, 0x36, 0x78, 0x12, 0x4f, 0x6f, 0xf8, 0x26, 0x4a, 0xd5, 0x0e, 0x6d,
-  0xdb, 0x24, 0xb7, 0x05, 0xe9, 0xb6, 0xb7, 0x09, 0x7b, 0x94, 0xac, 0xa3,
-  0xad, 0x80, 0xb5, 0xee, 0xf1, 0x22, 0x96, 0xe5, 0xfc, 0x76, 0xef, 0x53,
-  0x17, 0x91, 0x3b, 0xb4, 0x11, 0xee, 0xb5, 0x97, 0x50, 0x2f, 0xb8, 0x35,
-  0x8b, 0x88, 0xb7, 0xfd, 0x32, 0x8e, 0x73, 0xba, 0xe5, 0xd3, 0x85, 0xf5,
-  0x90, 0x86, 0x9c, 0x81, 0xa5, 0x7d, 0x7a, 0xfa, 0x76, 0xed, 0x71, 0x1d,
-  0xe9, 0xd7, 0x29, 0x3b, 0x8f, 0x66, 0x09, 0xcc, 0x44, 0x74, 0x80, 0x66,
-  0x70, 0x0e, 0xd1, 0xf5, 0x93, 0x50, 0x9b, 0x81, 0xd0, 0x3d, 0x7c, 0x62,
-  0x53, 0x7d, 0xf2, 0x6b, 0xa6, 0xfa, 0xe4, 0x9f, 0x30, 0xd5, 0x27, 0x6b,
-  0xa7, 0xea, 0x67, 0xf1, 0x94, 0x67, 0x91, 0x2e, 0x6f, 0x9f, 0x36, 0xc5,
-  0x20, 0xbe, 0xe1, 0x54, 0x1e, 0xad, 0x6a, 0x37, 0x22, 0x5d, 0x21, 0xf9,
-  0xfc, 0x36, 0x51, 0x21, 0x81, 0x3e, 0x38, 0x3e, 0xbb, 0x7d, 0xca, 0x62,
-  0x27, 0xcb, 0x69, 0x6c, 0x0f, 0x62, 0x29, 0xb7, 0x8b, 0x4a, 0x59, 0xd5,
-  0x0d, 0xd5, 0x06, 0x36, 0x58, 0xb2, 0x7d, 0x37, 0x18, 0xcd, 0x73, 0x1d,
-  0xcd, 0xf3, 0xae, 0xd1, 0x7c, 0xfa, 0x70, 0x9e, 0x07, 0xc3, 0xf9, 0x85,
-  0xa3, 0x79, 0x1a, 0x8c, 0x26, 0xe6, 0xd1, 0xc4, 0x4b, 0x76, 0xcb, 0x35,
-  0xb7, 0x98, 0x14, 0xfb, 0x6d, 0xf6, 0xec, 0x6e, 0x99, 0x5d, 0x5f, 0x5d,
-  0x1c, 0x99, 0xf3, 0x88, 0x42, 0xfe, 0x67, 0x07, 0xa4, 0x0e, 0x55, 0xda,
-  0x51, 0x2d, 0xb7, 0x29, 0xbd, 0xc6, 0x05, 0x7b, 0x2d, 0xd4, 0x41, 0x1a,
-  0x48, 0xb9, 0xf4, 0x3f, 0xda, 0x6e, 0xe7, 0x99, 0x63, 0x4b, 0x3c, 0xab,
-  0xfc, 0xaa, 0xcc, 0x83, 0x2e, 0xf8, 0x9d, 0xa6, 0xe4, 0x91, 0x27, 0x25,
-  0xab, 0x7d, 0xc9, 0xc7, 0x94, 0x1d, 0xb2, 0xa9, 0x1a, 0x90, 0x49, 0xcd,
-  0x8b, 0xa6, 0x62, 0x98, 0x1f, 0xb1, 0x53, 0x0a, 0x54, 0x25, 0x16, 0x46,
-  0x0c, 0x36, 0xba, 0x9c, 0xc7, 0x57, 0x1d, 0x57, 0x63, 0x7a, 0x95, 0xe5,
-  0xea, 0x20, 0x2d, 0x89, 0xea, 0xe0, 0xd1, 0x56, 0x42, 0x2c, 0x89, 0x8b,
-  0x64, 0xd3, 0xf9, 0x0a, 0x2e, 0xb2, 0x53, 0x9a, 0xe0, 0x78, 0xfc, 0x4d,
-  0xc8, 0x0e, 0x0e, 0x78, 0x05, 0x59, 0xa4, 0x1c, 0xc6, 0x57, 0x2c, 0x5d,
-  0xbe, 0x94, 0x1f, 0x65, 0xc5, 0xbc, 0xfa, 0x8b, 0x6e, 0x79, 0x67, 0xac,
-  0x3a, 0x24, 0xec, 0xfc, 0xfc, 0xea, 0x41, 0xf0, 0x0e, 0xaf, 0x5f, 0xe9,
-  0xd7, 0x51, 0xee, 0x08, 0x3d, 0x14, 0x4d, 0x4e, 0xc6, 0x63, 0x25, 0x5e,
-  0x36, 0x63, 0xad, 0x07, 0x96, 0xcb, 0xe8, 0xf0, 0xeb, 0x63, 0x9e, 0x66,
-  0x9c, 0xce, 0xc5, 0xac, 0xa6, 0xd3, 0x4e, 0x93, 0x39, 0x6b, 0x4c, 0x58,
-  0x33, 0x38, 0x3e, 0xa3, 0xd0, 0x4c, 0xaf, 0xff, 0xf5, 0xde, 0xe6, 0x7f,
-  0xa3, 0x55, 0x8c, 0xb7, 0x9f, 0x8e, 0x76, 0x7a, 0x2c, 0xc2, 0xd3, 0x65,
-  0x95, 0x64, 0xd3, 0x9c, 0x3d, 0x15, 0x93, 0x79, 0x9c, 0xdd, 0x94, 0xa2,
-  0x74, 0x89, 0x26, 0xc2, 0x63, 0x1d, 0xd0, 0xf1, 0x2b, 0x8a, 0x7c, 0x95,
-  0xcd, 0x3a, 0xb6, 0x5c, 0xa7, 0x83, 0x23, 0xaf, 0xe6, 0x52, 0xb8, 0x67,
-  0x88, 0x64, 0x8a, 0x1b, 0x33, 0xcb, 0xf2, 0x95, 0x00, 0xa7, 0x0b, 0x6f,
-  0x1d, 0xc6, 0xe5, 0xc4, 0xfd, 0x46, 0x73, 0xc3, 0x6f, 0x20, 0x66, 0x13,
-  0xd9, 0xb0, 0x3b, 0x5c, 0xce, 0x49, 0x6e, 0x46, 0xdc, 0xd6, 0x2d, 0x78,
-  0x7c, 0x29, 0x53, 0xd7, 0x07, 0xed, 0x86, 0x36, 0xc5, 0x03, 0x7c, 0x45,
-  0x1c, 0xec, 0xf3, 0xb8, 0xac, 0x60, 0xe8, 0x31, 0x0a, 0xe2, 0x07, 0x43,
-  0x51, 0x3a, 0xce, 0xee, 0x39, 0x40, 0xe0, 0x53, 0x44, 0xe9, 0xcb, 0xf4,
-  0x8a, 0x38, 0xa8, 0x58, 0xb8, 0x10, 0x53, 0x60, 0xa1, 0x04, 0xac, 0x9b,
-  0x5d, 0xe7, 0x20, 0x30, 0x92, 0x69, 0x93, 0xf9, 0x65, 0xd7, 0x79, 0x35,
-  0xe5, 0x1c, 0xfa, 0xab, 0x30, 0x63, 0x0c, 0x2c, 0x38, 0x0a, 0xec, 0x80,
-  0x8e, 0xa6, 0xf3, 0x38, 0x5d, 0x94, 0x35, 0xf1, 0x75, 0xd4, 0xc5, 0x4d,
-  0xd8, 0xfc, 0xca, 0xef, 0x4f, 0xd8, 0xa4, 0x5e, 0x94, 0x6c, 0x2a, 0xe1,
-  0x0d, 0x89, 0x4d, 0xa2, 0x16, 0x83, 0xf5, 0x75, 0x32, 0xbd, 0x01, 0xd9,
-  0x05, 0x66, 0xc4, 0x26, 0x47, 0x95, 0x55, 0xc7, 0x82, 0xad, 0x38, 0x9c,
-  0x80, 0x44, 0x0f, 0x76, 0xca, 0xa5, 0xd9, 0x6c, 0x35, 0xc5, 0xb1, 0x65,
-  0xcb, 0x08, 0x89, 0x63, 0x45, 0xcc, 0xe2, 0x4d, 0x25, 0xe1, 0x1b, 0xa0,
-  0x8b, 0x21, 0x11, 0xc1, 0xb2, 0x73, 0x74, 0x70, 0x6e, 0x88, 0x4c, 0x5a,
-  0x63, 0x07, 0xa5, 0xba, 0x02, 0x60, 0x65, 0x37, 0x4d, 0xaf, 0xbe, 0x9a,
-  0x8d, 0xe6, 0x64, 0x6d, 0x07, 0x74, 0xdd, 0xa4, 0x74, 0x7b, 0x9b, 0x7f,
-  0x79, 0x96, 0x2b, 0x29, 0x0d, 0x49, 0x37, 0x2f, 0xd3, 0xa9, 0x18, 0xa5,
-  0xd2, 0xab, 0x84, 0x19, 0x06, 0x0b, 0x9a, 0xd5, 0x7c, 0x21, 0x41, 0x18,
-  0x4d, 0x42, 0x1b, 0x3a, 0x09, 0xad, 0x45, 0x56, 0x21, 0x47, 0x11, 0x75,
-  0xc4, 0xd1, 0x87, 0x99, 0x48, 0x43, 0x83, 0x59, 0x2a, 0xb6, 0x4b, 0x1a,
-  0x8a, 0xf0, 0xcc, 0x26, 0xdf, 0x81, 0x8f, 0xa3, 0xac, 0x88, 0xb7, 0x0c,
-  0xf8, 0x88, 0x4c, 0x61, 0x78, 0x66, 0xa3, 0x9e, 0x59, 0x14, 0xcd, 0x34,
-  0x3a, 0x61, 0x21, 0x90, 0xbd, 0x4d, 0x77, 0xe9, 0x54, 0x1c, 0x0d, 0x70,
-  0x96, 0x75, 0x98, 0x08, 0xa6, 0xf3, 0x94, 0x1f, 0x5c, 0x90, 0x5a, 0xcb,
-  0x6f, 0x89, 0xd4, 0xcc, 0x77, 0x08, 0x69, 0xf0, 0xc4, 0x14, 0x8f, 0xc5,
-  0xbe, 0x01, 0x73, 0x59, 0x79, 0x0d, 0x13, 0x77, 0x5c, 0xa4, 0xf0, 0x46,
-  0xb5, 0x9a, 0x93, 0x31, 0xf3, 0x24, 0xc3, 0x71, 0x42, 0xad, 0x12, 0x83,
-  0xaf, 0xb7, 0x15, 0xe0, 0xec, 0x30, 0xd7, 0x09, 0x0e, 0xce, 0x84, 0xcf,
-  0xab, 0x44, 0xc6, 0x44, 0x2f, 0xf9, 0xee, 0x7a, 0xc5, 0xb3, 0x59, 0xc3,
-  0x12, 0xcf, 0xe0, 0x03, 0xbb, 0xae, 0x1b, 0x83, 0x03, 0xd6, 0x27, 0x26,
-  0x13, 0x69, 0x0d, 0x0e, 0x43, 0xa6, 0x9e, 0xce, 0xbb, 0x9f, 0x28, 0x8a,
-  0xd9, 0xa1, 0x6b, 0x6b, 0xe9, 0x2d, 0x43, 0xb4, 0x35, 0x49, 0x7a, 0x6b,
-  0xee, 0xe7, 0x40, 0xb2, 0x86, 0xeb, 0xbe, 0x37, 0x4e, 0xaa, 0x66, 0x73,
-  0x87, 0xe8, 0x70, 0xbf, 0x17, 0x44, 0x00, 0x48, 0xab, 0xba, 0x76, 0x93,
-  0xc4, 0xfc, 0xb5, 0x62, 0x89, 0x21, 0x26, 0xca, 0x11, 0x64, 0xbb, 0xaf,
-  0xbe, 0x3b, 0x38, 0x79, 0x7f, 0xb4, 0xfb, 0xa7, 0x26, 0xf9, 0xd0, 0x77,
-  0x7b, 0xf2, 0xdd, 0x5e, 0xaf, 0x8b, 0x67, 0x11, 0x05, 0x45, 0x51, 0xff,
-  0x55, 0x3f, 0x2a, 0xef, 0x17, 0x93, 0x7c, 0xee, 0xf8, 0x96, 0x76, 0xc2,
-  0xa3, 0x18, 0xa8, 0xeb, 0xc3, 0x1c, 0xd0, 0x58, 0x18, 0xbe, 0x22, 0x9b,
-  0x63, 0x87, 0x03, 0x54, 0xe5, 0x32, 0x50, 0x40, 0x3c, 0x0b, 0x17, 0xa3,
-  0xac, 0x70, 0xe5, 0xe9, 0x06, 0x71, 0xcb, 0xa5, 0x10, 0xe4, 0x20, 0x92,
-  0x93, 0xd4, 0x64, 0xe7, 0x32, 0x63, 0xe7, 0xda, 0x32, 0x03, 0xa0, 0x2a,
-  0x22, 0x91, 0xc8, 0xda, 0xf7, 0x44, 0xbe, 0x15, 0x5b, 0x4f, 0xde, 0x97,
-  0xc2, 0x54, 0xd2, 0x52, 0xcf, 0x67, 0x93, 0xe1, 0x31, 0xd3, 0x67, 0x7f,
-  0xe5, 0x6d, 0x5c, 0xa9, 0x43, 0xa6, 0xa7, 0x63, 0x59, 0xc6, 0xc4, 0xd1,
-  0x8b, 0x9e, 0x9e, 0x67, 0x1f, 0xe6, 0xa4, 0xf6, 0x01, 0x3e, 0x60, 0x45,
-  0xdb, 0x2e, 0x43, 0xa7, 0x8e, 0x7b, 0xd4, 0x50, 0x2c, 0x8e, 0xae, 0x33,
-  0x8e, 0xc0, 0x07, 0x8a, 0x46, 0xcd, 0x2e, 0xc1, 0x7b, 0x3d, 0x92, 0xfd,
-  0x22, 0xd1, 0xf3, 0x2b, 0xde, 0xbf, 0x26, 0xe9, 0x53, 0x63, 0x93, 0x34,
-  0x33, 0xda, 0x56, 0x35, 0x6c, 0x78, 0xc2, 0x14, 0x3d, 0xcf, 0x95, 0xa5,
-  0x7b, 0x03, 0xab, 0xfa, 0x37, 0x1d, 0x0d, 0x74, 0xda, 0xee, 0x2c, 0x36,
-  0x2c, 0x8f, 0x64, 0x2b, 0x6c, 0xa0, 0x72, 0xb6, 0x1c, 0x39, 0x2d, 0x89,
-  0xb9, 0x67, 0x42, 0xf9, 0xca, 0x75, 0xa3, 0xbc, 0xe8, 0x68, 0xee, 0x5d,
-  0x52, 0x21, 0x2a, 0x60, 0x5b, 0x2f, 0x6d, 0xdb, 0x48, 0xf4, 0x22, 0x03,
-  0x69, 0x11, 0x98, 0x1b, 0xa9, 0xf7, 0x67, 0x8a, 0xa5, 0x35, 0x3c, 0xaa,
-  0xe6, 0x09, 0xc5, 0x26, 0xc7, 0xb8, 0xf2, 0x97, 0x2b, 0x96, 0xca, 0xde,
-  0xe5, 0xad, 0x45, 0x92, 0x19, 0xb8, 0x88, 0x18, 0x78, 0xe1, 0x48, 0x27,
-  0xb7, 0xf3, 0xcb, 0x7d, 0x8d, 0x58, 0x8c, 0x00, 0xad, 0xf9, 0x28, 0x39,
-  0xbd, 0xe8, 0x9a, 0x7c, 0x77, 0xea, 0x47, 0x31, 0xfc, 0x4b, 0x6c, 0x97,
-  0xfc, 0x6f, 0x78, 0xb5, 0x7f, 0xa5, 0xb2, 0xdb, 0x30, 0x2e, 0xa7, 0x69,
-  0xda, 0x25, 0x00, 0x73, 0x08, 0xe4, 0x56, 0x74, 0x04, 0xab, 0x42, 0x74,
-  0x30, 0x3e, 0x3c, 0x3e, 0x76, 0x1e, 0xd2, 0x91, 0x44, 0x14, 0x20, 0xf6,
-  0x51, 0xc5, 0x2c, 0x38, 0x08, 0x24, 0x84, 0x64, 0xd2, 0x9c, 0x5d, 0xc2,
-  0xb6, 0xda, 0xa9, 0x99, 0x26, 0x84, 0xf6, 0xe8, 0x71, 0x36, 0xa9, 0xe2,
-  0x3a, 0xa1, 0x0b, 0xa3, 0x54, 0x4b, 0xfb, 0x9f, 0xaa, 0xfb, 0x65, 0xf2,
-  0xea, 0xa0, 0x37, 0x0a, 0x55, 0x94, 0xe6, 0xda, 0xc7, 0x2b, 0x16, 0xfd,
-  0x85, 0x17, 0xe1, 0x66, 0xe0, 0x55, 0x9e, 0xa9, 0x37, 0x54, 0xd9, 0x12,
-  0x7b, 0x36, 0x16, 0x2c, 0xbe, 0x5d, 0xc2, 0x1f, 0x94, 0x3d, 0x21, 0xcd,
-  0xf0, 0x9e, 0xae, 0xda, 0x45, 0x19, 0xca, 0x37, 0xb8, 0x1d, 0x3f, 0xd5,
-  0x50, 0xa8, 0x26, 0x8b, 0xaf, 0xf8, 0x9d, 0xa8, 0x29, 0xe4, 0xac, 0x95,
-  0xdd, 0x4c, 0xc1, 0xe3, 0x30, 0x8b, 0x51, 0x78, 0xff, 0xe3, 0x60, 0x98,
-  0x9d, 0x46, 0xe2, 0x58, 0x1a, 0x3b, 0xbb, 0x62, 0x6b, 0x67, 0x8b, 0xc9,
-  0xa7, 0x74, 0x7b, 0x13, 0xdf, 0x21, 0x52, 0xca, 0xf8, 0xa7, 0xf3, 0x6d,
-  0xa4, 0x98, 0x3e, 0x6b, 0x14, 0x05, 0x07, 0xd8, 0xd4, 0xb8, 0x3f, 0x4b,
-  0x97, 0x9d, 0x6b, 0x29, 0xd7, 0x39, 0x47, 0x03, 0x42, 0xe8, 0xf0, 0x96,
-  0xe2, 0x35, 0x42, 0xdc, 0xa6, 0xd9, 0x94, 0x55, 0x88, 0x68, 0xc9, 0x0f,
-  0x26, 0x65, 0xd0, 0xaa, 0x07, 0xc2, 0xc4, 0x56, 0x8b, 0x92, 0xdf, 0x97,
-  0xf0, 0xe8, 0x92, 0x62, 0x74, 0x9d, 0x14, 0x7a, 0x14, 0x57, 0xa6, 0x4f,
-  0x88, 0x0b, 0xe9, 0xa3, 0x3a, 0x19, 0x3e, 0xde, 0xb7, 0xde, 0x1e, 0x27,
-  0x89, 0x10, 0x9b, 0x3e, 0x20, 0x1b, 0x19, 0xec, 0x6c, 0xf3, 0x3c, 0xbd,
-  0xc4, 0xd9, 0xe7, 0x6b, 0xe1, 0x31, 0xbd, 0x24, 0x57, 0xce, 0x89, 0x17,
-  0x9c, 0xd3, 0xda, 0xe8, 0x40, 0x7c, 0xed, 0x08, 0x1d, 0xd5, 0x23, 0xdd,
-  0xe4, 0xed, 0x97, 0xec, 0xd2, 0x96, 0xf8, 0x2e, 0x52, 0x3c, 0xf9, 0x96,
-  0x72, 0xa2, 0xc2, 0x28, 0x3a, 0x84, 0x4d, 0x93, 0xdb, 0x28, 0xd1, 0x88,
-  0xb1, 0x11, 0xbf, 0x55, 0x2d, 0xea, 0x89, 0x5d, 0xc4, 0x98, 0xe7, 0x5c,
-  0x18, 0x1b, 0x6d, 0xc2, 0x5d, 0x82, 0xa8, 0x9c, 0x5a, 0x53, 0xee, 0xa2,
-  0xc7, 0x6b, 0xdd, 0xc4, 0x28, 0x57, 0xff, 0x66, 0xb9, 0x05, 0xa1, 0x28,
-  0xcb, 0xdd, 0xcb, 0xec, 0x7a, 0xbb, 0xc9, 0xf2, 0x3b, 0x92, 0x75, 0xb2,
-  0x5c, 0x4e, 0x98, 0xf1, 0x0f, 0x1e, 0x75, 0xf3, 0x9a, 0x25, 0x7e, 0x17,
-  0xdc, 0x01, 0xe1, 0x93, 0x95, 0x0b, 0x87, 0x53, 0x83, 0xb0, 0xb2, 0x6c,
-  0x5b, 0xb6, 0xa8, 0x4b, 0xb3, 0x55, 0xd6, 0x2d, 0xd2, 0x00, 0xdc, 0x26,
-  0xd0, 0x8a, 0xfc, 0x0d, 0x62, 0xd7, 0x7a, 0x6c, 0x4a, 0x15, 0x3b, 0x5e,
-  0x07, 0x51, 0x6f, 0xd8, 0x1b, 0x74, 0x9c, 0x3c, 0x9b, 0x54, 0x73, 0x5c,
-  0x8e, 0x5d, 0x74, 0x5c, 0x12, 0x70, 0xc4, 0xb5, 0x5c, 0x5f, 0x1a, 0xf3,
-  0xa3, 0x37, 0xb6, 0x0c, 0xc8, 0xe6, 0x91, 0x64, 0x57, 0x88, 0xe0, 0xe3,
-  0x93, 0xd4, 0x14, 0xce, 0xbd, 0x7d, 0x40, 0x2e, 0x6e, 0xa7, 0xea, 0xe8,
-  0xd0, 0x46, 0xd1, 0x41, 0x26, 0x41, 0x5d, 0x77, 0x31, 0x48, 0xcf, 0x75,
-  0x01, 0x39, 0xa7, 0xb9, 0xda, 0xb9, 0x53, 0x93, 0x6a, 0xb7, 0xd6, 0x43,
-  0x77, 0x85, 0x75, 0x15, 0xf1, 0x21, 0x20, 0x1e, 0xdd, 0x87, 0x64, 0xac,
-  0x76, 0x02, 0xb8, 0xca, 0xdd, 0xa2, 0xc8, 0xbd, 0x71, 0x77, 0x9d, 0xcf,
-  0xc5, 0x75, 0xd7, 0x68, 0xce, 0x0b, 0xbc, 0xd1, 0x1d, 0xdc, 0xce, 0xa2,
-  0x69, 0xb3, 0x8d, 0xe5, 0x96, 0xde, 0x2f, 0x12, 0xd8, 0x6d, 0x39, 0x62,
-  0x8f, 0xb4, 0x62, 0xea, 0x6b, 0x9e, 0xc4, 0xc5, 0xfc, 0xde, 0x84, 0xa1,
-  0xe1, 0x6d, 0xa3, 0x39, 0xac, 0x28, 0x9b, 0x45, 0x88, 0xc2, 0xe2, 0x22,
-  0xe3, 0x67, 0xd4, 0x55, 0x68, 0xc1, 0xb2, 0x95, 0x38, 0x6f, 0xc5, 0xc3,
-  0xcc, 0xb7, 0xf2, 0x6d, 0xca, 0xaa, 0x17, 0x11, 0x1b, 0x09, 0xf0, 0x4d,
-  0x4a, 0x64, 0xa3, 0x26, 0x48, 0x06, 0x4d, 0x4a, 0x64, 0xcc, 0x75, 0x1a,
-  0xe8, 0x6b, 0x74, 0x14, 0xaf, 0xe9, 0x86, 0x24, 0x25, 0x72, 0x15, 0xaf,
-  0x5b, 0x2e, 0xbd, 0xca, 0xcc, 0x2b, 0xfc, 0xd8, 0xed, 0x5a, 0x3f, 0x8f,
-  0x5d, 0x12, 0xe8, 0x9a, 0xbb, 0xf7, 0x50, 0x36, 0x8f, 0x98, 0x6b, 0xb6,
-  0xa2, 0x0b, 0xb8, 0x8a, 0x5e, 0xe6, 0x97, 0x97, 0x44, 0xea, 0x5f, 0xb4,
-  0x24, 0x70, 0x79, 0x64, 0xfb, 0x1c, 0x11, 0xf4, 0x01, 0x4b, 0xaf, 0x07,
-  0x95, 0x45, 0xb1, 0x9d, 0x92, 0xab, 0x94, 0xf7, 0x22, 0x92, 0xe6, 0x46,
-  0x1d, 0x22, 0x50, 0xfd, 0x89, 0xe0, 0x22, 0x12, 0xaf, 0xb8, 0x0f, 0xb9,
-  0xa7, 0xab, 0xba, 0x32, 0x6f, 0x92, 0x4e, 0xa3, 0x29, 0x14, 0xdf, 0xa4,
-  0xcb, 0x25, 0x6f, 0x16, 0x82, 0x75, 0x9d, 0xaa, 0xc4, 0xad, 0x4d, 0x12,
-  0x3a, 0x13, 0xd8, 0x53, 0xf3, 0x29, 0xe7, 0x2b, 0x12, 0x00, 0x4c, 0x0e,
-  0x9c, 0x24, 0x74, 0xd2, 0x9b, 0xcd, 0x99, 0x64, 0xef, 0xe3, 0xb2, 0x54,
-  0x92, 0x9a, 0x71, 0x0c, 0x56, 0xa6, 0x0c, 0x94, 0xb7, 0xc9, 0x87, 0x7a,
-  0xa8, 0x66, 0xd9, 0x75, 0xf8, 0xbd, 0x15, 0xcb, 0x1d, 0xe8, 0xf1, 0xf1,
-  0xff, 0x3e, 0xf2, 0x51, 0x74, 0x2e, 0x4c, 0xed, 0x1e, 0xd4, 0xde, 0x75,
-  0x41, 0x11, 0x63, 0x39, 0x8c, 0x86, 0x3d, 0x0c, 0x84, 0x39, 0xad, 0x5d,
-  0x02, 0x74, 0x35, 0xe6, 0xec, 0x7a, 0x96, 0x70, 0x43, 0xc4, 0xf1, 0x33,
-  0xc1, 0xb1, 0x1e, 0x59, 0x24, 0xdb, 0xec, 0xf0, 0x6f, 0x1b, 0x98, 0x24,
-  0x09, 0x42, 0x17, 0xdb, 0xcb, 0x51, 0xc7, 0x95, 0x44, 0x7e, 0x42, 0xa2,
-  0xe1, 0xef, 0x64, 0x7f, 0x24, 0x94, 0x69, 0x1b, 0xe2, 0xa7, 0x04, 0xe2,
-  0xb5, 0x79, 0x81, 0x1a, 0x5c, 0x24, 0xec, 0xa8, 0x83, 0x99, 0xfd, 0x03,
-  0xcd, 0x40, 0xd3, 0x74, 0x79, 0xcd, 0xd2, 0xf8, 0x4b, 0x44, 0x37, 0xb0,
-  0xe5, 0x49, 0x3e, 0xf8, 0xa2, 0xd3, 0x36, 0x3e, 0xd6, 0x73, 0x51, 0xea,
-  0x4d, 0x6a, 0x6f, 0x2b, 0xff, 0x4a, 0x2d, 0xbe, 0xdc, 0xe2, 0x25, 0x35,
-  0xa2, 0x86, 0x9a, 0x6e, 0xb2, 0x1c, 0x3a, 0x92, 0xf6, 0xb2, 0x68, 0xf5,
-  0x3e, 0x04, 0x05, 0x31, 0xa0, 0xf6, 0xed, 0x28, 0x3a, 0xe7, 0x7b, 0x72,
-  0xb5, 0xe4, 0x10, 0x45, 0x64, 0xa8, 0xe0, 0xf3, 0x96, 0xe7, 0xab, 0xac,
-  0x42, 0x07, 0x2e, 0x52, 0x38, 0xc2, 0xee, 0xb2, 0x9a, 0x60, 0x94, 0x86,
-  0xdf, 0x91, 0xac, 0xba, 0xdf, 0x34, 0x0c, 0xf9, 0x08, 0x71, 0xe2, 0x8d,
-  0x59, 0x59, 0xce, 0x11, 0x96, 0x3f, 0xcb, 0xa7, 0xe5, 0x76, 0xbc, 0x5c,
-  0x96, 0xdb, 0x36, 0xb8, 0x5a, 0x00, 0xbe, 0x69, 0xc3, 0xe3, 0x71, 0x30,
-  0x37, 0xbe, 0x76, 0xc5, 0x5e, 0xe5, 0x04, 0xb0, 0x39, 0x3c, 0x70, 0x99,
-  0x9a, 0x5d, 0x25, 0xa8, 0xe6, 0xeb, 0x6c, 0x75, 0x71, 0x32, 0xc6, 0x72,
-  0x35, 0x6f, 0x4e, 0x0e, 0x09, 0xb7, 0xcd, 0xe1, 0xb6, 0xad, 0x69, 0x28,
-  0x78, 0xa2, 0x34, 0x8d, 0xc7, 0x87, 0xf8, 0x70, 0xbc, 0x62, 0x11, 0x86,
-  0xba, 0x28, 0xee, 0x23, 0xb3, 0x0e, 0x37, 0x69, 0x9f, 0x66, 0x1b, 0x7d,
-  0xf2, 0x7f, 0xba, 0x10, 0x57, 0x69, 0x35, 0xba, 0x4c, 0x66, 0x79, 0x11,
-  0xb7, 0x4c, 0x68, 0x39, 0x27, 0x48, 0x60, 0x75, 0xa6, 0xf4, 0xd4, 0x36,
-  0xc9, 0xe5, 0x1f, 0x68, 0xbd, 0x46, 0xfc, 0x3b, 0x74, 0x3e, 0x59, 0x34,
-  0xfb, 0x98, 0xd7, 0xeb, 0x77, 0xaf, 0x11, 0xab, 0x47, 0x87, 0xa1, 0xfc,
-  0x2d, 0xe9, 0x9a, 0x64, 0x34, 0x38, 0x12, 0x66, 0xdd, 0x42, 0xe1, 0xb9,
-  0x19, 0x0b, 0x23, 0xff, 0xa4, 0x8f, 0xdd, 0x6b, 0x66, 0xa6, 0x91, 0x18,
-  0x76, 0x95, 0xd3, 0x75, 0x7a, 0xbd, 0x68, 0xae, 0xa7, 0x28, 0xef, 0xe6,
-  0x69, 0xd3, 0xf4, 0xa7, 0xa8, 0xe4, 0xb8, 0x7e, 0x61, 0x08, 0xab, 0x2c,
-  0xe8, 0x80, 0x16, 0x83, 0x58, 0x45, 0xa6, 0x82, 0x50, 0xc7, 0xf6, 0x34,
-  0x66, 0x6e, 0x31, 0xf0, 0xca, 0xee, 0x60, 0x41, 0x2f, 0xc5, 0x2e, 0xb9,
-  0xca, 0x7c, 0x9a, 0x9c, 0xd8, 0xb3, 0xd9, 0x72, 0xdd, 0x35, 0x3a, 0x2c,
-  0x51, 0xe3, 0x12, 0xaf, 0x2f, 0x15, 0x8e, 0xeb, 0x90, 0x97, 0x97, 0x99,
-  0xdd, 0xcb, 0x92, 0x24, 0x1a, 0xea, 0xe7, 0x8b, 0x56, 0xe4, 0xcf, 0xc7,
-  0x74, 0xb1, 0x5a, 0x44, 0xd8, 0x07, 0xb1, 0x99, 0xeb, 0x93, 0xa6, 0x6c,
-  0xf0, 0x2d, 0x8d, 0xd8, 0x18, 0x74, 0xdc, 0x2f, 0x03, 0x4e, 0xd0, 0x66,
-  0x9b, 0x15, 0x89, 0x50, 0xa6, 0x35, 0x69, 0x7c, 0xd5, 0x82, 0x23, 0x23,
-  0xea, 0x1c, 0x24, 0x5a, 0x5e, 0xc7, 0x65, 0xe2, 0x03, 0x6a, 0x65, 0xbd,
-  0xc3, 0xd8, 0xe8, 0x5a, 0x88, 0xb4, 0x25, 0x4e, 0x78, 0x7e, 0x4b, 0xb2,
-  0x4d, 0x9a, 0xcf, 0x9c, 0x2f, 0xc5, 0xee, 0xe6, 0x68, 0xc8, 0xcd, 0xf1,
-  0x6d, 0xa1, 0xdf, 0x34, 0x15, 0xdb, 0x8f, 0xf0, 0xd9, 0x8c, 0x61, 0xbe,
-  0x34, 0xdf, 0xdf, 0x67, 0xa3, 0x27, 0x7b, 0xec, 0xd4, 0x0d, 0x89, 0x54,
-  0x23, 0xc9, 0x89, 0xe9, 0x4c, 0xd3, 0x85, 0x0b, 0xcf, 0x5b, 0xaf, 0xd6,
-  0x40, 0xc6, 0x5b, 0xb0, 0x98, 0xb0, 0x88, 0x3f, 0x62, 0xcd, 0x7f, 0x7b,
-  0x8b, 0xc0, 0x50, 0xa4, 0x42, 0xd2, 0xe0, 0x8a, 0x26, 0xc1, 0xd5, 0xbc,
-  0x60, 0xb4, 0x38, 0x7f, 0x21, 0x7a, 0x6d, 0xd8, 0x87, 0x2c, 0x5c, 0xad,
-  0x91, 0x18, 0x21, 0x6d, 0x76, 0x99, 0x84, 0x68, 0x2b, 0x88, 0xdc, 0x39,
-  0xd2, 0x20, 0x62, 0xb3, 0x12, 0x47, 0x8a, 0xf1, 0x89, 0xcf, 0xe9, 0x83,
-  0xeb, 0x94, 0xc6, 0x5e, 0x4c, 0xaf, 0xef, 0x59, 0xb7, 0x61, 0x73, 0x2d,
-  0xbb, 0xb4, 0x1e, 0xb0, 0x07, 0xa0, 0x0f, 0x35, 0xa1, 0xd2, 0xe0, 0x23,
-  0x3e, 0x3c, 0xf4, 0x98, 0x49, 0x09, 0x8d, 0xf1, 0xb1, 0xc4, 0xcd, 0x07,
-  0x37, 0x99, 0x97, 0x09, 0x8e, 0x58, 0xd7, 0xe8, 0x86, 0x79, 0xa0, 0x71,
-  0xe0, 0x72, 0x66, 0x7d, 0x28, 0x2d, 0x58, 0xde, 0x15, 0x6b, 0x9f, 0x74,
-  0xc5, 0x36, 0x6b, 0xe9, 0x8d, 0xb5, 0x30, 0xd6, 0xd6, 0xee, 0xdb, 0x34,
-  0xc2, 0xfa, 0xb0, 0xbe, 0x6e, 0x6b, 0x6f, 0x9e, 0xba, 0x96, 0x06, 0x92,
-  0xeb, 0x57, 0xa6, 0xaa, 0xd9, 0xaa, 0xa4, 0x96, 0x46, 0x24, 0x5c, 0x87,
-  0xc5, 0x1b, 0x1a, 0x8a, 0xa4, 0x9f, 0x32, 0x27, 0xa7, 0xfd, 0xbb, 0xac,
-  0x5a, 0x26, 0xe1, 0x60, 0x4b, 0xeb, 0x3b, 0x3d, 0xbf, 0x64, 0xe9, 0x92,
-  0x68, 0xa4, 0x8a, 0x4e, 0xde, 0xf0, 0xcd, 0x7c, 0x78, 0x4e, 0x3f, 0x53,
-  0x73, 0x70, 0xb2, 0xd8, 0x8e, 0xf4, 0x51, 0xb6, 0x9e, 0xbc, 0xfd, 0x6e,
-  0x1c, 0x6d, 0x9e, 0x8e, 0xb7, 0x9f, 0xbc, 0xd8, 0x69, 0xeb, 0xf1, 0x9b,
-  0x9c, 0xe3, 0xaa, 0x61, 0x89, 0x88, 0xbb, 0x78, 0xba, 0x53, 0x0f, 0x6a,
-  0xe1, 0xbe, 0x78, 0x25, 0xa1, 0x81, 0x77, 0x2a, 0xdf, 0xe3, 0x6d, 0xce,
-  0xd2, 0xdd, 0xf2, 0xb9, 0x41, 0x62, 0xd3, 0xd5, 0x99, 0x9e, 0x1d, 0xbd,
-  0x35, 0xe3, 0xa2, 0x04, 0x5c, 0x44, 0x87, 0x34, 0x6a, 0xf6, 0x8c, 0xb4,
-  0x09, 0xeb, 0x3c, 0xb9, 0x35, 0x0b, 0xe5, 0x09, 0x5f, 0x86, 0x60, 0x38,
-  0x6c, 0x02, 0x35, 0xb1, 0x61, 0x99, 0xb0, 0x3c, 0xe8, 0xdf, 0x57, 0x01,
-  0x57, 0x2e, 0xe0, 0x16, 0xf3, 0x99, 0x24, 0x61, 0x90, 0x00, 0x89, 0xde,
-  0x9c, 0xbf, 0xf5, 0xdb, 0x9d, 0xc0, 0x8e, 0x20, 0x96, 0xdd, 0x17, 0xa3,
-  0xcf, 0xb6, 0xdc, 0x5a, 0xce, 0x06, 0x16, 0x5b, 0xfc, 0xf2, 0x01, 0x77,
-  0x02, 0x71, 0x11, 0xe5, 0xb6, 0x49, 0x98, 0xbd, 0x81, 0xf7, 0x60, 0xec,
-  0x47, 0x98, 0xbd, 0xf9, 0xc1, 0x02, 0x77, 0x43, 0x53, 0xbe, 0xd7, 0x04,
-  0x6c, 0x4b, 0xe2, 0x83, 0x42, 0x13, 0x6b, 0x60, 0x50, 0x1c, 0x4d, 0x8a,
-  0xfc, 0x8e, 0x4d, 0x35, 0x12, 0xe8, 0x2e, 0xb4, 0xc9, 0x26, 0x24, 0xd8,
-  0x6f, 0xa2, 0xeb, 0xb8, 0xe5, 0xef, 0xa1, 0x39, 0x6b, 0xe8, 0x6a, 0xcc,
-  0x46, 0xde, 0xb7, 0x27, 0x12, 0xea, 0xcd, 0xb7, 0xd7, 0x52, 0xbd, 0xf9,
-  0xe8, 0x67, 0x35, 0x21, 0x0e, 0xcf, 0x1a, 0x60, 0x25, 0xa2, 0x61, 0x5a,
-  0x76, 0xb1, 0x5e, 0x18, 0x01, 0x9d, 0x44, 0xbe, 0xec, 0x72, 0xa1, 0xe8,
-  0x7d, 0x68, 0xb6, 0x6e, 0x6c, 0x26, 0xa9, 0xba, 0x74, 0x87, 0xdd, 0x2f,
-  0x9b, 0x94, 0x43, 0x02, 0xdb, 0x5c, 0x4d, 0x5d, 0xdb, 0x1f, 0x87, 0x24,
-  0xd3, 0x0d, 0x79, 0x70, 0x43, 0x6a, 0x5e, 0xbc, 0xc0, 0xec, 0x53, 0x3f,
-  0xa4, 0x2b, 0x9a, 0x09, 0x85, 0x9a, 0x1f, 0xbe, 0xe1, 0xad, 0xe0, 0x47,
-  0x5a, 0xdb, 0xc7, 0xbb, 0xe4, 0x42, 0xc0, 0x9d, 0x7a, 0x85, 0xd5, 0x13,
-  0xbb, 0x19, 0x7f, 0x23, 0x56, 0x57, 0xd8, 0x87, 0x39, 0xad, 0x5a, 0xbd,
-  0x35, 0x24, 0xce, 0xb7, 0x0c, 0x40, 0x6c, 0x8a, 0x2f, 0xee, 0x25, 0x82,
-  0x59, 0x2d, 0xe5, 0xe6, 0x32, 0x74, 0xc6, 0x00, 0x69, 0x52, 0x9e, 0xf4,
-  0xa6, 0xf9, 0x9c, 0xc5, 0xb8, 0x61, 0xcb, 0x14, 0x0b, 0x9f, 0x36, 0xbf,
-  0x26, 0xc1, 0xf9, 0x9c, 0x9c, 0x2b, 0x1b, 0x21, 0x8e, 0x72, 0xe4, 0xa7,
-  0xc5, 0x30, 0x81, 0x5b, 0xc3, 0x6e, 0x11, 0x3a, 0x75, 0x66, 0x9f, 0x13,
-  0x50, 0xfa, 0x48, 0x70, 0x3b, 0x04, 0x08, 0x4a, 0x82, 0x1c, 0x8b, 0x50,
-  0xf0, 0x3c, 0xab, 0x45, 0x18, 0x0f, 0x5b, 0xf6, 0x12, 0x35, 0xbb, 0x0c,
-  0x02, 0x17, 0x56, 0xca, 0xf7, 0x44, 0x98, 0x85, 0xe4, 0x2c, 0xee, 0xc4,
-  0x79, 0x8b, 0x2b, 0xfe, 0xc4, 0xcc, 0x88, 0x2d, 0x13, 0x03, 0x02, 0x6e,
-  0x5c, 0xea, 0x11, 0xac, 0x51, 0xff, 0x3a, 0x14, 0xf7, 0x12, 0x84, 0x8a,
-  0x15, 0xcb, 0x62, 0x6a, 0xa6, 0xea, 0x0f, 0x67, 0x91, 0x7a, 0xea, 0x32,
-  0x5a, 0x09, 0xda, 0xc7, 0xb6, 0xbe, 0x3b, 0x9f, 0xbf, 0x9a, 0x93, 0xf6,
-  0x7d, 0xdf, 0x8f, 0x34, 0x45, 0x46, 0x03, 0xd9, 0xd9, 0xbe, 0x1b, 0x47,
-  0xb2, 0x95, 0xd1, 0xf4, 0x7a, 0x95, 0xdd, 0x98, 0xb0, 0x33, 0xcf, 0x73,
-  0x0e, 0x1d, 0xe0, 0xa0, 0xfa, 0x46, 0x73, 0xfd, 0xa0, 0xb3, 0x7f, 0x0d,
-  0xdb, 0xee, 0x5c, 0x65, 0xb1, 0x86, 0x49, 0x7e, 0x86, 0x5b, 0x1b, 0x77,
-  0xbb, 0x49, 0x86, 0x6a, 0xf4, 0xe5, 0xc0, 0x3c, 0xd9, 0x55, 0xe0, 0x55,
-  0x89, 0xdb, 0x07, 0xd1, 0x5b, 0xd2, 0x60, 0x5f, 0x74, 0x0d, 0x8a, 0x0b,
-  0x8c, 0x4d, 0xb7, 0xe6, 0xbe, 0xf5, 0xc6, 0x4f, 0xe7, 0xbd, 0xe9, 0xb8,
-  0x2e, 0x3d, 0x7a, 0x03, 0x1c, 0xa5, 0xa3, 0xe8, 0x6d, 0x98, 0xfc, 0x56,
-  0x8f, 0x74, 0x70, 0x3b, 0x39, 0x8a, 0xce, 0x68, 0xbd, 0x86, 0x2d, 0x67,
-  0xd6, 0x55, 0xd0, 0x5c, 0xec, 0x47, 0x3b, 0x8b, 0xfa, 0x97, 0x79, 0x3e,
-  0x89, 0x0b, 0xbf, 0xf8, 0xf0, 0xc8, 0x83, 0x12, 0x24, 0x00, 0x84, 0xd7,
-  0xa3, 0x6d, 0x90, 0xc6, 0x41, 0xfc, 0x52, 0xde, 0x1d, 0xa9, 0x2c, 0x13,
-  0x1e, 0xd0, 0x2a, 0x9f, 0xcf, 0xdc, 0x52, 0x84, 0xbd, 0x76, 0x6c, 0x1a,
-  0x6f, 0xea, 0x80, 0xa6, 0x53, 0x14, 0x29, 0x67, 0xa2, 0x16, 0x49, 0xb5,
-  0x2a, 0x32, 0xc9, 0x14, 0xcb, 0x92, 0x3b, 0x71, 0x24, 0x1a, 0x73, 0xe7,
-  0x18, 0x10, 0x36, 0x90, 0xd4, 0x95, 0xf3, 0xe1, 0x6b, 0x30, 0xf1, 0xd5,
-  0x62, 0x69, 0xf1, 0x1c, 0x9d, 0x17, 0xe3, 0xf7, 0xb0, 0x33, 0x6b, 0xaa,
-  0x96, 0xa4, 0x8e, 0x9a, 0x4b, 0xcc, 0xb8, 0x5b, 0xcd, 0xfa, 0xd4, 0x6d,
-  0xca, 0xf4, 0x57, 0x92, 0x38, 0x00, 0x5d, 0xf6, 0x25, 0x2d, 0x41, 0x90,
-  0xc5, 0xa9, 0x3e, 0x2a, 0xe1, 0x54, 0xda, 0x4d, 0xa7, 0x9f, 0x80, 0x55,
-  0x0a, 0x71, 0x4c, 0xa7, 0xb0, 0x22, 0xf3, 0x3d, 0x43, 0xaf, 0x53, 0x53,
-  0x23, 0x75, 0x17, 0x07, 0xb9, 0x8b, 0x36, 0xde, 0x29, 0x6f, 0x56, 0x9b,
-  0x68, 0x90, 0x98, 0x82, 0x35, 0xc7, 0xa5, 0xa4, 0x5a, 0x82, 0x83, 0x09,
-  0xc9, 0xdc, 0x4d, 0x1e, 0x38, 0x8d, 0x54, 0x36, 0x9b, 0xb4, 0xdd, 0x0e,
-  0x66, 0x8d, 0x95, 0x19, 0xff, 0x0b, 0x2c, 0x0a, 0x6b, 0x9c, 0x6a, 0x92,
-  0xdb, 0x33, 0x91, 0x23, 0x23, 0x76, 0xd7, 0x56, 0xf4, 0x4e, 0xe0, 0xb2,
-  0x6b, 0xad, 0x6c, 0x4d, 0x18, 0x16, 0xf9, 0x8b, 0x3a, 0x0b, 0xec, 0x4d,
-  0x4e, 0x41, 0x54, 0xc7, 0x32, 0x84, 0x0b, 0x2f, 0x48, 0xb4, 0x84, 0x0c,
-  0x9e, 0x59, 0x4f, 0x57, 0xab, 0xa7, 0xda, 0xdc, 0x4a, 0x6c, 0xf1, 0xac,
-  0x22, 0xe2, 0x7c, 0x16, 0xbf, 0x69, 0x98, 0x8f, 0xbf, 0x92, 0xba, 0x25,
-  0x0b, 0xd6, 0x4b, 0xbc, 0xf4, 0xd1, 0x7a, 0x53, 0x6f, 0x9e, 0x07, 0x85,
-  0x12, 0xf1, 0x7b, 0x31, 0x87, 0x54, 0xcf, 0x1d, 0x0c, 0x8e, 0x73, 0x88,
-  0xf8, 0x0d, 0x97, 0x2c, 0x89, 0xca, 0x12, 0x4f, 0x43, 0xa4, 0xdf, 0x12,
-  0x68, 0xd9, 0xe3, 0xce, 0x91, 0x55, 0x44, 0x8f, 0x65, 0x9e, 0xdc, 0x86,
-  0x49, 0x1f, 0x8d, 0x3c, 0x6e, 0x30, 0xcb, 0x4f, 0xe2, 0x95, 0xa1, 0x7f,
-  0xbf, 0x93, 0x5d, 0x4a, 0x4e, 0x79, 0x14, 0xbd, 0x76, 0x97, 0xfa, 0x12,
-  0x26, 0x0d, 0xc5, 0x3d, 0x90, 0xa4, 0x41, 0x03, 0x3d, 0x68, 0x5c, 0xf2,
-  0x1d, 0xd1, 0x7b, 0x03, 0x9a, 0x1f, 0x72, 0x7d, 0x70, 0xaa, 0x1c, 0xe3,
-  0x90, 0x1c, 0x5a, 0x65, 0x2d, 0x8e, 0xb7, 0x08, 0xf9, 0xb0, 0x84, 0xc4,
-  0xd4, 0x35, 0xeb, 0x88, 0x9d, 0x9a, 0x42, 0x90, 0x2f, 0x5d, 0xee, 0x54,
-  0x96, 0x20, 0x62, 0x9a, 0x36, 0xfc, 0xd3, 0x8c, 0xdc, 0x6b, 0xe9, 0x06,
-  0xd0, 0x14, 0x3e, 0x05, 0xa6, 0x6d, 0x64, 0x95, 0xd0, 0x2a, 0x71, 0x8e,
-  0x48, 0x00, 0x24, 0xd6, 0x3a, 0x2e, 0x15, 0xcc, 0x64, 0x22, 0x4b, 0xf4,
-  0x00, 0xe9, 0x38, 0xd9, 0xe2, 0x41, 0xea, 0xb9, 0x50, 0x53, 0xbe, 0xd2,
-  0xce, 0xc0, 0x2d, 0xb9, 0xf2, 0x42, 0xf1, 0xa1, 0x28, 0x4f, 0x37, 0x19,
-  0xa4, 0xe3, 0x36, 0x90, 0xf4, 0x2f, 0x5e, 0x7a, 0x18, 0x1b, 0x24, 0x53,
-  0x82, 0x9b, 0x4e, 0x0a, 0x16, 0x81, 0x4a, 0x48, 0x4c, 0x66, 0x26, 0xa9,
-  0xa7, 0x74, 0xec, 0x7e, 0xce, 0x6a, 0x4d, 0x4b, 0x59, 0x03, 0xc9, 0x1c,
-  0x7e, 0x7d, 0x0c, 0x53, 0xd2, 0x3c, 0x25, 0x7e, 0x3a, 0x90, 0x6e, 0x64,
-  0x3a, 0x82, 0xb6, 0xe2, 0xee, 0xe2, 0xab, 0x34, 0x33, 0x25, 0x26, 0x4c,
-  0x39, 0x73, 0xee, 0x2f, 0x5e, 0x69, 0x8b, 0xa5, 0x77, 0x09, 0x87, 0xd8,
-  0xe3, 0xd8, 0x84, 0x57, 0x17, 0x17, 0x16, 0x7b, 0xd3, 0x69, 0xf7, 0xda,
-  0xa1, 0x6b, 0x4d, 0x00, 0x64, 0xf9, 0x58, 0x2c, 0xea, 0x60, 0xaf, 0x2d,
-  0xcb, 0x95, 0xdf, 0x64, 0x81, 0xae, 0x49, 0xca, 0xfd, 0x8d, 0x96, 0x37,
-  0x0d, 0xfd, 0x77, 0x63, 0x4b, 0xc9, 0xe9, 0xf6, 0xe1, 0x2a, 0xe8, 0xc5,
-  0x2d, 0x66, 0x12, 0x4a, 0xdf, 0x22, 0xf0, 0x8b, 0xbc, 0x1e, 0xaf, 0x69,
-  0x8e, 0x27, 0xf6, 0xef, 0x1a, 0xc5, 0x45, 0x27, 0x02, 0x9a, 0x28, 0xac,
-  0x22, 0x9a, 0xda, 0x62, 0x4d, 0xb9, 0x58, 0x58, 0x7c, 0x12, 0xb7, 0x42,
-  0x59, 0xdc, 0x21, 0xa1, 0x1b, 0xe4, 0x15, 0xf0, 0x41, 0xa2, 0x2f, 0x23,
-  0x8d, 0x2f, 0x22, 0x1a, 0x8f, 0x43, 0xff, 0x06, 0xae, 0x24, 0x0c, 0x1e,
-  0xb7, 0x2b, 0x96, 0xa1, 0xbb, 0x39, 0x44, 0xf9, 0x84, 0xab, 0x27, 0xe4,
-  0xc7, 0x69, 0xc1, 0xa5, 0xc0, 0x17, 0xfd, 0x4b, 0x73, 0xf1, 0x5e, 0x3d,
-  0xbe, 0x7a, 0xbf, 0x70, 0xf1, 0x1e, 0x59, 0xbd, 0x8b, 0x6b, 0x49, 0x06,
-  0x48, 0x10, 0xc3, 0xf6, 0x2a, 0x88, 0xa9, 0x82, 0x35, 0x0b, 0x51, 0xbd,
-  0x3e, 0xb6, 0xaa, 0x7e, 0x34, 0x03, 0x0f, 0xd6, 0xab, 0x7f, 0xd8, 0xae,
-  0x83, 0x1a, 0x6d, 0xf4, 0xdd, 0xcd, 0x89, 0x27, 0x83, 0x06, 0x8f, 0x48,
-  0x43, 0xb7, 0xd9, 0x02, 0x66, 0xc1, 0xaf, 0x73, 0x92, 0xcb, 0x47, 0x22,
-  0xff, 0x4a, 0x48, 0x19, 0x67, 0xaf, 0x43, 0xc7, 0xa9, 0xa9, 0x3a, 0x33,
-  0x33, 0xcb, 0xb4, 0xe6, 0xf7, 0xa5, 0x71, 0xf6, 0x47, 0x27, 0x57, 0x0b,
-  0xc1, 0x42, 0xf4, 0x5f, 0xa4, 0x19, 0xbe, 0x2c, 0xeb, 0x84, 0x9e, 0xb7,
-  0x0e, 0x47, 0xa0, 0x71, 0x32, 0x1f, 0x49, 0xcd, 0xe4, 0x68, 0x4c, 0x7f,
-  0x6b, 0x50, 0x5f, 0xb0, 0x58, 0x75, 0x41, 0xb1, 0x10, 0xaf, 0x5f, 0xab,
-  0x94, 0x57, 0xca, 0xb6, 0x8f, 0x15, 0xfa, 0xce, 0xed, 0xfb, 0x3f, 0x7d,
-  0x8a, 0x70, 0xc9, 0x58, 0xd8, 0xb5, 0x4c, 0x53, 0xdd, 0x98, 0x9e, 0x28,
-  0xae, 0x38, 0x76, 0x85, 0x2d, 0xd6, 0x7f, 0x5d, 0xc1, 0xbf, 0x7b, 0xb5,
-  0x8e, 0x09, 0xe0, 0x82, 0x62, 0x7f, 0x25, 0xbb, 0xe2, 0xe6, 0xd0, 0x06,
-  0xa9, 0x69, 0x50, 0xb9, 0x57, 0xf3, 0x87, 0x88, 0x26, 0x54, 0xa2, 0x15,
-  0x4a, 0x7c, 0x80, 0x58, 0x1d, 0x79, 0x36, 0x28, 0x73, 0x92, 0x04, 0x53,
-  0xee, 0xa0, 0x40, 0xba, 0xa9, 0x92, 0x79, 0x72, 0xa5, 0x96, 0xaa, 0xa3,
-  0xef, 0x8e, 0x4e, 0x5a, 0x02, 0x57, 0x25, 0x9f, 0x3b, 0xdf, 0x63, 0x60,
-  0xd0, 0x30, 0x78, 0x12, 0x60, 0xf6, 0xc8, 0x8d, 0xc1, 0x40, 0x11, 0xd2,
-  0x62, 0x67, 0x34, 0x2b, 0x3d, 0x4c, 0xf7, 0x53, 0x62, 0x2e, 0xb8, 0x82,
-  0xed, 0x82, 0x33, 0x81, 0x6a, 0x2a, 0x47, 0x12, 0x8a, 0x83, 0x6b, 0xe9,
-  0xeb, 0xf1, 0x78, 0xfb, 0x26, 0x29, 0x26, 0x8c, 0x86, 0xd5, 0x26, 0x28,
-  0xe8, 0x58, 0xd1, 0x6b, 0x38, 0xff, 0xc5, 0x80, 0xcf, 0xdb, 0xec, 0x67,
-  0xd2, 0x7a, 0x63, 0x99, 0xcf, 0xd3, 0xe9, 0x7d, 0xf4, 0x5a, 0x47, 0x56,
-  0xb2, 0x52, 0xc9, 0x9b, 0x0e, 0x43, 0xbe, 0x5a, 0x51, 0x4f, 0xbf, 0x1d,
-  0x1e, 0x8c, 0x87, 0xaf, 0x8f, 0x4e, 0x8e, 0xbe, 0x3e, 0xb8, 0x38, 0x72,
-  0x49, 0x0a, 0x08, 0xfd, 0x58, 0x43, 0x17, 0x46, 0x0f, 0xdf, 0xea, 0x48,
-  0xc5, 0x54, 0xc5, 0xc1, 0xc1, 0x0c, 0x5f, 0x77, 0x93, 0x54, 0x16, 0xc5,
-  0x29, 0x92, 0xfe, 0x22, 0x86, 0xc0, 0xd7, 0x0a, 0x4c, 0xf4, 0x11, 0x36,
-  0xf3, 0x85, 0x0e, 0xb5, 0x35, 0x83, 0x78, 0x7e, 0xc7, 0x70, 0x1e, 0xef,
-  0x33, 0xd6, 0x4d, 0x34, 0xb7, 0x9e, 0x65, 0x56, 0xcc, 0x3e, 0xd8, 0x92,
-  0x60, 0xfd, 0x6b, 0xbb, 0x8c, 0x60, 0xa8, 0x6e, 0x99, 0x46, 0x02, 0xeb,
-  0x34, 0x3b, 0xee, 0x35, 0x1e, 0x6c, 0xc4, 0x5c, 0xf9, 0x44, 0x54, 0xc4,
-  0xd6, 0xe9, 0x77, 0x2d, 0x89, 0x58, 0xb5, 0xa4, 0x72, 0x7a, 0x9d, 0x2c,
-  0x5c, 0x80, 0x36, 0x07, 0x0a, 0xd0, 0xd3, 0x8a, 0xf6, 0x41, 0x67, 0xec,
-  0x8e, 0xc3, 0x4f, 0x70, 0x98, 0x45, 0xe1, 0x40, 0xe0, 0x1c, 0x07, 0x8b,
-  0x75, 0x88, 0x48, 0x77, 0x29, 0x12, 0xac, 0x25, 0x86, 0x03, 0xa1, 0x74,
-  0x20, 0x12, 0x8b, 0x17, 0xed, 0x8e, 0x10, 0x55, 0xb4, 0x96, 0xa6, 0x66,
-  0xb6, 0x82, 0x35, 0x4c, 0x8c, 0x82, 0x26, 0x73, 0x4a, 0x32, 0x74, 0x65,
-  0xb6, 0xc2, 0x4c, 0x6c, 0x63, 0x7a, 0x37, 0xf0, 0x40, 0x47, 0xce, 0x13,
-  0xd2, 0x8e, 0x4f, 0x47, 0xe8, 0x7a, 0x10, 0x5a, 0x26, 0xb1, 0x62, 0x2e,
-  0x12, 0x9d, 0x0d, 0xd6, 0x86, 0xe5, 0x67, 0x19, 0xd9, 0xbf, 0x4e, 0x73,
-  0x12, 0x32, 0xb5, 0xe8, 0xa3, 0x02, 0x79, 0xf5, 0x7c, 0x02, 0x3a, 0x93,
-  0x4b, 0xeb, 0xbb, 0x8e, 0x84, 0xcd, 0x61, 0xb2, 0x2c, 0xaa, 0x8e, 0xc0,
-  0x4a, 0x09, 0x2d, 0x74, 0xa6, 0xcb, 0x59, 0x90, 0xde, 0x19, 0x64, 0xe1,
-  0x1f, 0x9d, 0x9d, 0x0b, 0x62, 0xe4, 0x09, 0xff, 0xa2, 0x21, 0x0c, 0xcd,
-  0x9e, 0xa1, 0xc8, 0x6b, 0x66, 0x03, 0x9c, 0xa5, 0x50, 0x43, 0x1d, 0xd6,
-  0x90, 0xc5, 0x9b, 0x49, 0xc8, 0x83, 0x62, 0xe9, 0x28, 0x49, 0x63, 0x46,
-  0x4d, 0x6a, 0xf7, 0x28, 0x56, 0x18, 0x0a, 0x8f, 0x61, 0x20, 0x82, 0x11,
-  0x46, 0x21, 0x71, 0x1b, 0x66, 0x97, 0x3f, 0xe5, 0x2f, 0x39, 0x50, 0x47,
-  0x49, 0x60, 0x8d, 0x9b, 0xd2, 0x67, 0x28, 0x71, 0x93, 0xfc, 0x56, 0x54,
-  0x00, 0xff, 0x2a, 0xa6, 0x71, 0x8c, 0xfc, 0x3c, 0xa5, 0x0b, 0xd1, 0x76,
-  0x90, 0xdd, 0xda, 0x24, 0x74, 0x51, 0x70, 0x40, 0x3c, 0xd8, 0x93, 0x9c,
-  0x9a, 0x01, 0xa4, 0x0e, 0x26, 0xed, 0xec, 0x24, 0x03, 0xc1, 0x96, 0x24,
-  0xbd, 0x9e, 0x25, 0x1d, 0xa4, 0x63, 0xb0, 0x03, 0xae, 0x65, 0x40, 0xd6,
-  0x14, 0x27, 0x8b, 0x35, 0x4a, 0xee, 0x35, 0x81, 0x56, 0x6c, 0x96, 0x97,
-  0xea, 0xe1, 0x8a, 0xe7, 0x69, 0x75, 0x2f, 0x6a, 0x5e, 0x68, 0x31, 0xb8,
-  0x8e, 0xbb, 0xf2, 0x0f, 0x68, 0xe1, 0x1d, 0x00, 0x07, 0x26, 0xaa, 0xdb,
-  0xd6, 0xb6, 0x11, 0x83, 0x36, 0x42, 0x74, 0x0e, 0xa0, 0x70, 0x7c, 0x64,
-  0x1b, 0x74, 0xca, 0x4a, 0xb1, 0x0e, 0x45, 0x16, 0x87, 0xc1, 0x2e, 0x94,
-  0xca, 0xb3, 0xbc, 0x8b, 0xaa, 0x84, 0x43, 0xd0, 0x50, 0x63, 0xc9, 0xe1,
-  0xaf, 0x93, 0x60, 0xab, 0x77, 0x49, 0x28, 0xe6, 0x3d, 0x44, 0xfb, 0x20,
-  0xf3, 0xe9, 0xb5, 0x22, 0xec, 0xb1, 0x1b, 0x5b, 0x48, 0x69, 0x92, 0x5c,
-  0xc7, 0xb7, 0x29, 0x03, 0x9e, 0x84, 0xe8, 0x3d, 0x1d, 0xd6, 0x12, 0xda,
-  0x7f, 0xc6, 0x2a, 0xe0, 0x8d, 0xe1, 0x03, 0xcc, 0xef, 0x4a, 0xe8, 0x6d,
-  0x08, 0xdd, 0x83, 0xdd, 0x80, 0x51, 0xf9, 0x6c, 0xa0, 0xbe, 0x2a, 0xf8,
-  0x9a, 0x5b, 0x01, 0xde, 0x08, 0x15, 0x76, 0xd0, 0x1b, 0xfa, 0x64, 0x5c,
-  0xde, 0x76, 0x9f, 0xb0, 0xf2, 0xf6, 0x97, 0x9f, 0x30, 0x01, 0x80, 0x62,
-  0x12, 0x3a, 0x3a, 0x1b, 0x7f, 0x17, 0xb9, 0xf8, 0xa0, 0xae, 0x9b, 0x53,
-  0x0e, 0x97, 0x9f, 0x17, 0x48, 0x2d, 0x38, 0x60, 0xbf, 0xf2, 0x84, 0xb9,
-  0x03, 0x46, 0xfd, 0xeb, 0xa9, 0x3a, 0x3b, 0x18, 0x7f, 0xd7, 0x38, 0x4f,
-  0xde, 0xa5, 0x9a, 0x56, 0x51, 0x97, 0x13, 0x04, 0xb0, 0x44, 0x85, 0xe1,
-  0x68, 0x72, 0x6b, 0x9d, 0xa4, 0x56, 0xde, 0x7e, 0x0a, 0xa9, 0xd1, 0x50,
-  0x5a, 0xa4, 0xd6, 0x5a, 0xde, 0x87, 0x48, 0x2d, 0xdc, 0xa3, 0x0e, 0x52,
-  0xa3, 0xf6, 0x5b, 0xa4, 0x66, 0xeb, 0xda, 0x4d, 0x6b, 0xeb, 0x48, 0xcd,
-  0x02, 0x25, 0x13, 0x21, 0xb3, 0x90, 0xca, 0xda, 0x14, 0x56, 0xa3, 0x9b,
-  0xac, 0x1c, 0x7a, 0xa4, 0xc0, 0x97, 0xee, 0xd7, 0x2f, 0x3a, 0x50, 0x42,
-  0x42, 0x48, 0x06, 0x41, 0xee, 0xc8, 0x57, 0xd5, 0x15, 0xc8, 0xe1, 0xf5,
-  0xbb, 0xb1, 0x47, 0x66, 0xa8, 0xae, 0x0b, 0x00, 0x08, 0x05, 0xad, 0x8d,
-  0x1e, 0xb6, 0xc5, 0xc6, 0x06, 0x6f, 0x29, 0x50, 0xac, 0xdc, 0xc1, 0x30,
-  0x18, 0x56, 0xb4, 0x29, 0xc2, 0x8b, 0x3a, 0xd6, 0x02, 0x0c, 0x3c, 0x17,
-  0x62, 0x7c, 0x09, 0x18, 0x2b, 0x1a, 0x86, 0x42, 0x09, 0x73, 0x90, 0xc7,
-  0x9c, 0xed, 0x67, 0x9a, 0x77, 0xe8, 0x32, 0xa0, 0xb2, 0x06, 0x30, 0x62,
-  0xb4, 0xd9, 0xd1, 0x5c, 0x66, 0xf9, 0xb4, 0x5b, 0x0f, 0x5a, 0x91, 0xeb,
-  0x08, 0x13, 0x5d, 0x30, 0x02, 0xde, 0xe3, 0xa2, 0x69, 0xbb, 0x45, 0x47,
-  0x94, 0x66, 0x22, 0x09, 0x5c, 0x21, 0x40, 0x80, 0xd2, 0xba, 0x8b, 0x92,
-  0x06, 0x3a, 0xf2, 0x30, 0xe6, 0xbe, 0x5c, 0xb2, 0x7a, 0xd9, 0x61, 0x7e,
-  0x02, 0x39, 0x21, 0x20, 0x9d, 0x6d, 0x5d, 0x0f, 0x62, 0x56, 0x60, 0xe7,
-  0x97, 0xb7, 0x4f, 0x87, 0x3c, 0x55, 0xda, 0xab, 0xe5, 0x50, 0xe7, 0xdc,
-  0xb9, 0xf5, 0xc6, 0x39, 0x26, 0xa9, 0xe4, 0xa2, 0x86, 0xcf, 0xcb, 0xa5,
-  0x4b, 0xea, 0x12, 0x2f, 0x34, 0x92, 0xa3, 0x43, 0x72, 0x68, 0x41, 0xb0,
-  0xe4, 0x81, 0xaa, 0x50, 0xa3, 0x1b, 0xbd, 0xbe, 0x38, 0xc7, 0x57, 0x2c,
-  0xe6, 0x4c, 0x19, 0xd2, 0x87, 0xac, 0x40, 0x5c, 0x5c, 0xad, 0x5a, 0x1e,
-  0x32, 0x58, 0x80, 0xbc, 0x6b, 0xc7, 0xe2, 0xa0, 0xc3, 0x24, 0xed, 0xff,
-  0xb3, 0x37, 0xf1, 0x53, 0x76, 0xf1, 0xf9, 0x3f, 0x7e, 0x17, 0x9f, 0xff,
-  0x0f, 0xd9, 0xc5, 0xe7, 0xff, 0x1f, 0xd9, 0x45, 0x4b, 0x30, 0x0f, 0xf6,
-  0x64, 0xb0, 0x7e, 0x3b, 0x59, 0x1d, 0xae, 0x34, 0x46, 0x94, 0x6f, 0x6f,
-  0xde, 0x02, 0x6b, 0x41, 0xd4, 0xed, 0x8e, 0x64, 0x5a, 0xf1, 0xbb, 0x23,
-  0xe7, 0xa7, 0x1b, 0xbb, 0x47, 0x6d, 0x09, 0xd6, 0xe8, 0xf1, 0x59, 0x80,
-  0x2b, 0xe0, 0x77, 0xc7, 0xd0, 0xa1, 0x54, 0x45, 0xee, 0x74, 0x5b, 0x97,
-  0xec, 0xcb, 0x24, 0x5e, 0x2e, 0xd1, 0xd3, 0x25, 0xa4, 0x4f, 0xf8, 0x3b,
-  0x65, 0xbf, 0x20, 0x15, 0x4c, 0x2c, 0xd6, 0x8c, 0x36, 0x69, 0xff, 0x25,
-  0xaf, 0xf6, 0x50, 0x1e, 0xff, 0xa2, 0x33, 0x83, 0x04, 0xf8, 0x4f, 0x7e,
-  0x48, 0xdd, 0xe4, 0xe0, 0x34, 0x2a, 0x47, 0x10, 0xe6, 0x76, 0x0e, 0x49,
-  0x22, 0xc4, 0x78, 0x79, 0x8c, 0x1c, 0x7e, 0x0d, 0x35, 0xfc, 0xf7, 0xc8,
-  0x21, 0xe1, 0xcb, 0x1a, 0x80, 0x4e, 0xec, 0x0b, 0x7d, 0x7f, 0x7e, 0xb2,
-  0x2e, 0x41, 0x47, 0xbc, 0x8d, 0x9c, 0x2b, 0x79, 0x2e, 0xf0, 0x4f, 0x45,
-  0x74, 0x16, 0x5f, 0x25, 0xbd, 0x10, 0x0a, 0xec, 0x13, 0x80, 0x03, 0x5a,
-  0xa9, 0xf7, 0xac, 0x89, 0xfa, 0x38, 0xb1, 0x30, 0xd3, 0x1e, 0xc6, 0x08,
-  0x9f, 0x67, 0x2f, 0xae, 0xbf, 0x2e, 0x64, 0x21, 0x11, 0x55, 0xeb, 0x29,
-  0x92, 0x96, 0x8b, 0xad, 0x8e, 0x91, 0xde, 0x9f, 0x38, 0x6a, 0xbc, 0x67,
-  0x03, 0x74, 0x53, 0x6e, 0x47, 0xde, 0xf2, 0x23, 0xde, 0x9c, 0x5a, 0x8f,
-  0x35, 0x2f, 0xf5, 0x20, 0xb8, 0x3c, 0x00, 0xa0, 0x14, 0x5f, 0x0b, 0x7e,
-  0xe0, 0x65, 0x3e, 0x6f, 0x92, 0xa6, 0x20, 0x90, 0x11, 0x17, 0x38, 0xd1,
-  0x61, 0xed, 0xab, 0x5b, 0x56, 0xf6, 0xd2, 0x06, 0xa5, 0x62, 0x43, 0x28,
-  0x24, 0xc6, 0x73, 0x86, 0x7a, 0x6f, 0x46, 0x8f, 0x30, 0xfd, 0xba, 0xc4,
-  0x6e, 0xb6, 0x03, 0xf1, 0x80, 0x20, 0x65, 0xa4, 0xc0, 0xfd, 0x76, 0xd3,
-  0xfa, 0x0d, 0xbd, 0x95, 0x47, 0xf0, 0xea, 0x72, 0xe4, 0xda, 0xcb, 0x20,
-  0x92, 0xeb, 0xc7, 0x7d, 0x33, 0x1e, 0xfc, 0xdc, 0x1d, 0x95, 0xde, 0xce,
-  0xe7, 0xab, 0x7b, 0xd1, 0x2d, 0x7b, 0x3c, 0x0c, 0x0f, 0xeb, 0xcc, 0x52,
-  0xc2, 0x72, 0x1b, 0x68, 0x6f, 0x6c, 0xa9, 0x4f, 0x44, 0x00, 0x5a, 0x57,
-  0x82, 0x83, 0xd9, 0x22, 0xb8, 0x6d, 0xc4, 0x2f, 0x40, 0xbd, 0x0f, 0x05,
-  0xa9, 0x19, 0x2a, 0x6a, 0xcb, 0x7e, 0xc3, 0xb1, 0x28, 0x38, 0x58, 0x41,
-  0xbf, 0x26, 0xc0, 0xd1, 0x81, 0x39, 0xfb, 0xf6, 0x70, 0xfc, 0xbb, 0xdd,
-  0x3d, 0x8b, 0x81, 0xe3, 0xf0, 0x56, 0x75, 0x86, 0x8f, 0x01, 0x93, 0xd0,
-  0x24, 0x6f, 0xd6, 0x4d, 0xa4, 0xbe, 0x03, 0xfc, 0x1d, 0x1c, 0x3e, 0xe7,
-  0x92, 0x73, 0xfd, 0xcb, 0x88, 0xda, 0xc1, 0xf0, 0x24, 0x7f, 0xc9, 0x62,
-  0x8d, 0x93, 0x4e, 0x1d, 0x9e, 0x36, 0xc8, 0xd9, 0x90, 0x04, 0x48, 0xc3,
-  0xad, 0x5b, 0x0d, 0x80, 0x84, 0x2e, 0xc5, 0x02, 0x11, 0x09, 0xd4, 0xb3,
-  0xc4, 0xfa, 0xb4, 0x12, 0xc6, 0x14, 0xe2, 0xb4, 0x0b, 0xa0, 0xc4, 0x62,
-  0x65, 0x81, 0x32, 0xcd, 0x62, 0x72, 0x2f, 0x58, 0x92, 0x5e, 0xd7, 0x56,
-  0x84, 0x29, 0x42, 0xcb, 0x42, 0x32, 0xa7, 0x6e, 0x92, 0x7b, 0x07, 0x12,
-  0x10, 0xb9, 0x4f, 0xeb, 0xbb, 0xca, 0x58, 0x8b, 0x1c, 0x17, 0xd9, 0x32,
-  0x99, 0x13, 0x9b, 0xff, 0x17, 0xf1, 0x76, 0x0b, 0x85, 0x89, 0x2a, 0xc4,
-  0x4d, 0x72, 0x94, 0x84, 0x87, 0x2e, 0x59, 0x00, 0xb0, 0x5c, 0x2b, 0x3a,
-  0xcc, 0xef, 0x3b, 0xfd, 0xac, 0xbe, 0xde, 0x89, 0x30, 0x60, 0x28, 0x57,
-  0x65, 0x65, 0xc1, 0xf8, 0x0d, 0xb0, 0xad, 0x24, 0x0b, 0xcf, 0x47, 0xcb,
-  0xc6, 0x97, 0x85, 0x19, 0x28, 0x6c, 0x75, 0x4e, 0xa7, 0x37, 0x10, 0xe8,
-  0xd5, 0x5c, 0x14, 0x4e, 0xcf, 0xa2, 0x3c, 0x24, 0xc8, 0xb9, 0x63, 0x17,
-  0x90, 0x7c, 0xc0, 0x36, 0x78, 0x26, 0x4b, 0xbe, 0x0d, 0xd3, 0x4c, 0xbc,
-  0x8e, 0xf0, 0x8f, 0x66, 0xb7, 0x69, 0x91, 0x67, 0x90, 0x51, 0x6e, 0xe3,
-  0x22, 0x85, 0x76, 0x48, 0x63, 0xfd, 0xf0, 0xfa, 0xf8, 0x3c, 0xda, 0xa4,
-  0x8d, 0x9d, 0xdc, 0xaf, 0x81, 0xc2, 0xdb, 0x4e, 0xaa, 0xe9, 0xf6, 0xf2,
-  0x26, 0xdd, 0xce, 0xca, 0x72, 0x36, 0xd9, 0x72, 0x80, 0x0b, 0xe8, 0x0e,
-  0x74, 0x28, 0xb4, 0xbc, 0x0b, 0xf3, 0xc0, 0x8a, 0x33, 0x81, 0x36, 0x69,
-  0x01, 0x5a, 0xbb, 0x50, 0xd2, 0x42, 0x2f, 0x46, 0x65, 0xbe, 0xa5, 0xd5,
-  0x62, 0x6e, 0xe3, 0x74, 0xee, 0xb0, 0xe5, 0x32, 0x69, 0x4a, 0xe2, 0x8a,
-  0x34, 0xbb, 0x9d, 0xfd, 0x15, 0xc9, 0xcc, 0x74, 0xc7, 0xe6, 0x71, 0xd5,
-  0x18, 0x17, 0xc1, 0x7a, 0x94, 0x14, 0x71, 0x0b, 0x51, 0xa1, 0xe5, 0x44,
-  0xb2, 0xab, 0x0b, 0x3d, 0x1e, 0x30, 0x30, 0x3a, 0x2f, 0x8a, 0xf8, 0xce,
-  0xd8, 0x0e, 0xd1, 0x19, 0x54, 0xd6, 0x1b, 0x6d, 0xf7, 0x22, 0x07, 0x05,
-  0x4f, 0xab, 0x8c, 0xc2, 0x06, 0x1e, 0x7b, 0x9f, 0x08, 0xec, 0x72, 0x55,
-  0x3a, 0xfb, 0x68, 0xec, 0xf6, 0x6b, 0xd4, 0x9d, 0xa4, 0xe7, 0xb6, 0x53,
-  0xfd, 0x98, 0x65, 0xd4, 0xdb, 0xef, 0xe1, 0x68, 0x65, 0x80, 0xa2, 0x16,
-  0x21, 0x47, 0x07, 0x85, 0xad, 0xea, 0xfd, 0xd4, 0x8b, 0xa2, 0x96, 0x7d,
-  0x54, 0x8e, 0x53, 0xea, 0x41, 0x8b, 0x39, 0xef, 0xf0, 0x2a, 0x4b, 0xff,
-  0x26, 0xf9, 0xec, 0xee, 0x10, 0xcf, 0x12, 0xc4, 0xd1, 0x03, 0x6b, 0x2a,
-  0x18, 0x42, 0x27, 0x8c, 0x82, 0x1f, 0xd2, 0x4f, 0xed, 0x21, 0x19, 0x3c,
-  0x7f, 0xcc, 0x5f, 0xd3, 0x90, 0xcc, 0x4b, 0x2b, 0x43, 0xe8, 0x30, 0x57,
-  0xd4, 0x07, 0xe4, 0x00, 0xfe, 0x7d, 0x95, 0x81, 0x76, 0x3c, 0x6c, 0x7a,
-  0x3a, 0x56, 0x67, 0xd1, 0xdb, 0x78, 0x1a, 0xd1, 0x1f, 0x3f, 0x40, 0xbe,
-  0xd8, 0xe2, 0x91, 0xd7, 0xe1, 0xb1, 0xec, 0x88, 0x09, 0x67, 0x14, 0x5e,
-  0xd8, 0x85, 0x90, 0x35, 0xb0, 0x03, 0x57, 0x3f, 0x38, 0xc1, 0x35, 0x98,
-  0xa4, 0x60, 0x8e, 0x13, 0x4d, 0xf6, 0x14, 0x13, 0x35, 0x4b, 0x95, 0x71,
-  0x2b, 0x20, 0xc5, 0xbd, 0xbf, 0xed, 0x98, 0x0d, 0x33, 0x0c, 0x17, 0x37,
-  0x0b, 0x09, 0x94, 0x79, 0x31, 0xac, 0xdd, 0xf4, 0x15, 0x4d, 0x95, 0xc1,
-  0x44, 0x04, 0x62, 0xb4, 0xe5, 0xb4, 0xaf, 0xc4, 0xbe, 0x61, 0x7c, 0xdf,
-  0x39, 0x91, 0xc2, 0x81, 0x4a, 0xcc, 0xac, 0xef, 0xcc, 0xa7, 0xcc, 0xfe,
-  0x13, 0x88, 0x1f, 0xb4, 0xff, 0xab, 0x48, 0xff, 0xb7, 0x0b, 0x60, 0xd2,
-  0x24, 0xdc, 0x97, 0x5d, 0x09, 0xde, 0xe3, 0x64, 0x6e, 0x50, 0xe1, 0x96,
-  0x4c, 0x35, 0x2d, 0xee, 0x97, 0x6c, 0x05, 0x93, 0xb7, 0x74, 0x7d, 0x80,
-  0x2f, 0x2d, 0x79, 0x53, 0x21, 0x9e, 0xfc, 0xa8, 0x23, 0x2f, 0xd0, 0xf7,
-  0xa8, 0x49, 0x65, 0xb0, 0x7d, 0x12, 0xf1, 0x54, 0x10, 0xb6, 0xe4, 0x33,
-  0xce, 0xa1, 0x24, 0xaa, 0x9c, 0x49, 0xfa, 0x86, 0xcb, 0xc3, 0x69, 0x05,
-  0xe4, 0x72, 0x3b, 0x65, 0xe8, 0xf4, 0xe6, 0x63, 0xc2, 0x19, 0xdd, 0xcc,
-  0x6c, 0xe1, 0x75, 0xdb, 0x0a, 0x14, 0x1a, 0x7d, 0xbe, 0x85, 0x7f, 0x6d,
-  0xca, 0x83, 0x63, 0x96, 0xd4, 0x50, 0xb1, 0xca, 0xd0, 0x79, 0x7d, 0xa5,
-  0x1c, 0x7b, 0x6f, 0x9e, 0xb3, 0xf3, 0xe3, 0xf1, 0x61, 0xc4, 0xe7, 0xeb,
-  0xf4, 0xdd, 0xc9, 0x9f, 0x59, 0xe0, 0xae, 0x00, 0x82, 0xcd, 0xd6, 0x3a,
-  0xee, 0xbf, 0xeb, 0x62, 0x28, 0x07, 0x3e, 0xbc, 0xba, 0x83, 0x77, 0xc8,
-  0xcd, 0x3c, 0xbc, 0xb3, 0x2d, 0xf6, 0x19, 0x50, 0x4c, 0x2e, 0x70, 0xa2,
-  0x11, 0xc1, 0xa5, 0x2c, 0x85, 0x70, 0xc0, 0xd7, 0xd4, 0x80, 0xad, 0x56,
-  0x6d, 0x18, 0x26, 0x0e, 0x01, 0x09, 0x05, 0x7d, 0xd1, 0x92, 0xd8, 0x6a,
-  0x48, 0xbd, 0xd3, 0x44, 0x1b, 0x49, 0x9c, 0x34, 0xd1, 0x2b, 0x71, 0xe6,
-  0xae, 0x49, 0x3c, 0x80, 0x4c, 0xe8, 0xb2, 0xfe, 0x55, 0x58, 0xe0, 0xc3,
-  0xa7, 0x67, 0x5d, 0xe5, 0xf4, 0x23, 0xc6, 0x40, 0x5c, 0xde, 0x47, 0x5f,
-  0xc7, 0xcc, 0x0f, 0x60, 0xfc, 0x8b, 0x93, 0x45, 0xeb, 0x82, 0x2e, 0x73,
-  0xf6, 0x3b, 0xaa, 0x31, 0x0e, 0xbf, 0x3b, 0x72, 0x06, 0xa4, 0x99, 0x04,
-  0xf1, 0x45, 0xbc, 0x98, 0x33, 0xf6, 0xa7, 0x1b, 0xf5, 0x80, 0xe6, 0x68,
-  0x28, 0xed, 0x58, 0x1b, 0xab, 0x25, 0x31, 0x6a, 0x24, 0x05, 0x0d, 0xa5,
-  0x09, 0x99, 0x5a, 0x33, 0x27, 0x48, 0xa4, 0x16, 0xc4, 0xb7, 0x47, 0x2f,
-  0xf9, 0xdf, 0x35, 0xd3, 0x0e, 0x64, 0x61, 0x38, 0x93, 0x6b, 0xd2, 0x03,
-  0xbf, 0xac, 0x81, 0xa7, 0x9c, 0x8d, 0x51, 0xe3, 0x3c, 0x6d, 0x6b, 0x30,
-  0x47, 0xfb, 0xd2, 0x85, 0x3c, 0x88, 0x5e, 0x1f, 0x9d, 0x83, 0x2f, 0x1d,
-  0xbd, 0xfb, 0x1a, 0x4e, 0x9c, 0x80, 0xd1, 0x73, 0x93, 0xa5, 0xf0, 0x28,
-  0x01, 0xc4, 0x37, 0xd9, 0xb1, 0xd1, 0x1c, 0x5f, 0xec, 0x6c, 0x3f, 0x81,
-  0x00, 0x38, 0xfb, 0x4d, 0x53, 0x9d, 0x62, 0x51, 0x20, 0x0e, 0x0f, 0xc2,
-  0xd9, 0xfd, 0x3a, 0xc5, 0x21, 0x5c, 0x3c, 0x49, 0xcb, 0xce, 0x39, 0x17,
-  0x8c, 0xc8, 0xaa, 0xc3, 0x45, 0xc4, 0x09, 0x28, 0x01, 0x64, 0x02, 0x1f,
-  0x62, 0xbd, 0x5f, 0x23, 0x5f, 0xd4, 0x23, 0xa2, 0x61, 0xd5, 0xb2, 0x54,
-  0xc4, 0x52, 0xb1, 0xfe, 0xe6, 0xd9, 0x2c, 0xb7, 0xa2, 0x9a, 0xce, 0xe0,
-  0x72, 0x66, 0x98, 0xaf, 0xa8, 0x5b, 0xa2, 0x7e, 0x55, 0xb6, 0x6c, 0xeb,
-  0x72, 0x45, 0x98, 0x2c, 0x67, 0x50, 0x3a, 0x58, 0xf1, 0x81, 0x5c, 0xeb,
-  0xb5, 0xa5, 0xa7, 0x3d, 0x55, 0x9d, 0x54, 0xa9, 0xbc, 0xe5, 0x39, 0xe7,
-  0xf3, 0x29, 0xd1, 0x1e, 0x41, 0x9b, 0xad, 0x4d, 0xf5, 0xb8, 0x46, 0x20,
-  0x96, 0x72, 0xbd, 0x0c, 0xaa, 0x41, 0xe0, 0x87, 0xa4, 0xf2, 0x7e, 0x38,
-  0x3c, 0xf8, 0xf0, 0xd5, 0xfb, 0x77, 0xaf, 0x4f, 0x8e, 0xfa, 0x4d, 0x8a,
-  0xbc, 0xd4, 0xc8, 0x88, 0x92, 0xc3, 0x00, 0x14, 0x6e, 0x21, 0xcc, 0xac,
-  0xc6, 0x19, 0x07, 0x6e, 0x94, 0x9c, 0x76, 0xe6, 0xdc, 0xb1, 0x5f, 0xf1,
-  0xa6, 0x59, 0x64, 0x95, 0xcd, 0x80, 0xe3, 0x13, 0x4c, 0xde, 0x10, 0x56,
-  0xd4, 0xfa, 0x66, 0xe3, 0xeb, 0x44, 0x1c, 0x62, 0xe4, 0x99, 0x19, 0x74,
-  0x70, 0xcb, 0x0e, 0x94, 0xa4, 0x66, 0x5f, 0x47, 0xa6, 0xa6, 0xde, 0x73,
-  0xb6, 0x00, 0x56, 0x3d, 0xa6, 0x01, 0x75, 0x6c, 0x77, 0x59, 0x0b, 0x87,
-  0xe7, 0x56, 0x88, 0x92, 0x87, 0x3a, 0xc8, 0x69, 0x51, 0xf5, 0x07, 0x26,
-  0xb8, 0x84, 0x49, 0x3b, 0xb8, 0xe0, 0x5b, 0xd0, 0x1d, 0x9c, 0x68, 0x17,
-  0x0b, 0x5d, 0x8f, 0x92, 0x8f, 0x09, 0xe4, 0x11, 0x7d, 0xeb, 0x50, 0x25,
-  0x83, 0xef, 0xf3, 0x02, 0xf6, 0xd1, 0xd7, 0x5e, 0x42, 0x90, 0x87, 0x48,
-  0x7b, 0x6c, 0xc7, 0x2e, 0xb2, 0x14, 0x10, 0xa3, 0x2e, 0x02, 0x6a, 0xf2,
-  0x9d, 0x1d, 0x5c, 0x7c, 0xd3, 0x75, 0x84, 0xbb, 0x25, 0x36, 0x45, 0x09,
-  0x61, 0x4d, 0x01, 0x48, 0xa8, 0xaa, 0x18, 0x0d, 0xc2, 0x2f, 0x88, 0xaa,
-  0x9b, 0x0c, 0xa3, 0x4b, 0x9f, 0x08, 0xf5, 0x07, 0x11, 0x55, 0x55, 0x56,
-  0xf5, 0x77, 0xa3, 0x11, 0x76, 0x77, 0x5e, 0xad, 0x15, 0x61, 0x24, 0x06,
-  0xb8, 0x64, 0x04, 0xed, 0xdf, 0x96, 0x11, 0x81, 0x0c, 0x1b, 0x8c, 0xc8,
-  0xcb, 0x64, 0xff, 0x7d, 0x96, 0x14, 0xe4, 0x55, 0xb6, 0x4f, 0xa9, 0xf0,
-  0x29, 0xbb, 0xfe, 0xc0, 0x9b, 0x7c, 0xee, 0x06, 0x8f, 0xcc, 0x95, 0x90,
-  0x70, 0xb7, 0x01, 0xe3, 0x84, 0xba, 0x7c, 0x9a, 0x36, 0x87, 0x5b, 0xa8,
-  0x90, 0xb8, 0xdf, 0x8b, 0x36, 0x93, 0xd1, 0x15, 0xb5, 0xd7, 0xe3, 0x76,
-  0x76, 0xf7, 0xf9, 0xdf, 0x3d, 0xfc, 0xfb, 0xa4, 0xb7, 0xd5, 0xb2, 0x78,
-  0x94, 0x60, 0x5f, 0xed, 0xfc, 0x3b, 0x44, 0xfb, 0x04, 0x36, 0x0c, 0xcb,
-  0x9d, 0x4e, 0xd7, 0x11, 0x92, 0x8a, 0x78, 0x5d, 0x90, 0x10, 0x7e, 0x21,
-  0xc0, 0x2a, 0x51, 0x56, 0x6d, 0xc2, 0xb5, 0x37, 0x68, 0x6e, 0x53, 0x49,
-  0xbd, 0x0e, 0xd3, 0x0c, 0xa6, 0x1f, 0x8a, 0xe4, 0x3a, 0x2e, 0x89, 0x47,
-  0xac, 0xaa, 0x94, 0xc3, 0x00, 0x3a, 0xa0, 0xaa, 0xe7, 0x9a, 0x91, 0x44,
-  0x33, 0xd6, 0x8e, 0x1d, 0xe0, 0x89, 0x6d, 0xad, 0x98, 0x1a, 0x59, 0xd4,
-  0xd1, 0x27, 0x86, 0x5a, 0x92, 0xb2, 0x8b, 0x11, 0x9a, 0xe9, 0x8f, 0x1f,
-  0x0b, 0x0b, 0x4a, 0x2d, 0xd8, 0x94, 0x8a, 0xc0, 0x84, 0x28, 0xb9, 0xa4,
-  0x15, 0x4b, 0x05, 0x21, 0x40, 0x52, 0xab, 0x64, 0xd4, 0xed, 0x94, 0x08,
-  0xb9, 0xe3, 0x34, 0xce, 0xca, 0xfd, 0x0d, 0x0e, 0xe2, 0x74, 0x3a, 0x14,
-  0x9d, 0xaa, 0x13, 0xdf, 0xa7, 0xc4, 0xcb, 0x80, 0xbb, 0x0a, 0x38, 0x87,
-  0xf0, 0x76, 0x9d, 0xac, 0xe4, 0x94, 0x19, 0xb1, 0x2b, 0xb4, 0x6c, 0x17,
-  0xde, 0xa7, 0xe3, 0xd3, 0xbf, 0xfa, 0xe4, 0x2c, 0x53, 0x5a, 0x9e, 0xd9,
-  0x72, 0x35, 0x61, 0x65, 0xeb, 0xa5, 0xfc, 0x15, 0xd1, 0x9f, 0xf3, 0x74,
-  0xca, 0x2a, 0xd1, 0xaf, 0x3b, 0x38, 0xfe, 0x7d, 0x77, 0x95, 0xaf, 0xbf,
-  0xcb, 0xed, 0xc0, 0x5c, 0x38, 0x7c, 0x22, 0xd0, 0x95, 0xdd, 0xe7, 0xce,
-  0xad, 0x13, 0x34, 0xaa, 0x77, 0x73, 0x2b, 0xe8, 0x81, 0x85, 0xa7, 0x35,
-  0xc0, 0x75, 0xdf, 0x37, 0x81, 0xa4, 0x63, 0xc0, 0x7e, 0xe7, 0x45, 0xa3,
-  0x14, 0xab, 0xb1, 0xca, 0x26, 0x0a, 0xc0, 0x7a, 0xa9, 0x21, 0x2c, 0x94,
-  0x25, 0xf5, 0x06, 0x52, 0x04, 0x05, 0x56, 0xa4, 0x4f, 0x1e, 0xd4, 0x46,
-  0x5d, 0x9a, 0x7c, 0xde, 0xa2, 0x5a, 0xef, 0xf5, 0x6a, 0xea, 0xa7, 0xb2,
-  0xc3, 0xae, 0x0a, 0x92, 0xa5, 0x7b, 0x48, 0xf0, 0xb4, 0x2c, 0xdf, 0xaa,
-  0x65, 0xfb, 0xe1, 0x1e, 0xd1, 0xa5, 0x63, 0x37, 0x55, 0x5e, 0x0f, 0x85,
-  0x08, 0xae, 0xce, 0x49, 0x5e, 0x54, 0x0d, 0x20, 0x80, 0x16, 0x03, 0x41,
-  0x68, 0x05, 0x2f, 0x05, 0x02, 0xde, 0x0b, 0x45, 0xc7, 0x32, 0x0b, 0x68,
-  0x67, 0xdc, 0xb3, 0x05, 0xdd, 0xa9, 0x7e, 0x6c, 0x85, 0x5d, 0x50, 0xb1,
-  0x84, 0x25, 0x12, 0x1f, 0x36, 0xed, 0x99, 0x8d, 0x42, 0x73, 0x74, 0x41,
-  0xaa, 0x7e, 0x3d, 0xfe, 0x96, 0xd3, 0x59, 0xc5, 0x5d, 0x52, 0xfe, 0xe3,
-  0xef, 0x92, 0xf5, 0xc9, 0xc3, 0x4f, 0x5e, 0xd4, 0x1c, 0x2d, 0x97, 0x88,
-  0x8a, 0xa0, 0x2b, 0xb0, 0xdb, 0xbf, 0xf2, 0x86, 0xd1, 0x9c, 0x4a, 0x8e,
-  0x17, 0xe6, 0x29, 0x6f, 0x72, 0xfd, 0x19, 0xa9, 0xa7, 0x15, 0x43, 0x1b,
-  0xdd, 0x62, 0x83, 0xae, 0xd1, 0x16, 0xd0, 0x21, 0xac, 0xd2, 0x49, 0x5b,
-  0x27, 0xb0, 0x82, 0x38, 0xc8, 0xca, 0xc3, 0xdd, 0x8b, 0xc8, 0x29, 0x8d,
-  0x34, 0x41, 0x95, 0x5b, 0x22, 0xb6, 0xa4, 0x9a, 0x06, 0x5f, 0xce, 0x12,
-  0xad, 0xbe, 0xd7, 0x24, 0x30, 0x29, 0x8e, 0xab, 0x81, 0x33, 0xd4, 0xe7,
-  0x71, 0xa6, 0x91, 0x36, 0x1a, 0x70, 0x0f, 0x73, 0x7c, 0xac, 0xb0, 0x91,
-  0x6e, 0x84, 0x97, 0x82, 0xed, 0xd2, 0xba, 0xf0, 0xd8, 0xf0, 0x75, 0x2b,
-  0x00, 0x6d, 0x0e, 0x67, 0x43, 0xe3, 0x6b, 0x7c, 0xc2, 0x0d, 0xb2, 0xdc,
-  0xde, 0x9e, 0xb8, 0x07, 0x38, 0x97, 0x08, 0x87, 0xa4, 0x65, 0x6f, 0xd3,
-  0x50, 0x0d, 0xd4, 0x5f, 0x14, 0x25, 0xcd, 0x12, 0x5f, 0x78, 0x60, 0xf7,
-  0xae, 0xcc, 0xf1, 0x96, 0x8a, 0x90, 0x12, 0xde, 0x2a, 0x11, 0xd7, 0xcb,
-  0xa2, 0xa5, 0xe4, 0x72, 0xc8, 0xa6, 0x50, 0xb8, 0x94, 0xc2, 0xc6, 0x06,
-  0x54, 0xa2, 0x5f, 0xc7, 0x95, 0x16, 0x58, 0xe3, 0x51, 0x2a, 0xc8, 0xd6,
-  0xde, 0xde, 0x1a, 0xbf, 0xa0, 0xa2, 0xf5, 0xa9, 0x11, 0x90, 0x17, 0x63,
-  0x58, 0xc6, 0x97, 0x89, 0x41, 0x85, 0x70, 0xbd, 0x2e, 0x06, 0x58, 0x9e,
-  0xd2, 0x12, 0x4a, 0xae, 0x0c, 0x3e, 0xcb, 0xda, 0x80, 0x19, 0xe5, 0x6a,
-  0xca, 0x57, 0x23, 0x6b, 0xdf, 0x2e, 0xad, 0x8d, 0xed, 0x51, 0x9a, 0xaf,
-  0x10, 0x95, 0xf3, 0x74, 0x19, 0x59, 0x0c, 0x0c, 0x97, 0xad, 0xd1, 0x9a,
-  0xa0, 0x7c, 0x39, 0x75, 0x84, 0x53, 0x35, 0x40, 0x05, 0xa1, 0x3f, 0xde,
-  0xb2, 0x3f, 0x72, 0x16, 0x6d, 0x36, 0xda, 0x7f, 0xba, 0xb3, 0x8b, 0xe1,
-  0x3e, 0xdd, 0xf9, 0x2c, 0xc4, 0x1c, 0x77, 0x89, 0xd7, 0x8a, 0xab, 0xab,
-  0xa1, 0xda, 0x0f, 0xa7, 0x9d, 0xcd, 0xd9, 0x94, 0x81, 0x75, 0x4d, 0x48,
-  0xc9, 0x02, 0x87, 0xd2, 0x7c, 0xf4, 0x61, 0x9a, 0x49, 0xf6, 0x33, 0x67,
-  0xe6, 0x60, 0x2f, 0x63, 0xd8, 0xe9, 0x9a, 0x08, 0x36, 0x71, 0x19, 0x19,
-  0x3c, 0xcb, 0xba, 0x24, 0x75, 0x85, 0xa5, 0x0c, 0xc2, 0x86, 0x90, 0x68,
-  0x0f, 0x26, 0xd3, 0xd2, 0xb5, 0xbc, 0x98, 0x71, 0xa8, 0x49, 0xe9, 0x17,
-  0xac, 0x77, 0xab, 0x0e, 0x18, 0x17, 0xd5, 0x36, 0xf2, 0xcf, 0x35, 0x50,
-  0x7e, 0xca, 0xe0, 0x71, 0x56, 0xfe, 0xf2, 0xfc, 0xcd, 0x61, 0xa3, 0xb9,
-  0xbd, 0x27, 0x9f, 0x7f, 0xae, 0x83, 0x48, 0x34, 0xaa, 0xd8, 0xe3, 0x17,
-  0xb3, 0x19, 0x4a, 0xf2, 0xf3, 0xc4, 0x66, 0xce, 0x55, 0x0b, 0x91, 0xb9,
-  0x24, 0x81, 0x76, 0x1d, 0x72, 0x52, 0x5f, 0xd7, 0xb4, 0x6f, 0xc5, 0xa2,
-  0x2d, 0xd7, 0x22, 0x8e, 0xb4, 0xae, 0x9e, 0xd6, 0xc7, 0x32, 0x9c, 0x53,
-  0x03, 0x3b, 0x93, 0x22, 0x22, 0x5f, 0xb6, 0xe2, 0x36, 0xaf, 0x24, 0x1d,
-  0xfd, 0x2f, 0x7c, 0x3b, 0x5e, 0x25, 0x55, 0x3b, 0x2f, 0x24, 0xc8, 0xba,
-  0xad, 0x35, 0xbe, 0x16, 0x58, 0xcd, 0xa3, 0x6d, 0x5a, 0x66, 0xcb, 0x4b,
-  0x11, 0x29, 0x0d, 0x3f, 0x29, 0xa8, 0xac, 0xf6, 0x25, 0xc8, 0xe8, 0xa5,
-  0xfa, 0x89, 0x3a, 0x01, 0x30, 0xbf, 0x54, 0xa8, 0x3e, 0x35, 0x91, 0x02,
-  0x43, 0xae, 0xaa, 0x62, 0x2b, 0x6d, 0x0c, 0xc5, 0x9d, 0x73, 0xbb, 0xa1,
-  0x37, 0x2a, 0x88, 0x99, 0x56, 0x02, 0x68, 0x39, 0x07, 0x53, 0x57, 0x04,
-  0xe7, 0xa5, 0x21, 0x00, 0x72, 0xc1, 0x7b, 0xc6, 0x23, 0x95, 0x0c, 0x7b,
-  0x1e, 0x4d, 0xd7, 0x52, 0x94, 0x61, 0xc1, 0xb8, 0x5a, 0x96, 0x81, 0x7f,
-  0x37, 0x58, 0xa8, 0xd6, 0xc9, 0x3f, 0xb2, 0x1a, 0x73, 0x06, 0xa2, 0x0f,
-  0x35, 0xcc, 0xc7, 0x7e, 0xab, 0x3c, 0xe3, 0xa3, 0xd6, 0x07, 0x7a, 0xec,
-  0xa3, 0x3e, 0x3f, 0xd4, 0x3c, 0xf9, 0xfc, 0x52, 0xdf, 0x9c, 0x6b, 0xa1,
-  0xab, 0x09, 0x84, 0x29, 0xc3, 0x71, 0x60, 0x99, 0xe2, 0xfa, 0xe1, 0xae,
-  0x66, 0x6b, 0xd0, 0xe2, 0xa4, 0x48, 0x2f, 0xb1, 0xb3, 0xfd, 0x4e, 0x0b,
-  0xc0, 0xf0, 0x8d, 0x1b, 0xe9, 0xab, 0x2f, 0x6b, 0xad, 0xdd, 0xdd, 0x8d,
-  0x16, 0xf7, 0xf6, 0x5d, 0x59, 0xab, 0x38, 0xee, 0xd3, 0xf0, 0x14, 0x55,
-  0x58, 0x48, 0xca, 0x27, 0xa2, 0x87, 0x75, 0xa5, 0x7c, 0x4d, 0x48, 0x86,
-  0xf5, 0x89, 0x4b, 0x47, 0xbd, 0x5d, 0x4e, 0x0f, 0x3d, 0x4d, 0x28, 0x86,
-  0xcc, 0xca, 0xe2, 0x24, 0x27, 0x72, 0x33, 0x42, 0xe2, 0x54, 0xde, 0xaa,
-  0x58, 0x4d, 0xab, 0xf6, 0x6d, 0xee, 0x0b, 0x5a, 0x0b, 0x14, 0x6e, 0x15,
-  0x04, 0x12, 0x4a, 0x25, 0xe0, 0xfa, 0x71, 0xe7, 0x93, 0xc5, 0x03, 0xb2,
-  0x5a, 0xe8, 0xcd, 0x93, 0x08, 0x34, 0xdc, 0xfe, 0x40, 0x02, 0x90, 0x35,
-  0xbf, 0xd4, 0xe7, 0x3e, 0xae, 0x5d, 0xca, 0xde, 0x5d, 0x32, 0x79, 0xf5,
-  0x25, 0x6a, 0x2a, 0x03, 0x4d, 0x4b, 0x50, 0x75, 0x99, 0x8e, 0xb6, 0xf9,
-  0xcf, 0x5e, 0xc4, 0x4a, 0x7f, 0xc7, 0x4a, 0x12, 0xfd, 0xad, 0x6b, 0x31,
-  0x40, 0x2b, 0x08, 0x5a, 0xbb, 0xcc, 0xf3, 0xb5, 0x8d, 0x59, 0xd5, 0x1b,
-  0xac, 0x44, 0x10, 0x70, 0x2a, 0xf1, 0x9f, 0x9e, 0xac, 0x84, 0x94, 0xb0,
-  0x43, 0xb5, 0xa3, 0xd5, 0x95, 0xce, 0x08, 0xe5, 0x53, 0x6e, 0x44, 0x4b,
-  0x6d, 0x7a, 0xa5, 0x25, 0x0b, 0x59, 0x8a, 0x5a, 0xbf, 0x20, 0xfc, 0xf4,
-  0xab, 0x2f, 0x01, 0x34, 0xc4, 0xbf, 0xfe, 0xc9, 0xbd, 0xcd, 0xff, 0x10,
-  0x5d, 0xd2, 0xe9, 0x5e, 0x3b, 0x11, 0x76, 0xad, 0xd8, 0xf3, 0xdb, 0xa2,
-  0xd3, 0x99, 0xfa, 0xd4, 0x1f, 0xf4, 0x59, 0xaa, 0xec, 0xff, 0xa9, 0x0f,
-  0xcf, 0x98, 0x99, 0xe0, 0x50, 0xeb, 0x41, 0x0a, 0x5c, 0xe5, 0xad, 0xe8,
-  0x2f, 0x0e, 0x96, 0xd5, 0x5a, 0xdd, 0x3c, 0xf0, 0xc7, 0xc6, 0xfc, 0x53,
-  0xcf, 0x8d, 0xfa, 0xa7, 0x9e, 0x1f, 0xf7, 0x4f, 0x3d, 0x3f, 0xf2, 0x9f,
-  0x7a, 0xbf, 0x62, 0x47, 0xfb, 0xd2, 0xbc, 0x6f, 0x3d, 0x68, 0x3c, 0x68,
-  0xbb, 0xd7, 0x5f, 0xd7, 0xb4, 0x77, 0x58, 0xa4, 0x76, 0xba, 0xfc, 0x0a,
-  0xf1, 0xad, 0xab, 0xab, 0x20, 0xf5, 0xa8, 0xa4, 0x50, 0xa6, 0xcc, 0x1b,
-  0x4a, 0x7c, 0xcb, 0x8b, 0x1c, 0x3c, 0xc1, 0x6b, 0xca, 0x12, 0x73, 0x39,
-  0x67, 0xfd, 0x3b, 0x40, 0xeb, 0xb2, 0x4e, 0xdc, 0x4a, 0x9b, 0xff, 0xb1,
-  0xe5, 0x94, 0x76, 0xaf, 0x77, 0x82, 0x6c, 0x5d, 0xae, 0x0a, 0x09, 0x7e,
-  0x10, 0x9e, 0x29, 0xb9, 0xd7, 0x86, 0x08, 0xa8, 0x7d, 0xbd, 0x3d, 0x78,
-  0xf7, 0xfe, 0xe0, 0xe4, 0xc1, 0x38, 0xbc, 0x30, 0x60, 0xc6, 0x59, 0x6f,
-  0x21, 0xb2, 0x87, 0x9a, 0x2a, 0x47, 0x22, 0xf3, 0x15, 0xce, 0xc5, 0x87,
-  0x7f, 0xe4, 0x1b, 0xfd, 0xe7, 0xce, 0x98, 0xf5, 0xef, 0x55, 0x90, 0x7d,
-  0x13, 0x02, 0xff, 0xdf, 0x08, 0xff, 0xe9, 0xd9, 0xfb, 0xfc, 0x7a, 0x4f,
-  0x9d, 0x1f, 0xae, 0x98, 0x5f, 0x57, 0xcd, 0x28, 0xc7, 0xf7, 0x59, 0x74,
-  0x31, 0x2b, 0x07, 0x54, 0xaa, 0x41, 0x50, 0x9d, 0x18, 0xaa, 0x3c, 0x27,
-  0x02, 0x5d, 0x5e, 0xae, 0x75, 0xe4, 0x1c, 0x1c, 0x1e, 0xfa, 0x4c, 0x86,
-  0x7a, 0x4e, 0x74, 0x2d, 0x92, 0xeb, 0x1f, 0x6f, 0x1c, 0xc3, 0xc2, 0xcd,
-  0x51, 0x7e, 0x8f, 0xa3, 0xbd, 0x87, 0x55, 0x2e, 0x89, 0x44, 0x2f, 0x75,
-  0x34, 0x5f, 0x74, 0xae, 0x23, 0x0d, 0x20, 0x14, 0x33, 0xad, 0x0c, 0x0b,
-  0x0a, 0xce, 0x8c, 0xd5, 0x49, 0x71, 0x76, 0x00, 0xfc, 0x45, 0xcd, 0xaa,
-  0x51, 0x75, 0xa1, 0x15, 0xf5, 0xa9, 0xf1, 0x91, 0x80, 0x37, 0xb7, 0xf9,
-  0x1b, 0x80, 0x88, 0xe9, 0x9c, 0x56, 0x93, 0xfc, 0x62, 0xb5, 0x20, 0xf2,
-  0x25, 0x81, 0x63, 0xd6, 0x2f, 0x1f, 0x89, 0xcc, 0xb1, 0xdd, 0x65, 0x43,
-  0xb2, 0x44, 0x0b, 0xa9, 0x3c, 0x18, 0x77, 0x06, 0x21, 0x0d, 0xba, 0x0d,
-  0x3c, 0xbd, 0xf1, 0xf1, 0xc5, 0x11, 0xed, 0xce, 0xfb, 0x8b, 0x6f, 0x7a,
-  0xaa, 0x52, 0x34, 0x13, 0x05, 0x01, 0x6a, 0x52, 0x15, 0x29, 0x2d, 0xbd,
-  0x25, 0x3f, 0x14, 0xc2, 0x72, 0xdb, 0xc8, 0xd0, 0x0d, 0x5f, 0x78, 0x63,
-  0xa3, 0x9f, 0x8d, 0x9e, 0x6d, 0x35, 0x36, 0x66, 0x3d, 0x5a, 0x5c, 0xb3,
-  0x7c, 0x92, 0xd2, 0xb4, 0xc2, 0x95, 0x71, 0xc8, 0xda, 0xb6, 0x07, 0x13,
-  0x16, 0x99, 0x39, 0x36, 0xe7, 0x5b, 0x47, 0x56, 0xb3, 0xcf, 0xf1, 0x76,
-  0x0a, 0x39, 0x30, 0xd5, 0x1c, 0x9a, 0x90, 0x0a, 0x33, 0x61, 0x91, 0x50,
-  0x97, 0x50, 0xd0, 0x4e, 0xfb, 0x33, 0xb3, 0x21, 0x23, 0xa8, 0x72, 0xd1,
-  0x8e, 0xb0, 0x5a, 0x43, 0xdb, 0xc8, 0x60, 0x02, 0x84, 0x4f, 0xdc, 0xe8,
-  0x44, 0x58, 0x8b, 0x16, 0xa9, 0xe0, 0x52, 0x04, 0x70, 0x6d, 0x4d, 0x4a,
-  0x56, 0x9d, 0xec, 0x47, 0xf9, 0xd9, 0xcd, 0x03, 0x20, 0x1e, 0x70, 0x75,
-  0x37, 0x08, 0x0b, 0xfa, 0x06, 0x46, 0xa3, 0x01, 0xa9, 0xbe, 0xa0, 0x05,
-  0x54, 0x15, 0xf1, 0x02, 0x66, 0x51, 0x2b, 0x1d, 0x89, 0x5a, 0xdb, 0x1c,
-  0x6f, 0xb9, 0x82, 0x62, 0x2c, 0x1a, 0x6b, 0x6b, 0x1c, 0x90, 0xdc, 0x08,
-  0x40, 0x0e, 0x52, 0xd9, 0x15, 0x09, 0xa0, 0x0b, 0x95, 0x27, 0x38, 0x89,
-  0xed, 0x8b, 0x16, 0xdc, 0x6f, 0x7a, 0x37, 0xeb, 0xce, 0xb1, 0x14, 0x01,
-  0x48, 0xf2, 0x19, 0x7c, 0x01, 0xf9, 0xc3, 0xef, 0x5f, 0x37, 0x4a, 0xae,
-  0x62, 0x56, 0x20, 0x04, 0xc9, 0xf7, 0xce, 0xd6, 0xe5, 0xde, 0x9a, 0x37,
-  0x87, 0x68, 0x49, 0x6a, 0x11, 0xcc, 0x92, 0x64, 0xe9, 0x70, 0x03, 0x51,
-  0x03, 0x43, 0xaa, 0x6f, 0xd0, 0x91, 0x63, 0x03, 0xde, 0x3d, 0xc0, 0xa5,
-  0xee, 0xd7, 0x8c, 0x4e, 0xd9, 0x40, 0x0d, 0x9d, 0x9f, 0x51, 0x7c, 0x49,
-  0xd3, 0x8a, 0x76, 0x3f, 0x7b, 0xf2, 0x79, 0x54, 0x72, 0x3e, 0x4f, 0x1a,
-  0x2e, 0x99, 0xa0, 0x6b, 0xac, 0xcf, 0xaa, 0x56, 0xb9, 0xd9, 0xcc, 0xa3,
-  0x9a, 0x63, 0x46, 0xea, 0x72, 0x7e, 0x97, 0xe0, 0xe6, 0xd2, 0x7c, 0x97,
-  0x76, 0x92, 0x2d, 0x2d, 0xa2, 0x55, 0x93, 0x17, 0xdb, 0x19, 0xd6, 0x49,
-  0x8c, 0x30, 0xa3, 0x80, 0x32, 0x67, 0xc4, 0x74, 0x18, 0xd1, 0x98, 0xd8,
-  0xc3, 0xf9, 0xd1, 0xc5, 0x39, 0xfd, 0x18, 0x5f, 0x9c, 0x9e, 0xaf, 0x49,
-  0x85, 0xaf, 0xa6, 0x60, 0x7b, 0xbc, 0x68, 0x4c, 0x35, 0x8c, 0x16, 0x6b,
-  0x91, 0x26, 0x01, 0xbf, 0x80, 0xe7, 0x49, 0x58, 0x48, 0xd9, 0x09, 0xd0,
-  0x15, 0xe0, 0x74, 0x95, 0xf5, 0x32, 0xa9, 0x97, 0xc4, 0xcb, 0x1f, 0x9c,
-  0x98, 0xec, 0xf9, 0xc3, 0x14, 0x82, 0x09, 0x33, 0x31, 0xf2, 0x8c, 0x1d,
-  0xd3, 0xc6, 0x68, 0xb5, 0x86, 0x9a, 0x37, 0xe1, 0xab, 0x25, 0x63, 0x0d,
-  0x85, 0x08, 0x59, 0x49, 0xb9, 0xba, 0x5a, 0x09, 0x92, 0x9e, 0x65, 0x69,
-  0xf5, 0xd8, 0x57, 0x74, 0xe3, 0xd0, 0x88, 0x1f, 0xa1, 0xdf, 0xb8, 0x74,
-  0x26, 0x1c, 0xbe, 0x32, 0xf3, 0x45, 0x22, 0xd2, 0xbc, 0x98, 0xe4, 0x8d,
-  0xeb, 0xc8, 0x3d, 0x21, 0x30, 0x20, 0x51, 0x57, 0x92, 0xa0, 0x83, 0xfe,
-  0xe2, 0x5d, 0xee, 0xbb, 0x64, 0xaf, 0x5c, 0xa9, 0x43, 0xf6, 0x85, 0x04,
-  0x9c, 0x79, 0x05, 0x4c, 0xb5, 0xbe, 0x8d, 0xaa, 0xef, 0x48, 0xad, 0xc1,
-  0x95, 0x77, 0x9b, 0x5c, 0x99, 0x33, 0xe5, 0xba, 0x39, 0x0b, 0xe2, 0x56,
-  0x2c, 0xdf, 0xca, 0x55, 0xc6, 0x70, 0xf8, 0x38, 0x21, 0x1c, 0xf3, 0x99,
-  0x3e, 0xd5, 0x19, 0xe9, 0x6f, 0xf5, 0x70, 0x3d, 0x6d, 0xeb, 0x96, 0x4b,
-  0xf2, 0xda, 0xaa, 0xc9, 0x4d, 0x6b, 0x42, 0x52, 0x9b, 0x7f, 0x76, 0xd4,
-  0xab, 0x88, 0x86, 0x67, 0xdb, 0x41, 0x82, 0xa0, 0xe2, 0xd9, 0xd5, 0x66,
-  0xbe, 0xdb, 0x2d, 0x78, 0xac, 0xc3, 0xb6, 0x69, 0x4a, 0x1f, 0x30, 0xe8,
-  0x8a, 0x3c, 0x59, 0xa8, 0x0c, 0xd2, 0x9d, 0xd5, 0x1b, 0xbd, 0xcf, 0x34,
-  0xbd, 0x36, 0xf3, 0x55, 0x4c, 0x6c, 0x11, 0x39, 0x73, 0x9c, 0x0d, 0xc3,
-  0x72, 0x3b, 0xcd, 0x72, 0x89, 0x51, 0xe4, 0x45, 0xe8, 0x88, 0xc4, 0x82,
-  0xc0, 0x8a, 0xa8, 0x33, 0xbb, 0x52, 0xb4, 0x3d, 0x35, 0x01, 0x14, 0x4c,
-  0xd8, 0xcd, 0xe4, 0x48, 0x38, 0xb5, 0x5a, 0x47, 0xe9, 0x2c, 0xdc, 0x44,
-  0x61, 0x71, 0x10, 0xc3, 0x3d, 0x6f, 0xa8, 0x24, 0xa4, 0x54, 0x92, 0xee,
-  0x2c, 0xbd, 0x51, 0xe6, 0xda, 0x36, 0x50, 0x63, 0x50, 0x92, 0x7d, 0xa8,
-  0x15, 0x45, 0xea, 0x49, 0x7d, 0x26, 0xc2, 0x35, 0xef, 0x33, 0xc6, 0x7f,
-  0x07, 0xbd, 0x0d, 0xd3, 0xe5, 0xe3, 0x49, 0x98, 0x96, 0xfe, 0xc9, 0xc3,
-  0xf2, 0x69, 0x0d, 0x21, 0xf7, 0x29, 0x57, 0x57, 0x57, 0xc8, 0xa9, 0x49,
-  0xdb, 0xf0, 0x05, 0x28, 0x85, 0xac, 0xe6, 0x41, 0x05, 0xb1, 0x21, 0x31,
-  0x8b, 0x07, 0xed, 0xa6, 0x07, 0x3b, 0x30, 0x7a, 0x53, 0x52, 0xf6, 0x80,
-  0x90, 0x6b, 0xa3, 0x6b, 0xd8, 0x9a, 0x2c, 0x9b, 0x11, 0x62, 0x20, 0x0f,
-  0x91, 0x24, 0x1a, 0xc0, 0x36, 0xd2, 0x78, 0xdd, 0x80, 0xdb, 0x41, 0x71,
-  0x8a, 0xee, 0x20, 0x92, 0x8c, 0x9d, 0x29, 0xab, 0xd2, 0x1a, 0xf6, 0x55,
-  0xa3, 0xe0, 0xa7, 0xa3, 0xbd, 0xad, 0x07, 0x73, 0x3a, 0x58, 0x6e, 0x67,
-  0x24, 0x2c, 0x49, 0xf6, 0x23, 0x15, 0x4b, 0x12, 0xae, 0x25, 0x65, 0xb7,
-  0x90, 0xad, 0xf5, 0x25, 0xb2, 0x30, 0x8b, 0x36, 0x7c, 0x3a, 0xaf, 0x50,
-  0x73, 0xdf, 0xe8, 0x98, 0x7d, 0x42, 0x5a, 0x3a, 0x84, 0xdf, 0x38, 0x3a,
-  0xa3, 0xbb, 0xc5, 0x2d, 0x71, 0x90, 0xa9, 0x4a, 0xef, 0x40, 0xcd, 0xe0,
-  0x61, 0x6c, 0x35, 0x2f, 0x42, 0x06, 0x68, 0x45, 0x44, 0xcb, 0x1b, 0x6f,
-  0x92, 0x67, 0xa5, 0x6f, 0x41, 0x1f, 0xb2, 0x5b, 0xa0, 0xa0, 0x61, 0x00,
-  0x87, 0x43, 0x0a, 0xbd, 0xe1, 0xd0, 0xb2, 0xed, 0xd9, 0xf8, 0xe8, 0x46,
-  0xe7, 0xfd, 0x8c, 0xb5, 0xf5, 0x17, 0x00, 0x07, 0xd9, 0xd1, 0xc9, 0x2c,
-  0xc3, 0x3a, 0x28, 0xab, 0xa5, 0x6a, 0x3f, 0xb3, 0xfc, 0x2e, 0x43, 0x69,
-  0x80, 0xa8, 0x4d, 0x4d, 0x18, 0x3e, 0x9f, 0x9d, 0x46, 0x5e, 0xca, 0xde,
-  0xce, 0xe8, 0x63, 0x93, 0x9d, 0x96, 0xe5, 0x7c, 0x38, 0x9d, 0x4e, 0x1f,
-  0xe0, 0xa8, 0x87, 0x87, 0x87, 0xf4, 0xc1, 0x21, 0x90, 0x12, 0x18, 0x21,
-  0x14, 0x23, 0x3d, 0xbc, 0x66, 0x53, 0xcd, 0x7c, 0x2b, 0x1a, 0x5f, 0xaf,
-  0x18, 0xb3, 0x8a, 0x2b, 0xb7, 0x33, 0x55, 0x8c, 0xc7, 0x27, 0xdb, 0x17,
-  0x27, 0xe3, 0xa6, 0xd3, 0x2b, 0xbe, 0x67, 0x5d, 0x0f, 0x3a, 0x5d, 0x5d,
-  0x73, 0x11, 0xc1, 0x0d, 0x18, 0x65, 0x16, 0xe7, 0x6d, 0x74, 0x25, 0x3d,
-  0x74, 0xa6, 0x23, 0xad, 0xb2, 0xa0, 0x28, 0x91, 0x6a, 0x56, 0x59, 0x92,
-  0x21, 0xe8, 0xd1, 0x21, 0x29, 0x6b, 0x75, 0xfa, 0x77, 0x07, 0x17, 0x5c,
-  0xac, 0xb0, 0xd2, 0x4c, 0xaa, 0xee, 0x14, 0x12, 0x07, 0x70, 0x87, 0xc4,
-  0xe7, 0x38, 0x00, 0xed, 0xb7, 0x3b, 0x00, 0xac, 0x28, 0x2d, 0x8d, 0x35,
-  0x8e, 0x34, 0x86, 0xbe, 0x03, 0x91, 0x58, 0x57, 0x74, 0xe8, 0x6e, 0x20,
-  0xc9, 0x42, 0xe0, 0x3f, 0xcb, 0xc6, 0x86, 0xec, 0x3e, 0x6f, 0xdf, 0x6f,
-  0xb5, 0xd7, 0x7f, 0x94, 0x2c, 0xe0, 0x6d, 0xed, 0xf5, 0xe7, 0x5f, 0xbf,
-  0x4d, 0x89, 0x72, 0x0b, 0x7e, 0x4c, 0x48, 0xe3, 0xa2, 0x23, 0x34, 0x37,
-  0x60, 0xbb, 0xae, 0x8c, 0x84, 0x64, 0xbe, 0x28, 0x56, 0x63, 0x49, 0xdb,
-  0x3d, 0x43, 0xf5, 0x1c, 0xb9, 0x06, 0x5c, 0x3e, 0xda, 0x5d, 0xdc, 0x62,
-  0x1b, 0xc6, 0x29, 0x02, 0x04, 0x91, 0x9c, 0x98, 0x8b, 0x04, 0x2d, 0xb9,
-  0xe6, 0x8b, 0x64, 0x39, 0xbf, 0x77, 0x62, 0x9a, 0x36, 0xbf, 0x4e, 0x7f,
-  0x0b, 0xa5, 0xfd, 0x30, 0x41, 0xda, 0xc6, 0x58, 0xd6, 0x5b, 0x41, 0x47,
-  0x71, 0xda, 0x69, 0x78, 0x8e, 0xb5, 0xe7, 0x46, 0xb5, 0xc0, 0xf6, 0x0e,
-  0xed, 0x75, 0xee, 0x90, 0x50, 0x69, 0xf7, 0x7e, 0x9c, 0xeb, 0xb1, 0xb7,
-  0xd3, 0xa0, 0x51, 0x90, 0x46, 0x63, 0xf3, 0xfc, 0x8a, 0xa3, 0xa3, 0x05,
-  0x7b, 0x04, 0x8b, 0x64, 0xc5, 0x32, 0x9a, 0x76, 0x09, 0xa1, 0x60, 0x2d,
-  0x16, 0x5a, 0xf7, 0x2c, 0x89, 0x2c, 0xc2, 0x3c, 0xc5, 0xd1, 0xbd, 0x01,
-  0x1a, 0xb9, 0xe4, 0xfd, 0x8e, 0xfd, 0x70, 0xc1, 0x15, 0x53, 0x0e, 0xa9,
-  0x86, 0x4b, 0xb4, 0x34, 0x64, 0x07, 0xa9, 0xb4, 0xa2, 0xd1, 0x14, 0x56,
-  0x95, 0x5c, 0x55, 0xd3, 0x75, 0x25, 0xe2, 0x75, 0x86, 0xed, 0x55, 0xdb,
-  0xd9, 0xd2, 0x2b, 0x9b, 0xe4, 0x0a, 0x62, 0x63, 0xde, 0xfc, 0xa1, 0x32,
-  0x61, 0x2b, 0xd3, 0x7f, 0x22, 0x80, 0xe0, 0xb7, 0x86, 0x39, 0x78, 0xb9,
-  0xaa, 0x78, 0xd6, 0x1a, 0x55, 0x56, 0x63, 0xf1, 0x6c, 0x9e, 0xd7, 0x48,
-  0x76, 0x71, 0x91, 0x3d, 0x58, 0x8f, 0x37, 0x1a, 0xab, 0x39, 0x59, 0xf3,
-  0xd0, 0xe1, 0x0c, 0x0b, 0xe1, 0x09, 0x3d, 0x54, 0xb0, 0x36, 0x7a, 0xd9,
-  0x19, 0xb8, 0x2e, 0x31, 0x69, 0x1c, 0x17, 0x44, 0x7a, 0x26, 0x2f, 0x94,
-  0x5e, 0x4d, 0x73, 0xce, 0x32, 0x60, 0x39, 0x69, 0x14, 0x9d, 0x24, 0xe2,
-  0x91, 0xea, 0x7f, 0xd9, 0x17, 0x2e, 0xdd, 0x7f, 0xd9, 0x8f, 0x34, 0xf0,
-  0xbf, 0x5d, 0x59, 0x8a, 0x6f, 0x0c, 0xab, 0x6c, 0xd0, 0x17, 0x93, 0x73,
-  0xdf, 0x86, 0xa0, 0x42, 0xbb, 0x0c, 0x0b, 0x71, 0x3c, 0x99, 0xa6, 0xe7,
-  0x90, 0x8c, 0xc7, 0x12, 0x51, 0x87, 0xfe, 0x5a, 0x87, 0xb0, 0x59, 0x4a,
-  0x9e, 0x1a, 0xfb, 0x89, 0x18, 0xce, 0x59, 0xa6, 0x2d, 0x9b, 0x5b, 0x24,
-  0xfd, 0x12, 0xd1, 0x01, 0x52, 0x3b, 0xa8, 0x2b, 0xf4, 0xc7, 0xb2, 0x96,
-  0x12, 0x57, 0xe9, 0x57, 0xc7, 0x82, 0xc4, 0xcf, 0xe9, 0x14, 0x71, 0x14,
-  0x10, 0x0e, 0xe9, 0x5b, 0x92, 0x6a, 0xe4, 0xa4, 0xf3, 0xbc, 0xd9, 0x58,
-  0xfc, 0xb2, 0x19, 0xb4, 0x78, 0x99, 0xc4, 0xbc, 0x9b, 0x25, 0x33, 0xf9,
-  0x26, 0xaa, 0xf4, 0xf0, 0x8a, 0x25, 0xc2, 0xab, 0x79, 0x3e, 0xc9, 0x2f,
-  0x2f, 0x1f, 0x30, 0x45, 0x0a, 0x34, 0x02, 0xda, 0x10, 0x12, 0xed, 0x71,
-  0x6a, 0x20, 0xbf, 0x37, 0xe1, 0xf1, 0x69, 0x5d, 0xc9, 0x91, 0x58, 0x64,
-  0x80, 0x8f, 0xd9, 0x92, 0x02, 0x42, 0xe1, 0x79, 0xe0, 0xf2, 0x17, 0x2d,
-  0xeb, 0x89, 0x9a, 0x33, 0x39, 0x53, 0x03, 0x5c, 0x3c, 0x9a, 0x66, 0x19,
-  0xfd, 0xc7, 0xdf, 0x7f, 0xfc, 0xb9, 0x23, 0x59, 0x80, 0x35, 0x1b, 0x8d,
-  0xd1, 0x46, 0x6c, 0x98, 0x60, 0x0f, 0x41, 0x85, 0x60, 0x31, 0xc4, 0x97,
-  0xdf, 0xd1, 0xd2, 0xc0, 0xa3, 0x20, 0x2d, 0xac, 0xcd, 0xe0, 0x98, 0x91,
-  0x5b, 0x87, 0x00, 0xba, 0xcc, 0x2b, 0x8b, 0x05, 0x60, 0xec, 0x25, 0x60,
-  0xcf, 0x79, 0x6f, 0x9a, 0xc3, 0x75, 0x11, 0xad, 0xbd, 0x7d, 0xa0, 0x1c,
-  0x3c, 0x97, 0x73, 0xaf, 0x2a, 0x9f, 0x7d, 0x7f, 0x7e, 0xec, 0x74, 0xba,
-  0x60, 0x27, 0xbe, 0xc6, 0x4e, 0xb4, 0x96, 0xcd, 0xe1, 0xc1, 0xd6, 0x4b,
-  0x3e, 0x78, 0x58, 0x3c, 0x54, 0x8b, 0x13, 0xe6, 0x53, 0x83, 0xb1, 0x46,
-  0x81, 0xde, 0xd9, 0xa0, 0x13, 0xb1, 0x78, 0xd0, 0x04, 0x57, 0xcd, 0x8b,
-  0x36, 0x64, 0x66, 0x90, 0xfa, 0x9c, 0xba, 0x18, 0x88, 0x66, 0xf8, 0xc9,
-  0x91, 0xc7, 0x7a, 0x0f, 0xbc, 0x61, 0x06, 0x1b, 0xe7, 0x71, 0xe0, 0x01,
-  0xbe, 0xc7, 0xe4, 0x7f, 0x87, 0x92, 0xb8, 0x06, 0x88, 0xda, 0xa9, 0x15,
-  0x5d, 0x78, 0x54, 0x55, 0x61, 0x5d, 0x06, 0xae, 0xe6, 0x57, 0xf0, 0xc4,
-  0xd2, 0x3f, 0xfa, 0xff, 0xd6, 0xf7, 0x58, 0x96, 0x1d, 0xe9, 0x4f, 0x2e,
-  0x75, 0xbb, 0xa3, 0xf2, 0xe8, 0xf0, 0x78, 0xe0, 0x47, 0xea, 0x3b, 0xb4,
-  0x79, 0x4c, 0x3a, 0x50, 0xdc, 0xd7, 0x0d, 0xe3, 0x9b, 0xa3, 0x83, 0xd7,
-  0x36, 0xd9, 0x7f, 0x0a, 0x20, 0x94, 0x37, 0x04, 0x4d, 0x12, 0x01, 0xab,
-  0x5f, 0x99, 0x2e, 0x89, 0x4d, 0xb1, 0xbb, 0x03, 0x24, 0x42, 0xd2, 0x36,
-  0xd7, 0x2f, 0x61, 0x92, 0x6d, 0xab, 0x8e, 0x6a, 0x75, 0x5a, 0xab, 0x3c,
-  0x06, 0x86, 0x39, 0x33, 0xf2, 0xf1, 0xe1, 0x15, 0x16, 0x17, 0xd0, 0x6f,
-  0x98, 0xda, 0xfc, 0x52, 0x7e, 0xae, 0xb9, 0x14, 0x8e, 0x00, 0xbf, 0xab,
-  0x8f, 0xd2, 0x5a, 0x2a, 0x5e, 0xa4, 0xf1, 0x5d, 0xa3, 0x19, 0xa8, 0x5c,
-  0x16, 0x5c, 0xd5, 0x45, 0x7c, 0x1a, 0x5c, 0x6d, 0xb2, 0xc3, 0x9f, 0x15,
-  0x5b, 0xde, 0x58, 0x0a, 0x50, 0x02, 0x5d, 0xc1, 0xb1, 0x24, 0xe8, 0xb4,
-  0xec, 0x84, 0xde, 0x33, 0x67, 0x53, 0x80, 0x85, 0x4f, 0x6a, 0x19, 0xe3,
-  0xa9, 0x90, 0x72, 0x4d, 0x72, 0x8a, 0x0d, 0x98, 0x1f, 0xbb, 0x56, 0x0f,
-  0x2f, 0x34, 0x38, 0x18, 0xbd, 0x5b, 0x15, 0x09, 0xb0, 0x79, 0x2e, 0xb1,
-  0xc6, 0xd9, 0x35, 0x04, 0xf6, 0x56, 0x14, 0x42, 0xb3, 0xb9, 0x0e, 0xc4,
-  0x99, 0xce, 0xb8, 0x54, 0x45, 0x66, 0x99, 0xd8, 0x9d, 0x85, 0xc2, 0x6b,
-  0xce, 0x8c, 0xe6, 0x89, 0x73, 0x7d, 0x20, 0x2b, 0x3e, 0x94, 0xc3, 0xdb,
-  0xbb, 0xce, 0x6b, 0x27, 0xa0, 0x8c, 0xc8, 0xba, 0xe6, 0x9b, 0x64, 0x7a,
-  0x93, 0x22, 0xb2, 0xaf, 0x5a, 0x81, 0xc7, 0xc7, 0x59, 0x38, 0x4a, 0x07,
-  0x3f, 0x34, 0xcb, 0xb1, 0xd2, 0xdd, 0x44, 0x64, 0x32, 0x25, 0x03, 0xc2,
-  0xd8, 0x68, 0x34, 0xaf, 0xdc, 0xf0, 0xba, 0x8d, 0x6f, 0xa3, 0x10, 0xa4,
-  0xa0, 0x1f, 0x25, 0x45, 0x2b, 0x1d, 0x27, 0x41, 0x34, 0x1f, 0x14, 0x2f,
-  0x98, 0xc2, 0xb4, 0xb0, 0x30, 0x28, 0x9c, 0xcb, 0x71, 0xb1, 0xac, 0xe2,
-  0xf0, 0x67, 0x78, 0xca, 0xba, 0x3c, 0xc4, 0xef, 0xaf, 0xd2, 0xdb, 0x4e,
-  0xfb, 0xb2, 0x0d, 0x0c, 0xd6, 0x69, 0x1b, 0x85, 0x83, 0x7a, 0x75, 0x86,
-  0x3c, 0x41, 0x0f, 0x8b, 0x18, 0x4d, 0xdb, 0x6d, 0x5f, 0x3b, 0xa7, 0x9a,
-  0xaf, 0xb0, 0x98, 0xaf, 0xfa, 0x7d, 0x22, 0xfc, 0xa8, 0xf7, 0x4d, 0x5e,
-  0x56, 0xfb, 0x3d, 0x07, 0x2f, 0x54, 0x26, 0x2a, 0x59, 0xd4, 0x29, 0x47,
-  0xe1, 0xa7, 0x5b, 0x61, 0x59, 0xb8, 0xdb, 0xe5, 0xfc, 0xd1, 0xc5, 0xa2,
-  0x0f, 0x9b, 0x0b, 0x52, 0x73, 0x9a, 0x1d, 0x42, 0x04, 0x43, 0xf7, 0x2e,
-  0x52, 0x1d, 0x02, 0x40, 0x10, 0x9a, 0x5c, 0xaa, 0xc4, 0x90, 0x7e, 0x18,
-  0x1e, 0xa2, 0xf3, 0xe1, 0x37, 0x68, 0xef, 0x4f, 0x3d, 0xa7, 0x76, 0x37,
-  0xbf, 0xda, 0xef, 0xad, 0x49, 0x9b, 0x08, 0xa1, 0x3b, 0xcb, 0x55, 0x61,
-  0xf9, 0xd4, 0x30, 0xa3, 0xeb, 0x28, 0x51, 0x6d, 0x69, 0x36, 0xdb, 0x76,
-  0x9b, 0x2e, 0x1e, 0xbf, 0xae, 0xc4, 0x3e, 0x4d, 0xfa, 0x59, 0x22, 0x54,
-  0x6f, 0x36, 0xcc, 0x2f, 0x87, 0x28, 0x81, 0xb9, 0x88, 0x8b, 0x1b, 0xf6,
-  0xaf, 0x04, 0xa7, 0x0e, 0xf8, 0xe4, 0x48, 0x53, 0x9b, 0xcd, 0xba, 0xee,
-  0x6a, 0xcd, 0xaf, 0x28, 0x9c, 0xda, 0xaa, 0x83, 0xd1, 0xcd, 0xdc, 0x67,
-  0x55, 0xc7, 0x5e, 0x77, 0xf0, 0xd7, 0x5c, 0x34, 0x52, 0xd1, 0xaf, 0x5b,
-  0xb5, 0xf3, 0x10, 0x99, 0x37, 0x90, 0xeb, 0x1c, 0x93, 0x06, 0x2b, 0x5e,
-  0x88, 0x05, 0x09, 0x56, 0x00, 0x52, 0xfd, 0x59, 0x30, 0x65, 0x28, 0xfa,
-  0x87, 0xab, 0x2a, 0x1d, 0x58, 0x91, 0xd9, 0x21, 0x75, 0xa4, 0x88, 0xba,
-  0x75, 0x10, 0x8a, 0x75, 0xb0, 0x81, 0x63, 0x46, 0x14, 0x57, 0xf1, 0xf3,
-  0xb3, 0xd1, 0x93, 0xcf, 0xb8, 0xc8, 0x93, 0xc3, 0x9e, 0xb2, 0x42, 0xb4,
-  0x9e, 0x69, 0x62, 0x2b, 0x03, 0xfa, 0x6a, 0x95, 0xe2, 0xe0, 0xf2, 0x41,
-  0xbc, 0x1e, 0x33, 0xcd, 0x98, 0x07, 0xe0, 0x79, 0x47, 0xb1, 0x5b, 0x0d,
-  0xec, 0x69, 0xf9, 0x5c, 0x7e, 0xa7, 0xbe, 0x7c, 0xd0, 0xd2, 0x1b, 0xbe,
-  0x90, 0x86, 0xef, 0x88, 0xd1, 0xed, 0x47, 0xff, 0x9e, 0x27, 0x3d, 0xab,
-  0xca, 0xb6, 0xfb, 0x62, 0x8f, 0x14, 0x8e, 0xcf, 0x47, 0x3b, 0xa3, 0xdd,
-  0xed, 0x87, 0x31, 0x44, 0x10, 0xb6, 0xc2, 0x61, 0x5e, 0x1d, 0xee, 0x6c,
-  0xe4, 0xeb, 0x79, 0x2a, 0xda, 0x16, 0x5d, 0xa4, 0xcb, 0x07, 0xc4, 0xaf,
-  0x18, 0x0f, 0x0f, 0xb4, 0x12, 0x2e, 0x01, 0xb7, 0x5c, 0x4d, 0x16, 0xb3,
-  0x67, 0xd1, 0x4b, 0xfa, 0xa7, 0x1d, 0x9d, 0x7d, 0x68, 0x2e, 0x43, 0xb6,
-  0x6e, 0xf2, 0x19, 0xd2, 0x5c, 0x5c, 0x91, 0x35, 0xf9, 0xd7, 0x27, 0x7b,
-  0xd4, 0xf0, 0xc7, 0xd8, 0x4a, 0x68, 0x45, 0xb3, 0xf4, 0x2a, 0xad, 0xba,
-  0x53, 0xa3, 0x4c, 0x28, 0x0f, 0x70, 0xdd, 0x79, 0xef, 0x77, 0xf7, 0x3e,
-  0x8f, 0x26, 0x69, 0x15, 0xbd, 0x7d, 0xfd, 0x8c, 0xd4, 0x8e, 0x64, 0x7a,
-  0x53, 0xae, 0x16, 0x46, 0xa1, 0x5a, 0x6e, 0x89, 0xc7, 0xd9, 0x6f, 0x5e,
-  0x14, 0x3e, 0x14, 0x7a, 0x50, 0x33, 0x14, 0x5e, 0x9a, 0x41, 0x33, 0xa8,
-  0x44, 0xe6, 0x4e, 0x12, 0xb7, 0xa4, 0x06, 0xd5, 0x0e, 0x55, 0x9d, 0xd6,
-  0x80, 0x3a, 0x2f, 0xad, 0x62, 0x7c, 0x4d, 0x3d, 0xfc, 0xac, 0x6e, 0xf6,
-  0x90, 0x28, 0x7a, 0xc3, 0xa4, 0x1d, 0x92, 0xf0, 0x77, 0xd5, 0x8a, 0x92,
-  0x35, 0x65, 0xee, 0x18, 0xcf, 0x36, 0x22, 0x0b, 0x4f, 0xf0, 0x46, 0x00,
-  0xfc, 0x21, 0x62, 0x09, 0x9f, 0xcf, 0x74, 0xba, 0x9a, 0x73, 0x99, 0xd6,
-  0xb6, 0x00, 0x63, 0xc5, 0x9f, 0x0c, 0x66, 0xa7, 0x58, 0x49, 0x41, 0xcf,
-  0x83, 0x25, 0x87, 0xc5, 0x45, 0xbb, 0xa3, 0x8f, 0x83, 0xb0, 0x48, 0xbd,
-  0x56, 0x8e, 0x43, 0x2d, 0xfa, 0xd6, 0x65, 0x01, 0xd3, 0x76, 0x63, 0x34,
-  0xdc, 0xb6, 0x04, 0x24, 0xce, 0xd9, 0xb5, 0x53, 0xc8, 0x7d, 0xb6, 0x47,
-  0x97, 0xc3, 0x55, 0x8c, 0xd2, 0xa3, 0x01, 0xf5, 0xa4, 0x03, 0x00, 0xa4,
-  0x41, 0x06, 0x59, 0x37, 0x71, 0x95, 0x50, 0x64, 0xe6, 0xfc, 0xa1, 0x9d,
-  0x44, 0x95, 0x59, 0x24, 0x96, 0x56, 0x44, 0xd7, 0xe0, 0xeb, 0xd6, 0x3d,
-  0x84, 0x66, 0x1c, 0x57, 0x81, 0x8b, 0x48, 0x96, 0x60, 0xc8, 0x42, 0xc4,
-  0x80, 0xa5, 0xd0, 0xc4, 0x0b, 0x0d, 0x41, 0x08, 0x31, 0x1a, 0x6d, 0xa7,
-  0xd7, 0x20, 0xe9, 0xcb, 0xc2, 0x80, 0x47, 0xa3, 0x60, 0x56, 0xc7, 0x26,
-  0x8e, 0x75, 0x4d, 0x89, 0x4b, 0x62, 0x6d, 0xbf, 0x39, 0x3e, 0x39, 0xda,
-  0x8a, 0xde, 0x24, 0x16, 0x31, 0x1f, 0x4e, 0x8b, 0x19, 0xe0, 0xbf, 0xc8,
-  0x27, 0xb6, 0x45, 0xaa, 0x46, 0x76, 0x39, 0xf6, 0xd5, 0xe0, 0x05, 0x21,
-  0x58, 0x76, 0x0d, 0xf2, 0xae, 0xe4, 0xc6, 0xe5, 0x88, 0x44, 0xb4, 0xb2,
-  0x68, 0x30, 0x5c, 0x05, 0x95, 0x40, 0x3a, 0x6a, 0x72, 0x06, 0xb1, 0xd3,
-  0xa3, 0xa0, 0x1c, 0x46, 0x1e, 0xba, 0xfa, 0x79, 0xec, 0x1a, 0x71, 0x27,
-  0xbe, 0x3d, 0x29, 0xee, 0xdb, 0x75, 0x16, 0xe0, 0x99, 0x2b, 0xd3, 0xbf,
-  0x49, 0x78, 0x32, 0xa2, 0x42, 0x16, 0xf9, 0xcc, 0x61, 0xdc, 0x4b, 0x25,
-  0x41, 0x9e, 0x6f, 0xc8, 0x50, 0x02, 0x18, 0xbf, 0xae, 0xa4, 0xef, 0x33,
-  0x41, 0xf4, 0xe7, 0x01, 0x85, 0xb1, 0x06, 0x22, 0x67, 0x78, 0x2d, 0xcc,
-  0xb5, 0x32, 0x72, 0xe1, 0x6a, 0x5c, 0x19, 0xb3, 0x83, 0x2e, 0x1c, 0x3a,
-  0x9f, 0x90, 0x41, 0xe8, 0xc3, 0xa0, 0xd9, 0xe2, 0xb0, 0x4b, 0xe0, 0xe0,
-  0x41, 0x66, 0x51, 0x45, 0x52, 0xf9, 0x04, 0x49, 0x7d, 0xad, 0x34, 0x87,
-  0x8e, 0xb8, 0x2f, 0xe5, 0xe6, 0xc1, 0xcc, 0x48, 0x96, 0xdf, 0xd9, 0xdf,
-  0x0d, 0x0b, 0x8d, 0x66, 0x5a, 0x46, 0x9b, 0xe3, 0xb1, 0xb6, 0x7f, 0xbb,
-  0xc8, 0x9b, 0xbf, 0x30, 0x69, 0xfe, 0x65, 0x95, 0xdd, 0x10, 0x6d, 0x95,
-  0x4c, 0xc1, 0xc3, 0xee, 0x62, 0xe7, 0x7a, 0xfa, 0xbe, 0x77, 0xae, 0x97,
-  0x66, 0x39, 0x9d, 0x69, 0x58, 0x14, 0x26, 0x0e, 0x10, 0xc4, 0x07, 0x0f,
-  0xe4, 0xdf, 0xd5, 0xc4, 0x1a, 0x8e, 0xcc, 0x27, 0xda, 0x99, 0x72, 0x50,
-  0x07, 0x2b, 0xd2, 0x3d, 0x1d, 0x91, 0x35, 0xdd, 0x5b, 0x5f, 0x22, 0x0c,
-  0x35, 0xe1, 0x21, 0xde, 0xc2, 0x44, 0xe4, 0xb4, 0x01, 0x75, 0xa9, 0xc4,
-  0x82, 0x47, 0xcd, 0x02, 0x48, 0x64, 0x8d, 0x0a, 0xf2, 0x34, 0xdf, 0xf3,
-  0xed, 0xd4, 0x8a, 0x0b, 0xc9, 0x78, 0x8d, 0xac, 0xf2, 0x59, 0xe9, 0xe0,
-  0xa1, 0xdd, 0x00, 0xa3, 0xc6, 0xe0, 0x44, 0x43, 0x62, 0xa9, 0xa5, 0xdf,
-  0x3a, 0x97, 0xd3, 0x79, 0x2e, 0xc5, 0x3e, 0xef, 0x42, 0xf3, 0xdd, 0xbf,
-  0x8b, 0x20, 0xc2, 0x77, 0x91, 0x9e, 0xf4, 0x61, 0x47, 0x84, 0x57, 0x58,
-  0x16, 0xc3, 0x92, 0x16, 0x91, 0xd9, 0x04, 0x09, 0xe7, 0x34, 0x68, 0x43,
-  0x02, 0x77, 0x5d, 0x5e, 0xa3, 0x5e, 0x58, 0x9d, 0x50, 0xb8, 0xc3, 0xc0,
-  0x38, 0xe1, 0xb8, 0xf5, 0x6b, 0x3a, 0xb6, 0x79, 0x99, 0xca, 0xbe, 0xf8,
-  0xf0, 0xbb, 0xc0, 0xb4, 0xdd, 0x8e, 0xb0, 0xb1, 0x5c, 0x7e, 0x07, 0x8f,
-  0xe4, 0x62, 0x8e, 0x4c, 0x29, 0xef, 0xca, 0x95, 0x85, 0xd9, 0x2d, 0xcb,
-  0x43, 0x88, 0x54, 0xba, 0xea, 0xd9, 0xcc, 0xf1, 0x7b, 0xa2, 0x42, 0x52,
-  0x38, 0x33, 0xae, 0x03, 0xb6, 0x79, 0x9f, 0x54, 0x5b, 0x1e, 0x02, 0xdc,
-  0x62, 0xda, 0xd6, 0x95, 0xb8, 0x6a, 0x65, 0x2e, 0xb3, 0xfa, 0xa9, 0x2f,
-  0x09, 0xce, 0x28, 0x5f, 0xd7, 0x05, 0x92, 0xfb, 0xd9, 0x49, 0xa2, 0x18,
-  0xee, 0xeb, 0x9a, 0x0b, 0x2f, 0xa5, 0x1b, 0xb9, 0x94, 0xca, 0xae, 0x50,
-  0x2f, 0x4d, 0x36, 0x0b, 0xfa, 0x0d, 0xe2, 0x5f, 0x55, 0xe3, 0x33, 0x47,
-  0x9b, 0x15, 0x1f, 0x89, 0xa2, 0x9e, 0xb5, 0xd6, 0x6b, 0x0a, 0x9e, 0xb5,
-  0x44, 0x2f, 0x09, 0x56, 0x0c, 0x30, 0x68, 0x0f, 0xe8, 0x58, 0xb4, 0x1e,
-  0x61, 0x93, 0xb8, 0xac, 0x64, 0x6b, 0x3a, 0x62, 0x36, 0x5a, 0x10, 0x71,
-  0x99, 0xf1, 0xdc, 0xc2, 0x8f, 0xc5, 0x07, 0x52, 0x4f, 0x45, 0xd5, 0x1c,
-  0x68, 0xd9, 0xf1, 0x98, 0x73, 0x26, 0x9a, 0xc7, 0xec, 0xbe, 0x8e, 0xa8,
-  0x87, 0xfc, 0x13, 0x8d, 0x7b, 0x9f, 0xcf, 0x6b, 0xa3, 0x0a, 0xaa, 0x29,
-  0xae, 0x9d, 0x2c, 0xaa, 0xca, 0x9b, 0x23, 0xba, 0xb6, 0xc8, 0x6d, 0x47,
-  0x74, 0x20, 0xe0, 0x47, 0xbe, 0x64, 0x33, 0x5d, 0x15, 0x00, 0x57, 0x10,
-  0xec, 0x43, 0x29, 0x3c, 0xae, 0xf6, 0xfd, 0xc8, 0x45, 0x7e, 0x4a, 0x32,
-  0x10, 0x02, 0x3e, 0xd7, 0x14, 0x76, 0x46, 0x66, 0xf4, 0x75, 0xfc, 0xf1,
-  0xe3, 0xa8, 0x4c, 0xa4, 0x40, 0x71, 0x59, 0xce, 0x91, 0x85, 0x5d, 0xaf,
-  0xe8, 0x3c, 0xfc, 0x56, 0xcb, 0xb9, 0x5f, 0xa6, 0x57, 0x1c, 0x9a, 0x88,
-  0x9f, 0x5d, 0x98, 0x13, 0x0e, 0x6c, 0x42, 0xcb, 0x62, 0xfb, 0x27, 0x3d,
-  0xbf, 0x04, 0xe4, 0x9b, 0x46, 0x68, 0x09, 0xdb, 0xd4, 0x54, 0xd9, 0x76,
-  0x6a, 0x8e, 0x7b, 0x19, 0x90, 0xb2, 0x9a, 0x24, 0x30, 0x4f, 0x7c, 0x26,
-  0x8b, 0xdd, 0xfa, 0x58, 0x0d, 0xdf, 0xa8, 0x09, 0xfa, 0x4d, 0x15, 0xb0,
-  0x48, 0x2b, 0xce, 0x62, 0xd2, 0x97, 0x45, 0xdd, 0xad, 0x19, 0x33, 0x84,
-  0x61, 0x8a, 0x0e, 0xc6, 0x79, 0x03, 0xf6, 0x46, 0x27, 0xd2, 0x17, 0x31,
-  0x00, 0xae, 0xc7, 0x10, 0x8e, 0xa1, 0xb5, 0x6f, 0xa7, 0xcb, 0x80, 0x9e,
-  0xaf, 0x93, 0xb4, 0xf0, 0xfe, 0x83, 0xd2, 0xa9, 0xd7, 0x9e, 0x2b, 0x85,
-  0xd5, 0x03, 0xd7, 0x2d, 0x88, 0x86, 0xf9, 0x48, 0x11, 0xc1, 0x00, 0xbb,
-  0x91, 0xa9, 0x94, 0x26, 0x46, 0x72, 0x25, 0xc9, 0xaf, 0x2c, 0x93, 0x88,
-  0x7a, 0xae, 0x3e, 0x38, 0xd4, 0x8e, 0x28, 0x3b, 0xf3, 0x56, 0x4e, 0x38,
-  0xa1, 0x5d, 0x0f, 0xb1, 0x40, 0x9a, 0x4c, 0x21, 0x53, 0xb4, 0x71, 0x1d,
-  0x3d, 0x57, 0x92, 0x9d, 0xed, 0x62, 0x22, 0xde, 0xb8, 0x22, 0xe6, 0x20,
-  0x41, 0xcd, 0x93, 0xd0, 0x67, 0x12, 0x2d, 0xcb, 0x6b, 0x0d, 0x45, 0xa6,
-  0x75, 0x2e, 0xf3, 0x81, 0xca, 0x6e, 0x73, 0x06, 0x1d, 0x68, 0x4a, 0x24,
-  0x32, 0x64, 0x0f, 0x9b, 0x54, 0xd6, 0xd1, 0xfb, 0x4a, 0x6f, 0x73, 0x2d,
-  0x47, 0x1a, 0x1a, 0x93, 0x84, 0x91, 0x31, 0xcd, 0xc9, 0x36, 0x0d, 0xd3,
-  0x62, 0x1c, 0x63, 0xb7, 0xd0, 0x5d, 0x1e, 0xe9, 0xd0, 0x24, 0xc5, 0x94,
-  0x4b, 0xa3, 0x49, 0x57, 0xc4, 0xad, 0x3f, 0x71, 0x74, 0x2e, 0x19, 0x07,
-  0xa2, 0xb8, 0xe2, 0xbc, 0xf1, 0x3c, 0xab, 0xd2, 0xef, 0x79, 0xb7, 0x59,
-  0x36, 0xa9, 0x3b, 0x95, 0x38, 0xfa, 0x43, 0xfd, 0x0f, 0xe1, 0x7e, 0xd6,
-  0x9f, 0x53, 0xda, 0x69, 0xd7, 0xbe, 0x94, 0x3b, 0xd7, 0x41, 0xa3, 0x49,
-  0x38, 0x3a, 0x03, 0x3b, 0xea, 0x07, 0xba, 0x13, 0x91, 0xc5, 0xa9, 0xd7,
-  0x6a, 0x23, 0x35, 0x9b, 0x13, 0xe0, 0x2a, 0x7f, 0x37, 0x81, 0xe7, 0x1a,
-  0xc6, 0xc0, 0x7e, 0xf4, 0xd3, 0x4f, 0x83, 0x88, 0x11, 0xb3, 0x7e, 0x22,
-  0xed, 0xe0, 0x27, 0x36, 0x05, 0xfd, 0x54, 0x68, 0x74, 0xc2, 0x4f, 0xb7,
-  0xd4, 0xe5, 0xc1, 0xba, 0x80, 0xf5, 0x28, 0x28, 0xdc, 0x23, 0xa5, 0x8b,
-  0xc4, 0x45, 0xae, 0x85, 0xcb, 0x58, 0x79, 0x93, 0xbc, 0x6a, 0x07, 0xb0,
-  0xd6, 0x85, 0x34, 0x4e, 0x1b, 0xb3, 0x5a, 0x64, 0x92, 0x56, 0xa1, 0x9c,
-  0x06, 0x7c, 0x00, 0xcc, 0xa2, 0xff, 0xbb, 0xbe, 0xdf, 0x9b, 0xa0, 0x10,
-  0x9a, 0xea, 0xc2, 0xfc, 0x60, 0xcb, 0x40, 0x24, 0x8c, 0xa0, 0x92, 0xba,
-  0xc5, 0x62, 0xe1, 0xe1, 0xc3, 0x0d, 0x1d, 0xe0, 0x94, 0xad, 0x31, 0x77,
-  0x28, 0x59, 0x88, 0x58, 0x52, 0xd9, 0x60, 0x36, 0x24, 0x2d, 0xaf, 0xef,
-  0x21, 0x84, 0xb5, 0x04, 0xe0, 0xcc, 0x59, 0x93, 0x03, 0x3e, 0xd8, 0xe6,
-  0xec, 0x1e, 0x72, 0xcf, 0x4b, 0x12, 0xec, 0xb0, 0x0b, 0x79, 0x2e, 0x8d,
-  0xa5, 0x3f, 0xec, 0x07, 0x06, 0x53, 0xc3, 0x14, 0xe9, 0xac, 0x55, 0xe9,
-  0x41, 0xb0, 0xa4, 0x56, 0x65, 0x67, 0x5a, 0x83, 0x79, 0xf8, 0x24, 0xf1,
-  0x4d, 0xd0, 0xe3, 0x3d, 0x00, 0x60, 0x0c, 0xc7, 0x42, 0x7b, 0xf8, 0x83,
-  0x0e, 0x33, 0xae, 0x01, 0x93, 0xdb, 0xbb, 0x69, 0x15, 0x5c, 0xb5, 0x43,
-  0x76, 0xe6, 0x78, 0x94, 0x77, 0x10, 0x07, 0xdb, 0xc5, 0x70, 0xa7, 0x96,
-  0x9c, 0x71, 0x7c, 0xdf, 0xc1, 0xa5, 0x7d, 0xee, 0x20, 0x0f, 0x03, 0x75,
-  0x80, 0x18, 0x89, 0xf8, 0x2e, 0x13, 0x2e, 0x1b, 0x8d, 0xf3, 0x81, 0x54,
-  0x7c, 0x31, 0xed, 0x23, 0x48, 0x19, 0xea, 0x70, 0xf9, 0xb5, 0x14, 0x11,
-  0x1e, 0xd3, 0xab, 0xa8, 0xb7, 0xf6, 0x1a, 0xec, 0x75, 0xa6, 0xa8, 0x9b,
-  0xfc, 0xcf, 0x09, 0x9d, 0x37, 0x8a, 0x0b, 0xa9, 0xf2, 0xf1, 0xa6, 0x5d,
-  0xe7, 0x7f, 0xb5, 0x2b, 0x7c, 0x4b, 0xed, 0x2f, 0x62, 0xf7, 0x5a, 0x83,
-  0x27, 0x68, 0x4b, 0xab, 0xac, 0x13, 0xab, 0x03, 0x8d, 0x35, 0x85, 0x17,
-  0xe0, 0x32, 0x5f, 0x65, 0xb3, 0x7a, 0x18, 0xca, 0x7a, 0xc6, 0xcb, 0xf9,
-  0x99, 0xdc, 0xa3, 0x9a, 0xda, 0x2c, 0x9d, 0xc4, 0x95, 0x3d, 0x83, 0x59,
-  0x4b, 0x53, 0x3f, 0x58, 0x6a, 0x63, 0x4c, 0xb3, 0xd6, 0xc2, 0xec, 0x6e,
-  0xa9, 0xd4, 0x86, 0x6a, 0xdc, 0x1c, 0x2e, 0x93, 0xaa, 0x19, 0xb9, 0x77,
-  0x9d, 0x0b, 0xd0, 0x4a, 0x6f, 0x3f, 0x3a, 0xae, 0xcc, 0x3b, 0xa4, 0x73,
-  0x74, 0xf1, 0x0d, 0xcd, 0x30, 0x29, 0x46, 0xb2, 0xf9, 0xe6, 0xf4, 0xed,
-  0x91, 0x0b, 0x66, 0x15, 0x2d, 0x9f, 0x3f, 0xe9, 0x04, 0xdb, 0x1a, 0x21,
-  0x22, 0xc1, 0xd2, 0x81, 0x07, 0xed, 0x22, 0x3f, 0x58, 0x1d, 0x52, 0xe6,
-  0x97, 0x77, 0xab, 0x74, 0xb6, 0x89, 0x94, 0xed, 0xf7, 0x59, 0xfa, 0x71,
-  0x28, 0x66, 0x0c, 0x00, 0xd1, 0x95, 0x96, 0xb3, 0x6c, 0xe9, 0xce, 0xa2,
-  0xea, 0xe7, 0x8b, 0x0e, 0xb4, 0x0c, 0x2b, 0xf9, 0x14, 0xa2, 0xc5, 0x21,
-  0x01, 0x23, 0xcd, 0xc4, 0x1f, 0x22, 0x4d, 0x6e, 0x31, 0x03, 0x20, 0x16,
-  0x0a, 0xa4, 0x1b, 0xec, 0x7b, 0x47, 0x60, 0x6e, 0xb0, 0xdf, 0xdc, 0xdc,
-  0xc1, 0xd9, 0xd9, 0xeb, 0x83, 0x8b, 0x03, 0x37, 0x37, 0x5c, 0xc5, 0x60,
-  0x2a, 0xd0, 0x4d, 0x59, 0x70, 0xd3, 0xe4, 0xfe, 0xfe, 0xef, 0x39, 0x6b,
-  0xa3, 0x79, 0xd7, 0x9f, 0x9d, 0x9f, 0xb2, 0x85, 0xe1, 0xf7, 0x3f, 0x1d,
-  0xf8, 0xc2, 0xcd, 0x28, 0xcf, 0xd8, 0x2e, 0x9f, 0xbb, 0xb7, 0x15, 0xf1,
-  0xf8, 0x0c, 0x8a, 0x67, 0xe0, 0xdc, 0xfc, 0x92, 0x1e, 0x1d, 0x7d, 0xe0,
-  0x3d, 0x2d, 0xa6, 0x4e, 0x78, 0x12, 0xe3, 0x9d, 0x6c, 0xe7, 0xa0, 0x1d,
-  0xee, 0x17, 0x4c, 0x24, 0xf7, 0x4c, 0xcc, 0x80, 0x76, 0x6c, 0xad, 0xe6,
-  0x24, 0xf1, 0x93, 0xd0, 0x5a, 0x81, 0x75, 0xb0, 0xb1, 0x8d, 0xe9, 0x6b,
-  0xc6, 0x0b, 0xd5, 0x84, 0x93, 0x73, 0xfb, 0x63, 0x1b, 0x24, 0xe9, 0xe8,
-  0x60, 0xb8, 0xc2, 0x02, 0x24, 0x9c, 0x33, 0x97, 0xb2, 0x5c, 0x23, 0x1b,
-  0xad, 0xaa, 0x53, 0xad, 0xb3, 0x23, 0xee, 0x08, 0xa2, 0x73, 0x9b, 0xc3,
-  0xa8, 0x6d, 0x37, 0x1e, 0x0e, 0x87, 0x66, 0x55, 0x96, 0x69, 0xd3, 0x07,
-  0xad, 0x87, 0x2a, 0x2b, 0x3e, 0x64, 0x7c, 0xbe, 0x9b, 0x4d, 0x84, 0xfc,
-  0xa1, 0x29, 0xcb, 0x2b, 0x82, 0x80, 0x3e, 0x85, 0x2a, 0xa6, 0xc8, 0x3f,
-  0x6c, 0x9b, 0x1b, 0xcd, 0x1a, 0x4f, 0x8f, 0x96, 0x2b, 0x36, 0xd8, 0xf0,
-  0x5f, 0xdb, 0xbb, 0xa3, 0x9d, 0x5e, 0x7b, 0xf4, 0x88, 0x05, 0x84, 0x51,
-  0xcc, 0x20, 0x76, 0x05, 0x35, 0x39, 0x7f, 0x7c, 0x80, 0xc2, 0xc0, 0x48,
-  0x22, 0x5d, 0x52, 0x07, 0x9d, 0x63, 0x19, 0x9e, 0xb6, 0x8c, 0x97, 0xe2,
-  0x15, 0xf0, 0x1c, 0x31, 0xcb, 0x91, 0x37, 0x1b, 0xb3, 0x36, 0x04, 0x43,
-  0x4c, 0xaf, 0x7b, 0x81, 0xb3, 0x99, 0xb8, 0x35, 0x1b, 0xeb, 0xfc, 0xab,
-  0xf2, 0xc9, 0xdc, 0xfe, 0x07, 0x28, 0x61, 0x6b, 0xb9, 0x5d, 0xcd, 0xf2,
-  0x7e, 0x93, 0x90, 0x20, 0x38, 0x47, 0xfa, 0x14, 0xdb, 0xd1, 0x5e, 0x4a,
-  0x9d, 0xdd, 0x36, 0x62, 0x7e, 0xcd, 0x17, 0x50, 0x72, 0x40, 0x9c, 0xb0,
-  0x06, 0xbc, 0x15, 0x85, 0x01, 0xe2, 0x1e, 0x00, 0xb4, 0x48, 0x38, 0xa4,
-  0x33, 0x4a, 0x67, 0xad, 0x2c, 0xed, 0x06, 0xf2, 0x86, 0x1b, 0x04, 0x2b,
-  0xdf, 0x93, 0xc4, 0x89, 0xfc, 0xd2, 0xba, 0x09, 0x87, 0xc0, 0x23, 0x21,
-  0xd5, 0x7c, 0xd5, 0x92, 0x17, 0x9a, 0xef, 0x8f, 0x98, 0xcb, 0xd6, 0x30,
-  0x3a, 0xc4, 0xa8, 0xc3, 0x4f, 0xe4, 0xce, 0xe4, 0x87, 0x72, 0x96, 0x38,
-  0x53, 0x2d, 0x23, 0xe6, 0xa5, 0x80, 0xf9, 0xc9, 0x14, 0x2f, 0x0e, 0xcf,
-  0x3e, 0x7c, 0x7b, 0x74, 0x74, 0x76, 0xfc, 0xfa, 0xe4, 0x48, 0xef, 0x19,
-  0xf7, 0xd1, 0xbb, 0x8b, 0xef, 0x4e, 0x0c, 0xdf, 0xcf, 0xd6, 0xa7, 0x65,
-  0x06, 0xe3, 0x90, 0x23, 0x34, 0x77, 0x92, 0x66, 0xab, 0x8f, 0x03, 0xa0,
-  0x8c, 0x10, 0x31, 0x1f, 0x1c, 0xff, 0x30, 0x88, 0xbe, 0x39, 0x1b, 0xbe,
-  0xff, 0xa1, 0x05, 0x04, 0x51, 0x0b, 0xf2, 0x6d, 0x0a, 0x96, 0x2e, 0xe4,
-  0x17, 0x55, 0x58, 0xfc, 0xdc, 0x4d, 0xff, 0xed, 0x28, 0x4c, 0xfa, 0xdb,
-  0xa2, 0x8a, 0x50, 0x73, 0xab, 0x2c, 0x80, 0x7c, 0x0e, 0xa4, 0x78, 0xbd,
-  0x7a, 0x41, 0x0e, 0xcf, 0x77, 0xb4, 0x8a, 0x73, 0x83, 0x00, 0xef, 0xa3,
-  0x97, 0x6b, 0x10, 0x79, 0xb6, 0xc7, 0xe3, 0x6f, 0xb6, 0xa2, 0xb3, 0x00,
-  0xba, 0xd9, 0xd9, 0x5a, 0x46, 0x16, 0xe0, 0xc7, 0x66, 0x1a, 0x6a, 0x3c,
-  0xb0, 0xda, 0x14, 0x8c, 0xb5, 0xd9, 0x76, 0xd2, 0x6a, 0x0b, 0x76, 0x87,
-  0x9b, 0xf2, 0x27, 0x92, 0x25, 0xb2, 0x84, 0xa8, 0x37, 0xb0, 0xff, 0x3a,
-  0x0a, 0xa1, 0x08, 0x8c, 0x4d, 0xc9, 0x08, 0x77, 0x7c, 0x14, 0x26, 0x45,
-  0x61, 0x87, 0xe9, 0x88, 0xce, 0xd2, 0x99, 0xe4, 0x96, 0xb0, 0xc6, 0x20,
-  0x92, 0x42, 0x14, 0xf5, 0xff, 0x6b, 0x7b, 0x54, 0x96, 0xd7, 0xdb, 0xe9,
-  0xec, 0x43, 0x51, 0xc6, 0xfd, 0xe6, 0xe5, 0x1c, 0x7c, 0x3d, 0xe3, 0xaf,
-  0xa3, 0xfe, 0xc8, 0x3d, 0xaa, 0xbf, 0xf3, 0xe7, 0xbf, 0x25, 0xd4, 0x18,
-  0xad, 0xcd, 0xa3, 0xc8, 0x90, 0xad, 0x9d, 0xe0, 0x47, 0x47, 0x4e, 0x0c,
-  0x57, 0xd7, 0x01, 0x37, 0x82, 0x6d, 0x90, 0xcd, 0xed, 0xaa, 0xd3, 0x2c,
-  0xe0, 0x3d, 0x51, 0x03, 0x11, 0x97, 0xce, 0xed, 0xeb, 0xa3, 0xf3, 0x81,
-  0x00, 0x46, 0x86, 0x60, 0x91, 0x0e, 0x1d, 0x75, 0xa4, 0x20, 0x91, 0xeb,
-  0xd4, 0xd3, 0xc1, 0x3f, 0x11, 0x24, 0xf2, 0xa6, 0x98, 0x44, 0x2f, 0xe7,
-  0xf4, 0xe2, 0xbc, 0x3b, 0xd1, 0x54, 0x2a, 0xf8, 0xf9, 0x32, 0x84, 0x0d,
-  0x70, 0x13, 0x05, 0x1f, 0x14, 0x09, 0x15, 0xcd, 0x88, 0x5e, 0xda, 0xa5,
-  0x98, 0x56, 0xb0, 0x89, 0xf1, 0x1b, 0xad, 0xac, 0xbc, 0x3e, 0x22, 0x61,
-  0x99, 0x4a, 0x18, 0xc1, 0x85, 0x7f, 0x82, 0xef, 0x6b, 0xf9, 0xc6, 0xfe,
-  0xa0, 0xad, 0x7c, 0xf7, 0x75, 0xd5, 0xfb, 0xb4, 0x71, 0xd2, 0x1a, 0x1f,
-  0x21, 0xc1, 0x77, 0x94, 0x71, 0x28, 0x4c, 0x74, 0xa9, 0xda, 0x46, 0x18,
-  0x08, 0x53, 0xb6, 0x40, 0xff, 0x5d, 0x73, 0xcd, 0xe0, 0xab, 0x6e, 0x63,
-  0xdc, 0xba, 0xc2, 0x14, 0xb1, 0x03, 0xf5, 0x0b, 0x0b, 0x52, 0x58, 0xb5,
-  0xc9, 0xa7, 0x46, 0x02, 0xa3, 0x35, 0x68, 0x4c, 0x3c, 0x50, 0x24, 0xf2,
-  0xb1, 0x30, 0xc2, 0xe1, 0xe7, 0x1c, 0xcd, 0x39, 0xfc, 0x8e, 0xd5, 0x40,
-  0xf3, 0xb2, 0x09, 0xd2, 0x2a, 0x40, 0xee, 0x41, 0x9d, 0x5d, 0xc7, 0xda,
-  0x95, 0xb6, 0x48, 0xab, 0xdf, 0x90, 0x74, 0xe6, 0xa8, 0x04, 0x91, 0x96,
-  0xd5, 0x90, 0xdd, 0x56, 0xdd, 0x61, 0xd0, 0x50, 0x9a, 0x34, 0x89, 0xc1,
-  0xfc, 0x66, 0x01, 0x14, 0xb3, 0xb0, 0x30, 0xa9, 0x77, 0x85, 0x50, 0xaf,
-  0x52, 0x8b, 0x46, 0x0f, 0xbb, 0x4a, 0x6d, 0xdc, 0xa6, 0xc9, 0x9d, 0xf7,
-  0xec, 0xd6, 0x50, 0x78, 0xd4, 0x97, 0x8b, 0x65, 0x01, 0x33, 0x93, 0xa2,
-  0x8b, 0x8c, 0x0c, 0xdd, 0x05, 0x90, 0xb4, 0x88, 0xa7, 0xd7, 0x24, 0x3e,
-  0x0e, 0x11, 0x30, 0x1a, 0xd5, 0xf1, 0x49, 0xd8, 0x98, 0xd0, 0x18, 0x28,
-  0xe7, 0xf5, 0x69, 0x18, 0x5a, 0x67, 0xfd, 0x47, 0xff, 0x20, 0x0f, 0xd1,
-  0x05, 0xbd, 0x09, 0x31, 0xba, 0x6c, 0x5d, 0x28, 0xa9, 0x79, 0xe1, 0x30,
-  0x4b, 0x25, 0xc5, 0x9a, 0x17, 0xb5, 0xc3, 0x71, 0x16, 0x29, 0x26, 0x69,
-  0xcd, 0xa2, 0xa5, 0xe0, 0x3b, 0x71, 0xf4, 0xee, 0x64, 0xec, 0x13, 0x56,
-  0x2a, 0x2d, 0xf0, 0x21, 0x20, 0xd8, 0xeb, 0x1c, 0x1f, 0x61, 0x94, 0xd6,
-  0xc9, 0x71, 0x47, 0x29, 0x5d, 0x36, 0x09, 0xec, 0x93, 0x5a, 0xbd, 0x48,
-  0x82, 0xe4, 0xfc, 0x52, 0x0b, 0xc7, 0x20, 0x26, 0x50, 0x3c, 0xd9, 0x66,
-  0x01, 0x64, 0xcd, 0xc9, 0xa5, 0x2b, 0xb5, 0x97, 0x98, 0x87, 0xf8, 0x27,
-  0xb1, 0xa3, 0x6a, 0x1c, 0x8c, 0xc5, 0xd7, 0x95, 0xab, 0xc9, 0x30, 0xc8,
-  0x20, 0x16, 0x86, 0x00, 0x7c, 0x9b, 0x74, 0xca, 0xca, 0xfd, 0x4d, 0x3b,
-  0x28, 0x65, 0xf3, 0xec, 0xf4, 0xec, 0x89, 0x91, 0x93, 0xa5, 0x7b, 0xd7,
-  0xdc, 0x9c, 0xd3, 0x88, 0xa5, 0x34, 0x85, 0x94, 0xe2, 0xa7, 0x6b, 0xc4,
-  0xd5, 0x55, 0x7d, 0x8f, 0xd7, 0x91, 0x17, 0xa2, 0xb1, 0x8e, 0xea, 0xa8,
-  0xa8, 0x87, 0xb5, 0x71, 0xee, 0x69, 0x90, 0x38, 0xdb, 0x01, 0xda, 0x61,
-  0x31, 0x06, 0x8e, 0x14, 0x35, 0x86, 0x1e, 0x74, 0x28, 0x64, 0xe8, 0x4f,
-  0x6e, 0x30, 0x6a, 0x3a, 0x6d, 0xad, 0xe4, 0x11, 0x92, 0xda, 0x49, 0xda,
-  0x94, 0xfc, 0xef, 0xb2, 0x9e, 0x00, 0x2e, 0xe9, 0x0c, 0x28, 0x5f, 0xc3,
-  0xae, 0x64, 0xa0, 0x0b, 0xae, 0xd9, 0x49, 0xb1, 0x57, 0x20, 0xd8, 0xd4,
-  0x15, 0x6f, 0xf9, 0x41, 0x9c, 0x66, 0x12, 0xd8, 0xe8, 0x11, 0x06, 0x06,
-  0xf5, 0xb0, 0xe8, 0x8e, 0xba, 0x0c, 0x41, 0x55, 0x3d, 0xc9, 0x99, 0x22,
-  0x9d, 0x9b, 0x04, 0x49, 0xb7, 0x76, 0xba, 0x56, 0xea, 0x89, 0xd2, 0x69,
-  0xb3, 0x1b, 0x8a, 0x7e, 0xe9, 0x2a, 0x4f, 0xcf, 0x7b, 0xd5, 0x27, 0xd6,
-  0x93, 0xa5, 0x34, 0x16, 0x45, 0xe4, 0xbb, 0xe4, 0xb8, 0x3f, 0xf5, 0x52,
-  0x09, 0xe4, 0x63, 0x5a, 0xf5, 0x01, 0xf3, 0x55, 0x62, 0x49, 0x78, 0x4d,
-  0xba, 0x8e, 0xb2, 0x16, 0x33, 0xb7, 0xb0, 0xd7, 0x7a, 0xba, 0xd3, 0x6e,
-  0x2d, 0xa7, 0xbf, 0x56, 0xbc, 0xa6, 0x33, 0x22, 0x01, 0xe5, 0x4d, 0xb6,
-  0x22, 0x67, 0x4c, 0xd6, 0x65, 0x97, 0xc8, 0x8f, 0xd2, 0x27, 0x0b, 0x68,
-  0x6f, 0xc8, 0x06, 0xb8, 0xe2, 0xf0, 0xfc, 0x26, 0x51, 0x48, 0x1a, 0x03,
-  0x40, 0xee, 0x0d, 0xae, 0xa9, 0x8a, 0x5c, 0xdd, 0x9c, 0x4d, 0x05, 0x25,
-  0xf4, 0xe1, 0x74, 0xcd, 0xda, 0x35, 0x5d, 0x70, 0x17, 0x74, 0xbb, 0x3c,
-  0xf9, 0xe1, 0x87, 0xa8, 0x0e, 0x52, 0xb6, 0xb5, 0x2e, 0x22, 0x1b, 0x0a,
-  0x3a, 0xdd, 0xb8, 0x5d, 0x3c, 0xc1, 0x68, 0x40, 0x89, 0x8b, 0xbd, 0xc3,
-  0x50, 0xde, 0x21, 0x99, 0xe8, 0x4e, 0x5f, 0x25, 0xd8, 0x0a, 0xa1, 0x9c,
-  0x30, 0x3a, 0xa5, 0x7d, 0x19, 0xfb, 0x30, 0x8f, 0x81, 0x8b, 0xb0, 0x14,
-  0x6f, 0x38, 0xa2, 0x66, 0xc2, 0xa5, 0x2a, 0xdd, 0x75, 0x42, 0x42, 0xc0,
-  0x5d, 0x36, 0xea, 0x2a, 0x37, 0xd4, 0x06, 0x50, 0x93, 0xc8, 0x73, 0xcc,
-  0x48, 0xaa, 0x2e, 0x01, 0xf7, 0x91, 0x2d, 0x82, 0x41, 0x91, 0x67, 0x57,
-  0x36, 0xb5, 0x15, 0xd7, 0x20, 0x1e, 0x08, 0x04, 0x30, 0x08, 0x42, 0x37,
-  0x87, 0x61, 0x0a, 0x0f, 0x8a, 0x2a, 0x78, 0xf1, 0xcc, 0x51, 0x19, 0xee,
-  0x16, 0x3f, 0xde, 0x61, 0x1b, 0xb9, 0x43, 0x4d, 0xa0, 0xc0, 0x62, 0x8a,
-  0x58, 0x06, 0xcd, 0x25, 0x11, 0xd2, 0xff, 0x63, 0xbd, 0xc6, 0xaf, 0xe2,
-  0x24, 0x09, 0xe9, 0xb5, 0x92, 0x40, 0x38, 0xf2, 0xa0, 0x2a, 0x56, 0x58,
-  0x21, 0xde, 0x10, 0x4e, 0xca, 0x67, 0x07, 0x80, 0x21, 0x08, 0xb1, 0x40,
-  0x69, 0x71, 0x1b, 0x28, 0x68, 0x21, 0xf1, 0xd0, 0x0b, 0x40, 0xa5, 0xb4,
-  0xfc, 0xd2, 0x36, 0x2f, 0xcb, 0x74, 0xe3, 0xcc, 0xb6, 0x9a, 0xe7, 0x73,
-  0x38, 0x5c, 0xc4, 0x1f, 0x87, 0x78, 0xac, 0x6c, 0x61, 0xab, 0xb7, 0x6c,
-  0x9d, 0xd2, 0x42, 0x19, 0x2e, 0x98, 0x69, 0xb5, 0x2e, 0xe0, 0x5e, 0xa3,
-  0x24, 0x99, 0x82, 0xf8, 0x6e, 0xf8, 0xfa, 0xe8, 0xa2, 0x79, 0xb4, 0x00,
-  0x7b, 0xa0, 0x26, 0x02, 0x84, 0xb9, 0xd3, 0xdf, 0x67, 0xef, 0x2f, 0xb6,
-  0x7c, 0x5d, 0x1d, 0xa1, 0xd2, 0x40, 0x07, 0x71, 0xe1, 0xd7, 0x6d, 0xb4,
-  0x44, 0x09, 0x2d, 0x57, 0x06, 0x0b, 0x44, 0x44, 0x77, 0x20, 0xb8, 0x12,
-  0xd8, 0x93, 0x9d, 0xdd, 0x01, 0xfd, 0xb3, 0x07, 0x6b, 0xdb, 0x93, 0x9d,
-  0x27, 0xce, 0x83, 0x60, 0x4f, 0xb5, 0x9c, 0x08, 0x1c, 0x52, 0x85, 0xb2,
-  0x72, 0x81, 0x23, 0x22, 0x7a, 0xf2, 0xf1, 0x23, 0xbe, 0xaa, 0x47, 0xc3,
-  0x0d, 0x5d, 0x50, 0xed, 0x3a, 0x8f, 0x89, 0x0d, 0xdc, 0xaf, 0x38, 0xcc,
-  0x66, 0xab, 0x4c, 0xc2, 0x7d, 0xd8, 0xe8, 0x81, 0xf0, 0xf5, 0xd1, 0x3a,
-  0x28, 0xa9, 0xaa, 0x99, 0x51, 0x1c, 0x62, 0x49, 0x11, 0xad, 0xf0, 0xe4,
-  0x5d, 0x2f, 0x16, 0x0b, 0xdf, 0x66, 0x8c, 0x78, 0x4c, 0xf2, 0x2d, 0xc1,
-  0x38, 0x76, 0x3e, 0x86, 0xf7, 0x75, 0x8d, 0x24, 0x88, 0x5d, 0x2a, 0x33,
-  0x52, 0xd5, 0x7f, 0x0d, 0x48, 0xdb, 0x3e, 0x07, 0x80, 0xd2, 0xa1, 0xc0,
-  0x0a, 0xdb, 0xaf, 0x7b, 0x12, 0x5c, 0x2a, 0x7f, 0x3c, 0x09, 0x55, 0x0b,
-  0xab, 0xcf, 0xd6, 0x59, 0x9b, 0xe0, 0x40, 0x2a, 0x86, 0x85, 0xac, 0x8b,
-  0x8f, 0x1f, 0x57, 0x6c, 0xe2, 0x34, 0x15, 0x96, 0xa0, 0x35, 0xcf, 0x59,
-  0xeb, 0xd6, 0xaa, 0xb7, 0x13, 0xbf, 0x77, 0xd4, 0x00, 0x41, 0x34, 0x0d,
-  0x30, 0xed, 0xac, 0x2e, 0xdc, 0x50, 0x26, 0x78, 0x18, 0xa9, 0x7b, 0x1c,
-  0xfb, 0x6c, 0xee, 0x5c, 0xcd, 0x9d, 0x10, 0xf5, 0xaf, 0x1b, 0x8e, 0xc5,
-  0x9c, 0xa6, 0xa4, 0x17, 0xcc, 0x05, 0x3e, 0xc8, 0x05, 0x81, 0x17, 0x36,
-  0x2c, 0x09, 0x1e, 0xf6, 0xc1, 0x57, 0xfc, 0xde, 0xbf, 0xfc, 0x37, 0x45,
-  0x6e, 0x75, 0xb4, 0x8a, 0x3f, 0xa0, 0x23, 0x2e, 0xa6, 0x26, 0x8e, 0x3f,
-  0x98, 0x4b, 0x0a, 0x6e, 0x31, 0x84, 0x79, 0xe0, 0x25, 0x49, 0x1c, 0xc9,
-  0x6c, 0xad, 0xb3, 0x1e, 0x52, 0x26, 0xf1, 0x85, 0x74, 0xb1, 0x5a, 0xf8,
-  0xec, 0x41, 0x2e, 0xe5, 0x50, 0x25, 0xbe, 0x54, 0x6d, 0x08, 0x29, 0x3c,
-  0xec, 0xa0, 0x11, 0x00, 0xc8, 0xf9, 0xac, 0x64, 0xe8, 0x86, 0x40, 0x39,
-  0x33, 0x1c, 0x0d, 0x0d, 0xde, 0xd3, 0x25, 0x50, 0x31, 0x89, 0x9b, 0x47,
-  0xec, 0x52, 0xdc, 0x92, 0x83, 0xb9, 0x7a, 0x0f, 0x5d, 0x1b, 0xe9, 0x52,
-  0xa2, 0xe6, 0x38, 0xfc, 0x7e, 0x26, 0xe2, 0x31, 0x36, 0xc1, 0x8d, 0x13,
-  0x25, 0x82, 0x65, 0x5c, 0x92, 0xc2, 0x40, 0x17, 0x42, 0x2b, 0x5e, 0x65,
-  0x42, 0x4d, 0xdc, 0xa5, 0xb3, 0xea, 0x1a, 0x38, 0x8d, 0xb8, 0x22, 0x19,
-  0xed, 0x84, 0xc1, 0x4a, 0x54, 0xe0, 0x48, 0xdb, 0xc9, 0x41, 0x93, 0x6e,
-  0xc8, 0x7b, 0xd9, 0x23, 0xac, 0x69, 0x24, 0x10, 0x2c, 0x1c, 0x99, 0x8e,
-  0x6d, 0x40, 0x5c, 0xe7, 0xb6, 0x98, 0x88, 0x1c, 0xd8, 0x00, 0x49, 0x7c,
-  0xab, 0x4b, 0x06, 0x7c, 0x6c, 0x4b, 0x8f, 0x96, 0xce, 0x33, 0x72, 0x87,
-  0x02, 0x26, 0x98, 0xfe, 0x8d, 0xe4, 0xd1, 0x7d, 0xab, 0x1a, 0xa9, 0x20,
-  0x63, 0x81, 0x07, 0x48, 0x32, 0x09, 0xf1, 0xab, 0x9b, 0x74, 0xde, 0xb2,
-  0x49, 0xa0, 0x7b, 0xd2, 0x9f, 0x17, 0x78, 0xfd, 0x6d, 0x5f, 0xa3, 0x54,
-  0x18, 0xb7, 0x2d, 0xd1, 0xa0, 0xd3, 0x81, 0x02, 0x38, 0xf6, 0xaf, 0xa4,
-  0x8b, 0xaf, 0xfb, 0x2e, 0x96, 0xa5, 0x75, 0xd9, 0xf9, 0x48, 0x55, 0xb3,
-  0xa5, 0x97, 0xfb, 0xd1, 0xde, 0xce, 0xce, 0xb7, 0xc4, 0x62, 0x17, 0xd8,
-  0x94, 0xdd, 0xaf, 0xbb, 0x8b, 0x02, 0x28, 0x19, 0x17, 0x82, 0xc1, 0xac,
-  0x45, 0xb7, 0x6f, 0x61, 0xf4, 0xd6, 0x85, 0x93, 0x02, 0xc1, 0xb3, 0x68,
-  0xb6, 0x2a, 0x8c, 0x13, 0x75, 0x6e, 0x9c, 0xcb, 0x8d, 0x65, 0x7b, 0x68,
-  0x13, 0x0a, 0x62, 0x81, 0x44, 0x09, 0xde, 0xf9, 0x6b, 0xfa, 0x2d, 0x09,
-  0x88, 0x02, 0x9d, 0x74, 0x00, 0x2d, 0x90, 0xdc, 0xc1, 0x20, 0x7b, 0xab,
-  0x82, 0x6b, 0xa0, 0x22, 0x12, 0x14, 0x18, 0x55, 0x30, 0xd2, 0x9a, 0x7b,
-  0x29, 0xcb, 0x05, 0xf5, 0x04, 0x64, 0xe1, 0x91, 0x78, 0x78, 0x32, 0x5d,
-  0xd9, 0x5d, 0x4c, 0xc2, 0x72, 0xc9, 0x5b, 0xb0, 0xf4, 0xf0, 0xcf, 0xcc,
-  0x21, 0x31, 0x04, 0x39, 0x86, 0xce, 0x01, 0x2a, 0x39, 0x68, 0x5e, 0x58,
-  0x6b, 0x4e, 0x96, 0xe9, 0x52, 0x6b, 0x13, 0xb1, 0xd2, 0x09, 0x9b, 0x2a,
-  0xe6, 0xc8, 0x88, 0xc2, 0x4b, 0xad, 0xf0, 0xcd, 0x03, 0x91, 0x76, 0x61,
-  0xff, 0x9d, 0xf3, 0x03, 0x73, 0x56, 0xa8, 0xf3, 0x56, 0xbe, 0xce, 0x7c,
-  0x09, 0xc3, 0xb2, 0xbb, 0x8c, 0x82, 0x21, 0x71, 0x16, 0xf2, 0x14, 0x65,
-  0x00, 0x38, 0x9f, 0xe5, 0x37, 0x34, 0x32, 0x01, 0x7e, 0x4f, 0xd0, 0x3e,
-  0x5e, 0x12, 0xf9, 0x7e, 0xf1, 0x23, 0x57, 0x05, 0xfd, 0xb9, 0xa3, 0xfe,
-  0x69, 0xac, 0x09, 0x5d, 0x7c, 0x96, 0x2c, 0x69, 0xaa, 0xf0, 0xd5, 0x79,
-  0xd0, 0x8e, 0x64, 0x1d, 0x5b, 0x15, 0x52, 0x5f, 0xd7, 0xa8, 0x33, 0x24,
-  0xd8, 0xcc, 0xf9, 0x9b, 0xe5, 0xd6, 0x28, 0x44, 0xf3, 0x93, 0x46, 0x5c,
-  0x2b, 0xf0, 0x45, 0x67, 0xc2, 0x9c, 0x60, 0xab, 0x6b, 0x31, 0x23, 0x8e,
-  0x7d, 0x9c, 0x26, 0x3e, 0xd8, 0x0a, 0xad, 0xd8, 0x7c, 0x27, 0xab, 0xf2,
-  0x9e, 0xd1, 0x8b, 0xc4, 0x8b, 0x51, 0xe6, 0x0e, 0xbf, 0x11, 0x0b, 0x88,
-  0xe1, 0xb7, 0xc3, 0xd3, 0x18, 0x60, 0x47, 0xa2, 0x91, 0xab, 0x9c, 0x2e,
-  0xfa, 0xb8, 0x28, 0x48, 0x54, 0xd3, 0xad, 0xd6, 0x54, 0x3a, 0x1a, 0x3c,
-  0x2b, 0x3f, 0x30, 0x08, 0x39, 0xc7, 0x04, 0xb5, 0xbd, 0x5a, 0x76, 0xc4,
-  0x93, 0x71, 0x72, 0x6d, 0x0b, 0xd1, 0xac, 0x96, 0xb9, 0x6e, 0xea, 0x87,
-  0x89, 0x9b, 0x0f, 0x6a, 0x40, 0x27, 0xb0, 0x42, 0xb0, 0xca, 0x14, 0xbc,
-  0xa9, 0x39, 0xff, 0x02, 0x4d, 0x0e, 0xd9, 0xd2, 0x9c, 0x1f, 0xdd, 0xc9,
-  0xd2, 0xd1, 0x1f, 0x3d, 0x46, 0x9f, 0x54, 0x43, 0x82, 0x54, 0x1d, 0x28,
-  0x52, 0x25, 0xc7, 0x53, 0xb0, 0xa6, 0xe8, 0x05, 0xf2, 0x7c, 0xd4, 0x05,
-  0xb9, 0xcd, 0xcf, 0xe4, 0xa2, 0x54, 0x8a, 0x35, 0xa1, 0x2a, 0xf2, 0xd9,
-  0x6a, 0x0a, 0x13, 0x0b, 0x47, 0xce, 0xa5, 0xd5, 0x7d, 0x34, 0x11, 0xc8,
-  0x30, 0xcb, 0x5f, 0xe7, 0xa6, 0x9d, 0x3c, 0xdc, 0x68, 0x4e, 0x0d, 0xee,
-  0xb1, 0x3c, 0xe5, 0x30, 0x5e, 0x71, 0xc7, 0x00, 0xf3, 0x39, 0x51, 0x41,
-  0xa3, 0x68, 0xe9, 0x23, 0x28, 0xd1, 0xd4, 0x8d, 0x91, 0x2d, 0x4e, 0x50,
-  0x56, 0x08, 0x3e, 0x56, 0x2e, 0x76, 0x82, 0xab, 0x8d, 0x11, 0xf1, 0x42,
-  0x52, 0xfd, 0x8a, 0xc3, 0x75, 0x1b, 0x0d, 0x86, 0xc8, 0xcf, 0x8b, 0x81,
-  0x0a, 0xe8, 0x0f, 0xfa, 0xb1, 0xde, 0xba, 0x9b, 0x1a, 0x7e, 0xab, 0x14,
-  0xce, 0x2c, 0x3c, 0x29, 0x0b, 0x8b, 0x7c, 0xa8, 0xb9, 0x81, 0x5a, 0xdc,
-  0x5d, 0xe7, 0xf3, 0x50, 0x48, 0x69, 0x07, 0x48, 0x10, 0xcf, 0x09, 0x52,
-  0x39, 0x83, 0xc4, 0x08, 0x46, 0x2b, 0xe2, 0x81, 0x5a, 0xbd, 0x93, 0x09,
-  0x80, 0xed, 0xff, 0x92, 0x4f, 0x54, 0xbf, 0x8b, 0x58, 0x34, 0xed, 0xca,
-  0x73, 0x93, 0x70, 0x80, 0x6b, 0xae, 0x29, 0x4b, 0xfc, 0x5d, 0x02, 0x4b,
-  0x78, 0x3c, 0x59, 0x52, 0x31, 0xbf, 0x41, 0x3c, 0x39, 0x6c, 0x3d, 0x91,
-  0x54, 0x9b, 0x47, 0x84, 0x30, 0xe7, 0xe9, 0x13, 0xcf, 0x6b, 0x34, 0xf7,
-  0xd9, 0xe8, 0xc9, 0x1e, 0x67, 0x21, 0x85, 0xcc, 0x28, 0x9e, 0xb2, 0xbe,
-  0x55, 0x46, 0x96, 0x27, 0x83, 0xe4, 0x35, 0xe5, 0xe6, 0x95, 0x00, 0x43,
-  0xac, 0x94, 0x47, 0x0d, 0xdb, 0xee, 0x5a, 0x55, 0x39, 0x12, 0x86, 0xb5,
-  0x2b, 0xe1, 0xdd, 0xa6, 0xf6, 0x56, 0x45, 0x3c, 0xbd, 0x37, 0xc8, 0x5c,
-  0x1f, 0x29, 0xc6, 0x4d, 0xf0, 0x2b, 0x34, 0x30, 0x3c, 0xdd, 0x42, 0x82,
-  0xcf, 0xdc, 0x20, 0x98, 0x6b, 0xa7, 0x40, 0x2a, 0x68, 0xa6, 0x63, 0x59,
-  0x99, 0x8b, 0xa1, 0xb5, 0xb6, 0x46, 0xef, 0xfa, 0x87, 0xb2, 0xdc, 0xab,
-  0x34, 0x1b, 0x9a, 0x3c, 0xff, 0x52, 0x7f, 0xf9, 0xe2, 0x81, 0xd0, 0x23,
-  0xbc, 0xe1, 0x34, 0x00, 0xe5, 0xab, 0x7a, 0x37, 0x9b, 0xf5, 0xa9, 0x46,
-  0xb7, 0x6b, 0x35, 0x18, 0xbb, 0x04, 0xb5, 0x49, 0xd7, 0x26, 0xf4, 0x73,
-  0x8b, 0x11, 0x92, 0x42, 0xb1, 0xd3, 0x7c, 0xee, 0x1c, 0x1f, 0xd3, 0xce,
-  0x48, 0x79, 0x2b, 0xf7, 0xac, 0x65, 0x30, 0xb1, 0x20, 0x3a, 0xaa, 0xc6,
-  0x70, 0xa2, 0x83, 0x0a, 0xf8, 0xe5, 0x10, 0xd6, 0xdb, 0x26, 0xe9, 0xe3,
-  0xb7, 0x07, 0x67, 0x03, 0xd8, 0x06, 0x71, 0xa9, 0x8e, 0xdf, 0xb2, 0x95,
-  0x53, 0x2c, 0xe5, 0xf5, 0xb9, 0x8b, 0x1b, 0x4d, 0x50, 0xcf, 0x82, 0x6a,
-  0x6c, 0x4d, 0xb9, 0x6d, 0xe2, 0x42, 0x1c, 0x1b, 0x4b, 0xa7, 0x05, 0x06,
-  0xd9, 0xd8, 0xc7, 0xe0, 0x7a, 0x7b, 0x4f, 0x3e, 0x7f, 0x3a, 0xc0, 0x6f,
-  0xcf, 0x76, 0x5e, 0x88, 0xb6, 0x74, 0x7c, 0x74, 0xf1, 0xa6, 0xa9, 0x71,
-  0x14, 0xa4, 0xab, 0xc9, 0xbf, 0xc3, 0x24, 0x2e, 0xae, 0xe3, 0xa2, 0xe2,
-  0xb8, 0xa9, 0x61, 0xb9, 0xa8, 0x96, 0xc3, 0x9d, 0x9d, 0x51, 0x45, 0x0c,
-  0xa5, 0x56, 0xf7, 0xe0, 0xe9, 0x68, 0x67, 0xeb, 0xb7, 0x24, 0x20, 0x36,
-  0xd1, 0x0d, 0x79, 0x85, 0xa3, 0x97, 0x6b, 0x0a, 0x96, 0x6f, 0xf2, 0x12,
-  0x6e, 0x39, 0x1a, 0x72, 0xa5, 0x40, 0x82, 0xd2, 0xf0, 0xa9, 0x37, 0xf7,
-  0x38, 0x6c, 0x34, 0x47, 0x02, 0x5d, 0xd5, 0x46, 0x9a, 0xac, 0xd6, 0x21,
-  0x52, 0x6d, 0x5a, 0xd9, 0x0e, 0xa9, 0x13, 0x18, 0x2b, 0x3a, 0x7d, 0x05,
-  0x7d, 0x1a, 0x06, 0xc2, 0x35, 0x65, 0x73, 0x05, 0x8d, 0xa1, 0x48, 0x18,
-  0x80, 0x48, 0x2e, 0x21, 0x8d, 0xa7, 0xb0, 0xca, 0xd9, 0x0f, 0x14, 0x97,
-  0xd8, 0x7b, 0x56, 0x2f, 0xea, 0x8e, 0x35, 0x01, 0xe3, 0xfb, 0x95, 0x6b,
-  0xe2, 0xef, 0x3d, 0x11, 0x28, 0x61, 0xb3, 0x76, 0x19, 0x7c, 0x6d, 0xd8,
-  0x85, 0xd2, 0xa0, 0xbe, 0x1f, 0x1e, 0xe6, 0x4e, 0x73, 0x98, 0x1f, 0x51,
-  0x3a, 0x0f, 0x36, 0xe2, 0x97, 0x10, 0xdf, 0x3f, 0x51, 0xf3, 0xc3, 0x1b,
-  0x9b, 0xa6, 0xc5, 0x6c, 0x79, 0x48, 0x71, 0x81, 0xee, 0x11, 0xcd, 0x8e,
-  0x0d, 0x2a, 0xeb, 0x62, 0x0e, 0xbd, 0xb1, 0x2f, 0xad, 0x27, 0xbd, 0x81,
-  0x2c, 0xc1, 0xa6, 0x07, 0x75, 0xb0, 0x99, 0x2e, 0x21, 0x18, 0xae, 0x6b,
-  0x4e, 0x50, 0xc1, 0x69, 0x09, 0xed, 0x2f, 0xa8, 0x0b, 0x01, 0x93, 0x64,
-  0xf2, 0x11, 0xe1, 0x7f, 0xa4, 0xd3, 0x3f, 0x7f, 0xd2, 0x36, 0x81, 0x9f,
-  0x5e, 0x1c, 0xed, 0x87, 0x45, 0x6b, 0xc4, 0x5c, 0xae, 0x96, 0x2a, 0x09,
-  0xd8, 0xe3, 0xcc, 0x6f, 0xc6, 0x48, 0x61, 0x00, 0xd5, 0x60, 0x76, 0x83,
-  0x0e, 0xf4, 0x38, 0xe4, 0x08, 0x72, 0x75, 0x22, 0x71, 0x81, 0x54, 0xad,
-  0xe0, 0x06, 0x0b, 0x67, 0xb0, 0xda, 0xe1, 0xde, 0xb6, 0xd0, 0x55, 0x9d,
-  0x15, 0xd3, 0x96, 0xca, 0x35, 0x0c, 0xe6, 0x25, 0x14, 0xda, 0x5a, 0x2c,
-  0xa1, 0x10, 0x48, 0xea, 0x56, 0x7c, 0x21, 0xa7, 0xdb, 0xb1, 0x68, 0x45,
-  0x66, 0x40, 0xed, 0x66, 0x9f, 0x0d, 0xb2, 0xdf, 0x2e, 0x0c, 0xc2, 0xea,
-  0xb2, 0x91, 0x9d, 0x0a, 0xe2, 0x2d, 0xa6, 0xcb, 0xea, 0xd7, 0x12, 0xef,
-  0xc0, 0x83, 0x31, 0x8b, 0x24, 0x26, 0x61, 0x7a, 0xf0, 0x10, 0x75, 0x95,
-  0xfd, 0x85, 0x15, 0x51, 0xfd, 0x29, 0xe2, 0xac, 0x01, 0xb9, 0xdb, 0xe0,
-  0x2c, 0x24, 0x77, 0x9a, 0x2e, 0xd3, 0x00, 0xaa, 0xd5, 0xdd, 0x0f, 0x71,
-  0x3b, 0x41, 0x9d, 0xbd, 0x22, 0x68, 0xc3, 0x1d, 0xa7, 0xdc, 0x67, 0xb9,
-  0x4b, 0xe3, 0xf9, 0xe8, 0x81, 0xa3, 0x11, 0x0e, 0x2c, 0x1c, 0x19, 0xaa,
-  0xa1, 0x38, 0x56, 0x83, 0x5a, 0x48, 0x8e, 0x03, 0x6d, 0x7e, 0x77, 0xfe,
-  0xe6, 0xcf, 0x66, 0xef, 0xd9, 0x1a, 0x74, 0x1a, 0xd3, 0x1b, 0x53, 0xa8,
-  0x05, 0xf4, 0xab, 0x44, 0x51, 0x5b, 0x3a, 0xff, 0x47, 0x07, 0xb1, 0xcd,
-  0x72, 0xc4, 0x1b, 0x6d, 0x72, 0x35, 0x0e, 0xae, 0xac, 0xae, 0x62, 0xff,
-  0x93, 0xd1, 0x33, 0xb8, 0xa2, 0xde, 0x1c, 0x3e, 0x7b, 0xb2, 0xb7, 0xbb,
-  0x35, 0x6a, 0xdf, 0x06, 0x1b, 0x9f, 0xb4, 0xfe, 0x6e, 0xcb, 0x92, 0x8f,
-  0x4b, 0x26, 0x98, 0xcd, 0xa3, 0x1f, 0xce, 0xde, 0xd5, 0xe7, 0x27, 0x33,
-  0x6a, 0x89, 0x75, 0xeb, 0x66, 0xe8, 0x0d, 0x89, 0xb5, 0xf6, 0x2d, 0x89,
-  0x10, 0x07, 0xa7, 0x0d, 0x4c, 0xd1, 0x7b, 0x53, 0xa4, 0x7c, 0x06, 0x7a,
-  0xbc, 0x20, 0xbd, 0x13, 0x12, 0x5e, 0x49, 0x31, 0x39, 0x65, 0x68, 0xaa,
-  0xa4, 0xd7, 0xc0, 0x92, 0xaa, 0xcf, 0xae, 0x66, 0xc0, 0x86, 0x3a, 0xd9,
-  0xa1, 0x48, 0x7a, 0x96, 0xa6, 0x6a, 0x24, 0x5c, 0xff, 0xa6, 0x0c, 0xb0,
-  0x0e, 0xe4, 0xec, 0xb7, 0x0a, 0x4f, 0xa1, 0x61, 0x19, 0xa4, 0xf0, 0xb4,
-  0xb0, 0x6a, 0x9c, 0xdb, 0xc6, 0x79, 0x22, 0xd6, 0x41, 0x7f, 0x22, 0x84,
-  0x27, 0xa9, 0x57, 0xb8, 0x69, 0x17, 0x11, 0xb4, 0x30, 0x9b, 0x60, 0x38,
-  0x25, 0x32, 0xa3, 0x48, 0xa8, 0x28, 0x57, 0xc5, 0x6c, 0xb5, 0xa0, 0x15,
-  0xf8, 0xea, 0xde, 0xc2, 0x8e, 0xf4, 0xc2, 0x86, 0xca, 0xde, 0xce, 0x69,
-  0x48, 0x60, 0xfa, 0x7a, 0xb6, 0x53, 0x6b, 0x6d, 0x84, 0x45, 0x68, 0x18,
-  0x57, 0x87, 0xbb, 0xae, 0xf4, 0x1a, 0x27, 0x1c, 0x8a, 0x75, 0xb0, 0x69,
-  0x73, 0xe3, 0x8b, 0xfb, 0xb7, 0x94, 0x2a, 0x92, 0x2a, 0x66, 0xb9, 0xff,
-  0xf1, 0x24, 0xfd, 0x9a, 0x19, 0x5c, 0x1c, 0xf5, 0x52, 0x11, 0x1a, 0x65,
-  0xec, 0x5c, 0x9e, 0x25, 0xc3, 0x18, 0xb5, 0x68, 0xeb, 0xad, 0xf6, 0x22,
-  0x3c, 0x78, 0x13, 0x0c, 0xd2, 0x02, 0x28, 0x44, 0xfa, 0x7b, 0x1a, 0x6d,
-  0xb2, 0x44, 0x16, 0x3d, 0xfb, 0xfc, 0xd9, 0xd3, 0x2d, 0x55, 0xf9, 0x5d,
-  0x7c, 0xce, 0x56, 0x97, 0xf3, 0x0d, 0xeb, 0xb6, 0x2a, 0x1d, 0x88, 0xf4,
-  0x22, 0x45, 0x7d, 0x28, 0xd0, 0xba, 0xba, 0xf1, 0xa4, 0xcc, 0x0e, 0x94,
-  0x71, 0x98, 0x94, 0x2c, 0x06, 0xb7, 0xd9, 0x1c, 0x75, 0x26, 0xc5, 0xa5,
-  0xa2, 0x4d, 0x1c, 0x8e, 0xa0, 0x4e, 0x47, 0xe4, 0xb2, 0xd1, 0x71, 0x55,
-  0xc9, 0xd5, 0xe0, 0xf2, 0x2d, 0xd8, 0x86, 0x71, 0x5c, 0x75, 0x9a, 0xbe,
-  0xc5, 0xc5, 0x14, 0x96, 0x3a, 0x44, 0x59, 0xbf, 0x3c, 0xb8, 0x8b, 0xc4,
-  0x19, 0x00, 0x83, 0xbf, 0xde, 0x75, 0x5d, 0xc8, 0x8a, 0x24, 0xbd, 0xc2,
-  0xdc, 0xc7, 0x77, 0x67, 0x7d, 0x1d, 0x05, 0xbd, 0x8a, 0xb7, 0xdf, 0xde,
-  0xd7, 0x70, 0x1e, 0x5f, 0x5a, 0xb0, 0x6d, 0x6d, 0x5b, 0x24, 0x0b, 0x43,
-  0x32, 0x96, 0x5b, 0x3d, 0x2f, 0x7c, 0xbd, 0x19, 0xb1, 0xe7, 0xc8, 0x05,
-  0x8d, 0x18, 0xc6, 0x75, 0xb0, 0x10, 0xbe, 0xbc, 0xb7, 0x42, 0x18, 0xd4,
-  0x46, 0xb6, 0xa6, 0xba, 0x84, 0x23, 0xb6, 0x30, 0xb9, 0x58, 0xdd, 0x50,
-  0x08, 0x69, 0xb5, 0xdf, 0x1d, 0x51, 0xb6, 0x6b, 0xae, 0x48, 0xa7, 0x8d,
-  0x75, 0x58, 0x33, 0x78, 0x29, 0xbb, 0x82, 0x9c, 0x70, 0xe8, 0x36, 0xc3,
-  0x76, 0xb6, 0x4a, 0xb4, 0x89, 0xf1, 0x6e, 0x6f, 0x6f, 0x3d, 0x3a, 0x66,
-  0x7d, 0xf0, 0xb1, 0x31, 0x9e, 0x89, 0xb2, 0x91, 0x85, 0x75, 0x2a, 0xfc,
-  0x10, 0xb8, 0x4b, 0xde, 0x2f, 0x41, 0xba, 0x95, 0xa0, 0x46, 0xb1, 0xbf,
-  0xb3, 0xd0, 0x12, 0x91, 0x1c, 0xd4, 0x01, 0xc8, 0x03, 0x64, 0xd8, 0x58,
-  0xe7, 0x57, 0x9f, 0xba, 0x0a, 0xaf, 0x92, 0xac, 0xae, 0x5c, 0x41, 0xb3,
-  0x35, 0x38, 0x94, 0xb1, 0x55, 0x3a, 0x2c, 0x0b, 0xf2, 0x4c, 0x38, 0x36,
-  0x27, 0x98, 0x9f, 0x9c, 0x2a, 0xef, 0x54, 0x96, 0x33, 0x68, 0x4a, 0x82,
-  0x38, 0x9f, 0xdb, 0xac, 0xd8, 0x3d, 0xdd, 0x28, 0xbf, 0x38, 0x6a, 0x01,
-  0x51, 0xc9, 0x93, 0x7c, 0x7c, 0xcc, 0x23, 0x9d, 0x66, 0x1d, 0x52, 0xab,
-  0x77, 0x1d, 0xa2, 0x41, 0xd2, 0xf1, 0x6f, 0xfc, 0x9c, 0x05, 0x50, 0xce,
-  0x92, 0xd5, 0x02, 0xbc, 0x80, 0x12, 0xc3, 0xed, 0xc6, 0x55, 0x70, 0xd4,
-  0x8d, 0x15, 0xb3, 0x52, 0x69, 0xf8, 0xb4, 0xb6, 0x98, 0x03, 0x39, 0xa1,
-  0x08, 0xb5, 0xef, 0x12, 0x82, 0x01, 0xdc, 0xff, 0xa0, 0xd8, 0x0f, 0x70,
-  0x96, 0xf4, 0xb2, 0x51, 0x1c, 0x54, 0x2e, 0x8b, 0x89, 0x5b, 0x68, 0x0d,
-  0x48, 0x1b, 0x05, 0x37, 0x68, 0xc6, 0x56, 0xa6, 0x2c, 0xa9, 0x8a, 0x69,
-  0xcb, 0xb0, 0xe4, 0x9c, 0xe1, 0xe5, 0x54, 0x4d, 0xdf, 0x23, 0x3c, 0x48,
-  0x5d, 0x7f, 0xd0, 0x5f, 0x98, 0x45, 0x6b, 0x22, 0xc4, 0x96, 0xf9, 0xa9,
-  0x34, 0x28, 0xa8, 0x23, 0xe6, 0xbd, 0x5f, 0xba, 0x20, 0x7d, 0x0d, 0x92,
-  0x62, 0x1e, 0x29, 0x1a, 0xb3, 0x40, 0x56, 0x65, 0xb3, 0xc8, 0xfb, 0xcb,
-  0x1d, 0xde, 0xfa, 0xfd, 0xb2, 0x15, 0xfd, 0x1a, 0x94, 0x62, 0xe6, 0x36,
-  0x00, 0xc2, 0x20, 0xc9, 0x1f, 0x3e, 0x6e, 0x01, 0xba, 0x01, 0x0b, 0xc1,
-  0xa1, 0xdf, 0x56, 0x2b, 0x86, 0x75, 0x8c, 0x2e, 0x6a, 0x19, 0x11, 0x60,
-  0xba, 0xc1, 0x4c, 0x37, 0xe9, 0x66, 0x60, 0x76, 0x5e, 0x2d, 0x37, 0x77,
-  0xb7, 0x04, 0x98, 0x57, 0x8b, 0xa7, 0x74, 0x26, 0x83, 0x5a, 0x35, 0x69,
-  0x04, 0x77, 0x1d, 0xba, 0xbe, 0xe1, 0xc1, 0x65, 0xc0, 0x74, 0x04, 0x91,
-  0x5f, 0xea, 0x61, 0x90, 0x55, 0x73, 0x55, 0x1f, 0xd8, 0xff, 0xd5, 0xa5,
-  0x0e, 0x0b, 0x0c, 0xd4, 0x92, 0xb3, 0x1d, 0x4a, 0x29, 0x62, 0xb7, 0xe9,
-  0x11, 0xfa, 0xe5, 0x82, 0xb0, 0x62, 0xc8, 0xb4, 0x7c, 0xf3, 0xd9, 0x90,
-  0x07, 0x7c, 0x55, 0xe4, 0x6d, 0xa8, 0x4e, 0x4e, 0x14, 0xd3, 0x2b, 0xe4,
-  0x62, 0x5d, 0xf1, 0xe9, 0x1e, 0x67, 0xe5, 0xf4, 0xc2, 0xa2, 0xee, 0x92,
-  0xfc, 0xd3, 0x31, 0xd9, 0xfa, 0x96, 0xb6, 0xc8, 0xf4, 0x80, 0xb3, 0x0b,
-  0xd3, 0xa9, 0x9d, 0x72, 0x29, 0x4e, 0x80, 0x44, 0x0f, 0x86, 0xfa, 0x52,
-  0x9e, 0x4e, 0x0c, 0x44, 0x63, 0x1d, 0x60, 0xd2, 0x26, 0x96, 0xa3, 0xa4,
-  0xd6, 0x51, 0x67, 0x9b, 0x6d, 0x87, 0x26, 0x0c, 0x00, 0xa4, 0x37, 0x57,
-  0x81, 0x13, 0x81, 0x7c, 0x12, 0xd9, 0x21, 0x82, 0x33, 0x73, 0x76, 0xa1,
-  0x02, 0xd9, 0xdf, 0x0e, 0x0f, 0x6a, 0x7f, 0x71, 0xcf, 0x37, 0x59, 0xbf,
-  0x46, 0x7a, 0x51, 0xbf, 0x64, 0x83, 0x60, 0xd5, 0xb7, 0xe5, 0x6d, 0x24,
-  0x95, 0xb5, 0xab, 0x41, 0xac, 0xe9, 0x5b, 0x48, 0x5b, 0xba, 0xf0, 0xad,
-  0x4b, 0xe3, 0xfe, 0x08, 0xbe, 0x1b, 0x48, 0xe0, 0xfb, 0x64, 0xc5, 0xe1,
-  0x26, 0xcd, 0x4a, 0xa9, 0xc2, 0xaf, 0x45, 0x2c, 0x90, 0x27, 0xb4, 0xca,
-  0x9d, 0x47, 0x79, 0x61, 0xfc, 0x9f, 0x24, 0x5e, 0x84, 0xb5, 0x22, 0x51,
-  0xd0, 0xb9, 0x6c, 0x0b, 0x75, 0x2b, 0x90, 0x76, 0x19, 0x9e, 0x88, 0x46,
-  0x6c, 0xa2, 0xf4, 0x81, 0x00, 0x14, 0x69, 0x5c, 0x5b, 0xef, 0x04, 0xa9,
-  0x44, 0x03, 0x0e, 0x6d, 0x42, 0x35, 0x5f, 0xb9, 0x7b, 0xd4, 0xb4, 0xaa,
-  0x8d, 0x38, 0xdc, 0x7d, 0x5a, 0x8f, 0xe9, 0xf5, 0x2a, 0xbb, 0xa1, 0x21,
-  0xb4, 0xc3, 0x9e, 0xcd, 0xc9, 0x91, 0xa2, 0xe6, 0x89, 0x14, 0x50, 0x35,
-  0x48, 0x09, 0x79, 0x9d, 0x01, 0xb3, 0x6e, 0x91, 0xc2, 0xaa, 0x75, 0x4c,
-  0x1e, 0x0a, 0x57, 0x13, 0xdb, 0xae, 0x2c, 0xa0, 0x8c, 0xca, 0x2d, 0xe0,
-  0xc3, 0x69, 0x90, 0x56, 0x15, 0x43, 0x02, 0xa2, 0xae, 0x82, 0x78, 0x08,
-  0xe1, 0x53, 0x86, 0x06, 0xc3, 0x97, 0x8d, 0x5a, 0x3a, 0x5b, 0x47, 0x76,
-  0x55, 0x8a, 0x73, 0x5c, 0xb7, 0x95, 0xc9, 0x34, 0x04, 0x31, 0xec, 0x18,
-  0x89, 0xf2, 0xe1, 0x61, 0x47, 0x11, 0xc0, 0x8b, 0x46, 0x39, 0x62, 0x47,
-  0x8a, 0xf6, 0xd2, 0xa0, 0x86, 0x61, 0x0b, 0x27, 0xa4, 0x25, 0x10, 0x74,
-  0x1c, 0x59, 0xa9, 0x3d, 0xb3, 0x49, 0x2a, 0x46, 0x3e, 0x5f, 0x55, 0x92,
-  0xf8, 0xcc, 0x66, 0x31, 0xce, 0x27, 0xd9, 0xb2, 0x03, 0x25, 0x07, 0xd0,
-  0x85, 0x45, 0x08, 0x1f, 0xeb, 0xc4, 0x16, 0x45, 0xd4, 0xb7, 0x33, 0xf9,
-  0x4a, 0x54, 0x96, 0xaa, 0xee, 0xac, 0x00, 0xe8, 0x5d, 0x21, 0x7c, 0x8e,
-  0xf5, 0x58, 0xe4, 0x4c, 0x3a, 0x26, 0xdb, 0xb2, 0x20, 0x99, 0x32, 0x51,
-  0x5b, 0x90, 0xc0, 0x06, 0x0c, 0xe9, 0xc0, 0x57, 0x77, 0x72, 0xc5, 0x0d,
-  0x4c, 0xe3, 0x78, 0x30, 0x48, 0xe2, 0x81, 0x98, 0xc0, 0x8e, 0xb5, 0xb6,
-  0x6a, 0x0d, 0x02, 0x90, 0xab, 0x22, 0xbf, 0x0e, 0x8b, 0x65, 0x75, 0x89,
-  0x6a, 0x95, 0x11, 0x2d, 0x56, 0xec, 0x68, 0x68, 0xd9, 0x9a, 0x69, 0x5f,
-  0xe6, 0x2b, 0x01, 0x09, 0x67, 0xa7, 0xb5, 0xfa, 0xcb, 0x48, 0x42, 0x8f,
-  0x27, 0xbc, 0x3b, 0x93, 0x7b, 0x37, 0x4d, 0x4b, 0xb2, 0x47, 0x36, 0xbc,
-  0xa9, 0xd4, 0x6d, 0xf2, 0xb0, 0xc7, 0x1a, 0xfd, 0x7c, 0x67, 0x8c, 0xb5,
-  0x45, 0x19, 0xe2, 0x09, 0x09, 0x31, 0x41, 0x6e, 0x94, 0x9f, 0x28, 0x93,
-  0x5d, 0x75, 0xd8, 0x4c, 0xdd, 0x60, 0x4c, 0x5c, 0x67, 0x9b, 0x40, 0x2c,
-  0xa5, 0x48, 0x14, 0x77, 0x45, 0x97, 0xc1, 0x12, 0x63, 0xf2, 0x7a, 0x1e,
-  0x96, 0x95, 0x70, 0x5e, 0x83, 0xe5, 0x72, 0xa4, 0x85, 0x3b, 0xdf, 0xd9,
-  0x63, 0xd1, 0xe6, 0xf8, 0xec, 0xdd, 0xd1, 0xd7, 0xa7, 0x5b, 0x8f, 0xb9,
-  0x16, 0x14, 0xd2, 0x10, 0x61, 0x28, 0x38, 0x54, 0x38, 0xde, 0x1d, 0xed,
-  0xc0, 0xef, 0x04, 0x88, 0xb9, 0xf0, 0x6a, 0xef, 0x0a, 0xba, 0x1b, 0x48,
-  0x36, 0xaa, 0x9c, 0x57, 0xc1, 0xb5, 0x73, 0xc3, 0xff, 0xd4, 0x80, 0xff,
-  0xb8, 0x2b, 0xdc, 0xff, 0xeb, 0xf1, 0x78, 0x78, 0x70, 0x76, 0x2c, 0xd5,
-  0xab, 0xe9, 0xe7, 0x1a, 0xe0, 0xec, 0xae, 0xe8, 0x7e, 0x31, 0x8f, 0x73,
-  0xc8, 0x60, 0x3d, 0xc0, 0x3f, 0x88, 0xe9, 0x47, 0xf3, 0xcd, 0xeb, 0xf6,
-  0xec, 0x78, 0x1b, 0x5d, 0xc1, 0xb1, 0x81, 0x95, 0xe8, 0x8e, 0xe9, 0x6b,
-  0x57, 0x2e, 0x11, 0x74, 0x3f, 0xe4, 0x6c, 0x80, 0x40, 0x8d, 0x81, 0xc4,
-  0x24, 0x7f, 0x92, 0xc2, 0x3b, 0x5c, 0x19, 0x92, 0x60, 0x37, 0x8c, 0x11,
-  0xdb, 0xd3, 0x39, 0x23, 0xcd, 0xc0, 0xe1, 0x1b, 0xf6, 0x7b, 0xd8, 0x67,
-  0x05, 0x6e, 0x91, 0xc1, 0xb1, 0x49, 0xb6, 0xd2, 0xf0, 0x96, 0xa6, 0x71,
-  0xaf, 0x3f, 0x24, 0xe6, 0xb5, 0xdf, 0x97, 0x7c, 0x8d, 0x24, 0xe3, 0x42,
-  0xbb, 0x91, 0x9d, 0xb5, 0x28, 0xb0, 0x97, 0xd5, 0x6e, 0x6c, 0x87, 0xb6,
-  0x33, 0x5c, 0x75, 0x8f, 0x8e, 0x8e, 0x28, 0x8b, 0x57, 0xe2, 0x0d, 0x54,
-  0xd1, 0xf1, 0x9f, 0x82, 0x8b, 0x1b, 0x1e, 0x89, 0x20, 0xb9, 0xed, 0xa1,
-  0x6b, 0x5e, 0xf9, 0x8c, 0x4f, 0x84, 0x53, 0xb7, 0x86, 0x8b, 0x00, 0xbf,
-  0x38, 0x3c, 0xab, 0x55, 0x42, 0x6f, 0x59, 0x3d, 0x26, 0xf7, 0x3e, 0x47,
-  0x1c, 0xc9, 0xb9, 0x99, 0x6b, 0x7d, 0x31, 0x5a, 0x5f, 0xd8, 0xb0, 0x0a,
-  0x2a, 0x1c, 0x75, 0xdd, 0x7b, 0xb5, 0x8b, 0xcf, 0x15, 0xff, 0x5c, 0x7f,
-  0xf5, 0xf9, 0x19, 0x04, 0xb7, 0x9f, 0xfb, 0xb0, 0xb1, 0x34, 0x8a, 0x25,
-  0x95, 0xce, 0x3a, 0x33, 0xb5, 0x6c, 0x85, 0xac, 0x16, 0x8a, 0xae, 0x11,
-  0xe3, 0x00, 0x19, 0x66, 0xd7, 0xf1, 0x6b, 0x1a, 0x0d, 0x0b, 0x62, 0xa4,
-  0x80, 0x06, 0x36, 0xb3, 0xb6, 0x00, 0xe9, 0x8d, 0xe2, 0xe0, 0xdc, 0x28,
-  0xdb, 0xed, 0x2d, 0x97, 0xdc, 0x46, 0x32, 0x0a, 0x56, 0x45, 0x6b, 0xdc,
-  0x2a, 0x60, 0x5c, 0x37, 0xce, 0x2c, 0x9b, 0xfb, 0x0b, 0x89, 0x3a, 0x8c,
-  0xae, 0x57, 0x85, 0x40, 0x1a, 0x28, 0x20, 0x91, 0x22, 0x6d, 0x17, 0x09,
-  0x8f, 0xb9, 0x3e, 0xe0, 0x56, 0x0d, 0x3e, 0x51, 0xca, 0xe9, 0xd8, 0x2f,
-  0x34, 0x09, 0x61, 0x52, 0xe4, 0x37, 0x74, 0x5a, 0xf9, 0x35, 0x57, 0x91,
-  0x5d, 0x64, 0x38, 0xd3, 0x2d, 0xe9, 0x46, 0x99, 0x39, 0xbf, 0x68, 0x47,
-  0x04, 0x2a, 0x6a, 0x0f, 0x68, 0x8c, 0x83, 0x17, 0x86, 0x04, 0x16, 0x1e,
-  0xd9, 0x7c, 0x06, 0x24, 0x0a, 0xf1, 0x9b, 0xeb, 0x5f, 0xfb, 0x60, 0xc2,
-  0xb6, 0x87, 0x5b, 0xe1, 0xfc, 0xff, 0x79, 0x34, 0xe4, 0xc8, 0x22, 0xa4,
-  0xa1, 0x8e, 0x2d, 0xaf, 0x11, 0x93, 0x70, 0xfd, 0x97, 0x44, 0x55, 0xc2,
-  0xcd, 0xd9, 0x32, 0xd7, 0xb4, 0x0d, 0xa3, 0x2a, 0xc6, 0x30, 0x80, 0xcc,
-  0x11, 0x53, 0x35, 0x54, 0x11, 0x8e, 0x4b, 0x91, 0x30, 0x8e, 0x99, 0x2f,
-  0xe5, 0xa3, 0x78, 0xa5, 0xd0, 0xb3, 0xdb, 0x62, 0x06, 0x8b, 0x65, 0xee,
-  0xd2, 0x16, 0x7f, 0x13, 0xf8, 0x04, 0x6f, 0x0f, 0xc0, 0xd2, 0x90, 0x5a,
-  0xae, 0x6e, 0x94, 0x3f, 0x84, 0x70, 0x24, 0xd2, 0x53, 0x4b, 0xa5, 0x10,
-  0x78, 0x7b, 0x17, 0x27, 0x23, 0x09, 0x84, 0x2e, 0xed, 0x97, 0x81, 0x8f,
-  0x43, 0x9e, 0x21, 0x50, 0xaa, 0xd1, 0x11, 0x07, 0xbd, 0x74, 0xe8, 0x39,
-  0x96, 0x24, 0x8a, 0x39, 0xa6, 0x8a, 0xc3, 0x29, 0x2e, 0x09, 0x55, 0x1a,
-  0x63, 0xf3, 0x36, 0x58, 0xf8, 0x8b, 0x2b, 0xfa, 0xda, 0xa9, 0xf3, 0x95,
-  0x95, 0xda, 0xf4, 0xad, 0x96, 0x85, 0x7d, 0xe4, 0x90, 0xed, 0xdf, 0xf8,
-  0x48, 0xef, 0x81, 0x58, 0x90, 0x44, 0x1f, 0xeb, 0x10, 0x20, 0x31, 0x9a,
-  0xc8, 0x3f, 0x34, 0x08, 0x7e, 0xdf, 0xff, 0x7c, 0xc7, 0x62, 0x7d, 0xd9,
-  0x68, 0x17, 0x3e, 0x03, 0xe8, 0xc6, 0x0e, 0x35, 0x02, 0xc8, 0x81, 0x79,
-  0xe5, 0x1e, 0x6d, 0xd6, 0xa3, 0x78, 0x31, 0x7a, 0xba, 0x55, 0xa3, 0x97,
-  0x6a, 0xbe, 0x70, 0xc8, 0x9a, 0x26, 0x98, 0x44, 0xef, 0x2e, 0x4e, 0xde,
-  0x76, 0xd8, 0x04, 0xe0, 0x48, 0xc4, 0x77, 0xf5, 0xaf, 0x5a, 0xc6, 0x4e,
-  0x04, 0x63, 0x73, 0x2c, 0x39, 0x89, 0x8f, 0xe9, 0x55, 0x26, 0xd8, 0xff,
-  0x6f, 0xd3, 0x69, 0x91, 0x97, 0xf9, 0xa5, 0xb8, 0x33, 0xed, 0x82, 0xa1,
-  0x2f, 0x8e, 0x8f, 0xc7, 0xd1, 0x5d, 0x32, 0xb1, 0x64, 0xab, 0x56, 0x68,
-  0xa1, 0xe4, 0x2f, 0x82, 0x04, 0x97, 0x45, 0x9a, 0x54, 0x2c, 0x68, 0x98,
-  0x5d, 0x8f, 0x13, 0xb0, 0xf9, 0xa5, 0x64, 0x98, 0x64, 0xa4, 0x70, 0x26,
-  0x50, 0xdf, 0xb8, 0xd0, 0xc0, 0x1c, 0x5c, 0x69, 0x99, 0xe4, 0x1d, 0x96,
-  0x5d, 0x19, 0x80, 0xb1, 0x14, 0x59, 0x1b, 0xdc, 0x15, 0x93, 0xb8, 0x74,
-  0xe0, 0x53, 0x69, 0xc1, 0x14, 0xc7, 0xc2, 0x86, 0x9a, 0x63, 0x6e, 0x52,
-  0x64, 0xf9, 0xb7, 0xb2, 0xdf, 0xb5, 0xfa, 0xa4, 0x63, 0x87, 0x66, 0x90,
-  0xc8, 0x66, 0x79, 0x01, 0x37, 0x49, 0x80, 0xa6, 0xcc, 0x68, 0xfe, 0x2b,
-  0x04, 0x7f, 0xf2, 0xf0, 0xee, 0x3b, 0x24, 0xf6, 0xeb, 0x5c, 0x62, 0x2f,
-  0xb1, 0xcc, 0xcc, 0x95, 0x24, 0x2f, 0x10, 0x41, 0x5a, 0x0a, 0x4e, 0xab,
-  0x65, 0x8f, 0x8c, 0x95, 0x3c, 0x26, 0xe1, 0xd9, 0x7e, 0xf8, 0xec, 0x24,
-  0xb5, 0xb6, 0xbf, 0x4e, 0xaf, 0xd6, 0x20, 0xe4, 0x8b, 0x16, 0xd5, 0x14,
-  0x33, 0x79, 0x44, 0xca, 0x2f, 0x0b, 0x15, 0x2e, 0x9b, 0xa5, 0x58, 0x3a,
-  0xd0, 0x40, 0x6a, 0x92, 0x25, 0x51, 0xdb, 0x83, 0x55, 0x76, 0x1f, 0x16,
-  0x29, 0x71, 0x81, 0x68, 0xee, 0xa8, 0x16, 0xfb, 0x21, 0xc1, 0xb1, 0x65,
-  0x1d, 0x6d, 0x27, 0x89, 0x4a, 0xb0, 0x3a, 0x94, 0x38, 0x13, 0x20, 0x79,
-  0x36, 0xa3, 0x7f, 0x46, 0x5d, 0x39, 0x7f, 0xd8, 0x72, 0x16, 0x22, 0xd5,
-  0x28, 0xd0, 0x99, 0x0d, 0xf0, 0xbd, 0xc0, 0x2a, 0xa9, 0xd9, 0x20, 0xd7,
-  0x87, 0xc2, 0x14, 0xbc, 0xb2, 0x9a, 0xe5, 0x0c, 0x6d, 0xab, 0x8a, 0x00,
-  0x5f, 0xe1, 0x72, 0x7b, 0xff, 0xc7, 0xdf, 0xdb, 0xf9, 0x48, 0x3f, 0xfe,
-  0x2c, 0x92, 0xb4, 0x00, 0x68, 0x78, 0x34, 0x09, 0x23, 0x9d, 0xd2, 0x57,
-  0xfe, 0xe0, 0x4d, 0x62, 0xa4, 0x28, 0x71, 0xcb, 0xc9, 0x11, 0x6a, 0x0a,
-  0xa7, 0xea, 0x42, 0xd4, 0xab, 0x57, 0xc7, 0x66, 0x7c, 0x1f, 0x60, 0xc3,
-  0x71, 0x60, 0x45, 0x13, 0x8b, 0x23, 0x47, 0xbc, 0x28, 0x90, 0xf4, 0x6c,
-  0x1d, 0x0e, 0xb9, 0xc1, 0xcd, 0xd4, 0x6b, 0xce, 0x00, 0xe8, 0x43, 0x1c,
-  0x3f, 0x18, 0x3f, 0xdf, 0x2c, 0x27, 0x52, 0xc5, 0xb1, 0x0d, 0xa7, 0x2a,
-  0x7b, 0xab, 0xfe, 0x8d, 0xff, 0xa0, 0xbd, 0x18, 0x54, 0x77, 0xf9, 0xdf,
-  0x47, 0x1c, 0xd4, 0x08, 0xc6, 0x3b, 0xcc, 0xa5, 0xc4, 0xf6, 0x87, 0xdf,
-  0xed, 0x72, 0x08, 0x51, 0xaf, 0x5d, 0x3a, 0x1b, 0x2b, 0x60, 0x5b, 0xec,
-  0x50, 0x78, 0xd6, 0xa0, 0xb7, 0xd6, 0xbb, 0xe3, 0x5e, 0x06, 0x7c, 0x05,
-  0xfc, 0x7d, 0xc4, 0xff, 0xfe, 0xb8, 0x3b, 0x7c, 0xf6, 0xb3, 0xeb, 0xf5,
-  0x77, 0xbb, 0x1f, 0x7e, 0xb7, 0xd7, 0xeb, 0xac, 0x1d, 0xaf, 0x89, 0x81,
-  0xf5, 0x88, 0xbe, 0x12, 0xc5, 0x4b, 0x35, 0x84, 0x56, 0xb5, 0x4d, 0x5f,
-  0x37, 0x01, 0x85, 0x59, 0xda, 0x69, 0x1f, 0x6c, 0x85, 0x7a, 0x04, 0x0a,
-  0x3d, 0xac, 0xe1, 0x1b, 0x68, 0x2d, 0x5a, 0xd2, 0x56, 0xc3, 0xb7, 0xa6,
-  0x82, 0xb5, 0x0d, 0x73, 0x66, 0xcb, 0x72, 0x0a, 0x8c, 0x84, 0xd9, 0x3d,
-  0xdd, 0x73, 0x82, 0xb4, 0x3a, 0x72, 0xe1, 0x33, 0x26, 0x3d, 0x2a, 0xe1,
-  0x2a, 0x46, 0xd7, 0xa6, 0xbb, 0xf1, 0x19, 0x51, 0x6e, 0xab, 0xcb, 0x32,
-  0xe1, 0x4d, 0x42, 0x9e, 0xe6, 0xb5, 0xe0, 0x2a, 0x0e, 0xaf, 0x10, 0xbb,
-  0x3f, 0x40, 0x4d, 0xb4, 0xd3, 0x47, 0x8e, 0x4f, 0x1c, 0x3a, 0xa7, 0xa4,
-  0x68, 0x91, 0x96, 0x8f, 0x77, 0x18, 0xe0, 0xf8, 0xea, 0x2e, 0x81, 0xf4,
-  0xda, 0xbc, 0x77, 0x36, 0x4f, 0x9d, 0xae, 0x83, 0xc7, 0x42, 0x90, 0xfb,
-  0xf0, 0xf5, 0xc0, 0x1d, 0x9e, 0x44, 0x56, 0x11, 0x7d, 0xba, 0xaa, 0xda,
-  0x40, 0x24, 0xa3, 0xad, 0xae, 0x1c, 0x81, 0xb0, 0x2d, 0x03, 0x3d, 0xd3,
-  0x60, 0xee, 0xa8, 0x94, 0x82, 0x3a, 0xa2, 0x0f, 0x0a, 0xd6, 0x2a, 0xf3,
-  0x22, 0x89, 0x3a, 0x6d, 0xcb, 0x26, 0xae, 0x52, 0xee, 0xc0, 0x61, 0x3c,
-  0x27, 0xf3, 0xb2, 0x4d, 0x1b, 0x87, 0xec, 0xeb, 0x61, 0x2c, 0xbb, 0x0a,
-  0x99, 0xe3, 0x83, 0xb0, 0x6e, 0xaa, 0x4b, 0x4c, 0x8c, 0x6f, 0xbd, 0x13,
-  0xc7, 0xce, 0xa8, 0x46, 0xc9, 0xaf, 0xcb, 0xfc, 0x1e, 0xd5, 0x2d, 0x14,
-  0x0e, 0xf0, 0x39, 0x76, 0xc5, 0xac, 0x7c, 0x5e, 0x61, 0x90, 0x01, 0xdf,
-  0x95, 0xcc, 0x8a, 0x1a, 0x07, 0x60, 0x4f, 0x92, 0xf7, 0xd5, 0x18, 0x41,
-  0xe0, 0x48, 0x51, 0xfc, 0x19, 0x7e, 0x56, 0x00, 0xc9, 0xba, 0x5c, 0x8a,
-  0x8e, 0xdb, 0xb4, 0x21, 0x73, 0x2f, 0xe7, 0xf1, 0xd5, 0xbf, 0x74, 0xa2,
-  0xd4, 0x2a, 0x6a, 0x14, 0x73, 0x22, 0xe0, 0xd3, 0x4a, 0x88, 0x6e, 0x96,
-  0x98, 0x2e, 0x1a, 0x00, 0x98, 0xd0, 0xbc, 0x53, 0xa9, 0x44, 0xf2, 0xfb,
-  0xbd, 0x9d, 0x36, 0x2b, 0xd6, 0x6c, 0x3a, 0x80, 0xb8, 0x59, 0x2d, 0x22,
-  0xa6, 0xa7, 0xd2, 0x08, 0x4a, 0x24, 0x4a, 0x5f, 0xf4, 0x20, 0x41, 0xd6,
-  0x10, 0x9d, 0xa5, 0x21, 0x00, 0x30, 0xd6, 0xa1, 0xd4, 0x76, 0x06, 0x9f,
-  0xfe, 0x5a, 0xc6, 0xf2, 0x28, 0x67, 0xa1, 0xdb, 0x8b, 0x2f, 0xfc, 0xbd,
-  0xe1, 0x24, 0xa1, 0x9b, 0xa7, 0x39, 0xc7, 0x4d, 0x1f, 0x5a, 0x3a, 0x88,
-  0xea, 0x31, 0x54, 0xdc, 0xd9, 0x57, 0x78, 0x27, 0xba, 0x80, 0x4e, 0xc7,
-  0xb4, 0x7d, 0xca, 0xf5, 0xcc, 0xa3, 0xbd, 0xd1, 0x8e, 0x0a, 0x7e, 0x0f,
-  0xa6, 0xbf, 0x8a, 0xbf, 0xa6, 0xd6, 0x86, 0xaf, 0x88, 0xc9, 0xf2, 0xfa,
-  0x5f, 0x56, 0x59, 0x1d, 0x95, 0xbf, 0xd3, 0xcd, 0x25, 0x6a, 0x98, 0x49,
-  0xf9, 0x5a, 0x05, 0xa1, 0x16, 0xa5, 0x14, 0x9e, 0x72, 0xc5, 0xec, 0x2b,
-  0xd8, 0xfe, 0xd3, 0x92, 0x32, 0xd0, 0xe0, 0xba, 0xfa, 0x11, 0xad, 0xc1,
-  0x2a, 0x42, 0x88, 0xd9, 0x6f, 0x0a, 0xf3, 0x91, 0x89, 0xfc, 0xe6, 0xaa,
-  0x52, 0xe1, 0xbe, 0x3e, 0x7f, 0x73, 0xd8, 0x68, 0xee, 0xf9, 0x67, 0xcf,
-  0x76, 0x7e, 0xcb, 0x78, 0x94, 0x5a, 0x3d, 0x8b, 0x87, 0xeb, 0x05, 0xfd,
-  0xaa, 0x82, 0x41, 0xdd, 0xf5, 0x82, 0xac, 0x08, 0xc6, 0x2f, 0x2b, 0x16,
-  0xa4, 0xae, 0xd1, 0x2e, 0x3f, 0x61, 0x98, 0xa6, 0xe8, 0xe3, 0x7d, 0xc2,
-  0x5a, 0x48, 0xac, 0x36, 0xa5, 0xa5, 0x06, 0xf5, 0xb3, 0x00, 0xcb, 0x11,
-  0x5f, 0xab, 0xac, 0xc3, 0xc7, 0x2a, 0x36, 0x70, 0xbe, 0x01, 0xac, 0x76,
-  0xf4, 0xe1, 0xe9, 0xbb, 0x77, 0x47, 0x87, 0xae, 0x8c, 0x96, 0x22, 0x7e,
-  0x7b, 0x49, 0x59, 0xca, 0x1f, 0x89, 0x4a, 0xdd, 0x5d, 0x2f, 0x48, 0x02,
-  0x59, 0x2d, 0x3f, 0x5b, 0x47, 0x80, 0xa4, 0x0b, 0x09, 0xd2, 0x0d, 0xd0,
-  0x2b, 0x2c, 0x76, 0x5f, 0x18, 0x55, 0x87, 0x0a, 0xda, 0x5d, 0x26, 0xc6,
-  0xe7, 0xbd, 0x83, 0x7f, 0xb6, 0x4a, 0xc4, 0x68, 0x8e, 0x56, 0x50, 0x24,
-  0x46, 0x60, 0xd0, 0xff, 0x3f, 0x56, 0x26, 0xe6, 0x1b, 0x0b, 0x5f, 0x68,
-  0x61, 0xe1, 0xd6, 0xa5, 0x7f, 0x11, 0x62, 0x55, 0xa1, 0x0b, 0x02, 0x1b,
-  0xba, 0x93, 0x9d, 0xc3, 0x84, 0x3c, 0x0e, 0xab, 0x2d, 0xbd, 0xeb, 0x3b,
-  0x80, 0x26, 0x59, 0x57, 0xfa, 0x65, 0x1d, 0x38, 0x5c, 0x80, 0x02, 0x27,
-  0xcc, 0x5b, 0x4a, 0x6d, 0xfd, 0xf2, 0x0a, 0x2d, 0xeb, 0x43, 0x28, 0xb8,
-  0xbe, 0x8d, 0x13, 0xd0, 0x86, 0xcb, 0x81, 0x71, 0x84, 0x8a, 0x73, 0xaf,
-  0xe6, 0x5d, 0x16, 0x74, 0x2d, 0x40, 0xa7, 0x24, 0x6c, 0xac, 0x67, 0x73,
-  0xf8, 0xd1, 0xbd, 0xdb, 0x05, 0xc8, 0x80, 0x90, 0x94, 0x56, 0x6c, 0x4c,
-  0x36, 0xb4, 0xa6, 0xa0, 0xd1, 0xdb, 0x04, 0x15, 0x1b, 0x5e, 0x4e, 0x0b,
-  0x06, 0xc2, 0xbb, 0x53, 0x88, 0x4d, 0xdc, 0x10, 0xe1, 0x3f, 0xde, 0xb7,
-  0x8c, 0x3d, 0x8a, 0x55, 0x4f, 0x64, 0xb6, 0xa0, 0x2b, 0x7c, 0x6e, 0x19,
-  0xde, 0x69, 0xa5, 0x75, 0x57, 0x51, 0x47, 0x03, 0x67, 0xda, 0xe5, 0x02,
-  0x69, 0x9c, 0x17, 0xf5, 0x32, 0x6c, 0x79, 0x65, 0xe7, 0x9c, 0x9a, 0x5a,
-  0xe4, 0xb1, 0xa4, 0x35, 0x01, 0x49, 0xdd, 0x1d, 0x0d, 0x8c, 0xdb, 0xdc,
-  0x2c, 0xc6, 0x1e, 0x7c, 0x52, 0x7a, 0x3b, 0xa8, 0xd5, 0xa9, 0xb7, 0x2e,
-  0x00, 0x5e, 0xd5, 0x68, 0x81, 0x17, 0xd0, 0xd4, 0x2f, 0x35, 0x6f, 0x1b,
-  0x27, 0x50, 0xf9, 0x90, 0xd5, 0xd6, 0x6e, 0x8d, 0x4c, 0x4e, 0xbe, 0xa1,
-  0xab, 0xe8, 0x5a, 0xd9, 0x52, 0x55, 0x79, 0xc0, 0xe8, 0xeb, 0x25, 0xc7,
-  0xd7, 0x06, 0x40, 0x03, 0xb5, 0xe8, 0x5c, 0xec, 0x2a, 0x5a, 0x5a, 0x5b,
-  0x2d, 0xea, 0x5a, 0x5e, 0x36, 0x2f, 0xb6, 0x11, 0xf0, 0x97, 0x21, 0x3b,
-  0x3a, 0x87, 0xcd, 0x08, 0xdc, 0xb0, 0x0b, 0xab, 0x1b, 0xa6, 0x7a, 0xbe,
-  0xdb, 0xe4, 0x84, 0x51, 0xe3, 0x0e, 0x44, 0x46, 0x8d, 0x1b, 0x0b, 0x1f,
-  0x6f, 0x03, 0x63, 0xa3, 0xaf, 0x67, 0xcb, 0x7e, 0xfd, 0xa6, 0xfd, 0x06,
-  0x05, 0x07, 0xa6, 0x86, 0x48, 0x20, 0x58, 0xaa, 0xae, 0x22, 0x82, 0x46,
-  0x0d, 0x82, 0x6a, 0x6c, 0x1d, 0x81, 0xb7, 0xbc, 0x0e, 0x16, 0x63, 0x3a,
-  0xe7, 0x88, 0xde, 0x7e, 0x19, 0x4a, 0x01, 0x1a, 0x02, 0x0d, 0x2f, 0x0b,
-  0x2d, 0x94, 0x65, 0x0a, 0xd7, 0xaa, 0x02, 0xc7, 0xe5, 0x4d, 0xb9, 0x1e,
-  0x66, 0xc8, 0x47, 0x73, 0x64, 0x61, 0xf9, 0x10, 0x6b, 0x51, 0xfc, 0x73,
-  0x69, 0xd5, 0x18, 0x27, 0xef, 0x55, 0xbd, 0x39, 0xb7, 0x45, 0x2d, 0xb0,
-  0xb0, 0x96, 0x56, 0xea, 0x6a, 0x89, 0xb4, 0xb4, 0x55, 0xf9, 0x7a, 0x44,
-  0x27, 0xa6, 0xc7, 0x65, 0x46, 0x7a, 0xf5, 0x0c, 0x24, 0x4d, 0xd9, 0xb3,
-  0xb7, 0x69, 0x25, 0x82, 0x01, 0xb7, 0x25, 0x42, 0xbb, 0x1e, 0xd4, 0x36,
-  0xc4, 0xfb, 0xb5, 0xc9, 0xb1, 0x47, 0xe0, 0xbf, 0x6d, 0x70, 0x42, 0xd7,
-  0xd4, 0xfa, 0x51, 0xf5, 0xac, 0x6e, 0xd5, 0xee, 0xce, 0x68, 0xb7, 0x17,
-  0x02, 0x28, 0x23, 0xb0, 0x82, 0x63, 0x21, 0xc2, 0x76, 0x3a, 0xee, 0xc2,
-  0x2e, 0xab, 0x6f, 0xd8, 0xc1, 0xe2, 0x7e, 0x14, 0x84, 0xa7, 0xb4, 0xba,
-  0xd0, 0x10, 0x96, 0x66, 0xcb, 0xc3, 0x40, 0x1b, 0x01, 0xa9, 0x2d, 0x39,
-  0x94, 0xc7, 0x41, 0x59, 0xd4, 0x2a, 0xdb, 0xcb, 0xfd, 0xed, 0xea, 0xc3,
-  0x77, 0xe1, 0x59, 0x05, 0x49, 0x14, 0xdd, 0x55, 0xe3, 0x5d, 0xff, 0x2d,
-  0x2b, 0xd4, 0x2f, 0x16, 0xed, 0xd8, 0x63, 0xe4, 0x8e, 0xa1, 0x7a, 0x3d,
-  0x9c, 0x6f, 0x8d, 0x8b, 0xcb, 0x2b, 0x9e, 0x8d, 0xf0, 0x82, 0xb8, 0xbc,
-  0x1d, 0x39, 0x1f, 0x13, 0x64, 0x8f, 0x90, 0xf7, 0xae, 0xca, 0x7a, 0x1c,
-  0x05, 0xaa, 0xd2, 0x7b, 0x40, 0x8a, 0x90, 0xe1, 0xa2, 0x65, 0x87, 0xa9,
-  0x31, 0x1c, 0xaa, 0x95, 0x7e, 0x98, 0x2c, 0xd9, 0x60, 0x87, 0x17, 0x39,
-  0x11, 0x38, 0x09, 0x43, 0x05, 0xf8, 0x9d, 0x3f, 0xfe, 0xd1, 0xf3, 0xa8,
-  0x7a, 0xe5, 0xb5, 0xdd, 0x17, 0xa3, 0x67, 0xde, 0x4a, 0x25, 0x20, 0x01,
-  0x51, 0x6f, 0xff, 0x47, 0xa4, 0xc5, 0xfc, 0x3c, 0xfc, 0x91, 0xfe, 0xfc,
-  0xb9, 0xe7, 0x18, 0x25, 0xc2, 0xc4, 0x44, 0xbe, 0x70, 0x93, 0xb7, 0xa4,
-  0x0d, 0x3c, 0xe4, 0x82, 0xa9, 0x21, 0x71, 0xb1, 0x2b, 0x11, 0xa7, 0x51,
-  0x32, 0xab, 0x85, 0x9a, 0xd5, 0x8e, 0x25, 0x09, 0xf6, 0x10, 0x70, 0x88,
-  0x52, 0xdc, 0x5a, 0x4a, 0x42, 0x88, 0x7f, 0x69, 0x60, 0xe5, 0x6e, 0x14,
-  0x3f, 0x81, 0xaf, 0x77, 0x4b, 0xc1, 0x57, 0xf6, 0x3c, 0x42, 0x1c, 0x98,
-  0x9a, 0x42, 0xf4, 0xb3, 0x0d, 0x07, 0xa2, 0xc3, 0x49, 0xa0, 0x56, 0xd6,
-  0x5e, 0xc2, 0x15, 0x44, 0x10, 0x4a, 0x5c, 0x28, 0x91, 0x4b, 0xb9, 0xd4,
-  0x39, 0x96, 0x37, 0x3c, 0x45, 0x4d, 0x75, 0x16, 0x4c, 0xb6, 0x8d, 0x40,
-  0x08, 0xc6, 0xd8, 0x2c, 0x3d, 0x78, 0x12, 0xa0, 0xd4, 0xd7, 0xe4, 0x7d,
-  0x2e, 0xbc, 0xf6, 0x72, 0x79, 0x5d, 0x50, 0xbb, 0x0f, 0x60, 0x75, 0xd2,
-  0x53, 0xf2, 0x8c, 0xa3, 0xda, 0xa5, 0x07, 0x8d, 0xfc, 0x2d, 0xd5, 0x11,
-  0x41, 0x57, 0x59, 0x53, 0x09, 0x07, 0xbc, 0xde, 0xa2, 0xe0, 0x0a, 0xe0,
-  0xdf, 0x55, 0x48, 0x2c, 0x8c, 0xf6, 0x9e, 0xef, 0x3e, 0xdf, 0x26, 0x2e,
-  0xf2, 0x64, 0xb4, 0x17, 0x22, 0xac, 0xd3, 0x11, 0xa3, 0x31, 0x34, 0x2f,
-  0x4f, 0x20, 0xf0, 0x78, 0xd1, 0x8d, 0x39, 0x60, 0x1e, 0x96, 0xd0, 0x55,
-  0xf9, 0xde, 0x27, 0x2a, 0xc4, 0x8c, 0xa9, 0xe3, 0xf2, 0x0b, 0x5a, 0x79,
-  0x21, 0xa6, 0xa3, 0xb2, 0x40, 0xc3, 0xa3, 0x51, 0xc7, 0xc0, 0x4a, 0xea,
-  0x63, 0x4f, 0x52, 0xba, 0xf9, 0xab, 0x7c, 0xa5, 0xc8, 0x71, 0xec, 0xee,
-  0x70, 0xc5, 0x85, 0x38, 0x3b, 0x24, 0xef, 0x2c, 0xfa, 0x08, 0x00, 0x16,
-  0x57, 0x68, 0xc2, 0x85, 0x47, 0x04, 0x2e, 0x6e, 0xa4, 0x32, 0xa4, 0x52,
-  0x24, 0x01, 0x25, 0x57, 0xf8, 0x56, 0x9e, 0xde, 0x37, 0xef, 0x91, 0x6f,
-  0x88, 0x3c, 0x6f, 0x59, 0x64, 0x8f, 0xed, 0x86, 0x92, 0x64, 0x73, 0x71,
-  0x91, 0xc6, 0xb2, 0x18, 0x1e, 0xe5, 0x57, 0x3f, 0x90, 0x50, 0xf9, 0xae,
-  0xb2, 0x96, 0xb5, 0xac, 0x8d, 0x51, 0x33, 0x30, 0x44, 0xb0, 0x40, 0x18,
-  0x26, 0x97, 0x33, 0xa8, 0xc5, 0x15, 0x28, 0x41, 0x26, 0xe0, 0x0b, 0x0f,
-  0xe5, 0x96, 0x3c, 0x54, 0x1d, 0x4f, 0x91, 0x76, 0xfe, 0x07, 0x92, 0xc5,
-  0xde, 0xff, 0x4f, 0x16, 0xff, 0x44, 0xb2, 0x78, 0xd1, 0x45, 0x16, 0x4f,
-  0xfe, 0x07, 0x92, 0xc5, 0x93, 0xff, 0x9f, 0x2c, 0xfe, 0x79, 0x64, 0xb1,
-  0xf7, 0xbc, 0x9e, 0x1e, 0x07, 0x7d, 0x92, 0x2e, 0x39, 0x53, 0x2b, 0x5b,
-  0x28, 0xe8, 0xa0, 0x0c, 0x5d, 0xba, 0x50, 0xd0, 0x89, 0x2c, 0x99, 0x29,
-  0x54, 0x49, 0x55, 0x60, 0x2f, 0x3d, 0x90, 0x5e, 0xdb, 0x22, 0xc1, 0x70,
-  0x9c, 0xf1, 0x7c, 0x14, 0x9d, 0xb9, 0xd7, 0x90, 0xe3, 0xc4, 0xe9, 0xbe,
-  0x88, 0xb2, 0x98, 0x27, 0x97, 0xd8, 0x02, 0xc8, 0x29, 0x03, 0x7c, 0x09,
-  0x31, 0x8a, 0xad, 0x46, 0xc3, 0x56, 0x76, 0x14, 0xbf, 0x22, 0x81, 0x0f,
-  0x68, 0x85, 0x15, 0xd0, 0xd8, 0xa7, 0xb3, 0x58, 0x0e, 0x65, 0x9f, 0x64,
-  0xa9, 0xfe, 0x20, 0x0a, 0xab, 0x14, 0x71, 0xee, 0x5d, 0xbb, 0x5e, 0xd2,
-  0x47, 0x71, 0xea, 0xfd, 0x2d, 0x29, 0xf2, 0xc8, 0xf2, 0xfa, 0x15, 0x8b,
-  0x0d, 0x85, 0xc5, 0x4c, 0x4c, 0xf0, 0x1f, 0x72, 0xbf, 0x2d, 0x2d, 0xe3,
-  0x8f, 0xa8, 0xb7, 0x28, 0xf0, 0x7b, 0x0c, 0xf3, 0xe1, 0xd2, 0x6b, 0x32,
-  0x16, 0xb5, 0x52, 0x33, 0xba, 0xf9, 0x95, 0x33, 0x91, 0x18, 0xd1, 0xfb,
-  0xad, 0x73, 0xc0, 0x42, 0x0b, 0x1b, 0x0e, 0xc2, 0xc8, 0x19, 0xa7, 0x6b,
-  0x5e, 0x0a, 0x00, 0x91, 0x0c, 0xc7, 0x95, 0x13, 0x19, 0x75, 0xc8, 0xe9,
-  0xaf, 0x13, 0x36, 0x6d, 0x87, 0x03, 0x1a, 0x40, 0x6d, 0xbe, 0x55, 0xcd,
-  0xdf, 0x85, 0xc8, 0xf9, 0x40, 0x17, 0x3f, 0xc4, 0xf6, 0x90, 0xea, 0x63,
-  0xae, 0x3a, 0xa2, 0xe5, 0x5e, 0xb9, 0x65, 0x30, 0x47, 0x70, 0xb8, 0x18,
-  0x9b, 0x48, 0xc7, 0x31, 0xb7, 0x18, 0xba, 0xfc, 0x94, 0x65, 0x80, 0xc9,
-  0x04, 0x4a, 0x7b, 0xb9, 0x9a, 0xfc, 0x45, 0x35, 0x42, 0x1a, 0x72, 0x0c,
-  0xf4, 0xba, 0x5a, 0x9d, 0x4c, 0xa9, 0x1a, 0xb3, 0x9a, 0xa8, 0x17, 0xa7,
-  0xdd, 0x1c, 0x7d, 0x08, 0x8f, 0x9d, 0xab, 0x5c, 0xa3, 0x74, 0xa6, 0x01,
-  0x3f, 0x3c, 0xa6, 0xd6, 0xa4, 0x82, 0xa8, 0x95, 0xd6, 0xbe, 0xdb, 0x79,
-  0x62, 0x8d, 0xa1, 0xd4, 0xda, 0x2c, 0xe1, 0x66, 0xb9, 0xd5, 0x54, 0x21,
-  0xd6, 0xe2, 0x73, 0xf8, 0xf1, 0xb5, 0x6d, 0x11, 0xb9, 0x0e, 0xd8, 0x8b,
-  0x5a, 0x0e, 0xfe, 0xc8, 0x3f, 0xba, 0x15, 0xa6, 0x1a, 0xf8, 0xb1, 0x05,
-  0xf3, 0xf1, 0xe3, 0x38, 0x1b, 0x78, 0x7d, 0x5d, 0x07, 0xaf, 0xf8, 0x5b,
-  0xe9, 0xe1, 0xe1, 0xb6, 0xe1, 0x27, 0xfd, 0x05, 0x1d, 0xbc, 0xcf, 0x24,
-  0x6d, 0x3e, 0xe4, 0x10, 0x4b, 0x05, 0xe2, 0x61, 0x76, 0x77, 0x17, 0x17,
-  0x99, 0xc4, 0xe2, 0x85, 0x85, 0xdf, 0x39, 0x05, 0x6a, 0x09, 0x23, 0x4d,
-  0x0b, 0xeb, 0xf6, 0x92, 0x0d, 0x55, 0xb0, 0x56, 0xe5, 0x99, 0xa5, 0x3b,
-  0x2a, 0xae, 0xa6, 0xc5, 0xad, 0x2d, 0xf3, 0xca, 0xfc, 0x75, 0xd1, 0x8c,
-  0x75, 0x8f, 0x02, 0xf7, 0x43, 0x07, 0x20, 0xbb, 0x6d, 0x84, 0xaf, 0x40,
-  0xc6, 0x2d, 0xc3, 0x04, 0xb3, 0x5a, 0xa2, 0xe4, 0x83, 0xe2, 0x7d, 0x88,
-  0x54, 0x1f, 0xfb, 0xdd, 0x93, 0xae, 0x9b, 0x11, 0x2e, 0x08, 0xc0, 0xc0,
-  0x85, 0xe7, 0xf0, 0x41, 0x6f, 0xf3, 0x14, 0xf0, 0xb7, 0x48, 0xe0, 0x1c,
-  0xfd, 0xba, 0x3a, 0x17, 0x83, 0xa0, 0x7c, 0x5d, 0x5c, 0x86, 0x69, 0x14,
-  0xed, 0xf0, 0x32, 0xaf, 0x76, 0xc7, 0x02, 0x00, 0x40, 0x54, 0x9c, 0xc5,
-  0x95, 0x1d, 0x31, 0xbf, 0x0d, 0x18, 0xa6, 0x14, 0x6b, 0xe1, 0xb4, 0x8e,
-  0x69, 0xd2, 0x8e, 0xd8, 0xf1, 0x15, 0x0d, 0x1e, 0x83, 0x93, 0xd8, 0x6b,
-  0xdd, 0x27, 0x92, 0x70, 0xfd, 0xe8, 0xad, 0x12, 0x42, 0x04, 0x1a, 0x0b,
-  0x48, 0x66, 0x21, 0xb5, 0x78, 0x48, 0x4a, 0xbb, 0x1a, 0x25, 0xe7, 0x6a,
-  0x0d, 0x25, 0x5f, 0xa2, 0xf0, 0xec, 0x5d, 0xc8, 0x57, 0x0b, 0xb6, 0x0c,
-  0x2a, 0xd0, 0x4b, 0x07, 0x87, 0x7a, 0x64, 0x2a, 0x1f, 0xef, 0x87, 0x71,
-  0x76, 0xcf, 0x3e, 0xb6, 0x07, 0xae, 0x45, 0x66, 0xe4, 0x6c, 0xf3, 0x60,
-  0x98, 0x91, 0x54, 0xea, 0xdb, 0x34, 0x22, 0x9b, 0x2d, 0xd4, 0x4b, 0x51,
-  0x96, 0x17, 0xab, 0x96, 0xf1, 0x0f, 0x4f, 0xd2, 0x36, 0x99, 0x79, 0xdd,
-  0x63, 0xe2, 0xa9, 0xf3, 0xc7, 0xca, 0x48, 0x42, 0x79, 0x57, 0xcc, 0x2f,
-  0x20, 0x11, 0xc0, 0xef, 0xd3, 0x6d, 0x69, 0xdf, 0x76, 0xf9, 0x8a, 0x05,
-  0x57, 0x86, 0x1a, 0x12, 0xaf, 0x5b, 0x36, 0x40, 0xbf, 0x9e, 0x74, 0x4d,
-  0x19, 0x65, 0x62, 0x1f, 0x91, 0x03, 0xb8, 0xff, 0xb5, 0x20, 0x55, 0xc1,
-  0x4c, 0x6d, 0x66, 0xeb, 0xfc, 0x26, 0x32, 0x4b, 0x9d, 0xe4, 0x7b, 0x49,
-  0x87, 0x41, 0x8b, 0x80, 0x81, 0x65, 0x36, 0x63, 0x9e, 0x31, 0xed, 0x49,
-  0x20, 0x90, 0x5b, 0x13, 0x86, 0xf1, 0xd7, 0x40, 0x7b, 0xe5, 0x49, 0x77,
-  0x22, 0x8c, 0xfb, 0x76, 0xef, 0x4a, 0x07, 0x26, 0x3e, 0xf8, 0x36, 0x3a,
-  0xe2, 0x81, 0xa5, 0xf5, 0xb4, 0x05, 0x59, 0xa3, 0x19, 0xa2, 0xc2, 0x1e,
-  0x25, 0x6b, 0x0c, 0x5c, 0x22, 0xc8, 0x3a, 0xd7, 0xe8, 0x57, 0x2f, 0x92,
-  0xf4, 0xdf, 0xb1, 0x4a, 0xda, 0x59, 0x27, 0x14, 0x6e, 0x50, 0xd2, 0xbd,
-  0x3d, 0xa3, 0x75, 0xe9, 0x18, 0x6b, 0x26, 0xe5, 0xd3, 0x29, 0x7c, 0x3e,
-  0x45, 0x0b, 0x91, 0xe7, 0xae, 0xa3, 0xec, 0x55, 0x38, 0xe1, 0x07, 0xa7,
-  0xe8, 0x06, 0x54, 0x9b, 0x65, 0x53, 0x08, 0xaf, 0x8f, 0xc5, 0x0d, 0x45,
-  0x91, 0xb2, 0xc3, 0x19, 0x3f, 0xac, 0x35, 0xbb, 0xc8, 0xbb, 0x4f, 0x9c,
-  0x7e, 0x47, 0xec, 0x67, 0xf4, 0xdf, 0xdc, 0x53, 0x44, 0x99, 0xd6, 0x76,
-  0x14, 0xbd, 0xd4, 0xa6, 0xf2, 0xa0, 0x8f, 0x53, 0xa7, 0xb1, 0x3b, 0xda,
-  0x01, 0xef, 0xfd, 0x78, 0x8f, 0x48, 0xab, 0x7d, 0xbe, 0xc5, 0x7e, 0x6e,
-  0xb2, 0xe0, 0xf7, 0xca, 0x74, 0xbd, 0x41, 0x1f, 0xf3, 0xe2, 0x77, 0x75,
-  0x50, 0xae, 0x46, 0x66, 0x08, 0x7f, 0xe8, 0x8a, 0x64, 0xac, 0xaf, 0x47,
-  0x02, 0xe4, 0x09, 0x2b, 0x47, 0xc2, 0x59, 0xe0, 0x78, 0x7f, 0x77, 0xe7,
-  0xf3, 0x9d, 0x6e, 0xf0, 0x4f, 0x48, 0x14, 0x16, 0xf1, 0x32, 0x4d, 0x82,
-  0xca, 0x98, 0xa9, 0x2f, 0x8b, 0x14, 0xf8, 0xd1, 0xf4, 0xca, 0x64, 0x37,
-  0x5a, 0xd7, 0x3d, 0x00, 0xa7, 0x5a, 0xaa, 0xe6, 0x66, 0xb5, 0xd1, 0x3a,
-  0x88, 0x32, 0x73, 0x3f, 0x39, 0xbf, 0x8f, 0x73, 0x2e, 0x75, 0x24, 0x55,
-  0x7b, 0x47, 0x7b, 0x6d, 0x6d, 0x4c, 0x94, 0x77, 0xe1, 0x86, 0x21, 0x8f,
-  0xd1, 0x07, 0x77, 0x6b, 0x9b, 0xb2, 0x9a, 0x3c, 0x50, 0xf2, 0xe7, 0x1b,
-  0x3a, 0x37, 0x67, 0x12, 0xb2, 0x2a, 0x45, 0x61, 0x3e, 0xb1, 0xe0, 0x0f,
-  0x5e, 0x69, 0x55, 0x85, 0x5a, 0x57, 0xed, 0xe7, 0x37, 0xae, 0x87, 0xb4,
-  0x79, 0x80, 0x18, 0x9d, 0xcf, 0x46, 0x4f, 0x5e, 0x70, 0x9e, 0xb9, 0x54,
-  0xed, 0x0d, 0xd6, 0x9e, 0x0e, 0x4a, 0xce, 0xc8, 0x68, 0x92, 0x95, 0xad,
-  0x31, 0x5a, 0xb2, 0xfa, 0xeb, 0xe6, 0xe1, 0xd5, 0x91, 0x65, 0xa3, 0x06,
-  0x0f, 0x2a, 0x07, 0xc0, 0xcd, 0x54, 0x4f, 0x4f, 0xe2, 0x59, 0x5c, 0xb1,
-  0xb7, 0x6d, 0xd8, 0xce, 0xe8, 0x10, 0x4b, 0xaf, 0x2a, 0xe7, 0xb3, 0x51,
-  0x33, 0x1d, 0x41, 0x63, 0x86, 0xb9, 0x07, 0x2b, 0xd6, 0x1d, 0xc4, 0xd9,
-  0xb6, 0xb0, 0x86, 0x27, 0x5e, 0x1f, 0x9e, 0xa0, 0x3a, 0x28, 0x97, 0x51,
-  0xb4, 0x9c, 0x7a, 0xae, 0x0c, 0xb6, 0xbc, 0x07, 0x04, 0x69, 0x3a, 0x29,
-  0xcb, 0xeb, 0x3d, 0xa2, 0x87, 0xbd, 0xd1, 0xe7, 0xac, 0x4f, 0x8a, 0xcd,
-  0x7b, 0x0d, 0xf8, 0x98, 0x42, 0x66, 0x34, 0x5a, 0x3b, 0x5d, 0x26, 0xd9,
-  0x78, 0x7c, 0x12, 0x66, 0xe4, 0xff, 0xd5, 0x76, 0xd0, 0x2a, 0xdb, 0xfa,
-  0x00, 0x5b, 0x5f, 0xf1, 0x35, 0x0f, 0x54, 0x1a, 0x2d, 0x37, 0x6c, 0x01,
-  0x6c, 0x52, 0x30, 0xaf, 0xc5, 0x97, 0x83, 0xd2, 0x92, 0xa1, 0x47, 0x1e,
-  0x65, 0x98, 0x35, 0x30, 0x47, 0x31, 0xea, 0x11, 0xf5, 0x13, 0x16, 0x1c,
-  0x6d, 0x23, 0xaa, 0xd6, 0xb3, 0xdf, 0x1b, 0xf5, 0x28, 0x35, 0xde, 0x2d,
-  0x89, 0x0b, 0x92, 0x6a, 0x39, 0x16, 0x30, 0x38, 0x2d, 0xff, 0x8b, 0x9b,
-  0x45, 0xb5, 0x59, 0x5f, 0x73, 0xa2, 0xc3, 0xf3, 0xba, 0x3d, 0x86, 0xfb,
-  0x75, 0xac, 0x05, 0x26, 0xe2, 0x62, 0x92, 0x56, 0x45, 0xac, 0xd5, 0x70,
-  0xb4, 0x42, 0x47, 0xe0, 0x16, 0xe6, 0x34, 0x70, 0x24, 0x22, 0xf0, 0x6b,
-  0x9d, 0xce, 0x48, 0x12, 0x1b, 0xfe, 0x17, 0x7a, 0xd5, 0x06, 0x44, 0x76,
-  0x44, 0x38, 0xc2, 0x57, 0x47, 0x6f, 0x4e, 0xcf, 0x8f, 0xea, 0x48, 0x64,
-  0x52, 0x09, 0x00, 0x91, 0x05, 0xcd, 0xd1, 0xfd, 0x05, 0xf9, 0x71, 0x0e,
-  0x3f, 0xc5, 0x2a, 0x0a, 0x9c, 0x7d, 0xff, 0x3a, 0x28, 0x81, 0x61, 0x75,
-  0x63, 0x02, 0x84, 0x2b, 0x25, 0xa7, 0x56, 0x76, 0x28, 0x11, 0xe3, 0x96,
-  0x87, 0xa1, 0x76, 0xc3, 0x13, 0xf0, 0x5f, 0x44, 0xa7, 0x48, 0x67, 0xb1,
-  0xe4, 0xe6, 0x94, 0x25, 0x1b, 0x88, 0x5c, 0xb3, 0x2d, 0xbf, 0x70, 0xc2,
-  0xd0, 0xd2, 0x9c, 0xe6, 0x65, 0x17, 0x0b, 0x07, 0x9e, 0x72, 0x2c, 0xea,
-  0x28, 0x72, 0x9d, 0xf8, 0x5e, 0x10, 0x9b, 0x2c, 0x01, 0x39, 0xe8, 0xa5,
-  0xcb, 0xa4, 0xc6, 0xf1, 0x7c, 0x12, 0x7f, 0x28, 0xbc, 0xba, 0x15, 0x7c,
-  0x38, 0x88, 0xfe, 0x22, 0xf5, 0x87, 0x2f, 0x05, 0x27, 0xd9, 0xaf, 0x63,
-  0x87, 0x70, 0x40, 0xdd, 0x6e, 0x96, 0xc4, 0xc2, 0xfd, 0x48, 0xdd, 0xb2,
-  0xe9, 0x80, 0xfb, 0x7f, 0xec, 0x47, 0x6a, 0x0c, 0xc1, 0x6d, 0x24, 0xd9,
-  0x76, 0x6b, 0x32, 0x27, 0x11, 0x08, 0x2a, 0x00, 0x10, 0x5b, 0x8f, 0xc5,
-  0x50, 0xd9, 0xac, 0xad, 0x0a, 0x40, 0xb7, 0xd7, 0xda, 0xea, 0x84, 0x9a,
-  0x73, 0xc9, 0x0a, 0x5f, 0xea, 0x4d, 0x60, 0x8d, 0x0c, 0x02, 0x90, 0x6a,
-  0x04, 0x51, 0xb4, 0xb8, 0x52, 0x18, 0x3d, 0x83, 0x12, 0x11, 0x5a, 0xf0,
-  0xeb, 0xcf, 0x96, 0x64, 0x09, 0xb8, 0xb2, 0xf2, 0x3e, 0xab, 0xe0, 0xcb,
-  0x07, 0x17, 0x9b, 0xe6, 0x05, 0xa2, 0x1f, 0xda, 0x64, 0xec, 0xe9, 0xb6,
-  0x84, 0xe5, 0xf6, 0xc5, 0xb3, 0x17, 0x7c, 0xec, 0x10, 0x22, 0xa4, 0x40,
-  0x08, 0x9a, 0x3a, 0x82, 0x62, 0x07, 0x3a, 0x62, 0x33, 0x84, 0xb6, 0xa0,
-  0x7d, 0x74, 0xfb, 0xcd, 0xc8, 0x37, 0x49, 0x18, 0x55, 0x01, 0x24, 0x3a,
-  0x0e, 0x9a, 0x1a, 0xad, 0x55, 0x63, 0xd7, 0x05, 0xda, 0xe0, 0x66, 0xd1,
-  0x82, 0x46, 0xb4, 0x0b, 0xf1, 0x8d, 0x26, 0xbf, 0xe9, 0x79, 0x90, 0x76,
-  0x6b, 0xbb, 0xbf, 0x6e, 0x74, 0x4a, 0x0e, 0x1c, 0xb5, 0x49, 0x84, 0xc9,
-  0x1e, 0xbf, 0xcd, 0x3f, 0x6c, 0x39, 0xd4, 0x2a, 0x2d, 0x08, 0xc0, 0x78,
-  0xb4, 0xab, 0xa4, 0x86, 0xb5, 0xb7, 0xae, 0xb9, 0x4b, 0x30, 0x2c, 0x5a,
-  0xbd, 0x66, 0x6e, 0xa4, 0x54, 0x1e, 0xad, 0xf2, 0x25, 0x0b, 0x33, 0xc2,
-  0x67, 0x75, 0xef, 0xdb, 0xe1, 0xe4, 0x3c, 0x07, 0xa4, 0xe1, 0x4c, 0xa4,
-  0x2e, 0x81, 0xc9, 0x0b, 0x24, 0xe3, 0x65, 0x08, 0xa7, 0x51, 0x5a, 0xd4,
-  0x3b, 0x12, 0x01, 0x05, 0x34, 0x57, 0x36, 0x99, 0x76, 0xb0, 0x26, 0xe1,
-  0x83, 0xc1, 0x69, 0xd4, 0x3b, 0xa2, 0x51, 0x4c, 0x12, 0xa7, 0x59, 0x19,
-  0x9e, 0xe3, 0x66, 0x6f, 0xda, 0x20, 0x01, 0x52, 0xae, 0x5d, 0xc1, 0x51,
-  0xd1, 0x36, 0x97, 0x57, 0x23, 0x01, 0x77, 0x58, 0x56, 0xf7, 0x62, 0x47,
-  0x49, 0x16, 0x0c, 0x3f, 0x83, 0x1a, 0xe2, 0x88, 0x2c, 0xd3, 0xba, 0x59,
-  0xc8, 0x46, 0x1b, 0xb6, 0x2b, 0xda, 0x0b, 0x09, 0x44, 0x6f, 0x9c, 0x41,
-  0x5f, 0xad, 0x93, 0x52, 0x09, 0xea, 0x12, 0xc9, 0x69, 0x0e, 0x2a, 0x4b,
-  0x56, 0xe7, 0xaf, 0xc6, 0x65, 0x3b, 0x29, 0xae, 0x0d, 0x75, 0x74, 0x7d,
-  0x55, 0x2c, 0x05, 0xa6, 0x24, 0xea, 0xc0, 0x3d, 0x08, 0x04, 0x49, 0x79,
-  0xd2, 0x78, 0x05, 0x0a, 0x76, 0x42, 0xd0, 0xc6, 0xab, 0xc7, 0xaf, 0x6b,
-  0xf0, 0x56, 0x12, 0xe7, 0x4e, 0x3b, 0xdd, 0xdd, 0x9c, 0x8f, 0xf3, 0x96,
-  0xf0, 0x27, 0x7f, 0x9f, 0xb8, 0xd6, 0xbc, 0xdc, 0x3c, 0xb9, 0xf7, 0xdf,
-  0x74, 0x37, 0xa7, 0x6d, 0x88, 0x2f, 0x43, 0x5a, 0xb0, 0x66, 0x41, 0x2b,
-  0x06, 0x0a, 0xcc, 0xd4, 0xc0, 0xb8, 0x8e, 0xd6, 0x49, 0x3b, 0x7a, 0xf1,
-  0x7a, 0x91, 0xcf, 0x24, 0xb2, 0xe6, 0xb1, 0xb5, 0xe0, 0x07, 0x6d, 0x2d,
-  0xd4, 0x3a, 0x5c, 0x86, 0xf3, 0x42, 0x23, 0x44, 0xa5, 0x4c, 0x79, 0xca,
-  0x07, 0xba, 0x9b, 0xf3, 0x13, 0x95, 0xb2, 0x91, 0xdc, 0x3c, 0x5e, 0x0e,
-  0xa7, 0x90, 0x45, 0xf9, 0xb4, 0x0a, 0x66, 0xc0, 0x0f, 0x74, 0x37, 0xa7,
-  0xee, 0xfe, 0xf6, 0xcc, 0xd8, 0x52, 0x88, 0xd8, 0xdf, 0xc7, 0x66, 0xc6,
-  0x0f, 0xb6, 0x76, 0x99, 0x3e, 0x14, 0x1e, 0xde, 0xd8, 0x62, 0xd9, 0x9c,
-  0x35, 0x41, 0x26, 0xb5, 0x0d, 0xb6, 0x1d, 0xc6, 0x18, 0xba, 0x36, 0x58,
-  0x43, 0x99, 0xdb, 0x8c, 0xdc, 0x23, 0xbf, 0xc9, 0xea, 0xb8, 0x07, 0xd7,
-  0x6e, 0xb0, 0xf6, 0xd1, 0x5a, 0x85, 0x79, 0xa6, 0x05, 0x48, 0x3e, 0x08,
-  0xaa, 0x06, 0xc3, 0x7c, 0x56, 0x1f, 0x1e, 0x5e, 0x90, 0x79, 0x66, 0x55,
-  0xd1, 0x80, 0xe0, 0xe4, 0x78, 0x85, 0x26, 0xad, 0xc4, 0xf5, 0x7a, 0x69,
-  0x8a, 0xca, 0xb5, 0x86, 0xec, 0x7d, 0x7f, 0x91, 0xaf, 0x3f, 0x45, 0xd7,
-  0x68, 0x9a, 0x55, 0x16, 0x77, 0x0d, 0x1e, 0x13, 0x8c, 0xb1, 0xab, 0x4c,
-  0x51, 0x90, 0x56, 0xd7, 0x9a, 0xe2, 0xe2, 0x86, 0x4d, 0x83, 0x4e, 0x34,
-  0xf8, 0xb0, 0x3e, 0x28, 0x09, 0x84, 0x86, 0xa7, 0x6d, 0xb7, 0x65, 0x4a,
-  0xe6, 0xbd, 0xf3, 0xb9, 0x0d, 0xfe, 0x38, 0x3f, 0x40, 0xc7, 0xf5, 0x2e,
-  0xdd, 0x99, 0x6c, 0x8e, 0x6f, 0x79, 0x37, 0xb3, 0xce, 0xf9, 0x57, 0xeb,
-  0x3a, 0x2c, 0x0e, 0xee, 0x50, 0x51, 0x58, 0x74, 0x95, 0xc6, 0x2e, 0x2d,
-  0xff, 0x63, 0xcd, 0x52, 0x74, 0x27, 0x65, 0xb4, 0x3a, 0xa7, 0xc7, 0xb8,
-  0x39, 0x2b, 0x1b, 0x80, 0xed, 0x58, 0xbf, 0x38, 0xfa, 0xb4, 0x1f, 0xa2,
-  0xf0, 0xf7, 0x10, 0x1e, 0xd0, 0xaf, 0x91, 0x1d, 0x87, 0x07, 0x18, 0x9e,
-  0x76, 0xdb, 0x64, 0x79, 0xb3, 0x84, 0x4b, 0x32, 0x0a, 0x2d, 0x20, 0x71,
-  0xe7, 0xf1, 0x93, 0x25, 0x23, 0x5f, 0xbb, 0xc6, 0xc5, 0xe2, 0x91, 0x43,
-  0x4e, 0x0f, 0xf8, 0x59, 0x71, 0xd8, 0x6e, 0x30, 0xab, 0xd6, 0xb9, 0x94,
-  0xb9, 0x2e, 0xd7, 0xac, 0xfc, 0xba, 0x11, 0xd4, 0xa8, 0x70, 0xfd, 0x48,
-  0xf4, 0xc9, 0xce, 0xe1, 0xf8, 0xc5, 0x65, 0x3f, 0xd2, 0xbd, 0x1f, 0x59,
-  0x77, 0x73, 0x3a, 0x5c, 0xff, 0x96, 0x2e, 0xcf, 0xc0, 0x41, 0xd5, 0xa8,
-  0xe9, 0x84, 0xb5, 0xe6, 0x36, 0x6d, 0xd8, 0x01, 0xff, 0x45, 0x0c, 0x82,
-  0xb5, 0xb5, 0x79, 0x70, 0x08, 0x87, 0x05, 0xf2, 0x7a, 0x10, 0xc9, 0xf5,
-  0x12, 0x3f, 0x3a, 0x13, 0x18, 0xb6, 0x4d, 0xc3, 0xda, 0x66, 0x78, 0x40,
-  0x8e, 0x72, 0x85, 0xdb, 0x96, 0xb9, 0x09, 0x83, 0x3d, 0x6b, 0x28, 0xd8,
-  0x26, 0x87, 0x0d, 0x4a, 0xbc, 0x3a, 0x4a, 0xa6, 0x71, 0xc6, 0x64, 0xeb,
-  0x52, 0xa7, 0xa5, 0xd9, 0xb2, 0x54, 0xac, 0x58, 0xec, 0x75, 0xdb, 0xbb,
-  0xa3, 0xdd, 0x41, 0x54, 0xd7, 0xc9, 0x4c, 0xb8, 0xe6, 0xa2, 0xf7, 0x9a,
-  0x90, 0xc6, 0x5d, 0x37, 0xed, 0x0c, 0xe7, 0xdc, 0x71, 0x69, 0x72, 0xa6,
-  0x27, 0x05, 0xf8, 0xd7, 0xbd, 0x20, 0xcf, 0x98, 0xcd, 0xad, 0x05, 0xdc,
-  0x19, 0x3e, 0x7d, 0xf1, 0xa2, 0x76, 0xa5, 0x85, 0x9a, 0xf3, 0xb3, 0x9d,
-  0x1d, 0x01, 0xb2, 0x6e, 0xbe, 0x46, 0x5f, 0x0c, 0x5f, 0xe0, 0xc5, 0xfa,
-  0x6b, 0x52, 0x44, 0x61, 0xfd, 0x7b, 0x43, 0xfe, 0xa6, 0xa3, 0x3b, 0xd8,
-  0x53, 0xd6, 0xbe, 0xf5, 0x82, 0xbb, 0xeb, 0x78, 0x0b, 0x0f, 0xcb, 0x32,
-  0xe6, 0x97, 0x97, 0x0c, 0xe4, 0xca, 0x4f, 0x4a, 0xe5, 0xf7, 0xbc, 0xb8,
-  0x8b, 0x8b, 0x59, 0x7b, 0xba, 0x3b, 0x83, 0xe1, 0xee, 0xba, 0xe9, 0xc2,
-  0x26, 0xc0, 0x23, 0xc1, 0x7e, 0xb2, 0x06, 0x45, 0xc2, 0xf3, 0xe6, 0x37,
-  0x5b, 0x5d, 0xb3, 0xff, 0x6c, 0x67, 0x67, 0xf0, 0x9c, 0x7f, 0xbe, 0x78,
-  0xb1, 0xd6, 0x41, 0xe8, 0xfb, 0x78, 0x62, 0x53, 0xab, 0x8d, 0x96, 0xda,
-  0xe9, 0x68, 0x7d, 0x97, 0x5a, 0xdd, 0x7d, 0xf1, 0x62, 0xc0, 0xbd, 0x3c,
-  0xfb, 0xa4, 0xd6, 0xab, 0xbb, 0xdc, 0x5b, 0xb6, 0xf8, 0x75, 0x4f, 0x8f,
-  0x65, 0x63, 0x06, 0xac, 0x0d, 0xbc, 0x02, 0xba, 0x77, 0x60, 0xe8, 0xf1,
-  0x11, 0xf6, 0x61, 0x20, 0x34, 0xa2, 0x34, 0x96, 0xac, 0x45, 0x8a, 0x03,
-  0x26, 0x36, 0x85, 0x25, 0xf6, 0x21, 0x2e, 0xe6, 0x4c, 0xf1, 0x49, 0x70,
-  0x92, 0xf9, 0x38, 0x4b, 0xaf, 0xd2, 0xca, 0xa3, 0x35, 0x94, 0xd1, 0x26,
-  0xd1, 0xcb, 0x16, 0xac, 0x07, 0x82, 0x42, 0xad, 0xce, 0xe5, 0x3e, 0xa2,
-  0x31, 0x05, 0x47, 0xae, 0xcf, 0xda, 0x44, 0x9f, 0xb6, 0x22, 0x99, 0xcf,
-  0x9c, 0x75, 0x49, 0x2f, 0x11, 0x79, 0x6e, 0x28, 0x4f, 0xc8, 0x41, 0x83,
-  0x0a, 0x28, 0xb8, 0x85, 0x31, 0x62, 0x61, 0x1a, 0x7d, 0x46, 0x0e, 0x01,
-  0x3c, 0xc8, 0xba, 0x10, 0x4c, 0x40, 0x09, 0xbf, 0xf4, 0x53, 0xed, 0x97,
-  0x4d, 0x14, 0xcb, 0xa4, 0x5e, 0xc9, 0x7c, 0x96, 0x58, 0x59, 0xa9, 0x3a,
-  0x70, 0xa1, 0x7b, 0x5d, 0x4c, 0x38, 0xab, 0xa2, 0x81, 0xbd, 0xf4, 0x67,
-  0x9f, 0xe5, 0x02, 0x3f, 0x31, 0x2b, 0xb4, 0x77, 0xb1, 0x65, 0xd7, 0x20,
-  0xab, 0xce, 0xce, 0xbe, 0xab, 0x17, 0x3b, 0xcb, 0x35, 0x9a, 0x08, 0x00,
-  0x71, 0xd8, 0x20, 0x6b, 0xce, 0xaa, 0x7f, 0xa9, 0xab, 0x79, 0x86, 0x78,
-  0x1e, 0x83, 0x5f, 0x13, 0x33, 0xbb, 0x24, 0xe9, 0x04, 0x41, 0xb8, 0x52,
-  0xd1, 0x4d, 0xa7, 0x2c, 0xb5, 0x59, 0x36, 0x1a, 0x09, 0x0f, 0x57, 0x49,
-  0x15, 0x94, 0x39, 0xb1, 0x14, 0x6f, 0x3f, 0x0b, 0x43, 0x46, 0x07, 0x4b,
-  0x92, 0xc5, 0xf7, 0x35, 0xca, 0x04, 0xb7, 0x4c, 0xbd, 0xc2, 0x52, 0x34,
-  0x06, 0xd8, 0x84, 0xb5, 0x1d, 0xe3, 0xcd, 0x72, 0x4c, 0x90, 0x76, 0x8d,
-  0xe8, 0x30, 0x8c, 0x3a, 0x11, 0xfa, 0x0a, 0xcc, 0x05, 0x56, 0x55, 0x28,
-  0x97, 0x18, 0x8a, 0xad, 0x11, 0xc6, 0x80, 0x72, 0x1a, 0xd8, 0x09, 0xee,
-  0x36, 0xdc, 0xd2, 0xe4, 0x63, 0x85, 0x12, 0x60, 0x78, 0xcc, 0x6e, 0xa5,
-  0xf1, 0xf1, 0xff, 0x3e, 0x1a, 0x85, 0x91, 0xd1, 0xff, 0xa0, 0x18, 0xd3,
-  0xf3, 0x20, 0x0b, 0x94, 0x5f, 0xeb, 0x4a, 0x72, 0x09, 0x40, 0xae, 0x1b,
-  0xf5, 0x44, 0x6d, 0x6f, 0xd8, 0x33, 0xcb, 0x14, 0x83, 0xac, 0x63, 0x25,
-  0xcc, 0xae, 0x6a, 0x2b, 0xb4, 0x8c, 0x8b, 0x65, 0xe4, 0xad, 0x12, 0xe6,
-  0xd5, 0x13, 0x9b, 0xaf, 0x47, 0x56, 0x15, 0x73, 0x69, 0xec, 0x63, 0x71,
-  0xb4, 0xac, 0x6b, 0x53, 0x98, 0xf6, 0x69, 0xcd, 0xb2, 0xed, 0x5c, 0x09,
-  0x17, 0x99, 0xc3, 0xbc, 0x00, 0xdc, 0x57, 0x68, 0xa4, 0xe7, 0x9b, 0x98,
-  0x74, 0x52, 0x3c, 0xde, 0x09, 0x3b, 0x20, 0x28, 0x43, 0x61, 0xae, 0xa6,
-  0x13, 0x86, 0x64, 0x86, 0xf3, 0xc4, 0x10, 0x51, 0xe0, 0xd9, 0x0a, 0x6b,
-  0x3e, 0x75, 0xe4, 0x7b, 0x94, 0x74, 0xe1, 0x03, 0x44, 0x91, 0x81, 0xab,
-  0xa4, 0xf3, 0x08, 0x08, 0x86, 0x86, 0x20, 0x22, 0x60, 0x88, 0x65, 0x50,
-  0x4b, 0x57, 0xcd, 0x6b, 0xf2, 0x70, 0xab, 0x62, 0x3a, 0xe3, 0x7a, 0xc0,
-  0xba, 0xc0, 0xf8, 0x0f, 0x3e, 0x5e, 0xbe, 0x6c, 0x17, 0x98, 0x49, 0xae,
-  0x66, 0x43, 0x15, 0x9a, 0xea, 0x67, 0x98, 0x57, 0xe1, 0xce, 0x05, 0x05,
-  0x06, 0xbb, 0x9b, 0x06, 0xb1, 0x2a, 0xf1, 0x5c, 0xcd, 0x16, 0x8c, 0xfd,
-  0x06, 0x77, 0x87, 0xcb, 0xfa, 0x85, 0x09, 0xad, 0x35, 0xd3, 0x0a, 0xd6,
-  0x43, 0xa0, 0xc0, 0xb8, 0x3a, 0x0e, 0xc8, 0xee, 0x45, 0xfe, 0x59, 0x54,
-  0x8b, 0x8f, 0x77, 0xc8, 0x73, 0x0b, 0x18, 0xf8, 0x01, 0x33, 0xd2, 0x74,
-  0xce, 0x52, 0xbf, 0xa8, 0x0e, 0x3f, 0xa0, 0x95, 0xb8, 0x6b, 0x15, 0x35,
-  0xac, 0xf9, 0xb3, 0x83, 0x04, 0x66, 0x0e, 0xa3, 0x79, 0x28, 0x00, 0xe3,
-  0x5a, 0x24, 0x8b, 0x9a, 0xbf, 0x58, 0xbc, 0x00, 0xbc, 0xa6, 0x3c, 0x69,
-  0x97, 0x36, 0x5e, 0x76, 0x5b, 0x6a, 0x67, 0x49, 0x6c, 0x10, 0x1c, 0xb4,
-  0xa7, 0x44, 0xa9, 0xed, 0x24, 0xea, 0xbb, 0xa4, 0x48, 0x3c, 0x26, 0x2d,
-  0xa2, 0xd5, 0xe8, 0xf4, 0x8d, 0xa2, 0x71, 0x4e, 0xcf, 0x77, 0x14, 0x9d,
-  0xb2, 0xfc, 0x91, 0x1a, 0x44, 0x25, 0xc6, 0xe3, 0xab, 0x42, 0x73, 0xb6,
-  0xb4, 0x18, 0x80, 0xeb, 0xf3, 0xed, 0x40, 0xb5, 0x82, 0xa5, 0x96, 0x06,
-  0x6e, 0xb5, 0xc4, 0x07, 0xca, 0x44, 0x61, 0x6c, 0x64, 0x96, 0xd3, 0x1b,
-  0xe6, 0xd1, 0x10, 0x20, 0xfb, 0x00, 0xdc, 0x0a, 0x9a, 0x7b, 0x28, 0x31,
-  0x6e, 0xf7, 0x45, 0x3d, 0xa6, 0x90, 0xeb, 0x9e, 0xcd, 0x89, 0xa1, 0xbf,
-  0x64, 0xf7, 0x23, 0xbc, 0x8f, 0xfb, 0x6b, 0x72, 0xa8, 0xce, 0x1c, 0x80,
-  0xdc, 0x94, 0x86, 0xc0, 0x29, 0x02, 0x9a, 0x2b, 0x22, 0x73, 0xf4, 0x93,
-  0x94, 0x04, 0x16, 0xa1, 0x15, 0x71, 0x47, 0x2e, 0xe3, 0xb4, 0x18, 0xb5,
-  0x7c, 0x9a, 0x0e, 0xf0, 0xd3, 0xa6, 0xc6, 0x92, 0xa2, 0x2b, 0xfb, 0xac,
-  0x55, 0x8e, 0x25, 0x14, 0x75, 0xb3, 0xdc, 0x32, 0x64, 0xd3, 0x35, 0x72,
-  0x7b, 0x2d, 0x1f, 0x49, 0x91, 0xfa, 0x61, 0x6b, 0x70, 0x75, 0x1f, 0x05,
-  0x4b, 0x15, 0x41, 0x49, 0x98, 0xf2, 0x2c, 0xa8, 0x0c, 0xd1, 0x8a, 0x5f,
-  0xb2, 0xba, 0x36, 0x23, 0x41, 0x16, 0xe0, 0xf3, 0xcf, 0x07, 0x8b, 0xfa,
-  0xcf, 0x25, 0xe1, 0x73, 0x3b, 0xa9, 0xa6, 0xdb, 0x02, 0x2d, 0x05, 0x12,
-  0xcf, 0x00, 0xb7, 0xe9, 0xb4, 0x83, 0x56, 0x99, 0xfb, 0x96, 0x83, 0x47,
-  0xcc, 0x0f, 0x41, 0xc9, 0xbb, 0x20, 0x1f, 0x0a, 0x1c, 0xd5, 0x7c, 0xb8,
-  0x1d, 0x06, 0xda, 0x4b, 0x83, 0x69, 0x0a, 0x16, 0xdd, 0x39, 0x3b, 0x0d,
-  0xbe, 0xa9, 0x76, 0x4f, 0xf0, 0x2b, 0xbe, 0xcc, 0x62, 0x07, 0xf5, 0x66,
-  0x49, 0x70, 0xeb, 0xb8, 0x50, 0xbb, 0x3a, 0x38, 0xa3, 0x83, 0x10, 0x0c,
-  0x36, 0xbe, 0xcb, 0xf4, 0xce, 0xa7, 0x07, 0x23, 0x90, 0xb8, 0x39, 0x83,
-  0x47, 0x00, 0x4a, 0xcd, 0x23, 0x00, 0x8c, 0x96, 0xc0, 0xae, 0xd1, 0x55,
-  0x3e, 0xbf, 0x9f, 0xad, 0xce, 0x33, 0xfd, 0xc4, 0x25, 0x48, 0x75, 0x04,
-  0x9e, 0xe9, 0xe6, 0x3e, 0x1c, 0x3c, 0xb4, 0x3b, 0x7a, 0x52, 0x3f, 0x03,
-  0xac, 0x11, 0x76, 0x55, 0x9c, 0x80, 0x10, 0x07, 0x4e, 0x88, 0x22, 0x19,
-  0x88, 0x0d, 0x93, 0x84, 0x1f, 0xb6, 0x30, 0x24, 0x16, 0x26, 0x84, 0x80,
-  0x03, 0x81, 0x13, 0x61, 0x6e, 0xa3, 0xa5, 0x39, 0xda, 0x60, 0x88, 0x81,
-  0xff, 0x88, 0xe3, 0x2c, 0xad, 0xf4, 0x4d, 0xa1, 0xd1, 0x96, 0x5e, 0x27,
-  0x92, 0x39, 0xab, 0xe5, 0x98, 0x78, 0x19, 0x1f, 0x95, 0xd5, 0x72, 0xd4,
-  0xae, 0x87, 0xe1, 0xe2, 0xc5, 0xf4, 0x5d, 0xea, 0x7e, 0x27, 0x4c, 0x3e,
-  0x44, 0xea, 0x8d, 0x46, 0xf2, 0x96, 0x56, 0xcc, 0xce, 0x82, 0x6d, 0x5a,
-  0x3c, 0x11, 0xac, 0x94, 0x6b, 0x11, 0x5c, 0xb8, 0x29, 0xeb, 0x9c, 0x35,
-  0x7b, 0x48, 0xd0, 0xc5, 0xf6, 0x79, 0x51, 0xa4, 0xe0, 0xd9, 0xc0, 0x7c,
-  0x01, 0x4f, 0x3f, 0x7e, 0x6c, 0xef, 0x84, 0x2f, 0x66, 0x0e, 0x5d, 0x51,
-  0x5d, 0xf3, 0xcf, 0x3e, 0x7e, 0xac, 0x7f, 0xf9, 0x40, 0x99, 0x6a, 0x96,
-  0x1d, 0x50, 0x8f, 0xab, 0xca, 0x75, 0xa5, 0xe2, 0x60, 0x15, 0x0d, 0x96,
-  0x58, 0x71, 0x1b, 0xef, 0x62, 0x89, 0x5e, 0x6d, 0xfb, 0x82, 0xa0, 0xfd,
-  0x09, 0x47, 0xaa, 0xae, 0x13, 0x7f, 0x4d, 0x30, 0x18, 0xd6, 0x35, 0x9d,
-  0x4a, 0xa9, 0x24, 0xa5, 0x44, 0xef, 0x2a, 0x57, 0xaf, 0x34, 0x7b, 0xac,
-  0x19, 0x16, 0x12, 0x4b, 0x75, 0x4e, 0x80, 0xe5, 0xaf, 0xb2, 0x2a, 0x9d,
-  0xf3, 0x3b, 0xa8, 0x50, 0x48, 0xaf, 0xef, 0xd2, 0xfa, 0xa7, 0xd9, 0x8a,
-  0x75, 0x2a, 0x59, 0x6d, 0x74, 0xe8, 0x8a, 0x65, 0x75, 0x2d, 0xfb, 0x3c,
-  0xbe, 0x8f, 0x5c, 0x24, 0x85, 0x81, 0xd7, 0x07, 0xc0, 0x2c, 0x18, 0x97,
-  0xa0, 0x20, 0x5a, 0x1e, 0x1a, 0xd6, 0x62, 0x88, 0x57, 0x3b, 0x0e, 0xb3,
-  0xbb, 0x83, 0x34, 0xe9, 0x2e, 0xf9, 0x48, 0x8b, 0x2d, 0xa1, 0x96, 0x92,
-  0x3a, 0x4a, 0x8a, 0x1e, 0xdf, 0x32, 0x57, 0x79, 0x41, 0x1b, 0xba, 0x50,
-  0xa9, 0x43, 0x82, 0x46, 0x5b, 0x61, 0x1a, 0xd2, 0x95, 0x2b, 0x5d, 0x28,
-  0x01, 0xbc, 0xa8, 0x59, 0x22, 0xde, 0xc1, 0xbc, 0x52, 0x39, 0xd5, 0xca,
-  0xad, 0x60, 0x75, 0x6d, 0xd4, 0x0f, 0x5d, 0x45, 0x7b, 0xe1, 0x31, 0xfc,
-  0xc7, 0xe7, 0x5c, 0x05, 0x6b, 0xf4, 0x40, 0xc1, 0x45, 0x13, 0x80, 0xcb,
-  0x79, 0x92, 0x2c, 0x35, 0x8e, 0xc5, 0x4a, 0xb0, 0xcb, 0xb4, 0xf4, 0x18,
-  0x8a, 0x08, 0xa0, 0x54, 0xa8, 0x6a, 0xcd, 0xba, 0x03, 0xae, 0xb7, 0x37,
-  0x7b, 0x9e, 0x7c, 0x22, 0x7e, 0x1c, 0x05, 0xac, 0x44, 0xcf, 0xd5, 0x66,
-  0x5a, 0x85, 0xe2, 0x4c, 0xf7, 0x89, 0x74, 0x5b, 0xa6, 0xab, 0xac, 0xdb,
-  0xe6, 0x48, 0x46, 0xd7, 0x7a, 0x6b, 0x54, 0x93, 0x92, 0xda, 0x88, 0x12,
-  0xe2, 0x7b, 0x85, 0x3c, 0x08, 0x33, 0xe1, 0x15, 0x04, 0x1f, 0x65, 0x7f,
-  0x08, 0xea, 0x95, 0x42, 0xb7, 0x88, 0x1c, 0x08, 0xea, 0x9c, 0xca, 0x12,
-  0xb6, 0x58, 0x2d, 0x02, 0xef, 0x1b, 0x6a, 0x84, 0xe9, 0xea, 0x36, 0x72,
-  0x4f, 0x6d, 0x3c, 0xf6, 0x91, 0xa7, 0x80, 0x36, 0xe4, 0xc0, 0x3f, 0x8b,
-  0x20, 0x1e, 0x2d, 0xc2, 0x29, 0xa6, 0x44, 0xd9, 0x66, 0x7e, 0x50, 0xe3,
-  0xa8, 0x38, 0x2e, 0x95, 0x27, 0xe4, 0x1d, 0xe3, 0xc2, 0x76, 0xdc, 0x9e,
-  0xab, 0x0a, 0xd5, 0x32, 0x83, 0x29, 0x5f, 0xb1, 0x51, 0x01, 0x6e, 0x27,
-  0xe6, 0x69, 0x30, 0x1a, 0xc6, 0x26, 0xe3, 0xb9, 0xe9, 0xd0, 0xb6, 0xf8,
-  0xe3, 0x79, 0xce, 0x91, 0xd2, 0xa5, 0x2b, 0xc7, 0x51, 0xb4, 0xf0, 0x6b,
-  0x50, 0x59, 0x40, 0xd8, 0xcd, 0xac, 0xa3, 0xa2, 0xd8, 0xbb, 0x9c, 0x73,
-  0xc9, 0x5d, 0xcd, 0x10, 0xd7, 0x8e, 0xbe, 0xd9, 0x2e, 0x1f, 0xa0, 0xed,
-  0x68, 0x25, 0xa2, 0x41, 0x1d, 0xf3, 0x44, 0x07, 0x0d, 0x94, 0x00, 0x81,
-  0x6d, 0xbc, 0x36, 0xe4, 0x6f, 0xbe, 0xe3, 0x3a, 0x4a, 0x84, 0xca, 0xe5,
-  0xc6, 0x8e, 0x4b, 0x44, 0x3d, 0xf0, 0x7c, 0x3a, 0xca, 0x9f, 0x61, 0x07,
-  0xa8, 0x91, 0x34, 0x9f, 0x21, 0x5e, 0x42, 0x38, 0x4a, 0xab, 0x38, 0xaf,
-  0xe4, 0x98, 0xea, 0x68, 0xfa, 0xa5, 0xab, 0xfe, 0xc4, 0xaf, 0x4b, 0x59,
-  0x16, 0x94, 0x56, 0x0d, 0x6a, 0xab, 0x8e, 0x22, 0x2d, 0x14, 0x55, 0xb5,
-  0x4b, 0xcd, 0x7a, 0x08, 0x15, 0xd0, 0x6e, 0x25, 0x00, 0x1d, 0x56, 0xbb,
-  0xd3, 0x31, 0xda, 0x7f, 0x22, 0x93, 0x2a, 0x51, 0x4d, 0x3a, 0x9d, 0xb7,
-  0x33, 0x1e, 0xc6, 0xf8, 0x50, 0x74, 0xb1, 0xbf, 0xae, 0x52, 0x94, 0xbe,
-  0x02, 0x7c, 0xc0, 0xeb, 0x9c, 0xf7, 0xbf, 0xd4, 0xd8, 0xe9, 0x2b, 0x48,
-  0x62, 0x1a, 0x46, 0x54, 0x28, 0x57, 0xa1, 0xee, 0x5b, 0x2a, 0x2c, 0x23,
-  0x0e, 0x8f, 0xac, 0x10, 0x08, 0xd0, 0xdf, 0x17, 0x74, 0x49, 0x8d, 0x1c,
-  0x8a, 0x39, 0x31, 0x84, 0x0e, 0x80, 0x7f, 0x35, 0xdc, 0x94, 0x37, 0x6d,
-  0x09, 0x74, 0x50, 0x8b, 0xdf, 0x87, 0xd3, 0x5e, 0x9d, 0x10, 0x15, 0x67,
-  0x84, 0x90, 0xe6, 0xb7, 0x2d, 0x70, 0x67, 0x56, 0x2b, 0x9d, 0x9b, 0xb2,
-  0xd0, 0xf0, 0x26, 0xd9, 0xd4, 0x02, 0x23, 0xcb, 0xb8, 0x9c, 0x0f, 0xd3,
-  0x26, 0xe1, 0x0b, 0x94, 0xa7, 0x0b, 0xd1, 0xf1, 0x22, 0x04, 0x12, 0xca,
-  0xc6, 0x07, 0xa4, 0x49, 0xb7, 0xf1, 0x3d, 0x1f, 0x62, 0x37, 0x4f, 0x76,
-  0x6b, 0xaa, 0xd0, 0x18, 0x5b, 0x41, 0xcb, 0x3a, 0xc4, 0x22, 0xae, 0x41,
-  0xd9, 0xf6, 0xec, 0x7c, 0x58, 0x8a, 0x14, 0x17, 0x48, 0x5b, 0xd8, 0x14,
-  0xcb, 0x21, 0x30, 0x9c, 0x67, 0x3e, 0x84, 0xad, 0xf2, 0xeb, 0x88, 0x5f,
-  0xa8, 0xcd, 0xb9, 0x9c, 0x4b, 0xb0, 0x94, 0xc1, 0x4d, 0x09, 0xf4, 0x94,
-  0x80, 0x4e, 0x5d, 0x14, 0xf7, 0x16, 0x14, 0xc9, 0xa9, 0xcc, 0x17, 0x27,
-  0xe3, 0x40, 0x05, 0xf0, 0xe6, 0x83, 0x36, 0xe7, 0xe1, 0xb4, 0x3f, 0x91,
-  0x9d, 0x61, 0x8a, 0x44, 0x3d, 0xe5, 0xb0, 0x7a, 0xb6, 0xab, 0xa8, 0x2c,
-  0xa6, 0x55, 0x2b, 0x5b, 0xa2, 0x76, 0xb3, 0x26, 0x45, 0x4a, 0xd7, 0xa1,
-  0x8d, 0x42, 0xd2, 0xed, 0x69, 0xec, 0x43, 0x4b, 0xfe, 0x67, 0x1e, 0x81,
-  0xd9, 0x10, 0x4b, 0xfb, 0xab, 0x88, 0x02, 0xaa, 0x02, 0x0c, 0x5b, 0x56,
-  0x90, 0x2a, 0x62, 0x48, 0xd3, 0x39, 0xa2, 0x11, 0x93, 0x6c, 0x5a, 0xdc,
-  0xd7, 0x10, 0x33, 0x67, 0x9f, 0x50, 0xf0, 0xaf, 0xae, 0x3c, 0x30, 0x3c,
-  0x2b, 0x33, 0x25, 0xc6, 0x24, 0xd7, 0x2a, 0x90, 0xf4, 0x89, 0x1b, 0x63,
-  0xfd, 0x5c, 0xef, 0xa2, 0xcc, 0x6a, 0xb3, 0x39, 0x5f, 0xc2, 0x5d, 0xdc,
-  0x75, 0xb4, 0x99, 0x72, 0x30, 0x4c, 0x8f, 0x02, 0x4a, 0x6d, 0x88, 0x04,
-  0xc9, 0x2e, 0xa6, 0x99, 0xd0, 0x60, 0x93, 0x7b, 0x5d, 0xae, 0x60, 0x16,
-  0xd5, 0xb4, 0xc5, 0xc6, 0x6e, 0x63, 0x7d, 0x3a, 0x82, 0xe5, 0x06, 0x91,
-  0x12, 0x80, 0x52, 0x80, 0x92, 0x00, 0x6d, 0xa6, 0x82, 0x3f, 0x87, 0x14,
-  0x50, 0xaf, 0x85, 0xde, 0x9a, 0x8e, 0x9c, 0xc3, 0x4a, 0x4d, 0x25, 0x9f,
-  0xba, 0xed, 0x6e, 0xa3, 0x3f, 0xb9, 0x32, 0xe9, 0xda, 0xdd, 0xf0, 0xdb,
-  0xa1, 0xfb, 0x01, 0x0b, 0x9a, 0xa7, 0x1a, 0xd0, 0xc8, 0x66, 0x3c, 0xeb,
-  0xc4, 0x20, 0x42, 0x9d, 0xf3, 0x67, 0x5b, 0xa3, 0x4f, 0xdd, 0x16, 0x27,
-  0x63, 0xeb, 0xa6, 0xb4, 0x41, 0x93, 0xe3, 0x47, 0xb6, 0x04, 0x02, 0x2c,
-  0x43, 0xc1, 0xb5, 0xb2, 0x05, 0x14, 0xb6, 0x3c, 0x94, 0xaf, 0xaa, 0x5a,
-  0xb0, 0x39, 0x5f, 0x24, 0x28, 0xd3, 0x12, 0x23, 0x7f, 0x23, 0x2c, 0x5e,
-  0x7e, 0x39, 0x8f, 0xef, 0xba, 0x00, 0x9c, 0x71, 0x98, 0xa5, 0x6a, 0x1d,
-  0xad, 0x76, 0x18, 0xb0, 0x5c, 0x7a, 0xea, 0xfd, 0xea, 0xe8, 0x60, 0x7c,
-  0x31, 0x6a, 0x5e, 0x39, 0xad, 0x74, 0x22, 0x14, 0x1b, 0x52, 0x33, 0x11,
-  0xb8, 0x02, 0x1b, 0x16, 0x23, 0x2e, 0x8d, 0x5b, 0x38, 0xf0, 0x3c, 0x1e,
-  0x9e, 0x8c, 0xce, 0xda, 0xe7, 0xfc, 0xa7, 0x0e, 0x00, 0x23, 0x48, 0x88,
-  0x70, 0x78, 0x4e, 0xd2, 0x39, 0xcf, 0x80, 0xc6, 0x45, 0xac, 0x77, 0xa1,
-  0x79, 0x16, 0x5c, 0xdf, 0x3e, 0xca, 0xe7, 0x00, 0xdf, 0x42, 0x37, 0x0d,
-  0x28, 0xf3, 0x56, 0xb9, 0xd0, 0x83, 0xf3, 0x77, 0xc7, 0xef, 0xbe, 0xde,
-  0xaf, 0xdd, 0x99, 0xf3, 0x3c, 0x2f, 0x13, 0xf5, 0xd1, 0x0b, 0x8a, 0xba,
-  0xac, 0x96, 0xe4, 0x87, 0x3a, 0xc4, 0x8d, 0x8e, 0x4b, 0x9c, 0xc1, 0x0d,
-  0x05, 0x2a, 0xb6, 0xbc, 0x11, 0xd3, 0x9c, 0xd6, 0x96, 0x61, 0x89, 0x67,
-  0xf4, 0x70, 0x9d, 0xdf, 0x32, 0x9f, 0xde, 0x94, 0x4f, 0xc5, 0xd8, 0xf5,
-  0xc9, 0xb1, 0xf6, 0xe3, 0xd3, 0xc3, 0x6f, 0xc7, 0x4f, 0x83, 0x48, 0xfb,
-  0xaa, 0x61, 0xb8, 0xd1, 0xf2, 0xb3, 0x78, 0xa3, 0x9d, 0xa6, 0xfa, 0x48,
-  0x98, 0x7d, 0x9d, 0x2b, 0x3d, 0x0b, 0x6d, 0xa2, 0x9d, 0xc7, 0xaa, 0x5e,
-  0xc4, 0x84, 0x4d, 0x5d, 0x69, 0xbe, 0x72, 0x08, 0xfa, 0x01, 0x5c, 0xd5,
-  0x40, 0xa5, 0xc8, 0xfb, 0x8e, 0x2a, 0x85, 0x56, 0xdd, 0x24, 0xa8, 0x67,
-  0xd2, 0x8a, 0x8e, 0x63, 0x18, 0x0e, 0x31, 0x96, 0x7c, 0x36, 0x68, 0x8a,
-  0x3b, 0xc4, 0x29, 0x48, 0xfe, 0x9b, 0xaf, 0xb8, 0x67, 0xe0, 0x75, 0x38,
-  0x40, 0x13, 0x17, 0xac, 0xd9, 0x94, 0x3f, 0x64, 0xe5, 0x2d, 0x7e, 0x9f,
-  0xa1, 0x5a, 0xfc, 0x50, 0x75, 0xb3, 0x63, 0x7d, 0x6a, 0x7f, 0x7b, 0xdb,
-  0x9b, 0xb3, 0x24, 0xb8, 0x70, 0xf4, 0xdb, 0x69, 0x05, 0xd2, 0x67, 0xfc,
-  0xab, 0x88, 0x22, 0xfe, 0x34, 0xaa, 0x68, 0x49, 0xc9, 0xbf, 0x90, 0x2a,
-  0x3e, 0x5f, 0xc7, 0x6c, 0x3b, 0x0b, 0xdb, 0x3c, 0x48, 0x13, 0xae, 0xce,
-  0xcd, 0xff, 0x20, 0xaa, 0x88, 0x3f, 0x8d, 0x2c, 0xe2, 0x1a, 0x5d, 0xac,
-  0xc9, 0x09, 0xff, 0x2d, 0x31, 0x25, 0x31, 0x8c, 0x67, 0x43, 0x87, 0x8d,
-  0xff, 0x18, 0xc5, 0xd4, 0x4c, 0xb4, 0x2c, 0x24, 0x80, 0x68, 0x9e, 0xe9,
-  0x6c, 0x37, 0x61, 0x09, 0x4e, 0x42, 0xd0, 0x34, 0x33, 0xc6, 0x77, 0x43,
-  0xf4, 0xe3, 0xee, 0xdb, 0x7a, 0x94, 0x03, 0x39, 0xda, 0x12, 0xfc, 0x26,
-  0xa1, 0xae, 0x56, 0x38, 0xf3, 0x2f, 0xa7, 0xb5, 0xff, 0x57, 0x70, 0xa0,
-  0x67, 0xbe, 0xb2, 0xc1, 0xa7, 0xd0, 0xdc, 0xb3, 0x6b, 0x47, 0x73, 0x5d,
-  0x45, 0x3f, 0x8d, 0x37, 0xfd, 0xc6, 0xf9, 0x3a, 0x1d, 0x72, 0x95, 0xad,
-  0x3a, 0xdc, 0xd4, 0x05, 0xa9, 0xd8, 0x88, 0x6e, 0x08, 0x01, 0xf4, 0x35,
-  0x09, 0xa4, 0x8d, 0xb4, 0xab, 0x74, 0xec, 0x52, 0xa9, 0x03, 0xeb, 0xb1,
-  0xa0, 0x51, 0xd1, 0x08, 0x5a, 0x77, 0xe6, 0xb3, 0x5f, 0xc3, 0x1e, 0x8d,
-  0xd2, 0x19, 0xcf, 0x60, 0x22, 0x49, 0xdb, 0x42, 0xdf, 0x5a, 0x71, 0x33,
-  0xb7, 0x62, 0xd2, 0x5d, 0xce, 0x60, 0xc0, 0x71, 0x5b, 0x5a, 0xdb, 0xa3,
-  0xb4, 0x5e, 0xe3, 0xa3, 0x1d, 0x99, 0x05, 0xeb, 0x52, 0xda, 0xfe, 0xdf,
-  0xc2, 0x43, 0x9f, 0x7d, 0x1a, 0x39, 0xff, 0x33, 0x6e, 0xd6, 0xff, 0x41,
-  0xc4, 0xdb, 0xb1, 0xcd, 0x9b, 0x8a, 0x4c, 0x26, 0x9a, 0xa1, 0x5c, 0x2c,
-  0x5b, 0x82, 0x33, 0xe3, 0x44, 0x78, 0x2c, 0xe2, 0xf1, 0xd9, 0x77, 0xcf,
-  0x25, 0xf0, 0x6d, 0xdc, 0x86, 0xd6, 0x3f, 0x79, 0x7d, 0x70, 0xd6, 0x71,
-  0x33, 0x5c, 0x91, 0xc2, 0xbf, 0x4c, 0x87, 0xac, 0x56, 0xb1, 0x09, 0xee,
-  0xa5, 0xfe, 0xc2, 0x24, 0xde, 0x65, 0x64, 0x34, 0x23, 0xa9, 0x3d, 0x2f,
-  0xd8, 0xdd, 0xe2, 0x31, 0xc6, 0x2c, 0x55, 0x3f, 0x63, 0x87, 0xd3, 0x74,
-  0x31, 0xdb, 0x96, 0x3f, 0x87, 0x97, 0x7f, 0x9d, 0xb5, 0x55, 0xbd, 0x10,
-  0x18, 0xbb, 0x96, 0x88, 0xa8, 0x60, 0xe3, 0x69, 0xb5, 0xae, 0x04, 0x73,
-  0xb9, 0x1f, 0x9c, 0xf2, 0x48, 0x73, 0x6b, 0x01, 0x2a, 0xbd, 0x6e, 0x5e,
-  0x42, 0x73, 0xad, 0xea, 0x07, 0x52, 0x2b, 0x04, 0x55, 0x07, 0xf8, 0xeb,
-  0xed, 0xa0, 0x29, 0xd7, 0x7e, 0xc7, 0x67, 0xd6, 0x7a, 0x47, 0x02, 0x0f,
-  0x77, 0x26, 0x6d, 0x31, 0xc2, 0x9e, 0x8e, 0x2a, 0xe8, 0xa7, 0xfd, 0x25,
-  0xec, 0x0d, 0x8c, 0xbd, 0x50, 0xb6, 0xaa, 0x90, 0xb0, 0x3b, 0xdf, 0xdf,
-  0xb5, 0x43, 0x2d, 0xfd, 0xa8, 0xfb, 0x2e, 0x35, 0x6b, 0x34, 0x81, 0x31,
-  0x9b, 0xa6, 0xcb, 0x78, 0xae, 0x69, 0x9d, 0x0f, 0xd5, 0x4e, 0x6a, 0x96,
-  0x9e, 0xa9, 0x4f, 0x88, 0x94, 0xed, 0x66, 0x39, 0xb7, 0x3a, 0x18, 0xb7,
-  0xd5, 0x93, 0xb3, 0xe4, 0x69, 0x6c, 0x1e, 0xce, 0xa7, 0xaa, 0xe9, 0x08,
-  0xdd, 0x47, 0x0e, 0x2f, 0x9e, 0x68, 0x27, 0x25, 0xc1, 0x41, 0x0d, 0xe8,
-  0xa7, 0xdd, 0x17, 0xcf, 0x77, 0xa3, 0x32, 0xbe, 0x07, 0x3e, 0x4a, 0xa9,
-  0xef, 0x3f, 0x1d, 0x3d, 0xd9, 0x7e, 0x3a, 0x7a, 0x1a, 0xf9, 0xd2, 0xb2,
-  0x93, 0xc4, 0xda, 0x27, 0xc6, 0xd9, 0x42, 0xc5, 0x90, 0xf3, 0xf4, 0xee,
-  0xe8, 0x90, 0x59, 0xb5, 0xa5, 0xf8, 0x36, 0xd4, 0x3b, 0x03, 0x65, 0xa2,
-  0x55, 0x1b, 0xb9, 0xac, 0xe0, 0x2e, 0xa5, 0xb4, 0x63, 0x39, 0x22, 0xa3,
-  0x4d, 0x84, 0xe8, 0x67, 0x6e, 0x24, 0xcc, 0x2c, 0x85, 0x4c, 0x75, 0x65,
-  0xba, 0x20, 0x40, 0xc2, 0x35, 0x09, 0x56, 0x6c, 0xf4, 0x70, 0x35, 0xa0,
-  0xb2, 0x22, 0x3d, 0xb5, 0xe8, 0x8e, 0x12, 0x3a, 0x57, 0x63, 0x24, 0x5c,
-  0x81, 0x5c, 0xed, 0x5a, 0xfc, 0xcc, 0xfa, 0x8a, 0xc5, 0xcf, 0xd7, 0x52,
-  0x2a, 0x2c, 0xf8, 0xa5, 0xab, 0xd2, 0x65, 0x2d, 0x9b, 0x41, 0xeb, 0xfb,
-  0xa0, 0x38, 0x70, 0x7f, 0xd8, 0xb7, 0x4b, 0xca, 0x62, 0x67, 0xb8, 0xb7,
-  0x4a, 0x2c, 0xa6, 0xcd, 0x9a, 0x10, 0xff, 0x70, 0xb9, 0xb5, 0xe2, 0xdb,
-  0xa0, 0x4a, 0xe6, 0x59, 0x52, 0x69, 0xb9, 0xc9, 0xe8, 0xe5, 0xe9, 0xd9,
-  0xc5, 0xab, 0xdb, 0x78, 0xde, 0x8a, 0xf1, 0x60, 0x14, 0x45, 0x2b, 0xcd,
-  0xe9, 0xac, 0xb9, 0xfc, 0x66, 0x90, 0x1c, 0x35, 0x76, 0x39, 0x42, 0xf6,
-  0x64, 0x17, 0xac, 0xd2, 0xc5, 0xc5, 0x9f, 0xcf, 0x8e, 0x5e, 0xbd, 0x64,
-  0x5b, 0xf0, 0x17, 0x6c, 0x90, 0x2f, 0x6b, 0xa6, 0x61, 0x2e, 0x03, 0xdd,
-  0xbe, 0x19, 0x7f, 0x78, 0x7d, 0x3c, 0x3e, 0x3b, 0x39, 0x3d, 0x7c, 0xf5,
-  0xf2, 0x07, 0x76, 0x61, 0xd2, 0xea, 0xdd, 0x07, 0xef, 0xba, 0xcf, 0x5c,
-  0xba, 0x43, 0xbb, 0xf8, 0xdd, 0xd1, 0xf7, 0x1f, 0x8e, 0xde, 0x7d, 0xf7,
-  0xea, 0xe5, 0x6d, 0x5c, 0x0c, 0x78, 0x7e, 0xf2, 0x36, 0x9b, 0x64, 0x3b,
-  0xea, 0x22, 0x07, 0x6b, 0x74, 0x81, 0x6a, 0x88, 0x4b, 0x8e, 0x1d, 0x7c,
-  0x20, 0xac, 0x4c, 0xee, 0x32, 0x5f, 0x6f, 0xae, 0x29, 0xe0, 0x07, 0x51,
-  0x6c, 0xf5, 0x94, 0xd6, 0xf7, 0xe7, 0x27, 0xa3, 0x4e, 0x82, 0x71, 0x15,
-  0x19, 0x7c, 0x3d, 0x0e, 0xb5, 0x0d, 0xf9, 0x56, 0x51, 0xfc, 0xc2, 0xd7,
-  0x9d, 0x56, 0xc8, 0xd0, 0x07, 0x63, 0xe8, 0x84, 0x75, 0xf9, 0x70, 0x5a,
-  0x57, 0x0a, 0x52, 0x82, 0x68, 0x68, 0x06, 0x29, 0x30, 0x0b, 0xb6, 0x2d,
-  0x32, 0x65, 0xde, 0x36, 0x79, 0xf9, 0xd8, 0x77, 0xf8, 0xde, 0x21, 0xd4,
-  0x70, 0x04, 0x08, 0xe6, 0x76, 0x28, 0x40, 0xc5, 0x92, 0xa0, 0x52, 0x9f,
-  0x84, 0x30, 0xe2, 0xbc, 0x58, 0x0b, 0xe6, 0xce, 0x60, 0xe6, 0x37, 0x6e,
-  0x5c, 0x85, 0xd0, 0x6f, 0x3d, 0xf9, 0xc1, 0x52, 0xd3, 0x82, 0x42, 0x22,
-  0x1d, 0xe9, 0x71, 0x75, 0x7c, 0x53, 0xf1, 0x44, 0xb2, 0x4c, 0xc9, 0xb9,
-  0x7b, 0x9c, 0x7e, 0xe9, 0x22, 0x87, 0x65, 0x63, 0x3d, 0x3a, 0x76, 0xdb,
-  0x97, 0x89, 0x9a, 0xec, 0xee, 0xcc, 0xd9, 0x61, 0xcb, 0x1d, 0x2c, 0xf8,
-  0xe6, 0x78, 0xcb, 0xa5, 0x3b, 0x72, 0x8b, 0x67, 0xef, 0x2f, 0x82, 0x4c,
-  0xd7, 0x56, 0xb4, 0x5a, 0xeb, 0x10, 0x36, 0x04, 0x65, 0xbf, 0x50, 0xbd,
-  0x61, 0xaf, 0x59, 0x57, 0xc6, 0x4c, 0xfd, 0xc4, 0x18, 0xb8, 0xb2, 0xb8,
-  0xc7, 0x2e, 0x68, 0x89, 0x7e, 0x1a, 0x47, 0x2c, 0xb9, 0x5e, 0x74, 0xbd,
-  0x68, 0x20, 0x52, 0xe2, 0xea, 0x9f, 0x04, 0xfd, 0x8c, 0xc2, 0x7e, 0xc4,
-  0xf1, 0xb6, 0xd5, 0x4a, 0xea, 0xbb, 0x6f, 0x46, 0xea, 0xbb, 0xbe, 0x79,
-  0x9c, 0x0e, 0x52, 0x4e, 0x46, 0x06, 0x9b, 0x37, 0xbb, 0x15, 0x26, 0x44,
-  0x79, 0x1d, 0x35, 0x54, 0x24, 0x6b, 0x0d, 0xc8, 0xe7, 0x28, 0xf3, 0x8d,
-  0xec, 0x74, 0x04, 0x7d, 0x19, 0xa4, 0xb5, 0xd5, 0xa4, 0x56, 0x9f, 0xa2,
-  0x35, 0x5b, 0x76, 0x82, 0x36, 0xc9, 0x26, 0x76, 0x2c, 0xea, 0x9f, 0x1b,
-  0x02, 0x32, 0xb3, 0xc2, 0xe1, 0x85, 0x8f, 0xda, 0xe3, 0xa0, 0xbb, 0xce,
-  0x00, 0x2c, 0x94, 0xd7, 0x1b, 0x5e, 0xb4, 0xf0, 0xe0, 0xf8, 0x05, 0x0e,
-  0x59, 0x0b, 0x42, 0xd9, 0x11, 0x21, 0xca, 0xfb, 0x22, 0x94, 0xa4, 0x19,
-  0x37, 0x10, 0x2a, 0x46, 0x1a, 0x40, 0xcb, 0xfe, 0x90, 0x35, 0x79, 0xcd,
-  0x65, 0xd4, 0xbb, 0x9a, 0xe7, 0x93, 0x09, 0x4d, 0xaa, 0xe7, 0x2a, 0x71,
-  0x5c, 0x10, 0xdb, 0xbc, 0x82, 0xc8, 0x3b, 0x30, 0xb4, 0x40, 0x7f, 0x58,
-  0x51, 0xc1, 0x0a, 0x7d, 0xad, 0xcb, 0xcd, 0xc5, 0xde, 0x1a, 0xb2, 0xbc,
-  0xed, 0x2b, 0x2a, 0x4c, 0xdd, 0x07, 0xe5, 0x2f, 0x11, 0x8b, 0xc5, 0x9f,
-  0x5a, 0xff, 0xad, 0x30, 0x5e, 0xce, 0x25, 0xf5, 0x59, 0x9f, 0xca, 0x7c,
-  0xc0, 0x72, 0xb4, 0xb2, 0x50, 0xda, 0x91, 0xe7, 0xc9, 0x13, 0xa6, 0x09,
-  0xf4, 0xfe, 0x83, 0x07, 0xb1, 0x3b, 0xe0, 0x7f, 0xf7, 0xfe, 0xde, 0xb3,
-  0xfa, 0x51, 0x5c, 0xb1, 0x4f, 0x06, 0x5f, 0x71, 0xc9, 0x9e, 0xd2, 0x8a,
-  0x56, 0x75, 0xd4, 0xa8, 0x62, 0xb7, 0xe1, 0xda, 0xd6, 0xd3, 0xc5, 0xd5,
-  0x8f, 0xbb, 0xc3, 0xdd, 0x9d, 0x9d, 0x9d, 0x9f, 0x47, 0x4b, 0x5e, 0xba,
-  0x4b, 0x34, 0x4f, 0xff, 0x8e, 0x96, 0xe9, 0x94, 0x0d, 0xf9, 0xb4, 0x99,
-  0x69, 0xcc, 0x4d, 0x6f, 0x4b, 0x7f, 0xdb, 0xc1, 0xcd, 0x5f, 0x4d, 0x97,
-  0xc3, 0x2c, 0xef, 0x0a, 0x91, 0xb9, 0x58, 0x15, 0x59, 0x50, 0x7c, 0xf5,
-  0xc3, 0xbb, 0xd3, 0xd7, 0x47, 0x27, 0x07, 0x7f, 0xb6, 0x10, 0x5b, 0x07,
-  0x9b, 0xc0, 0x03, 0xf9, 0x90, 0xc4, 0xe5, 0xfd, 0x87, 0x32, 0xa9, 0xe8,
-  0xcb, 0xcd, 0x27, 0x5b, 0xc8, 0x7c, 0x6d, 0xd5, 0xdf, 0xbe, 0x12, 0xb1,
-  0xdd, 0x70, 0x14, 0x34, 0x62, 0xc9, 0xdf, 0xde, 0xa3, 0xa6, 0xeb, 0xa9,
-  0x16, 0xf8, 0x5a, 0xb1, 0x37, 0x64, 0x32, 0xbf, 0x29, 0xd3, 0xbf, 0xd1,
-  0xbd, 0xc3, 0xd8, 0x8a, 0xed, 0x78, 0xe6, 0x0b, 0x45, 0x50, 0xa8, 0x22,
-  0xfe, 0x2d, 0xfa, 0xea, 0xe4, 0x5b, 0x0e, 0x23, 0x77, 0x4a, 0xcd, 0x42,
-  0x52, 0xf6, 0xa3, 0x2f, 0x9e, 0xed, 0xee, 0x6d, 0xb9, 0x82, 0x22, 0x92,
-  0x8c, 0xc2, 0x87, 0xb3, 0xe5, 0x56, 0xff, 0x5b, 0x12, 0x54, 0x76, 0x10,
-  0xae, 0xec, 0x7d, 0x8c, 0x52, 0xa4, 0x5d, 0x6f, 0x39, 0x80, 0xfe, 0xc1,
-  0x17, 0x5c, 0x01, 0x66, 0x91, 0x13, 0x45, 0x5a, 0x60, 0x45, 0x17, 0x3e,
-  0x2b, 0x68, 0x14, 0x14, 0x6b, 0x8d, 0x68, 0x38, 0x9a, 0x5f, 0xd2, 0x2d,
-  0x9b, 0xfc, 0xa3, 0x65, 0x9d, 0x47, 0x3d, 0x55, 0xb4, 0xda, 0xf3, 0x92,
-  0xbd, 0xc4, 0x2c, 0x7f, 0x44, 0x2f, 0xed, 0xb7, 0x2f, 0xda, 0x91, 0x75,
-  0x11, 0x3b, 0x65, 0xda, 0xa8, 0x41, 0x90, 0x5b, 0x22, 0xbe, 0xff, 0x38,
-  0xa6, 0xd1, 0x17, 0x9a, 0x0a, 0xf3, 0x0d, 0xda, 0xe1, 0x9f, 0x6e, 0x5e,
-  0xbd, 0xf1, 0xf9, 0x59, 0x6f, 0xa0, 0x7a, 0x0a, 0x75, 0x30, 0xa4, 0xbf,
-  0x69, 0xbc, 0x10, 0xe1, 0x9f, 0xed, 0x3c, 0x7b, 0xba, 0xa5, 0x46, 0x0f,
-  0x8c, 0x53, 0x0a, 0xfc, 0xb4, 0x6b, 0x2e, 0xe0, 0x4b, 0x57, 0x2c, 0x59,
-  0xb0, 0x2f, 0x7c, 0xa2, 0x1d, 0x91, 0x5e, 0x7d, 0x96, 0x62, 0x30, 0xd1,
-  0xaa, 0xd8, 0xeb, 0xa3, 0x22, 0x74, 0xcf, 0x20, 0xf7, 0x61, 0x98, 0xed,
-  0xf2, 0xea, 0x4f, 0x1b, 0x0b, 0xe9, 0xc6, 0xf0, 0xd2, 0x7e, 0xeb, 0x5a,
-  0x48, 0x5f, 0xd6, 0x59, 0x8b, 0xd2, 0x39, 0x5c, 0x25, 0x5e, 0xe1, 0xe6,
-  0x02, 0x2b, 0xd2, 0xd7, 0x7a, 0x6f, 0x8a, 0xf3, 0xbf, 0x87, 0x93, 0x1c,
-  0x39, 0x07, 0xa9, 0x82, 0x09, 0xf9, 0x05, 0xb4, 0x0c, 0x97, 0xb2, 0xa3,
-  0x1e, 0xda, 0xc3, 0xd3, 0xc3, 0xeb, 0x2f, 0xf9, 0xdf, 0xae, 0x69, 0xf1,
-  0xe7, 0x4e, 0x63, 0xff, 0x27, 0x4c, 0x2b, 0x98, 0x97, 0x5b, 0x51, 0x9d,
-  0x5b, 0x4b, 0x75, 0xae, 0x1e, 0xdf, 0xbb, 0xdb, 0xdd, 0xd1, 0x4e, 0xa7,
-  0x93, 0xf3, 0x0d, 0x97, 0xb0, 0xab, 0xa3, 0x68, 0xf1, 0x84, 0x0c, 0x7c,
-  0x97, 0xfd, 0x94, 0x60, 0x10, 0x4e, 0x07, 0x33, 0x68, 0xb0, 0x35, 0x40,
-  0x6f, 0xfc, 0xb2, 0x03, 0x3a, 0xa8, 0xd5, 0x68, 0x79, 0xda, 0x3a, 0x99,
-  0x34, 0xa8, 0xdd, 0x5f, 0x37, 0xa8, 0xdd, 0xdf, 0x74, 0x50, 0x7b, 0xbf,
-  0x6e, 0x50, 0x7b, 0xbf, 0xd5, 0xa0, 0x8a, 0xa1, 0x25, 0x65, 0x74, 0x63,
-  0x44, 0x9f, 0x6b, 0xf8, 0x16, 0xc3, 0x1b, 0x2d, 0x18, 0x51, 0x91, 0xd9,
-  0xe9, 0x85, 0x72, 0xf4, 0xe1, 0x91, 0xbe, 0xeb, 0x43, 0x68, 0x44, 0x60,
-  0x68, 0x47, 0xce, 0xaa, 0xac, 0xe2, 0x42, 0x0e, 0xcb, 0x7a, 0xc9, 0x51,
-  0x71, 0xd6, 0xae, 0x32, 0xeb, 0x44, 0x73, 0xbd, 0x11, 0x38, 0x04, 0x99,
-  0xae, 0x35, 0xcf, 0x69, 0x92, 0x2a, 0x82, 0xed, 0x63, 0x11, 0xda, 0xcf,
-  0xeb, 0x13, 0x66, 0xe8, 0x9c, 0x4e, 0x9d, 0xcc, 0x55, 0xf8, 0x8d, 0x39,
-  0xe0, 0x82, 0xe3, 0x32, 0xe4, 0xe1, 0x68, 0xb6, 0x5a, 0x2c, 0x0d, 0xd6,
-  0x22, 0xcd, 0x34, 0xc8, 0x97, 0xc7, 0x4b, 0x97, 0xf3, 0x55, 0x6e, 0xb7,
-  0xda, 0xa0, 0x65, 0xd8, 0xe1, 0x92, 0x48, 0xf8, 0x36, 0x11, 0x74, 0x53,
-  0x0e, 0xeb, 0x4f, 0x33, 0xa9, 0x6d, 0x26, 0x15, 0x61, 0xf3, 0x00, 0x14,
-  0x4e, 0x45, 0x58, 0x11, 0xc1, 0xdf, 0xb7, 0x5c, 0xe9, 0x2c, 0x36, 0x73,
-  0x54, 0x0a, 0x07, 0x73, 0xa9, 0xc6, 0x82, 0xfc, 0xb9, 0xa0, 0x42, 0xa4,
-  0x55, 0x51, 0x5a, 0x63, 0x07, 0xe8, 0xb6, 0x51, 0x87, 0xf6, 0x69, 0xc4,
-  0xcf, 0x0c, 0x6f, 0x07, 0x52, 0x27, 0x76, 0x92, 0x97, 0x89, 0x24, 0x85,
-  0x60, 0x1d, 0x5a, 0x36, 0xa3, 0x72, 0x9a, 0xa6, 0xbf, 0xa5, 0x93, 0x4c,
-  0x7a, 0x45, 0x37, 0x0f, 0x6f, 0x58, 0x2c, 0xdb, 0x25, 0xbb, 0x15, 0x6e,
-  0x96, 0xdf, 0x2d, 0x89, 0x38, 0x74, 0xfb, 0xf5, 0x7f, 0xd0, 0x86, 0xd1,
-  0xff, 0x73, 0x35, 0x64, 0xce, 0x3a, 0x4c, 0xe7, 0x31, 0x8c, 0x49, 0xba,
-  0x34, 0x82, 0x26, 0x3c, 0x4f, 0x62, 0xce, 0x4c, 0x37, 0x13, 0xf6, 0x75,
-  0xf2, 0x51, 0x94, 0xff, 0xf6, 0x65, 0xaf, 0x80, 0x49, 0xd7, 0x6c, 0x36,
-  0xc3, 0xb3, 0x07, 0xe3, 0xc3, 0xe3, 0xe3, 0x9a, 0x1d, 0x91, 0x17, 0x4f,
-  0x92, 0x3b, 0x10, 0x8a, 0x56, 0x72, 0x9a, 0x0b, 0x87, 0x03, 0x62, 0xb8,
-  0x5d, 0x00, 0x66, 0x82, 0x4c, 0xca, 0x15, 0x9d, 0xe3, 0x32, 0xb5, 0x94,
-  0xda, 0x58, 0x2f, 0xe8, 0x8c, 0xad, 0x03, 0x9c, 0xdb, 0x70, 0xbd, 0x22,
-  0x59, 0xb7, 0xfc, 0x47, 0x13, 0xe4, 0xe8, 0xb7, 0x26, 0xbd, 0x8e, 0xdc,
-  0xc7, 0xb3, 0x42, 0xd3, 0x33, 0x25, 0x6f, 0x41, 0x93, 0x17, 0x19, 0x41,
-  0x87, 0x35, 0x40, 0xa1, 0x40, 0x1a, 0xa1, 0x0d, 0x16, 0xea, 0xa1, 0xe5,
-  0xaf, 0x76, 0x40, 0x8e, 0xaa, 0x19, 0xaa, 0x6c, 0x56, 0x22, 0x6f, 0x70,
-  0xe9, 0x55, 0x96, 0x7e, 0x84, 0x0d, 0x94, 0x84, 0x85, 0x97, 0x9c, 0x7f,
-  0xb8, 0xa6, 0xfe, 0xe0, 0xa1, 0x15, 0xc7, 0x72, 0x38, 0x87, 0xb4, 0x08,
-  0x28, 0x40, 0xa4, 0x35, 0xdc, 0xa5, 0x8d, 0x41, 0xa8, 0x8e, 0x83, 0x61,
-  0x77, 0xd8, 0x1f, 0xb3, 0xa4, 0x62, 0x17, 0x46, 0x5d, 0xe1, 0x78, 0x5a,
-  0x17, 0x81, 0x57, 0x03, 0xab, 0xf5, 0x08, 0xd9, 0x66, 0x7f, 0xad, 0xec,
-  0x16, 0xa4, 0x4f, 0x06, 0x85, 0x1e, 0x39, 0xc1, 0xca, 0xe4, 0x8f, 0xb0,
-  0xae, 0xab, 0xe8, 0xf4, 0x0f, 0x17, 0xee, 0x1e, 0x45, 0xa7, 0x8e, 0x62,
-  0x86, 0xd9, 0x00, 0xc0, 0xa1, 0x55, 0x31, 0xd5, 0xa8, 0x41, 0xfc, 0x3e,
-  0xb4, 0x0c, 0xdc, 0xf5, 0x55, 0xbc, 0x91, 0xca, 0x7b, 0xef, 0x31, 0x1f,
-  0xe5, 0xda, 0x71, 0x43, 0x1c, 0x04, 0x5a, 0xcd, 0x92, 0xb4, 0x95, 0xa5,
-  0xa6, 0xe1, 0xb5, 0xd4, 0x36, 0x99, 0x44, 0x27, 0xd0, 0x65, 0xf7, 0x7c,
-  0x15, 0x67, 0x6e, 0x39, 0x4f, 0x2b, 0xae, 0xc5, 0x17, 0xe5, 0x99, 0x83,
-  0x1f, 0x42, 0x02, 0xca, 0x34, 0x9f, 0x13, 0xbf, 0x69, 0x79, 0x1e, 0x90,
-  0x73, 0x23, 0x67, 0x13, 0x66, 0xe0, 0xc5, 0x32, 0x27, 0x9d, 0x58, 0xc1,
-  0xb0, 0xc5, 0x22, 0x87, 0x37, 0x4d, 0xfb, 0xf6, 0x9d, 0x77, 0x20, 0xc3,
-  0xd6, 0xd4, 0x4a, 0xa4, 0x90, 0xd9, 0x66, 0x4c, 0x63, 0x5a, 0x51, 0x84,
-  0xc5, 0x75, 0x27, 0xd4, 0xc8, 0x25, 0xff, 0x2d, 0x11, 0x79, 0x52, 0xe4,
-  0x65, 0xf4, 0xdd, 0x33, 0xc3, 0x68, 0xfb, 0x3e, 0xcd, 0x66, 0xcc, 0x5e,
-  0xa4, 0x56, 0xbc, 0xb3, 0xce, 0xc8, 0x5a, 0xc3, 0x6f, 0xd0, 0xc9, 0x73,
-  0xcd, 0x8f, 0x6b, 0xaf, 0x2b, 0xb5, 0x8a, 0xfd, 0xae, 0x31, 0x13, 0x20,
-  0x63, 0xd3, 0x20, 0x19, 0x32, 0x28, 0x2f, 0x3a, 0x08, 0x37, 0xa8, 0x32,
-  0x06, 0x60, 0x3c, 0xbe, 0x1b, 0xee, 0xa3, 0x7c, 0x52, 0x49, 0x39, 0x06,
-  0x37, 0xea, 0x8b, 0x94, 0xcf, 0x82, 0xab, 0xca, 0x3b, 0xcb, 0xdb, 0x21,
-  0xed, 0xaa, 0xe7, 0xf8, 0x50, 0xe1, 0x86, 0x2c, 0x7e, 0xcd, 0x90, 0x3b,
-  0xd7, 0x1c, 0x9b, 0xce, 0x06, 0x2f, 0x58, 0xfe, 0x36, 0xd6, 0x44, 0xfb,
-  0xe2, 0xd6, 0x61, 0x60, 0x57, 0x55, 0xf3, 0xfc, 0xce, 0xb4, 0x50, 0x2d,
-  0x94, 0x28, 0xe3, 0x72, 0x5d, 0xa5, 0x56, 0x59, 0x86, 0xd0, 0x71, 0x29,
-  0x0b, 0x36, 0xd0, 0x68, 0xcc, 0x42, 0x7d, 0x06, 0x56, 0x57, 0x49, 0x97,
-  0xb3, 0xe3, 0x4a, 0xe0, 0x04, 0x84, 0x12, 0x86, 0x62, 0xd8, 0x4f, 0xa5,
-  0x2c, 0xdb, 0xa5, 0x87, 0xba, 0x6f, 0x53, 0x74, 0xde, 0x38, 0x2c, 0xe1,
-  0x56, 0x31, 0x01, 0x4a, 0x5e, 0x57, 0xf4, 0x3a, 0xbf, 0xcb, 0x86, 0x27,
-  0x1c, 0x93, 0x1b, 0x9d, 0xe4, 0x57, 0xb4, 0x54, 0xef, 0xa4, 0x26, 0x43,
-  0xd3, 0x8a, 0x79, 0xf6, 0x2e, 0xda, 0x7c, 0xcf, 0x73, 0x3a, 0x73, 0xce,
-  0x32, 0x7e, 0x72, 0x4b, 0x2b, 0xc0, 0x12, 0x63, 0x0c, 0x80, 0xf7, 0x07,
-  0xd1, 0xd1, 0x0f, 0x07, 0x6f, 0xcf, 0x4e, 0x8e, 0x7e, 0x12, 0x75, 0xac,
-  0x35, 0x1d, 0xfe, 0xf8, 0x4b, 0x1b, 0x3a, 0x57, 0x19, 0xd7, 0x9a, 0x26,
-  0x74, 0x5d, 0xcf, 0xef, 0xd7, 0x73, 0x01, 0x39, 0x38, 0x46, 0x7c, 0xe3,
-  0xf1, 0xd9, 0xf1, 0x50, 0xf1, 0x07, 0xe4, 0xfc, 0x2b, 0xa8, 0x1b, 0xce,
-  0xaf, 0x26, 0xe4, 0x7d, 0xdb, 0x8e, 0x42, 0xb6, 0xb3, 0x30, 0xf0, 0xc0,
-  0xc4, 0x03, 0x81, 0xf2, 0xa5, 0x19, 0x74, 0x83, 0x41, 0x57, 0xae, 0x48,
-  0xea, 0xb4, 0x65, 0x0b, 0x42, 0x3d, 0x2e, 0x8f, 0xbc, 0x5d, 0x26, 0xf3,
-  0x44, 0xb1, 0x53, 0xd7, 0x70, 0x50, 0xe0, 0x6e, 0x60, 0x1b, 0xd9, 0x43,
-  0xd1, 0x2a, 0x51, 0xae, 0x1e, 0x8b, 0x89, 0x43, 0x41, 0x54, 0x6f, 0xbe,
-  0xd0, 0x88, 0x70, 0x0d, 0xd5, 0x3b, 0x1d, 0x5b, 0xd8, 0x27, 0x21, 0x66,
-  0x15, 0xed, 0xf7, 0x7e, 0x43, 0x29, 0xef, 0xbd, 0x0b, 0x30, 0xf8, 0xc7,
-  0x5f, 0x24, 0x1a, 0x33, 0xf2, 0xc8, 0x45, 0xf2, 0x20, 0x59, 0xb0, 0x2e,
-  0x60, 0x84, 0xf1, 0x30, 0x65, 0xcc, 0x72, 0xa5, 0xfd, 0xa6, 0x23, 0xc9,
-  0xa1, 0x54, 0xd3, 0x88, 0x40, 0x0e, 0x2d, 0x43, 0x90, 0xc7, 0xb5, 0x40,
-  0xd2, 0x6a, 0x7d, 0xe7, 0x5b, 0x1a, 0xf9, 0x2f, 0xa3, 0x83, 0xc6, 0xbe,
-  0xb7, 0xe3, 0x07, 0x3f, 0x95, 0x0e, 0xde, 0xff, 0xb6, 0x74, 0x80, 0x6a,
-  0xd2, 0x2f, 0xdf, 0x9f, 0x9f, 0xac, 0xdb, 0xf2, 0x18, 0xc6, 0x67, 0x86,
-  0x5c, 0x48, 0xaa, 0xe9, 0x75, 0x3d, 0x41, 0x0d, 0x18, 0xf9, 0x79, 0xc9,
-  0xa1, 0xbb, 0xe0, 0xc9, 0xf7, 0x01, 0x58, 0x48, 0x2b, 0xe5, 0x52, 0x45,
-  0x6e, 0x6d, 0x96, 0x1a, 0xe5, 0x94, 0x70, 0x5c, 0x0d, 0x01, 0x4c, 0xed,
-  0x23, 0xc9, 0xc5, 0x0b, 0xc9, 0xb3, 0xd4, 0xd0, 0x92, 0x1a, 0x9a, 0xa8,
-  0x22, 0x5d, 0x12, 0xa3, 0xb4, 0x44, 0x06, 0xd8, 0xf6, 0xbb, 0xee, 0x5e,
-  0x9e, 0x10, 0xe3, 0x67, 0x88, 0x07, 0x77, 0xe0, 0x52, 0xde, 0x86, 0x39,
-  0x1f, 0x0a, 0xd5, 0x11, 0x34, 0x36, 0x1f, 0xb0, 0x02, 0x3e, 0xd7, 0xbf,
-  0xcb, 0x87, 0xe5, 0xea, 0x6d, 0xdb, 0x9a, 0x86, 0x72, 0x73, 0xe3, 0x85,
-  0xaf, 0x80, 0x05, 0xc8, 0x71, 0x0c, 0xfa, 0xfd, 0x76, 0x15, 0xcf, 0x6f,
-  0x24, 0xf3, 0x9c, 0xb4, 0x80, 0x42, 0x33, 0xea, 0x0d, 0x16, 0x4c, 0x73,
-  0x60, 0x88, 0x53, 0x33, 0xca, 0x6c, 0x17, 0xee, 0xef, 0x64, 0x75, 0x75,
-  0x65, 0x6a, 0x71, 0x99, 0x24, 0x86, 0x85, 0xd1, 0x2f, 0x23, 0xd1, 0xb8,
-  0x68, 0xd5, 0x7a, 0xab, 0x6c, 0xa6, 0xe8, 0xb8, 0xd1, 0x75, 0x9e, 0xcf,
-  0x7a, 0x52, 0xfd, 0x8f, 0x45, 0xe4, 0x36, 0x24, 0x48, 0x11, 0x96, 0x45,
-  0xed, 0x7f, 0xd1, 0xb7, 0xbc, 0xe1, 0x9e, 0xd6, 0x46, 0x66, 0x05, 0xae,
-  0x27, 0x0a, 0x14, 0x91, 0x36, 0x1f, 0x96, 0x41, 0xd4, 0x7f, 0xd9, 0xef,
-  0xcc, 0x4a, 0xaf, 0xbf, 0x23, 0xa6, 0x03, 0x01, 0x12, 0x9b, 0x3a, 0xe7,
-  0x23, 0xed, 0xc3, 0x75, 0x4a, 0x82, 0x6e, 0xa6, 0xbe, 0x28, 0xce, 0xf0,
-  0xd7, 0xf8, 0x8f, 0xa6, 0x18, 0x06, 0x55, 0x32, 0x56, 0xd9, 0xde, 0x0d,
-  0x15, 0x23, 0xed, 0xff, 0x41, 0x47, 0xe0, 0x0a, 0xfe, 0x00, 0xfe, 0xef,
-  0x32, 0xf7, 0x60, 0x5f, 0x2d, 0x2c, 0x36, 0x1e, 0x43, 0xdb, 0xfd, 0xec,
-  0xab, 0x1c, 0x8a, 0x78, 0x22, 0xa5, 0x9f, 0x50, 0x4a, 0x5b, 0x2a, 0xeb,
-  0x5e, 0x5b, 0x99, 0xe6, 0xd4, 0x44, 0x47, 0x21, 0x18, 0xa6, 0x92, 0xb4,
-  0x0d, 0x91, 0x6e, 0x82, 0x96, 0x53, 0xd8, 0x7c, 0xa5, 0x0f, 0x80, 0xe6,
-  0x14, 0x9c, 0x5f, 0x97, 0x03, 0xa8, 0xee, 0xb2, 0xa3, 0x6a, 0x89, 0x31,
-  0x45, 0xf3, 0xb8, 0xfa, 0xb3, 0x27, 0xd9, 0x13, 0x96, 0xf8, 0xc1, 0x9a,
-  0x31, 0x1e, 0x4c, 0x32, 0x68, 0x20, 0xea, 0xc8, 0x18, 0xb4, 0x61, 0xa7,
-  0x05, 0x09, 0xc1, 0xb2, 0x90, 0x9d, 0xe6, 0x54, 0x57, 0xfb, 0x2d, 0x46,
-  0xe2, 0xd7, 0x6a, 0x8e, 0xb5, 0xc6, 0x42, 0xcd, 0xb1, 0xc3, 0x9b, 0x1a,
-  0x66, 0xd0, 0xd5, 0xf1, 0x64, 0x91, 0x34, 0x17, 0xf0, 0xaa, 0x3b, 0x7e,
-  0x10, 0x51, 0x1e, 0x7c, 0x48, 0xa3, 0x97, 0x22, 0xab, 0xac, 0x4f, 0x08,
-  0xb6, 0x60, 0x83, 0xc0, 0x94, 0x10, 0x61, 0xe5, 0x90, 0xd3, 0x66, 0x30,
-  0xce, 0x6c, 0xfa, 0x9a, 0x27, 0xec, 0x3a, 0x83, 0xc3, 0xa4, 0x65, 0xd9,
-  0x85, 0x2d, 0x0f, 0x41, 0x32, 0xd2, 0x4a, 0xa4, 0x42, 0x5e, 0x55, 0x38,
-  0x7f, 0x1f, 0xb3, 0x25, 0x05, 0xa3, 0xd1, 0x80, 0x91, 0x2a, 0xf9, 0xc8,
-  0x4a, 0xfa, 0xc7, 0x96, 0x23, 0x41, 0x51, 0x74, 0x43, 0xce, 0x65, 0xc1,
-  0x0c, 0x5a, 0xf1, 0x59, 0x7b, 0x69, 0x89, 0xa7, 0x88, 0x59, 0x8c, 0x5b,
-  0xe0, 0xe8, 0x15, 0x38, 0x7e, 0xd4, 0x93, 0xf1, 0xb0, 0x67, 0x22, 0x57,
-  0xc9, 0x9f, 0x5b, 0x80, 0xe5, 0x43, 0x81, 0x38, 0x62, 0xc9, 0x11, 0xd5,
-  0xf6, 0xa5, 0x46, 0xe8, 0x46, 0x07, 0x46, 0x27, 0x86, 0xd8, 0xfb, 0xd2,
-  0x0c, 0x28, 0x3d, 0xf3, 0x95, 0xfa, 0x4a, 0xa5, 0x66, 0x6d, 0xa8, 0xc2,
-  0x55, 0xe9, 0x70, 0x2b, 0x89, 0x3b, 0x18, 0x00, 0x14, 0xbc, 0x6b, 0xd4,
-  0xe8, 0xb0, 0xd7, 0x5d, 0x95, 0xc0, 0xad, 0x01, 0x62, 0x0b, 0xc1, 0x5e,
-  0x54, 0x01, 0x31, 0x6b, 0x8f, 0xf4, 0x62, 0xb7, 0x18, 0x97, 0x99, 0xaa,
-  0xd2, 0x6a, 0xd5, 0xf6, 0xd4, 0x28, 0xee, 0x1f, 0x9c, 0x70, 0x60, 0xe2,
-  0xbc, 0x13, 0xde, 0x53, 0x86, 0x83, 0xc4, 0xd6, 0xa1, 0x0a, 0xb1, 0xcd,
-  0x6a, 0x72, 0x9a, 0x38, 0xd0, 0xe5, 0xa6, 0x71, 0xe3, 0x80, 0x65, 0x02,
-  0x3f, 0xba, 0xba, 0xa7, 0x86, 0x1a, 0xf8, 0xfd, 0x7f, 0xd8, 0x97, 0x00,
-  0xba, 0xfc, 0xbb, 0x2d, 0x96, 0x0e, 0x3b, 0x6e, 0x55, 0x16, 0x07, 0x83,
-  0xfb, 0x3d, 0x16, 0x05, 0x30, 0xdd, 0xb2, 0x32, 0xc0, 0xe0, 0xe1, 0xe6,
-  0x7e, 0x3f, 0x72, 0xde, 0x70, 0x6b, 0xc2, 0x6a, 0xcf, 0x77, 0x00, 0xe8,
-  0xca, 0x31, 0xfe, 0x29, 0xe3, 0xaa, 0x78, 0x56, 0x95, 0x5e, 0xa1, 0x2d,
-  0x64, 0x1b, 0x7f, 0x2a, 0xa4, 0x5a, 0x5b, 0x54, 0xc5, 0x13, 0xc1, 0x19,
-  0xd6, 0xcf, 0xdb, 0x56, 0x2f, 0x8e, 0x35, 0xd9, 0xc7, 0x6e, 0xfc, 0x7e,
-  0x28, 0x20, 0xa6, 0x4a, 0xe8, 0x8a, 0x49, 0x6c, 0x9f, 0xc9, 0xb6, 0xdc,
-  0xa5, 0xd9, 0x93, 0xbd, 0x61, 0x20, 0xe9, 0x0c, 0x3a, 0xc3, 0xf5, 0xd8,
-  0x1a, 0x98, 0x4f, 0xa7, 0xf0, 0xb5, 0x4d, 0x85, 0x39, 0xfc, 0x5e, 0x11,
-  0x70, 0x90, 0xe8, 0x25, 0x10, 0x0d, 0x33, 0x93, 0x1b, 0x56, 0x1e, 0x52,
-  0xa6, 0xd3, 0xc5, 0xd5, 0x49, 0x3c, 0xc1, 0xee, 0x38, 0x90, 0xaa, 0xae,
-  0x78, 0x26, 0x3e, 0xa1, 0x34, 0xd0, 0x0f, 0x70, 0xa9, 0x29, 0xdd, 0x1d,
-  0xca, 0x67, 0xc3, 0x0b, 0x7c, 0x66, 0x58, 0x58, 0x9a, 0xad, 0x9c, 0xcc,
-  0x5c, 0x4c, 0xeb, 0xa0, 0x8d, 0x18, 0x14, 0x75, 0x85, 0x02, 0x71, 0x74,
-  0x2c, 0x9d, 0xee, 0xd6, 0x38, 0xed, 0x30, 0x7d, 0x90, 0x62, 0x52, 0xc4,
-  0xad, 0x1f, 0x6e, 0x0d, 0x16, 0x8c, 0x39, 0xc9, 0x34, 0x56, 0x52, 0x42,
-  0x4c, 0x99, 0x8e, 0x8c, 0x2d, 0xd8, 0x4d, 0x31, 0xbe, 0x5a, 0x35, 0xba,
-  0xa3, 0x2e, 0x29, 0x2a, 0x55, 0x50, 0xb5, 0xa0, 0xb2, 0x21, 0xdd, 0x72,
-  0x86, 0xd2, 0x51, 0xe5, 0x73, 0x09, 0x89, 0xe0, 0x96, 0x1f, 0x99, 0x2b,
-  0xa7, 0xa3, 0x0a, 0x6e, 0x6d, 0x50, 0x42, 0xa9, 0x0e, 0xbe, 0x04, 0x36,
-  0x64, 0xd2, 0xd4, 0x23, 0x55, 0xd4, 0xd4, 0x16, 0x12, 0x1d, 0x23, 0x41,
-  0x3c, 0x97, 0x28, 0x27, 0x0c, 0x0f, 0xd8, 0xc3, 0x13, 0xc3, 0x43, 0x35,
-  0xff, 0xdc, 0xc3, 0xcd, 0xb9, 0x71, 0xc8, 0x55, 0x3d, 0x0c, 0x84, 0xb4,
-  0x51, 0x33, 0xb7, 0x6c, 0xb7, 0x15, 0x6a, 0x7c, 0x59, 0x2d, 0x3f, 0x00,
-  0x60, 0xf4, 0x03, 0x00, 0xc7, 0x2e, 0x02, 0x2b, 0x04, 0x3e, 0xc0, 0x72,
-  0x09, 0x26, 0x1c, 0xe9, 0xec, 0xa9, 0x56, 0x16, 0x9a, 0xe7, 0x22, 0x86,
-  0xb5, 0x62, 0x28, 0xdb, 0x2b, 0xd7, 0xa8, 0x93, 0x60, 0xee, 0xa2, 0x46,
-  0x12, 0xd9, 0xd3, 0xd6, 0xc0, 0x38, 0x34, 0xe3, 0x03, 0x90, 0x58, 0x1c,
-  0x85, 0xd0, 0x1d, 0x92, 0x14, 0x0c, 0x55, 0xdf, 0x80, 0x6a, 0x01, 0x9d,
-  0x48, 0x2e, 0xed, 0x2a, 0xb3, 0x90, 0x90, 0x87, 0x07, 0x06, 0x3d, 0x41,
-  0xeb, 0x45, 0x6a, 0x75, 0x1a, 0x8e, 0x98, 0xc2, 0x2e, 0xd2, 0x30, 0x59,
-  0x56, 0x77, 0x01, 0x05, 0xbc, 0x53, 0x8f, 0xcc, 0x13, 0x69, 0x28, 0x7b,
-  0x91, 0xfa, 0x9e, 0xd2, 0xd8, 0xe3, 0x20, 0xca, 0x14, 0x70, 0x4e, 0x30,
-  0x61, 0xd6, 0x09, 0xae, 0xf3, 0xbb, 0x47, 0x0f, 0x97, 0x04, 0xc2, 0xf0,
-  0x55, 0x3e, 0x5a, 0xb3, 0x32, 0x5a, 0xb0, 0xbe, 0xb1, 0x32, 0xf5, 0x05,
-  0xd1, 0x15, 0xf1, 0xc2, 0x5b, 0x47, 0xd8, 0x5c, 0xb4, 0x06, 0x05, 0x27,
-  0x8a, 0x36, 0x1d, 0xb0, 0xaa, 0x54, 0xbe, 0xb1, 0xd8, 0x1d, 0x3d, 0x93,
-  0x5a, 0xee, 0xe6, 0xb1, 0xe6, 0xc0, 0x5b, 0x5a, 0x18, 0x05, 0xed, 0x0d,
-  0x47, 0x34, 0xe0, 0x87, 0x74, 0x19, 0xb0, 0x84, 0xa0, 0xbe, 0xbb, 0xc3,
-  0xed, 0x93, 0xa0, 0x41, 0x26, 0xc9, 0x00, 0xcc, 0x8f, 0x0f, 0xd1, 0x63,
-  0xe3, 0x98, 0x22, 0xfc, 0x21, 0x12, 0x38, 0x8b, 0x20, 0xb5, 0x78, 0x68,
-  0xb2, 0x87, 0xda, 0x94, 0x8e, 0xcf, 0x6e, 0x9f, 0xb6, 0x4d, 0x48, 0x8d,
-  0xff, 0xe8, 0xa1, 0xe7, 0xf5, 0xc3, 0xf5, 0xa2, 0x23, 0x0d, 0x49, 0xa6,
-  0x24, 0x90, 0x62, 0x3a, 0x25, 0x19, 0x7e, 0x98, 0x1e, 0xa2, 0x3e, 0x11,
-  0xf0, 0x81, 0xc6, 0x30, 0x1f, 0x1e, 0x43, 0x30, 0x87, 0x47, 0x47, 0x42,
-  0x7d, 0x19, 0xc9, 0x70, 0xfd, 0xd4, 0x77, 0x0a, 0xd5, 0x45, 0x7d, 0xd3,
-  0x6d, 0x1b, 0xb9, 0x6f, 0x80, 0x9a, 0xa1, 0x57, 0x9e, 0x0c, 0xa5, 0x5b,
-  0x4a, 0x8c, 0x3a, 0x84, 0xc6, 0x47, 0x41, 0x28, 0x78, 0x0c, 0x06, 0xa7,
-  0x50, 0xba, 0x31, 0xd0, 0x10, 0xfc, 0x87, 0x8a, 0xc0, 0x89, 0xc8, 0x77,
-  0xa9, 0xe3, 0x9b, 0x78, 0xea, 0xfd, 0x75, 0x84, 0xd6, 0x1e, 0x87, 0x75,
-  0xf7, 0x01, 0x54, 0xac, 0xa6, 0x53, 0xc3, 0x7a, 0x72, 0x38, 0x22, 0xb1,
-  0xae, 0x86, 0xd9, 0x3f, 0x87, 0x62, 0x15, 0xc8, 0xe7, 0x8f, 0xac, 0x05,
-  0x07, 0x0e, 0xba, 0x09, 0x69, 0xb6, 0x8c, 0x5d, 0xd9, 0x0a, 0x5c, 0xc1,
-  0xa0, 0x0b, 0xe0, 0x14, 0x53, 0x4e, 0xbd, 0x79, 0xb8, 0x39, 0x56, 0xde,
-  0xc3, 0x12, 0x85, 0x2e, 0x9d, 0x00, 0x58, 0x25, 0x62, 0xce, 0xa1, 0xfb,
-  0xd0, 0xcf, 0xfa, 0x53, 0x18, 0x55, 0xc7, 0x92, 0x30, 0x83, 0x76, 0x87,
-  0xef, 0xc2, 0xf3, 0xec, 0xfa, 0x11, 0xfc, 0x6f, 0x13, 0xea, 0x9a, 0xc3,
-  0xd6, 0x38, 0x4f, 0x8f, 0xcd, 0xa1, 0x93, 0xc4, 0x75, 0x0e, 0x76, 0xda,
-  0x82, 0x39, 0xac, 0x3b, 0x6d, 0xbf, 0xd5, 0x61, 0xe3, 0x68, 0xb5, 0x0f,
-  0x86, 0xec, 0x2a, 0x23, 0x11, 0xd0, 0x29, 0x8f, 0xd3, 0x24, 0x31, 0x66,
-  0xc2, 0xa7, 0x99, 0xda, 0xed, 0xe9, 0x8e, 0xd8, 0x30, 0xb4, 0xa6, 0xa6,
-  0x85, 0xe8, 0xa1, 0xd6, 0xcc, 0xb9, 0xea, 0x9a, 0x82, 0xf2, 0xfe, 0x08,
-  0xb9, 0x72, 0x8d, 0x8d, 0xce, 0x1e, 0xed, 0x20, 0x7c, 0xda, 0xf8, 0xa5,
-  0x88, 0xcf, 0x27, 0x1d, 0xd4, 0xf0, 0x98, 0x75, 0x77, 0xad, 0x31, 0xab,
-  0x9f, 0xd8, 0xf5, 0xda, 0x30, 0x5b, 0x92, 0xe4, 0x93, 0x99, 0xdf, 0x07,
-  0x6e, 0x2b, 0x66, 0x83, 0x61, 0x00, 0xbb, 0x2b, 0xcf, 0x04, 0x82, 0x26,
-  0xc9, 0x8a, 0xe5, 0xaa, 0x10, 0x48, 0xb0, 0xc7, 0xef, 0x68, 0xd3, 0xa5,
-  0x5d, 0x7b, 0x1c, 0x4b, 0xc8, 0xa3, 0x5b, 0x32, 0x3a, 0x22, 0xc0, 0x9a,
-  0xd6, 0x8c, 0xca, 0x4d, 0x31, 0x1c, 0x95, 0x7e, 0xd8, 0x1c, 0x93, 0x1f,
-  0xd4, 0x2f, 0x1c, 0x95, 0xb4, 0xf7, 0x29, 0x63, 0x2a, 0xe7, 0x1f, 0x68,
-  0x0c, 0xe9, 0xe5, 0x3d, 0x6d, 0x7b, 0x49, 0x82, 0xf8, 0xe3, 0xd2, 0x7a,
-  0x24, 0x0f, 0x1a, 0xd1, 0x31, 0x22, 0x02, 0x0d, 0xbb, 0x88, 0xa6, 0x49,
-  0x51, 0x49, 0x8d, 0x64, 0x80, 0x56, 0xe0, 0xd7, 0x47, 0x48, 0x50, 0x7d,
-  0x14, 0x2a, 0xb2, 0x38, 0x65, 0x64, 0xc4, 0xc0, 0x80, 0x30, 0x72, 0x41,
-  0xc1, 0xd5, 0xb6, 0x3a, 0xf2, 0x76, 0xa2, 0xa6, 0xe9, 0xb5, 0x0c, 0x6a,
-  0x55, 0x8d, 0x1e, 0x00, 0x13, 0x75, 0xfd, 0x93, 0xa2, 0x12, 0x2f, 0x97,
-  0x7a, 0xc4, 0x3f, 0x61, 0xee, 0x02, 0xe6, 0x04, 0x72, 0x57, 0x48, 0x2e,
-  0x05, 0x48, 0xac, 0xf2, 0xfc, 0xc6, 0x97, 0x96, 0x83, 0xd1, 0xee, 0xe1,
-  0xe6, 0x04, 0x8d, 0x4f, 0x57, 0x70, 0x7b, 0x3c, 0xfe, 0x86, 0x61, 0x3a,
-  0x1d, 0xb7, 0xd9, 0xf6, 0x9e, 0x3f, 0x88, 0x5e, 0x9f, 0x70, 0x09, 0xba,
-  0x8a, 0x94, 0x58, 0x07, 0x67, 0xec, 0xf9, 0xd4, 0x65, 0xa8, 0x8b, 0x95,
-  0xbf, 0xc9, 0x44, 0x2f, 0x0e, 0xcf, 0x22, 0xd7, 0x8d, 0xce, 0xaa, 0x5e,
-  0x64, 0x95, 0x51, 0xad, 0x1f, 0xa1, 0x73, 0x15, 0x48, 0xeb, 0x73, 0xec,
-  0x9c, 0x11, 0xab, 0x43, 0x6c, 0x72, 0x5c, 0x2d, 0xff, 0x1f, 0xda, 0x58,
-  0xe8, 0x63, 0x92, 0x48, 0x0c, 0x03, 0xee, 0xe3, 0x43, 0xe6, 0x92, 0x4d,
-  0xdd, 0x25, 0xcc, 0x3a, 0xc6, 0x2c, 0x43, 0x96, 0x1c, 0xba, 0xe6, 0x80,
-  0xb5, 0x32, 0x82, 0x24, 0xfd, 0x7c, 0xea, 0x98, 0x7d, 0x1e, 0x86, 0x03,
-  0x8a, 0xe3, 0x31, 0x4b, 0xe1, 0x39, 0x83, 0xb6, 0x9c, 0x24, 0xa4, 0xff,
-  0x7d, 0x8a, 0x16, 0xae, 0x06, 0x61, 0x41, 0x76, 0x66, 0x04, 0x04, 0xd7,
-  0xa8, 0x2f, 0x29, 0x46, 0xa2, 0x3c, 0x47, 0x1c, 0x3e, 0xca, 0x26, 0x62,
-  0x4d, 0xf3, 0x42, 0xed, 0x4d, 0x6f, 0x99, 0x9a, 0x9a, 0x9a, 0x89, 0x5a,
-  0x11, 0xd3, 0x15, 0x87, 0x2f, 0x75, 0xe4, 0xe3, 0xb5, 0x54, 0xd3, 0x69,
-  0x3e, 0x17, 0x9f, 0xcc, 0x2d, 0xd0, 0x75, 0xbb, 0xf7, 0xc2, 0xcb, 0x5d,
-  0xdd, 0x8b, 0x9d, 0x56, 0x4a, 0x1b, 0x0a, 0xd0, 0x69, 0xcf, 0x3f, 0xca,
-  0xa6, 0x88, 0xc5, 0x2d, 0xcb, 0x20, 0x32, 0x01, 0x64, 0x22, 0x84, 0x3a,
-  0xb0, 0xf3, 0x81, 0x4a, 0x65, 0x9f, 0x46, 0x0a, 0xb0, 0xc3, 0xd9, 0xd2,
-  0x1a, 0x00, 0xa4, 0x86, 0x7a, 0xb0, 0x77, 0x40, 0xbe, 0x54, 0xd0, 0x69,
-  0xde, 0xd0, 0xc7, 0x46, 0x17, 0x4b, 0xb9, 0xb8, 0xc6, 0x2a, 0x48, 0x58,
-  0x57, 0xed, 0x96, 0x49, 0x3e, 0x26, 0xed, 0xca, 0x1c, 0x9d, 0x2c, 0x3e,
-  0xd5, 0xd8, 0x63, 0x9f, 0x12, 0x12, 0xac, 0x56, 0x10, 0x9c, 0xf4, 0x29,
-  0x52, 0x6c, 0x97, 0x60, 0x8f, 0xa1, 0x62, 0xe4, 0x9f, 0x7e, 0x7c, 0x7e,
-  0x93, 0x23, 0x2f, 0xd1, 0x35, 0x28, 0x1e, 0xd1, 0x75, 0x74, 0xa2, 0x4f,
-  0x55, 0xaa, 0x80, 0x29, 0x66, 0xd6, 0x2c, 0x3b, 0x48, 0x4d, 0x16, 0x21,
-  0x16, 0xcf, 0x36, 0x10, 0x6a, 0x87, 0x64, 0xa0, 0x78, 0xa8, 0x60, 0x07,
-  0x1a, 0x33, 0xc3, 0x30, 0xca, 0x89, 0xd4, 0xa7, 0x22, 0xd1, 0x7c, 0xce,
-  0xa7, 0xa7, 0x4a, 0x3e, 0xe9, 0xa6, 0xe1, 0xeb, 0xbf, 0xfb, 0xcc, 0x88,
-  0xc4, 0xe6, 0x57, 0xd8, 0x01, 0xae, 0xd6, 0x8f, 0x8e, 0x65, 0xe3, 0x49,
-  0x58, 0x25, 0x1c, 0x80, 0x9f, 0x42, 0x46, 0x6c, 0xc2, 0x48, 0xb4, 0x18,
-  0x16, 0x26, 0xe4, 0x70, 0x2a, 0xc5, 0xff, 0x91, 0x68, 0xed, 0xbe, 0x45,
-  0xfa, 0xa8, 0xaa, 0x96, 0x2a, 0xd0, 0x2e, 0xb8, 0xf3, 0xaa, 0xd3, 0xe2,
-  0x8a, 0x8c, 0x1a, 0x33, 0x62, 0xca, 0x84, 0xe0, 0x20, 0x76, 0x26, 0x27,
-  0x76, 0x13, 0x27, 0x52, 0xee, 0xc4, 0xe7, 0xb1, 0x40, 0xbd, 0x60, 0xe1,
-  0xe5, 0x91, 0x11, 0x78, 0xb3, 0x24, 0x3b, 0xc7, 0x90, 0xa9, 0x38, 0x9f,
-  0xf9, 0x68, 0x0c, 0xd5, 0x81, 0x7d, 0xb9, 0xac, 0xfd, 0x87, 0x9b, 0x53,
-  0x67, 0xdd, 0x6f, 0x51, 0xac, 0x21, 0x40, 0x68, 0x78, 0xf9, 0xa3, 0xa5,
-  0xd6, 0xee, 0x6f, 0x6f, 0xff, 0xfc, 0x63, 0x2d, 0x92, 0xe2, 0xcb, 0x9f,
-  0x7f, 0x79, 0x69, 0x68, 0x41, 0x24, 0xea, 0xf4, 0x93, 0x68, 0x68, 0x85,
-  0x3a, 0x9f, 0x5a, 0x3e, 0x22, 0x0d, 0x07, 0x0b, 0x86, 0xe3, 0x4a, 0x3b,
-  0xe6, 0xeb, 0xca, 0x2d, 0xd7, 0xb1, 0xcf, 0x3f, 0xfa, 0x22, 0x8a, 0xa5,
-  0x54, 0xca, 0x76, 0x88, 0x4e, 0x83, 0x28, 0x80, 0xf1, 0x19, 0x74, 0x62,
-  0x58, 0x70, 0x87, 0x1c, 0x49, 0xe8, 0x91, 0x57, 0xe0, 0x2a, 0x12, 0xc5,
-  0x29, 0x98, 0xe4, 0x54, 0xe0, 0x45, 0x5c, 0xa0, 0x7d, 0x17, 0x7a, 0xbb,
-  0xc0, 0xd8, 0xbe, 0xcb, 0x3d, 0xdc, 0x45, 0x00, 0x18, 0xa2, 0x79, 0x6a,
-  0x7a, 0xd4, 0xe7, 0x02, 0x12, 0x5f, 0x7a, 0x5c, 0xbf, 0x16, 0xaa, 0x2f,
-  0x97, 0x32, 0x83, 0xc3, 0xc6, 0x95, 0xb6, 0x16, 0xa0, 0xd0, 0x0b, 0xc9,
-  0x55, 0xd7, 0x0e, 0x14, 0x3e, 0xcf, 0x5b, 0x27, 0xd3, 0xac, 0x2b, 0x7c,
-  0x54, 0x90, 0x3f, 0xba, 0x41, 0x45, 0x1f, 0x86, 0x3a, 0x31, 0x5b, 0x92,
-  0xac, 0xb4, 0x6c, 0xa3, 0xb2, 0xd7, 0x96, 0xcb, 0xc3, 0xe0, 0x50, 0x84,
-  0x45, 0xae, 0x87, 0x3f, 0xe9, 0x80, 0xf5, 0xa1, 0x3b, 0x28, 0x15, 0x7c,
-  0xe0, 0xae, 0xac, 0x69, 0x95, 0x18, 0xca, 0xa4, 0x23, 0xee, 0x4e, 0x47,
-  0x66, 0x79, 0xb9, 0xc7, 0x1a, 0xd8, 0xd6, 0x5f, 0x9b, 0x82, 0x8d, 0x64,
-  0x15, 0x09, 0x1a, 0x68, 0xc5, 0x67, 0x0a, 0xd8, 0x8a, 0x83, 0x3f, 0x91,
-  0x1c, 0x74, 0x69, 0xbd, 0x87, 0x64, 0x54, 0x1b, 0x71, 0x57, 0x36, 0xc1,
-  0x81, 0xf1, 0xc0, 0x86, 0x90, 0xa3, 0xa1, 0x60, 0x9c, 0xdc, 0x8b, 0x70,
-  0xd5, 0x2c, 0xac, 0x56, 0xae, 0x89, 0x70, 0x1d, 0x97, 0x09, 0xc9, 0x42,
-  0x62, 0xdb, 0x90, 0x02, 0x21, 0x8c, 0xab, 0x29, 0x6b, 0xcb, 0x6f, 0x7b,
-  0x60, 0x7d, 0x17, 0x34, 0x4c, 0xdf, 0x23, 0x78, 0xcf, 0x88, 0xa3, 0xbb,
-  0x02, 0xfb, 0x34, 0x1c, 0xa2, 0xf8, 0xf8, 0xb5, 0x90, 0xb3, 0xf3, 0x45,
-  0x79, 0x26, 0x08, 0xa8, 0x5a, 0x96, 0x14, 0xe2, 0x36, 0x60, 0xdf, 0xa5,
-  0x5b, 0xa6, 0x6a, 0x45, 0xa2, 0xce, 0xbc, 0x5d, 0x33, 0x1d, 0xfe, 0x4a,
-  0x61, 0x48, 0x9a, 0xa5, 0x34, 0x5c, 0x1a, 0x0f, 0x6a, 0x4e, 0xf6, 0x5e,
-  0x1b, 0x59, 0xe3, 0x35, 0x7b, 0xaf, 0x61, 0x7c, 0x41, 0xf4, 0x56, 0x2d,
-  0xa8, 0xdc, 0x57, 0x48, 0x6b, 0x53, 0x2b, 0xef, 0xc1, 0x46, 0xdb, 0x24,
-  0x87, 0xaa, 0x24, 0x3e, 0xb8, 0x43, 0x27, 0x5d, 0x07, 0x32, 0xe1, 0xde,
-  0x70, 0xe1, 0xa9, 0x47, 0x51, 0x4b, 0x2a, 0xb5, 0x71, 0x22, 0x0a, 0x28,
-  0xac, 0x28, 0xec, 0xf1, 0xa5, 0xcf, 0x86, 0xfd, 0xfd, 0xd3, 0x1d, 0x66,
-  0x2e, 0xd6, 0x4a, 0x1c, 0x06, 0x4d, 0xfd, 0xfe, 0x49, 0xfc, 0x10, 0xc3,
-  0x84, 0x12, 0xd5, 0xe2, 0x96, 0x52, 0xe0, 0x87, 0x4b, 0xa3, 0xc3, 0xb7,
-  0x70, 0x17, 0x5b, 0xf0, 0xa7, 0xbc, 0xd5, 0x42, 0x3b, 0xed, 0x38, 0x49,
-  0x83, 0x20, 0x7b, 0xa1, 0x0a, 0x59, 0x89, 0xf1, 0xdd, 0x68, 0x53, 0x59,
-  0xd5, 0x56, 0x47, 0x34, 0x0b, 0x06, 0xc0, 0x25, 0x60, 0xe1, 0x4d, 0xe2,
-  0x4d, 0xf9, 0xe3, 0xfa, 0xa0, 0xe6, 0x7f, 0xdc, 0xd5, 0xf5, 0x83, 0x14,
-  0x4a, 0x11, 0xae, 0xbc, 0xb6, 0xec, 0xb7, 0x84, 0xb6, 0x8f, 0x5d, 0x02,
-  0xb5, 0xab, 0x1a, 0x62, 0x6f, 0x6a, 0x42, 0x5c, 0x98, 0x72, 0xca, 0x6d,
-  0xad, 0x32, 0xb6, 0x4a, 0x74, 0xc0, 0x4a, 0x7b, 0xc2, 0xc5, 0x81, 0x75,
-  0x79, 0x52, 0x17, 0xb5, 0xcb, 0xcf, 0x99, 0xd9, 0x3c, 0x44, 0x6b, 0x47,
-  0xfd, 0x0c, 0x0b, 0xa4, 0x0f, 0x3c, 0x1e, 0x32, 0x1a, 0x5f, 0x2d, 0x04,
-  0xab, 0xa3, 0xf5, 0x12, 0xc2, 0xcc, 0xc8, 0xaf, 0x8f, 0x2e, 0xb6, 0xda,
-  0x38, 0xbb, 0x1a, 0xcd, 0x80, 0x91, 0xa1, 0x68, 0x96, 0x9e, 0xef, 0xd8,
-  0x15, 0xa5, 0x71, 0xc9, 0xc1, 0x12, 0x88, 0x94, 0x7c, 0x24, 0xd9, 0x2a,
-  0xeb, 0xc6, 0xcb, 0x3c, 0xa4, 0x65, 0x60, 0x86, 0x1c, 0x04, 0x23, 0x69,
-  0xf4, 0x90, 0x95, 0x43, 0x09, 0xf4, 0x1c, 0x06, 0x22, 0xe0, 0x16, 0x5f,
-  0x1f, 0x9d, 0x1c, 0x5d, 0x1c, 0x21, 0xb9, 0xa4, 0x65, 0xc8, 0x9d, 0xe3,
-  0xf6, 0xaa, 0x92, 0xe9, 0x75, 0x46, 0x34, 0x7f, 0xc5, 0xdb, 0x81, 0xdc,
-  0xee, 0xef, 0x93, 0xc9, 0xeb, 0x83, 0xef, 0xb8, 0xea, 0x1b, 0x9f, 0x99,
-  0xb3, 0xf3, 0xd3, 0xb3, 0x37, 0xc7, 0xef, 0x5e, 0x0f, 0xa2, 0xc3, 0xd3,
-  0xb3, 0x3f, 0x0f, 0xa2, 0xb7, 0xa7, 0xdf, 0x1d, 0x75, 0x44, 0xeb, 0x72,
-  0xfc, 0x59, 0x47, 0xe0, 0x93, 0xd6, 0x56, 0xd1, 0xf2, 0x03, 0x80, 0xa8,
-  0x96, 0x9a, 0x22, 0xf5, 0x80, 0x75, 0x66, 0xcb, 0x25, 0x32, 0xe2, 0x69,
-  0xe9, 0x69, 0x2d, 0x07, 0xd1, 0x37, 0x47, 0x07, 0xaf, 0x9b, 0xe2, 0xc0,
-  0xd9, 0xe9, 0x58, 0x66, 0xc5, 0xb3, 0x73, 0x93, 0x66, 0xf6, 0x4d, 0xcc,
-  0x92, 0xed, 0xdc, 0xac, 0x64, 0xde, 0x24, 0x01, 0x4e, 0x28, 0x1d, 0x01,
-  0x18, 0xc9, 0x66, 0x6b, 0x2b, 0x46, 0x23, 0x06, 0xc2, 0x05, 0xdb, 0x3d,
-  0x7c, 0x13, 0x22, 0xe5, 0xc6, 0x60, 0xf9, 0x85, 0x40, 0xc4, 0xb9, 0xc0,
-  0xee, 0x82, 0x62, 0xa6, 0x38, 0xd0, 0xca, 0xde, 0x78, 0x6b, 0x36, 0x3a,
-  0x9d, 0x27, 0x52, 0x8b, 0xc9, 0x20, 0x86, 0x20, 0x2a, 0x49, 0xf4, 0x43,
-  0xac, 0x31, 0x6c, 0x93, 0x84, 0x23, 0x6c, 0x4a, 0xd4, 0x14, 0x02, 0x91,
-  0x68, 0x14, 0x74, 0x9b, 0xbd, 0xcb, 0xba, 0x4a, 0x24, 0x99, 0x45, 0x39,
-  0x41, 0x52, 0x63, 0x33, 0x24, 0x2f, 0xa1, 0xef, 0x53, 0x83, 0xb3, 0x7e,
-  0x90, 0x8f, 0x3b, 0xc0, 0x29, 0x20, 0x52, 0xac, 0x2e, 0x89, 0x3c, 0x13,
-  0x09, 0x17, 0xc1, 0x3e, 0xe9, 0x41, 0xc4, 0xcd, 0x70, 0xcc, 0x47, 0xfc,
-  0x1a, 0xa9, 0x26, 0xdd, 0x57, 0xc0, 0xe6, 0x9b, 0x35, 0xa7, 0x3b, 0x2c,
-  0x74, 0xa6, 0x2d, 0x06, 0x59, 0x2b, 0x27, 0xc7, 0xb4, 0xaf, 0x7c, 0xd4,
-  0x9b, 0x81, 0x88, 0x08, 0x36, 0x94, 0x12, 0xb5, 0x29, 0x6f, 0x35, 0xce,
-  0x3a, 0xb5, 0xd5, 0xee, 0x98, 0xb1, 0x91, 0x3b, 0x7b, 0xe6, 0x2f, 0x1e,
-  0xeb, 0xba, 0x65, 0x06, 0x3b, 0x3f, 0xba, 0x38, 0x6f, 0x78, 0xf5, 0x9f,
-  0x77, 0xd8, 0xf2, 0x36, 0x19, 0x8a, 0xb9, 0xb3, 0x57, 0xfe, 0x62, 0x5d,
-  0xaf, 0xe0, 0x2e, 0xdc, 0xef, 0x43, 0x69, 0xc7, 0x4f, 0xba, 0x80, 0x94,
-  0x37, 0x05, 0xf3, 0xb9, 0xa3, 0x3f, 0xfe, 0xe2, 0x81, 0x59, 0x7e, 0x73,
-  0x74, 0x72, 0xd6, 0x9e, 0xe5, 0x77, 0xe7, 0x6f, 0xfe, 0x3c, 0x7a, 0x20,
-  0xa1, 0xf4, 0x1f, 0x1f, 0x16, 0xfc, 0x31, 0xae, 0xaa, 0x4e, 0x04, 0xf5,
-  0x32, 0x86, 0xd5, 0xce, 0x60, 0xe6, 0x2d, 0x12, 0xa4, 0x0e, 0x83, 0x27,
-  0xc8, 0xca, 0x81, 0xde, 0x46, 0x53, 0x6f, 0x89, 0x0d, 0x4e, 0xc4, 0xd2,
-  0x12, 0xd9, 0xc4, 0x5e, 0x25, 0xf1, 0x94, 0x3e, 0x73, 0x75, 0xf7, 0xf0,
-  0x1d, 0x8f, 0x25, 0x9d, 0x70, 0x45, 0x96, 0x51, 0x90, 0xb7, 0xdf, 0x21,
-  0xbc, 0x6a, 0x64, 0x2f, 0x7a, 0x73, 0xc7, 0xfb, 0xe3, 0xec, 0x6a, 0x94,
-  0x17, 0x29, 0xdb, 0xe7, 0xb4, 0x4e, 0x9e, 0x34, 0x16, 0xa1, 0x1a, 0x2c,
-  0x9f, 0x5a, 0x66, 0x00, 0x5d, 0xcd, 0x59, 0xc8, 0x90, 0x80, 0x06, 0x44,
-  0xed, 0xa6, 0x17, 0xd0, 0xee, 0xf9, 0x3b, 0xd7, 0xaa, 0xc9, 0xcc, 0x5d,
-  0x91, 0x75, 0xe5, 0x3d, 0xed, 0xf3, 0xc2, 0x33, 0x14, 0xd3, 0x37, 0xdc,
-  0x6c, 0xfd, 0x44, 0x39, 0xa2, 0x8b, 0xb8, 0x45, 0x01, 0x50, 0x91, 0xb6,
-  0x6e, 0x90, 0x92, 0x6e, 0x50, 0xdb, 0xb0, 0x7b, 0x04, 0x51, 0xb2, 0xa3,
-  0x44, 0x4b, 0x63, 0xf0, 0xbf, 0x9d, 0xc5, 0x90, 0x9c, 0xab, 0x87, 0x67,
-  0xc3, 0x0e, 0x65, 0x2d, 0xed, 0x20, 0x2f, 0x4b, 0x15, 0x87, 0x49, 0xc3,
-  0x41, 0xa2, 0xa1, 0xc9, 0x2d, 0xd4, 0x88, 0xa0, 0x43, 0x01, 0xa4, 0x19,
-  0xd4, 0x3c, 0x6e, 0x5c, 0x09, 0x10, 0x60, 0x1a, 0x62, 0x3a, 0xa3, 0xee,
-  0x83, 0x17, 0x5a, 0x73, 0xb2, 0xd2, 0x86, 0x01, 0xac, 0x5e, 0x30, 0x24,
-  0x23, 0xd4, 0x5d, 0x2b, 0x46, 0xc0, 0xea, 0x84, 0x80, 0x25, 0xfe, 0xf9,
-  0xb1, 0x92, 0x54, 0x12, 0x10, 0x5e, 0x07, 0x7e, 0x12, 0xf9, 0x6b, 0xa5,
-  0xb8, 0x16, 0x60, 0xef, 0xb0, 0x6a, 0x60, 0x4d, 0x36, 0x3a, 0x7d, 0x9d,
-  0x65, 0x94, 0x54, 0xd3, 0x1a, 0xc6, 0x10, 0x62, 0xd7, 0x89, 0x8e, 0x45,
-  0x42, 0x20, 0x0e, 0x3f, 0x88, 0xa4, 0xe8, 0x88, 0xc4, 0x43, 0xe9, 0x7b,
-  0xc3, 0x0e, 0x9b, 0x10, 0xdb, 0xbe, 0xd6, 0xb0, 0xe6, 0x7f, 0xdc, 0x29,
-  0xfe, 0xb3, 0x27, 0x0a, 0x59, 0xc4, 0x97, 0xf8, 0xe3, 0x17, 0x91, 0x45,
-  0x50, 0xf1, 0x43, 0xfc, 0x70, 0x9b, 0x44, 0xfb, 0x35, 0xfa, 0x18, 0xb6,
-  0xf2, 0x5d, 0x67, 0x5b, 0x92, 0x50, 0xe8, 0x37, 0x5b, 0x6d, 0x5c, 0x7c,
-  0x9d, 0xd6, 0x69, 0x22, 0x78, 0x06, 0xe9, 0x04, 0x6d, 0xa5, 0x54, 0xf6,
-  0x58, 0x92, 0x3d, 0x52, 0x2e, 0x78, 0xcb, 0xb7, 0x29, 0x4e, 0x4f, 0xf2,
-  0x5b, 0x62, 0xae, 0xfd, 0x0d, 0x98, 0x6b, 0x5c, 0x37, 0x13, 0x07, 0xe0,
-  0xe5, 0x2c, 0x86, 0x69, 0x17, 0x59, 0xf2, 0xd4, 0xf4, 0x17, 0xff, 0xd9,
-  0x5d, 0xb6, 0xd2, 0xea, 0x39, 0x2b, 0xde, 0xbf, 0xa4, 0xf0, 0x8b, 0xf3,
-  0x80, 0x55, 0x2c, 0x2e, 0x2a, 0x84, 0x8a, 0x80, 0x8b, 0x7c, 0xa6, 0x88,
-  0x63, 0x71, 0xe5, 0x97, 0x3a, 0xe9, 0x84, 0x87, 0x92, 0xa2, 0x41, 0x7c,
-  0x0a, 0x91, 0xdb, 0x44, 0x2b, 0xcb, 0xe3, 0x5e, 0xd3, 0x5e, 0x60, 0xeb,
-  0x6e, 0xe1, 0xa8, 0x6a, 0x75, 0x15, 0x16, 0xb8, 0x5b, 0xf3, 0x31, 0xf5,
-  0x28, 0x0e, 0xe5, 0x3b, 0x3c, 0x24, 0x7a, 0x5f, 0xd9, 0xbe, 0x95, 0x50,
-  0x16, 0xc3, 0x85, 0xa0, 0x0b, 0x00, 0x23, 0x87, 0x36, 0xbb, 0x7a, 0x95,
-  0x34, 0xcc, 0xd2, 0x70, 0xf3, 0x38, 0x3c, 0x03, 0x78, 0xf8, 0xb1, 0x8b,
-  0x67, 0xec, 0x8a, 0xef, 0x0f, 0x8a, 0xb0, 0x5d, 0x25, 0x95, 0x8b, 0x66,
-  0x9a, 0x79, 0x59, 0x5c, 0x06, 0xb5, 0xb9, 0xe0, 0xc9, 0x6c, 0x89, 0x3d,
-  0xba, 0x73, 0x2b, 0x1c, 0xce, 0x5f, 0x0d, 0x0c, 0x88, 0x1a, 0xe5, 0xf7,
-  0x19, 0x08, 0x88, 0x6e, 0x60, 0x20, 0xff, 0x68, 0x19, 0x3c, 0x34, 0x1b,
-  0xac, 0x48, 0x2b, 0xd5, 0xa2, 0xaa, 0x57, 0xfc, 0xb0, 0x3c, 0x19, 0xb6,
-  0x83, 0x5b, 0xb9, 0x95, 0x70, 0x45, 0xcd, 0x18, 0xc7, 0x88, 0x60, 0xd1,
-  0xe6, 0x70, 0xcb, 0x49, 0x7d, 0x28, 0x35, 0x26, 0xa4, 0xd1, 0x76, 0x5f,
-  0xc7, 0x2e, 0xe4, 0xd4, 0xe5, 0x47, 0x08, 0x50, 0xbf, 0x51, 0x88, 0xd2,
-  0x04, 0x77, 0xb6, 0x2d, 0x26, 0x64, 0xe3, 0x96, 0x69, 0x47, 0x7c, 0x78,
-  0xab, 0xb1, 0x2c, 0xb9, 0x0b, 0x1b, 0xf3, 0x7a, 0x97, 0x6b, 0xf0, 0x37,
-  0x3c, 0x53, 0xd7, 0x22, 0x95, 0xce, 0x97, 0x2d, 0x7b, 0x04, 0x7b, 0xfb,
-  0x23, 0xfe, 0xc6, 0xcc, 0xfb, 0x22, 0x45, 0xc6, 0x12, 0x71, 0x8e, 0xe2,
-  0x83, 0x21, 0xf2, 0x97, 0xc3, 0x2d, 0xec, 0x04, 0xe3, 0x28, 0xaf, 0xf9,
-  0x52, 0x75, 0x60, 0x02, 0xb5, 0x2a, 0x11, 0x6f, 0x07, 0xa8, 0x34, 0x94,
-  0xb5, 0xe3, 0x8c, 0xde, 0xe2, 0xc3, 0x51, 0xf4, 0x5a, 0xb3, 0x06, 0x90,
-  0xd5, 0xbf, 0xba, 0x4a, 0x30, 0x2c, 0x84, 0x91, 0x07, 0xcd, 0x7c, 0xa7,
-  0x29, 0x3e, 0x1d, 0x84, 0xa2, 0xef, 0x97, 0xb5, 0xb4, 0x03, 0x71, 0x76,
-  0x08, 0xcc, 0x58, 0x66, 0xb5, 0x9a, 0x26, 0xf8, 0xdb, 0x6c, 0xa0, 0x29,
-  0xa2, 0x5e, 0xcb, 0x51, 0x87, 0x15, 0x43, 0xdc, 0x27, 0x98, 0xb8, 0xf7,
-  0x7a, 0x98, 0x9f, 0xc0, 0xde, 0x67, 0x59, 0x55, 0xf2, 0x71, 0x5c, 0xd3,
-  0x5d, 0x60, 0x04, 0xd0, 0xbe, 0x9e, 0x14, 0x33, 0x38, 0x07, 0xef, 0xf9,
-  0xd1, 0x22, 0x2e, 0x44, 0xa1, 0xcc, 0x6e, 0xcc, 0x84, 0x2c, 0x96, 0x91,
-  0x64, 0xba, 0xaa, 0xea, 0x28, 0x8b, 0xa1, 0x65, 0xc5, 0x6a, 0xf2, 0x61,
-  0x58, 0x9b, 0x70, 0x07, 0xe9, 0x7e, 0xf4, 0xce, 0xcc, 0x82, 0xbc, 0xdf,
-  0xdb, 0x52, 0x0f, 0x99, 0x78, 0x3b, 0xf5, 0xe3, 0x2e, 0x44, 0x03, 0x1b,
-  0x73, 0x91, 0x08, 0xde, 0x1a, 0xf2, 0x88, 0x21, 0x1e, 0x75, 0x76, 0x4f,
-  0x14, 0x59, 0xcc, 0xba, 0xfa, 0x7e, 0x23, 0xa5, 0xac, 0x83, 0xae, 0x9d,
-  0xa9, 0x4e, 0xab, 0x5c, 0x97, 0xad, 0x1c, 0x8a, 0x56, 0xcf, 0x50, 0xa8,
-  0x49, 0xd7, 0x75, 0xf1, 0xe4, 0xf6, 0xaa, 0xad, 0x7f, 0x2b, 0xb8, 0x1c,
-  0xf1, 0x5a, 0x1e, 0xc9, 0x8e, 0xa5, 0x7a, 0x7c, 0xe4, 0x52, 0xfa, 0x5a,
-  0xb3, 0xb8, 0x29, 0x26, 0x4f, 0xe9, 0xc7, 0xb7, 0xfc, 0x83, 0x19, 0x10,
-  0x2b, 0x5e, 0x02, 0x1f, 0x2d, 0x08, 0x54, 0x6d, 0x4e, 0xc3, 0x95, 0x3a,
-  0xf4, 0x87, 0x6e, 0x7a, 0x69, 0xf9, 0x23, 0x9c, 0x7d, 0xe3, 0x6b, 0x8f,
-  0xc0, 0x17, 0x6c, 0xed, 0x0c, 0xcc, 0x96, 0xb6, 0xb1, 0x36, 0xfa, 0x68,
-  0x3c, 0x00, 0x4a, 0xb2, 0x14, 0x2e, 0x1a, 0x4b, 0x2e, 0x19, 0x2d, 0x42,
-  0x5b, 0x34, 0xa1, 0xa5, 0xfa, 0x1b, 0x9b, 0x66, 0x57, 0xa4, 0xc9, 0x10,
-  0x61, 0x4f, 0x61, 0xf6, 0x5b, 0x38, 0x8e, 0x87, 0x8a, 0xc4, 0x0e, 0xad,
-  0x46, 0xe0, 0xed, 0x60, 0xa4, 0x15, 0xe3, 0x47, 0xba, 0x66, 0x08, 0xeb,
-  0xa7, 0x8c, 0xbc, 0xcd, 0xa8, 0x33, 0x7d, 0xf3, 0xc1, 0xa5, 0x7a, 0xcd,
-  0x79, 0x71, 0x26, 0x06, 0xca, 0x51, 0x40, 0x6e, 0x52, 0xec, 0x36, 0x7b,
-  0xb2, 0x4a, 0xad, 0x7c, 0x30, 0x1e, 0x56, 0x83, 0xa5, 0x64, 0x99, 0xae,
-  0x19, 0x27, 0x12, 0xf7, 0x50, 0x19, 0x0a, 0xe9, 0x4c, 0x37, 0x96, 0x77,
-  0xb7, 0x48, 0x16, 0x0c, 0x7b, 0xe9, 0x93, 0xf1, 0x20, 0x26, 0x22, 0x83,
-  0x1a, 0x9d, 0xaf, 0xf1, 0x79, 0xcd, 0x38, 0x4d, 0x9b, 0xd5, 0x7f, 0x09,
-  0xcb, 0xff, 0x97, 0x96, 0x01, 0xbc, 0xbc, 0xcf, 0xa6, 0xd7, 0xaf, 0xdf,
-  0x8d, 0x37, 0x1e, 0x88, 0xe9, 0x0f, 0x27, 0x87, 0xe7, 0x8b, 0x3c, 0x63,
-  0x62, 0x08, 0x82, 0x2c, 0x58, 0x6b, 0x3a, 0x08, 0xbe, 0xeb, 0x6e, 0xae,
-  0xf6, 0x82, 0x09, 0x03, 0x08, 0x0d, 0x16, 0x73, 0x84, 0xc6, 0x27, 0xe2,
-  0x22, 0x1d, 0xc6, 0x7c, 0x14, 0xba, 0x6b, 0xc7, 0xba, 0x33, 0xcd, 0x19,
-  0x42, 0xc9, 0xcc, 0x9a, 0x2c, 0x50, 0x47, 0x90, 0x21, 0x3c, 0xda, 0x74,
-  0x7d, 0xf6, 0xee, 0xe8, 0xeb, 0x53, 0xfb, 0xf1, 0x4b, 0xb6, 0xf9, 0x24,
-  0x2e, 0xae, 0x92, 0x0e, 0x68, 0xd1, 0x70, 0x85, 0x6a, 0x70, 0x47, 0x81,
-  0x02, 0x40, 0xb4, 0x3a, 0xe7, 0xd7, 0x85, 0x4c, 0x07, 0x4a, 0xad, 0xf8,
-  0xa8, 0x58, 0x37, 0x25, 0x5a, 0x94, 0xbd, 0xaf, 0xbf, 0x6a, 0x5f, 0x90,
-  0xaf, 0xdf, 0xad, 0xe9, 0x8e, 0xbf, 0x19, 0x9a, 0x3c, 0xa4, 0x96, 0xc0,
-  0x20, 0x73, 0xbf, 0xbd, 0x16, 0x0a, 0x28, 0xdd, 0x3d, 0x00, 0x43, 0x9b,
-  0x7e, 0x84, 0x4b, 0xd0, 0x13, 0xfa, 0xe3, 0xc1, 0x07, 0x15, 0xbb, 0xae,
-  0xbb, 0x2b, 0x06, 0xb5, 0xdb, 0x1c, 0x4b, 0xb1, 0xb1, 0x73, 0x89, 0x44,
-  0x3a, 0x53, 0xc3, 0xf4, 0x56, 0xc7, 0x16, 0xad, 0xc5, 0xcd, 0xf3, 0x78,
-  0x07, 0x11, 0xea, 0x51, 0x6d, 0xb4, 0x99, 0xcf, 0x9e, 0xfc, 0xd8, 0xde,
-  0x73, 0xea, 0xb0, 0x13, 0x6a, 0x71, 0x48, 0x87, 0x69, 0x9b, 0x0f, 0xbd,
-  0x25, 0x61, 0x8c, 0xef, 0xab, 0xc7, 0x4f, 0x86, 0xdb, 0x0a, 0xf7, 0x4e,
-  0xb4, 0x39, 0xa1, 0x4b, 0xd0, 0x5d, 0x9b, 0x52, 0xbe, 0xe9, 0x29, 0x10,
-  0xfc, 0xba, 0x9b, 0x7b, 0xf6, 0xf9, 0xb3, 0xa7, 0x5b, 0x5b, 0x83, 0xc8,
-  0x4c, 0xc9, 0x92, 0x30, 0xc6, 0xee, 0x1e, 0x66, 0x05, 0x12, 0xae, 0xc3,
-  0x63, 0xbe, 0x46, 0x79, 0x3e, 0xcb, 0xcf, 0x69, 0x5b, 0xed, 0xbc, 0x9a,
-  0xeb, 0x5e, 0xe5, 0x75, 0x61, 0xf8, 0x0a, 0x30, 0x49, 0x07, 0x22, 0x11,
-  0x1b, 0x9b, 0x29, 0xe9, 0x6e, 0x53, 0x3f, 0xc8, 0xda, 0x83, 0x26, 0xa5,
-  0xe5, 0x1d, 0x7a, 0x8b, 0x78, 0x9f, 0xc0, 0x99, 0xec, 0xf2, 0x62, 0x34,
-  0xed, 0x37, 0xc7, 0x27, 0x47, 0x8e, 0x8f, 0xfc, 0xd7, 0xf6, 0x88, 0x07,
-  0x59, 0x4c, 0x5b, 0x5c, 0x53, 0x04, 0xc9, 0x20, 0x1f, 0x7b, 0x10, 0xa1,
-  0xba, 0xe5, 0xb7, 0x03, 0xd1, 0x66, 0xf1, 0xb1, 0xc7, 0xc9, 0xa4, 0x86,
-  0x8f, 0xde, 0x7d, 0x77, 0x7c, 0x7e, 0xfa, 0xee, 0xed, 0xd1, 0x3b, 0x97,
-  0xf7, 0xc0, 0xd7, 0x73, 0xb7, 0xdb, 0xb1, 0xe5, 0x81, 0x49, 0x39, 0x73,
-  0x86, 0x05, 0x52, 0x76, 0x89, 0xf1, 0x2c, 0x68, 0xb7, 0xf4, 0xaf, 0x51,
-  0xd8, 0x5c, 0xf0, 0x90, 0xed, 0x1b, 0x13, 0xc9, 0x92, 0x03, 0x96, 0x67,
-  0x9c, 0x59, 0x36, 0x92, 0x24, 0x10, 0xf1, 0xf6, 0xa4, 0xe2, 0xac, 0xfc,
-  0x38, 0x4d, 0x14, 0x4e, 0xbf, 0x0c, 0xca, 0xf7, 0x59, 0x12, 0x94, 0xcf,
-  0x15, 0xab, 0x0d, 0xc2, 0x93, 0x9a, 0x94, 0x37, 0x5f, 0xe7, 0xf5, 0x04,
-  0x34, 0x44, 0x58, 0xf9, 0xe5, 0x5a, 0x5d, 0x47, 0x70, 0x25, 0x45, 0x12,
-  0x21, 0x11, 0x05, 0xb7, 0xae, 0x47, 0x74, 0xb5, 0xb0, 0x81, 0xa6, 0xfa,
-  0x1f, 0xcc, 0xa0, 0x16, 0x50, 0x80, 0xba, 0x1d, 0x5f, 0x68, 0xf4, 0x40,
-  0x1b, 0xc6, 0xb0, 0x0c, 0x5d, 0x74, 0x0e, 0x83, 0xc5, 0xb0, 0x18, 0xe0,
-  0xdd, 0xdc, 0x08, 0xef, 0xfa, 0x0f, 0x67, 0xe7, 0xa7, 0x3f, 0xfc, 0xf9,
-  0x1f, 0xdc, 0x45, 0x70, 0xb4, 0x7f, 0xe4, 0x1b, 0xcf, 0x1a, 0xff, 0xf9,
-  0x57, 0xf5, 0xf6, 0x60, 0x77, 0xf5, 0xf6, 0x07, 0x9a, 0x68, 0xb8, 0x0e,
-  0x73, 0x1e, 0xce, 0x38, 0x41, 0x72, 0xf7, 0xe5, 0xd5, 0x2d, 0x90, 0xd8,
-  0x31, 0x07, 0x49, 0x2d, 0x2f, 0x6b, 0xa5, 0x7e, 0xba, 0xea, 0x01, 0x02,
-  0x05, 0x1c, 0x25, 0xfe, 0xbc, 0xbc, 0x14, 0x16, 0x7a, 0x1c, 0xa0, 0xae,
-  0x04, 0xee, 0x7f, 0xb7, 0x1e, 0x07, 0x27, 0x27, 0xbf, 0x7e, 0x11, 0x5c,
-  0xc0, 0x47, 0x6d, 0x19, 0x60, 0x00, 0x71, 0x13, 0x1a, 0x3a, 0x01, 0xd7,
-  0xc8, 0xbf, 0x03, 0x4d, 0xd2, 0x0d, 0xe7, 0xdd, 0xa9, 0x8e, 0x46, 0x1c,
-  0x7f, 0xc3, 0x32, 0x21, 0x45, 0x00, 0x7e, 0x17, 0x56, 0xb9, 0xf8, 0x5a,
-  0xe4, 0x81, 0xb5, 0x4a, 0xea, 0x86, 0x5f, 0x5a, 0xe5, 0x76, 0x04, 0x11,
-  0x00, 0x5d, 0x08, 0x29, 0xe8, 0xb9, 0xf3, 0x59, 0x4b, 0xfd, 0x15, 0x94,
-  0xd5, 0x42, 0x06, 0x7b, 0x47, 0xa4, 0x01, 0xdb, 0x8d, 0x39, 0x6e, 0xa9,
-  0x48, 0xcb, 0x1b, 0xa4, 0xef, 0xf3, 0xa1, 0x1c, 0x48, 0xdd, 0xd9, 0x0a,
-  0x65, 0xb8, 0x59, 0x63, 0xc0, 0x50, 0x68, 0xec, 0x32, 0x62, 0xfa, 0xf7,
-  0xe2, 0xf4, 0xf0, 0xf4, 0x84, 0x7e, 0x39, 0x7a, 0x73, 0xfc, 0x83, 0x67,
-  0x68, 0x52, 0x8f, 0x45, 0x39, 0xaf, 0x31, 0x08, 0x57, 0x9f, 0xa5, 0xed,
-  0xc2, 0x6e, 0xc1, 0x64, 0xd7, 0xd5, 0xc8, 0xce, 0xf0, 0x99, 0x4f, 0x0a,
-  0x98, 0x09, 0xe3, 0x8c, 0x82, 0x1d, 0xc2, 0x45, 0x1c, 0x32, 0xbd, 0xfa,
-  0xde, 0xca, 0xa0, 0x20, 0x4f, 0xa5, 0x97, 0x2e, 0x3a, 0x35, 0x34, 0xb8,
-  0x9a, 0x8d, 0x45, 0x8d, 0x2c, 0x6c, 0x1b, 0xf6, 0x88, 0xcf, 0xac, 0x71,
-  0x0f, 0x82, 0x49, 0x9a, 0xf2, 0x1d, 0x04, 0xbd, 0x68, 0x90, 0xc4, 0x46,
-  0x18, 0x98, 0xe1, 0x07, 0x0b, 0x07, 0xac, 0x6b, 0xae, 0x3e, 0x27, 0x5d,
-  0x00, 0x4d, 0x7d, 0x46, 0x4a, 0x21, 0x7c, 0xfa, 0x5e, 0x01, 0x72, 0xf1,
-  0x41, 0x1d, 0x79, 0xf8, 0x30, 0xf8, 0x41, 0x99, 0xfc, 0xeb, 0x2a, 0xbd,
-  0x8d, 0x91, 0xe2, 0x0f, 0x7c, 0x00, 0x79, 0xa9, 0xd1, 0x46, 0xfc, 0xab,
-  0x1a, 0x89, 0xeb, 0xad, 0x3c, 0xfb, 0x35, 0x8d, 0x3c, 0x6b, 0xb4, 0x71,
-  0xfd, 0xab, 0x1a, 0x71, 0x75, 0xc5, 0xe8, 0x5a, 0xfc, 0xe1, 0xf8, 0x22,
-  0x3a, 0x3c, 0x7d, 0xed, 0x69, 0xf4, 0xc2, 0x5d, 0xed, 0x31, 0xc9, 0x35,
-  0x24, 0x8c, 0xc3, 0xbe, 0x86, 0xba, 0xaa, 0x41, 0x35, 0x71, 0xa4, 0x2b,
-  0x96, 0xbe, 0xd0, 0x7d, 0x8a, 0x8f, 0x0a, 0xc9, 0x41, 0x0c, 0xd1, 0x42,
-  0xf5, 0x71, 0xad, 0x50, 0xeb, 0xc2, 0x56, 0x98, 0xb2, 0xb9, 0xbc, 0x40,
-  0x5c, 0x18, 0x9a, 0xc8, 0x24, 0x66, 0x8f, 0x6a, 0x26, 0x8e, 0x68, 0xd6,
-  0x04, 0x2a, 0x1f, 0xf9, 0x98, 0xbb, 0x9c, 0x66, 0x18, 0x78, 0x38, 0xf3,
-  0x17, 0xf1, 0x48, 0xa2, 0xfe, 0x73, 0x61, 0x73, 0x8c, 0xa6, 0x96, 0x4c,
-  0xbd, 0xab, 0x9c, 0x30, 0xab, 0x51, 0x8c, 0x16, 0x96, 0x80, 0xe4, 0xc5,
-  0x52, 0x1b, 0x7c, 0x59, 0x38, 0x8f, 0x7c, 0x2f, 0x66, 0x4e, 0x97, 0xd7,
-  0x9a, 0xa7, 0x2d, 0x16, 0xe5, 0x9a, 0x70, 0xfd, 0xec, 0xc9, 0x8f, 0x37,
-  0x52, 0x80, 0x9d, 0xce, 0x9f, 0x66, 0xe1, 0xa6, 0x7f, 0x0b, 0xee, 0xe8,
-  0x27, 0x3e, 0x00, 0x65, 0x11, 0xcf, 0x25, 0x2c, 0x48, 0x02, 0x21, 0x49,
-  0xdf, 0xa9, 0xe2, 0x8f, 0x88, 0xe4, 0x62, 0x91, 0x08, 0x6b, 0x38, 0x0d,
-  0xd8, 0xe0, 0x53, 0x65, 0xce, 0x91, 0xa9, 0xf6, 0x72, 0xfe, 0xcc, 0x65,
-  0xa0, 0x79, 0x77, 0x71, 0xe9, 0x02, 0x42, 0x39, 0x7e, 0x45, 0x41, 0xa8,
-  0xc4, 0x45, 0x51, 0x72, 0x85, 0xdb, 0x6e, 0xb7, 0xb1, 0xeb, 0xd6, 0x40,
-  0x8b, 0x72, 0x09, 0x19, 0x47, 0xd0, 0x40, 0x3a, 0x4d, 0x25, 0xc5, 0x2a,
-  0x2d, 0xe5, 0x4b, 0xae, 0xe5, 0x26, 0x8b, 0x36, 0x5c, 0x63, 0xaf, 0xcd,
-  0x05, 0x7c, 0x4e, 0x39, 0x9c, 0xc9, 0x1f, 0xb3, 0x1c, 0x2b, 0x29, 0x01,
-  0x56, 0x5c, 0xe0, 0x93, 0xbe, 0xb8, 0x17, 0x57, 0x70, 0x9c, 0xe5, 0x1d,
-  0x90, 0x48, 0x6e, 0x63, 0x54, 0x09, 0xf6, 0x1a, 0xe7, 0x33, 0x8b, 0x5b,
-  0x50, 0x5e, 0x6e, 0x65, 0xbe, 0x8c, 0x89, 0xc3, 0xe0, 0xa3, 0xb5, 0x0a,
-  0x94, 0x6b, 0x49, 0x5e, 0xc2, 0x54, 0x72, 0xef, 0x78, 0xae, 0xed, 0xa8,
-  0x3b, 0x6d, 0x25, 0x50, 0x3d, 0x9e, 0xaf, 0xe9, 0x87, 0x1b, 0x93, 0x7d,
-  0x93, 0x4e, 0x9a, 0x69, 0x1b, 0xdc, 0x7e, 0xbb, 0xb5, 0xcf, 0x9a, 0x24,
-  0x62, 0x59, 0x14, 0x0c, 0xf9, 0x99, 0x87, 0xc9, 0x54, 0x9f, 0xeb, 0x93,
-  0x6c, 0x85, 0xb8, 0x4b, 0xd8, 0x72, 0xe4, 0xe2, 0x7d, 0x8b, 0x64, 0x39,
-  0x77, 0x53, 0xb4, 0x0f, 0x91, 0xbd, 0x05, 0x67, 0x24, 0x56, 0x7c, 0xaa,
-  0xe3, 0x6d, 0x87, 0x94, 0x85, 0x02, 0xe3, 0x0b, 0xdf, 0x49, 0x8c, 0x6c,
-  0x1b, 0x22, 0x92, 0x2c, 0x75, 0x04, 0xa9, 0x95, 0x7a, 0xf1, 0x11, 0xe7,
-  0x8b, 0x03, 0x4e, 0xcf, 0xfe, 0xb6, 0x37, 0xda, 0x91, 0x90, 0x72, 0x53,
-  0xf8, 0x40, 0x7e, 0xac, 0xc3, 0xaa, 0x10, 0xd4, 0x16, 0x5f, 0x73, 0x03,
-  0x20, 0x1b, 0x71, 0xa6, 0x31, 0x6d, 0xa8, 0x09, 0x3f, 0x8a, 0xde, 0xb6,
-  0xb3, 0x80, 0xf3, 0xcb, 0x4a, 0xb1, 0xcf, 0xd8, 0xd2, 0x3e, 0x0b, 0xea,
-  0x4b, 0xe1, 0x4a, 0x0e, 0x4a, 0x86, 0xf0, 0x09, 0x70, 0xf7, 0x0e, 0xe2,
-  0x09, 0xa3, 0x76, 0x7a, 0xbb, 0x07, 0xfe, 0xf3, 0xeb, 0xb0, 0xbb, 0xdb,
-  0x5c, 0xec, 0xb3, 0x83, 0xf1, 0xd8, 0x16, 0xfa, 0x30, 0x5c, 0x50, 0x59,
-  0x42, 0xcd, 0xae, 0x65, 0xf0, 0x3d, 0x43, 0x66, 0x6d, 0xab, 0x3b, 0xda,
-  0x46, 0x23, 0x4b, 0x6e, 0xf7, 0x89, 0xeb, 0xcb, 0x75, 0xf5, 0x9d, 0xb4,
-  0x35, 0xf8, 0xc4, 0xae, 0xba, 0xfb, 0xfa, 0xae, 0xa3, 0xaf, 0xa7, 0x2d,
-  0x22, 0xda, 0xdb, 0xfb, 0xcc, 0x00, 0x50, 0x04, 0x52, 0x7e, 0x1e, 0xf9,
-  0x0e, 0x83, 0x1e, 0xe9, 0xb9, 0x21, 0x6c, 0x95, 0xed, 0xbe, 0x94, 0x2e,
-  0x78, 0x34, 0x41, 0x57, 0xcf, 0x5c, 0x57, 0xa4, 0x33, 0xf5, 0xe1, 0x34,
-  0xd3, 0x43, 0xd2, 0x3a, 0x3b, 0xb0, 0x53, 0xf3, 0x41, 0x39, 0xe6, 0x35,
-  0x20, 0x31, 0x6c, 0x6d, 0xde, 0xa1, 0x8d, 0x22, 0xe8, 0xe7, 0x33, 0x3f,
-  0x25, 0x3f, 0x6e, 0x56, 0x6c, 0x14, 0x62, 0x6d, 0x14, 0x1c, 0x56, 0x47,
-  0x28, 0x16, 0x67, 0xef, 0x02, 0xc0, 0x9a, 0x7c, 0x46, 0x5e, 0xf5, 0xbd,
-  0xc8, 0xf1, 0x3b, 0x63, 0x22, 0xd6, 0xfa, 0x36, 0xa3, 0xe8, 0x14, 0x4a,
-  0x58, 0x0d, 0x05, 0x57, 0xd0, 0x67, 0x62, 0x6f, 0xa5, 0x29, 0xc2, 0xd3,
-  0xbe, 0xfb, 0xc2, 0xaf, 0x89, 0x0d, 0xc9, 0x9c, 0x96, 0xdb, 0x7a, 0x7c,
-  0xbc, 0x7f, 0xc4, 0x62, 0x12, 0x12, 0x44, 0x88, 0x70, 0xfe, 0x14, 0x50,
-  0x47, 0x5b, 0xf8, 0x7c, 0x74, 0xa4, 0xb6, 0x9c, 0x6b, 0xe1, 0x12, 0x9c,
-  0x24, 0xb8, 0x83, 0x3c, 0x25, 0xff, 0x75, 0xc5, 0x0c, 0x09, 0xb7, 0x2e,
-  0xdd, 0xa1, 0xfa, 0xa7, 0xbd, 0x27, 0x88, 0x2b, 0x5c, 0x05, 0x0b, 0xb7,
-  0xb2, 0xcf, 0x91, 0xd0, 0x93, 0xe1, 0xd6, 0xdf, 0xe7, 0x7b, 0x4a, 0xcd,
-  0x09, 0x61, 0x9c, 0x0e, 0x76, 0x61, 0xe4, 0x52, 0x09, 0x0d, 0x7f, 0x04,
-  0x30, 0xa8, 0xca, 0x00, 0x05, 0xba, 0xa0, 0xe5, 0x31, 0x72, 0x9d, 0x2b,
-  0xd3, 0xd7, 0x41, 0xd4, 0x83, 0xed, 0x02, 0xe9, 0x22, 0x52, 0xfb, 0x40,
-  0xf4, 0x74, 0x67, 0xa7, 0xa3, 0xca, 0x4f, 0x3c, 0xc9, 0x6f, 0x2d, 0x66,
-  0x55, 0x91, 0x64, 0xf0, 0x96, 0x28, 0xcd, 0x10, 0x2d, 0x4a, 0x16, 0x53,
-  0x87, 0x97, 0x6c, 0x13, 0xe0, 0x15, 0x33, 0x8f, 0x50, 0xb0, 0x6e, 0x72,
-  0x2a, 0xbf, 0x07, 0xb4, 0x8d, 0x2d, 0x5a, 0xe3, 0x38, 0x0a, 0xee, 0x8d,
-  0x95, 0xa5, 0x88, 0x83, 0xda, 0x47, 0x1a, 0x25, 0xd1, 0x1a, 0x99, 0x22,
-  0x31, 0x07, 0xdd, 0x3c, 0x6b, 0x53, 0xc4, 0xf8, 0xe2, 0xf4, 0x5c, 0x29,
-  0xac, 0xcd, 0x75, 0xb5, 0xb0, 0x36, 0x3f, 0xe2, 0xe3, 0x76, 0x07, 0x1d,
-  0x61, 0x08, 0xce, 0x20, 0x2f, 0x19, 0xa3, 0xb4, 0x5c, 0x41, 0xaf, 0xcf,
-  0x7d, 0xc8, 0xa0, 0x4e, 0xed, 0x3b, 0xb5, 0xc0, 0x5b, 0x79, 0x1c, 0xab,
-  0xb6, 0x1d, 0xbc, 0x24, 0x07, 0xed, 0x74, 0x05, 0x62, 0x17, 0x83, 0x31,
-  0xd3, 0x91, 0x9a, 0x8e, 0x39, 0x4e, 0x56, 0xad, 0x69, 0xce, 0x35, 0xd8,
-  0xa4, 0x45, 0x39, 0x44, 0xa7, 0xae, 0x02, 0x92, 0x85, 0x11, 0xb8, 0xbb,
-  0xcb, 0xab, 0xae, 0x70, 0x5b, 0xb3, 0xc3, 0x49, 0x82, 0x32, 0x34, 0x8d,
-  0x34, 0xe6, 0xbc, 0x8c, 0xe6, 0x6e, 0x4f, 0x49, 0x32, 0x92, 0xe8, 0xd5,
-  0xdc, 0x4a, 0xcc, 0x9b, 0xa8, 0xe8, 0xa5, 0xac, 0x1d, 0xb7, 0xce, 0x67,
-  0xa7, 0xe7, 0x17, 0x36, 0x34, 0x74, 0x8b, 0x0f, 0x1a, 0xe7, 0x87, 0x51,
-  0xd4, 0x22, 0x01, 0x02, 0x07, 0x67, 0x91, 0x4d, 0x68, 0x69, 0xa5, 0x2a,
-  0x11, 0xca, 0xa6, 0xa0, 0x1d, 0x6b, 0x88, 0x75, 0xb6, 0xe2, 0xde, 0xa2,
-  0xca, 0x58, 0xdb, 0x71, 0x3c, 0x47, 0xcc, 0x28, 0xcc, 0xa0, 0xbb, 0xdd,
-  0xbd, 0x5e, 0xa6, 0x79, 0xb2, 0xdb, 0xa6, 0x0e, 0x56, 0x9e, 0xcf, 0x8f,
-  0xb8, 0x1c, 0xfb, 0xc5, 0xb5, 0xfc, 0xd6, 0x1a, 0xbb, 0x58, 0x71, 0xf5,
-  0xc3, 0xee, 0x20, 0x15, 0x50, 0x07, 0xe7, 0xfb, 0x70, 0x10, 0x3a, 0xb7,
-  0xef, 0xac, 0xca, 0xc1, 0x9a, 0x3d, 0x09, 0x72, 0xbb, 0xc1, 0x36, 0x95,
-  0x56, 0x90, 0x86, 0x8f, 0x0f, 0x7a, 0xda, 0x4b, 0x8f, 0x6e, 0x5d, 0x39,
-  0x12, 0x8c, 0xfb, 0xec, 0x5b, 0x78, 0xea, 0x5b, 0x58, 0x32, 0x7f, 0xd7,
-  0x06, 0x8e, 0xcd, 0xbb, 0xce, 0x1f, 0xba, 0x30, 0xde, 0xab, 0x24, 0x33,
-  0xc2, 0x90, 0xe7, 0x7c, 0x3b, 0xcf, 0x9c, 0xf7, 0xc8, 0xe4, 0xa3, 0x60,
-  0x28, 0xfc, 0xb1, 0x25, 0xd5, 0x22, 0x84, 0xaf, 0x41, 0x76, 0x4f, 0x9e,
-  0xfb, 0x1b, 0x82, 0x55, 0x09, 0x1f, 0x27, 0xa2, 0x2b, 0x10, 0xdc, 0x48,
-  0x1c, 0x67, 0x93, 0x66, 0xab, 0x04, 0x46, 0xb3, 0xb8, 0x98, 0x33, 0x30,
-  0xb9, 0x06, 0x7a, 0xb4, 0xdc, 0xd2, 0x9a, 0x1e, 0xee, 0xfb, 0xd1, 0x9b,
-  0xe8, 0xf8, 0xe4, 0xc8, 0x6f, 0x97, 0x40, 0x9a, 0xe3, 0x30, 0x7b, 0x21,
-  0x8f, 0x0e, 0x6e, 0xe6, 0xae, 0x8b, 0x51, 0x74, 0xc6, 0xf5, 0xe8, 0xe0,
-  0x7e, 0x2a, 0xff, 0xcd, 0xb7, 0x26, 0x87, 0x05, 0xc6, 0x18, 0xba, 0x40,
-  0x61, 0x14, 0x4d, 0x33, 0xda, 0x5d, 0x7c, 0xc2, 0xbf, 0x06, 0xa5, 0xc4,
-  0x5a, 0x53, 0x7e, 0xe1, 0x5f, 0x2e, 0x69, 0x1e, 0xa4, 0xaa, 0x35, 0x1f,
-  0x79, 0xaa, 0xb4, 0x45, 0x7a, 0x1c, 0x9a, 0x70, 0xec, 0x99, 0xcf, 0x74,
-  0x21, 0xf5, 0x3e, 0x66, 0xd2, 0xc2, 0xa5, 0x3d, 0x53, 0x63, 0xe3, 0x41,
-  0x53, 0x72, 0x29, 0x1c, 0xc8, 0x3a, 0x21, 0x7e, 0x9e, 0x4e, 0x0e, 0x3b,
-  0x4b, 0xa8, 0xad, 0x8c, 0x39, 0xee, 0xdc, 0xc1, 0xd6, 0xba, 0x5c, 0x28,
-  0xe6, 0x98, 0xfc, 0x82, 0xa2, 0x09, 0xb6, 0x41, 0x71, 0x1b, 0xc5, 0xf5,
-  0x9e, 0x0a, 0x35, 0x3a, 0xd2, 0x71, 0xf7, 0x58, 0x6d, 0x74, 0xdc, 0xb1,
-  0x4f, 0x22, 0xe2, 0xdd, 0x66, 0xd3, 0x10, 0xdd, 0xf2, 0xa1, 0x74, 0xf7,
-  0xf4, 0x99, 0x6f, 0xea, 0x12, 0x65, 0x1a, 0x8c, 0xbf, 0x1f, 0xd4, 0x78,
-  0x90, 0xc3, 0xfc, 0x4f, 0xdd, 0x93, 0xa2, 0x2c, 0x88, 0x85, 0xba, 0xe3,
-  0x58, 0x05, 0x7d, 0x08, 0x31, 0x5c, 0xe4, 0x1c, 0x31, 0x91, 0xdd, 0x7b,
-  0xf8, 0x90, 0x91, 0xc4, 0x20, 0x8a, 0x0d, 0x42, 0xea, 0x5f, 0x38, 0x60,
-  0x11, 0xd1, 0x36, 0x55, 0x41, 0x5f, 0xc4, 0x1f, 0x5b, 0x57, 0xfd, 0x62,
-  0xb5, 0x50, 0xd4, 0x84, 0xa0, 0xa7, 0xcf, 0x55, 0x9b, 0xbd, 0xc9, 0x88,
-  0x24, 0xbd, 0xfe, 0x17, 0x32, 0xd3, 0xdc, 0xb9, 0x88, 0x2d, 0x95, 0x23,
-  0x93, 0x50, 0xe5, 0xd2, 0x55, 0xfb, 0xea, 0x00, 0x26, 0xe7, 0x0b, 0x59,
-  0xc5, 0x44, 0x0b, 0x8a, 0xcc, 0x03, 0xdc, 0x4b, 0x5e, 0x6f, 0x7d, 0x4c,
-  0xbe, 0x7a, 0xc0, 0x67, 0x5f, 0x24, 0x7f, 0x41, 0x91, 0xcd, 0x91, 0x5c,
-  0x3a, 0x02, 0x3b, 0x25, 0xb3, 0xe4, 0x90, 0x05, 0xcf, 0xf2, 0x9e, 0xbe,
-  0x50, 0x53, 0x85, 0xaa, 0xc2, 0x56, 0xf9, 0xb1, 0x69, 0x69, 0x7e, 0xb6,
-  0xeb, 0xec, 0x3e, 0x8c, 0x51, 0xd0, 0x2f, 0x85, 0x3b, 0x04, 0x48, 0x05,
-  0xc4, 0xe0, 0xc6, 0xe3, 0x6f, 0xa2, 0xb7, 0xaf, 0x9f, 0x71, 0xba, 0xec,
-  0x55, 0x52, 0x70, 0x51, 0x55, 0xaf, 0x8b, 0x9d, 0x7e, 0x1b, 0x34, 0xb6,
-  0x17, 0xc6, 0x04, 0x88, 0xfe, 0xa4, 0x0c, 0x4d, 0x25, 0x6d, 0xda, 0x42,
-  0x86, 0xdd, 0xbb, 0x32, 0x17, 0x8a, 0x21, 0x65, 0x1b, 0x1a, 0x25, 0x64,
-  0x97, 0x66, 0xb6, 0x45, 0x9d, 0x89, 0x3d, 0x7b, 0xe2, 0x99, 0x58, 0x71,
-  0xbf, 0x64, 0xe0, 0xff, 0xec, 0x8a, 0x05, 0xea, 0x8e, 0x13, 0xf5, 0x4c,
-  0x18, 0xe7, 0xa1, 0x9c, 0x7b, 0x16, 0x66, 0xdb, 0xaf, 0xc5, 0xa5, 0x85,
-  0xcd, 0x04, 0xef, 0x3d, 0x0b, 0xd5, 0x49, 0x12, 0xc8, 0x71, 0x2f, 0x2a,
-  0x1e, 0x3f, 0x24, 0x95, 0xe0, 0xd9, 0xe7, 0xee, 0x59, 0xb6, 0x1d, 0xa4,
-  0x59, 0x50, 0x19, 0x65, 0xcd, 0x1b, 0x2a, 0x04, 0x8b, 0x68, 0xe0, 0xc5,
-  0x33, 0x91, 0x7b, 0x82, 0xb5, 0x0f, 0x5e, 0x79, 0x51, 0xd7, 0x96, 0x51,
-  0x52, 0xd0, 0x17, 0xe8, 0xe6, 0x49, 0xa5, 0xcb, 0xeb, 0xf0, 0x70, 0x3e,
-  0x97, 0x9b, 0xfa, 0xac, 0x09, 0x3c, 0x61, 0x3c, 0x30, 0x09, 0x7d, 0x77,
-  0x76, 0xd4, 0x85, 0xf4, 0x0f, 0x0f, 0x22, 0x7b, 0xa5, 0x55, 0x28, 0x9d,
-  0x69, 0x3d, 0xe8, 0x64, 0x57, 0xcf, 0x0c, 0x4d, 0x39, 0xbf, 0xca, 0xd2,
-  0xbf, 0x25, 0x41, 0xa6, 0xb5, 0x55, 0xb5, 0x09, 0x1e, 0xdf, 0x53, 0x86,
-  0x71, 0x1b, 0xcf, 0x53, 0x65, 0x8a, 0x6c, 0x47, 0xf7, 0x0f, 0x3c, 0x51,
-  0xaa, 0xfd, 0x98, 0xf2, 0x11, 0x95, 0x48, 0x59, 0xae, 0x6f, 0xc6, 0x1e,
-  0x9c, 0xa4, 0x06, 0x64, 0xf2, 0xfc, 0xa9, 0xca, 0x5e, 0x26, 0x1f, 0xf3,
-  0xbd, 0xc4, 0x0b, 0x31, 0x07, 0xe4, 0x79, 0x93, 0x4d, 0x3f, 0xd7, 0xab,
-  0x4f, 0xb7, 0x52, 0x83, 0xb4, 0x62, 0xe3, 0xd0, 0xec, 0x15, 0x28, 0x92,
-  0xbb, 0x34, 0xd3, 0xfc, 0xa7, 0xd6, 0xeb, 0xcf, 0xd7, 0x98, 0xa0, 0x4a,
-  0xb9, 0x37, 0x8f, 0x40, 0x4b, 0xc1, 0xf3, 0x9f, 0xf9, 0x93, 0x20, 0x95,
-  0xbf, 0x04, 0x31, 0xde, 0xe5, 0xf4, 0x20, 0x76, 0xcf, 0x0a, 0x8a, 0xd8,
-  0x59, 0x62, 0xd5, 0x65, 0x09, 0x3b, 0x6d, 0x36, 0xeb, 0x4a, 0x36, 0xbc,
-  0x74, 0xdd, 0xcf, 0x73, 0xe6, 0xa6, 0x41, 0x7f, 0x42, 0x52, 0x6f, 0x50,
-  0x22, 0xd2, 0x2b, 0x08, 0x59, 0xad, 0x98, 0x9b, 0x7f, 0xfa, 0x85, 0xd2,
-  0x86, 0xdd, 0x97, 0x26, 0xa6, 0xae, 0x7d, 0xe3, 0xb3, 0x9d, 0x50, 0x68,
-  0x9d, 0xb1, 0xa5, 0x5e, 0x20, 0x24, 0xd7, 0xbe, 0x20, 0x94, 0x71, 0x4c,
-  0xd7, 0xc8, 0x15, 0x11, 0x35, 0x9e, 0xf1, 0x38, 0xc6, 0xfe, 0xb1, 0xbd,
-  0x1a, 0xd3, 0xbd, 0x08, 0x45, 0xa8, 0xe8, 0xf8, 0x75, 0xf0, 0xe0, 0x13,
-  0x3f, 0xc1, 0x78, 0xce, 0xd2, 0xc0, 0xbd, 0x58, 0x22, 0x4a, 0xad, 0xa7,
-  0x17, 0x3c, 0xfa, 0x54, 0xd3, 0x58, 0x24, 0xda, 0x05, 0xcb, 0xdf, 0x7a,
-  0x46, 0xc8, 0xe1, 0x10, 0x59, 0x67, 0x15, 0x10, 0x17, 0x32, 0xf3, 0x16,
-  0x34, 0xf7, 0xfe, 0xb3, 0xe7, 0x0f, 0x3c, 0xab, 0x97, 0x66, 0xe9, 0xae,
-  0xfa, 0xe0, 0xbd, 0xcf, 0xda, 0xc7, 0xdc, 0xd4, 0x02, 0xc3, 0x85, 0xa1,
-  0xa3, 0xc6, 0x27, 0x2d, 0xda, 0x64, 0x40, 0xc1, 0x7f, 0x33, 0xd3, 0x4f,
-  0xc1, 0xd9, 0x77, 0xe5, 0xbf, 0x85, 0xe3, 0xfd, 0x3c, 0x00, 0x9f, 0x52,
-  0xa3, 0x8f, 0xab, 0xea, 0x1c, 0x56, 0x7a, 0xf4, 0x11, 0xe5, 0x58, 0x9d,
-  0xa0, 0x05, 0xd9, 0x73, 0x92, 0x23, 0x56, 0x99, 0xe7, 0x1c, 0xa2, 0x0c,
-  0x2a, 0x2c, 0xa7, 0xc5, 0x76, 0xeb, 0xe8, 0xbe, 0xa1, 0x4d, 0x05, 0x75,
-  0x04, 0xc6, 0xb3, 0x9d, 0xc6, 0x31, 0x28, 0xaf, 0x57, 0xa2, 0x7a, 0xbb,
-  0x19, 0x79, 0x30, 0xa8, 0xe0, 0xb5, 0x3d, 0xcf, 0xbd, 0x30, 0x36, 0x48,
-  0x8d, 0x87, 0x34, 0x5a, 0xd1, 0xcd, 0x23, 0x90, 0xa1, 0x39, 0x3e, 0x50,
-  0x45, 0xde, 0x83, 0xc9, 0x6e, 0xc6, 0x6b, 0x80, 0x0f, 0x14, 0xab, 0x25,
-  0xe8, 0x46, 0x45, 0x1b, 0x0e, 0x88, 0xa7, 0x5d, 0xba, 0x4e, 0xa6, 0x37,
-  0x76, 0x64, 0x36, 0xe3, 0x06, 0xc2, 0x4b, 0xf0, 0xd6, 0x53, 0xb7, 0xb4,
-  0x50, 0x6b, 0xce, 0x8f, 0x9a, 0x9a, 0x80, 0x7f, 0x54, 0xa8, 0xe6, 0xfc,
-  0x62, 0x7c, 0xb6, 0xcf, 0x63, 0x16, 0x17, 0x0c, 0x1d, 0x88, 0xc3, 0x71,
-  0xf2, 0x57, 0xcd, 0xf3, 0x2d, 0xfd, 0xd3, 0xcf, 0xd7, 0x3c, 0x3d, 0xd6,
-  0x18, 0xa9, 0xe3, 0x19, 0xb3, 0x5f, 0xda, 0x87, 0xf0, 0xa5, 0xcf, 0x14,
-  0x2f, 0xc1, 0x4c, 0xbb, 0x62, 0x39, 0xe2, 0x91, 0xb9, 0x94, 0x1a, 0xff,
-  0xf0, 0xe7, 0x5e, 0xaf, 0xb9, 0x5e, 0x65, 0x37, 0x4e, 0x5e, 0xd4, 0x00,
-  0x36, 0xdb, 0x60, 0xff, 0xc2, 0x0b, 0x3b, 0x1a, 0x01, 0x66, 0x97, 0x73,
-  0x7f, 0x0f, 0xd4, 0x52, 0x61, 0x31, 0xab, 0xe2, 0x3b, 0x22, 0xfe, 0xba,
-  0x0a, 0xd6, 0xe0, 0xc5, 0x8e, 0xbb, 0x7e, 0x97, 0xab, 0x09, 0x09, 0xa4,
-  0xd1, 0x4d, 0x72, 0xdf, 0xa8, 0xbd, 0xce, 0x8e, 0x80, 0x34, 0x63, 0x43,
-  0x84, 0x7f, 0xc4, 0x35, 0xf0, 0xc3, 0x0f, 0xc2, 0xe3, 0x5d, 0x04, 0x95,
-  0xba, 0x16, 0x5c, 0x3d, 0x64, 0x62, 0x88, 0x22, 0x16, 0xf0, 0xf1, 0x82,
-  0x3d, 0xbe, 0x48, 0xe6, 0x09, 0xc3, 0x80, 0x8b, 0x9e, 0x02, 0xc2, 0xee,
-  0x4a, 0x2a, 0xe4, 0x18, 0x63, 0xb8, 0x55, 0x38, 0x7d, 0x17, 0x06, 0xbd,
-  0x8c, 0x03, 0x53, 0xd5, 0x58, 0x45, 0x3b, 0x7e, 0xf0, 0xfe, 0xe2, 0x9b,
-  0xd3, 0xf3, 0x71, 0xb4, 0xcd, 0xf8, 0x8c, 0x17, 0xe7, 0xc7, 0x5f, 0xbd,
-  0x27, 0xfd, 0xdf, 0xb9, 0x65, 0x5e, 0xc7, 0x59, 0x4a, 0x37, 0xc7, 0xb8,
-  0x4a, 0x32, 0xda, 0xc7, 0x2b, 0xab, 0xb9, 0x89, 0x10, 0x1d, 0xbe, 0x2b,
-  0xf3, 0x62, 0xe0, 0xca, 0xaa, 0xdf, 0x5d, 0xe7, 0xba, 0x19, 0x12, 0x6c,
-  0xc9, 0x69, 0x05, 0x9c, 0xad, 0x91, 0x7b, 0xdd, 0x36, 0xad, 0x63, 0x6e,
-  0x46, 0xe6, 0x5d, 0x8d, 0x2e, 0xbe, 0x39, 0x78, 0xf7, 0xed, 0xd8, 0x30,
-  0xee, 0xbf, 0xff, 0xfe, 0xfb, 0xd0, 0xeb, 0xbf, 0xbf, 0xbd, 0x0d, 0xf1,
-  0xf2, 0x3a, 0xfe, 0xf8, 0x71, 0x54, 0x26, 0x1b, 0x1b, 0x6f, 0xbc, 0xaf,
-  0xce, 0x57, 0x4c, 0x2d, 0x57, 0x24, 0x59, 0xd0, 0xd7, 0xdb, 0xb4, 0xbe,
-  0x5c, 0xa1, 0x75, 0x7b, 0x55, 0xa5, 0x73, 0xba, 0x90, 0x92, 0x12, 0x6f,
-  0x6f, 0x6f, 0x6c, 0x8c, 0x8f, 0x8e, 0xa2, 0x83, 0x93, 0xf1, 0x69, 0xf0,
-  0xee, 0xe6, 0x2e, 0x47, 0xae, 0x5c, 0x25, 0xd5, 0x26, 0x43, 0x9d, 0x9e,
-  0x1c, 0x5c, 0xb0, 0xce, 0xfb, 0xdd, 0xd1, 0xf9, 0xf8, 0xf8, 0xf4, 0x1d,
-  0xef, 0x0e, 0x07, 0x2c, 0xc6, 0xf3, 0x3b, 0x8e, 0x57, 0xbd, 0x4c, 0x81,
-  0x3b, 0x73, 0x67, 0xe5, 0x4f, 0x9b, 0x38, 0xf2, 0x74, 0x5f, 0xdd, 0x31,
-  0x04, 0xb4, 0x06, 0x3a, 0x70, 0xe0, 0x3a, 0xad, 0x84, 0x45, 0x22, 0x6e,
-  0x44, 0xde, 0xee, 0x25, 0xd5, 0x7b, 0x92, 0x89, 0x84, 0x57, 0x0f, 0x04,
-  0xad, 0x01, 0xe9, 0x2d, 0x41, 0xdc, 0x64, 0xe7, 0xc4, 0xc7, 0xc7, 0x5c,
-  0x67, 0x24, 0x7a, 0x3f, 0x3e, 0xf8, 0xfa, 0x88, 0x1f, 0xfd, 0x3a, 0xa9,
-  0xfc, 0x7e, 0x48, 0x99, 0x56, 0xee, 0xe4, 0x5d, 0x52, 0x95, 0xd3, 0x78,
-  0xc9, 0x69, 0xe9, 0xd4, 0xcd, 0x50, 0xee, 0xa1, 0xa0, 0x6d, 0xd1, 0x05,
-  0x7c, 0x2d, 0xdb, 0x4c, 0x9f, 0x47, 0xa1, 0xd9, 0xb0, 0xdd, 0xf3, 0xa3,
-  0x83, 0xd7, 0x6f, 0x8f, 0x2c, 0x40, 0x5f, 0x6a, 0x3b, 0x50, 0xa3, 0xd7,
-  0xf9, 0x22, 0x09, 0x6c, 0xe1, 0x2c, 0x1b, 0xf0, 0xe2, 0xd3, 0x37, 0x5c,
-  0xe9, 0xb5, 0xbb, 0x3b, 0xbf, 0x51, 0x78, 0x76, 0x74, 0x99, 0x6e, 0x4b,
-  0xeb, 0xd6, 0x5f, 0xec, 0x96, 0x44, 0xc1, 0xb7, 0x4d, 0x5c, 0x16, 0x9b,
-  0x06, 0x8c, 0x21, 0x9f, 0xef, 0xec, 0xec, 0x3c, 0x30, 0x0f, 0xe8, 0x13,
-  0x7a, 0xeb, 0xd2, 0x54, 0xf6, 0xf9, 0xf1, 0x6d, 0xdf, 0xbe, 0x1f, 0xf1,
-  0x5c, 0xd3, 0xff, 0xb9, 0x20, 0x5b, 0x26, 0x38, 0xb3, 0x69, 0x95, 0x74,
-  0x0f, 0x79, 0x9a, 0xe7, 0x6e, 0x07, 0x6a, 0x8b, 0x43, 0x12, 0x32, 0x24,
-  0x1e, 0x8d, 0xec, 0xc4, 0x1b, 0x32, 0x70, 0xd2, 0x7f, 0x10, 0xcd, 0x56,
-  0xdc, 0x37, 0x9b, 0xe4, 0x6f, 0xa8, 0x4d, 0xfe, 0x31, 0xca, 0x8b, 0xab,
-  0xed, 0xc5, 0x3e, 0x44, 0x1a, 0x7a, 0xe8, 0x0d, 0x03, 0x83, 0x44, 0x24,
-  0x1a, 0xbb, 0xa0, 0xf4, 0x92, 0x17, 0x96, 0xf3, 0x67, 0x3e, 0x61, 0x5c,
-  0xbf, 0x60, 0x15, 0x24, 0x22, 0xea, 0xd2, 0x66, 0x6e, 0x15, 0x19, 0x3b,
-  0x3a, 0x29, 0x79, 0xc3, 0xd8, 0xe2, 0x38, 0x22, 0x06, 0x42, 0xbd, 0x70,
-  0xb8, 0x1b, 0x48, 0x84, 0x7e, 0x2d, 0x88, 0x64, 0x46, 0xd5, 0x47, 0xf0,
-  0x5d, 0x2d, 0x0f, 0x2a, 0x38, 0x89, 0xec, 0xc1, 0x5d, 0x72, 0xde, 0x66,
-  0x81, 0xea, 0x22, 0xe8, 0x81, 0xf3, 0x41, 0x89, 0xf3, 0x5c, 0xe9, 0xc2,
-  0x21, 0x06, 0x88, 0x1b, 0x6e, 0xf6, 0x39, 0x1c, 0x82, 0x7e, 0x4a, 0x47,
-  0x2d, 0x9f, 0xd0, 0x79, 0x30, 0x29, 0x59, 0xfd, 0x4c, 0xaf, 0xe9, 0x80,
-  0x76, 0xc6, 0x34, 0x8a, 0x56, 0x5f, 0x2b, 0x5f, 0xe0, 0xb4, 0x94, 0xee,
-  0x82, 0x12, 0x3d, 0x0c, 0xab, 0xb6, 0x8d, 0x2c, 0xb2, 0x4f, 0xee, 0xe3,
-  0xf0, 0x4c, 0x7f, 0xe3, 0x58, 0x9a, 0xf4, 0x96, 0x27, 0xcf, 0x2c, 0x9e,
-  0x2e, 0x6b, 0xbe, 0x03, 0x4c, 0xc6, 0x45, 0x68, 0x0e, 0xd4, 0x55, 0x64,
-  0x3c, 0x84, 0xfa, 0xc6, 0x03, 0x23, 0xdc, 0xa7, 0xa5, 0xe1, 0x2b, 0xe5,
-  0xbf, 0xb6, 0x47, 0x65, 0x79, 0xbd, 0x9d, 0xce, 0x3e, 0x14, 0x65, 0x1c,
-  0xfd, 0x54, 0xe7, 0xf7, 0xe5, 0xb4, 0x39, 0x89, 0xff, 0xc2, 0x0a, 0xfe,
-  0xa2, 0x95, 0x5a, 0x3f, 0x8b, 0xdf, 0x62, 0x06, 0xc3, 0x21, 0xe0, 0x0a,
-  0xb4, 0xa7, 0x0f, 0xf4, 0xc0, 0x07, 0x87, 0xb9, 0xf0, 0x2b, 0x66, 0xd7,
-  0xc1, 0x0a, 0x69, 0x92, 0x12, 0x68, 0x4e, 0xbc, 0xa5, 0x9b, 0xd0, 0x7b,
-  0x7a, 0x74, 0x7e, 0xdc, 0xdb, 0xd9, 0xd9, 0xdd, 0xdf, 0xfd, 0xfc, 0xc5,
-  0xce, 0xfe, 0xee, 0xee, 0xee, 0xde, 0xfe, 0xee, 0xfe, 0xfe, 0xde, 0xce,
-  0xcf, 0xdb, 0xbd, 0x75, 0x4b, 0xf7, 0xf6, 0xab, 0x35, 0x0d, 0xd2, 0xac,
-  0x7b, 0x12, 0xc5, 0xfa, 0x93, 0x9b, 0x3d, 0x66, 0x35, 0xeb, 0x45, 0xe5,
-  0x62, 0x42, 0x5d, 0xe9, 0xe1, 0x0c, 0x27, 0x53, 0x92, 0x24, 0x9d, 0x04,
-  0x13, 0x7a, 0x7d, 0xfa, 0xfd, 0xbb, 0x93, 0xd3, 0x83, 0xd7, 0xd1, 0xc5,
-  0x69, 0x74, 0x00, 0xbb, 0x5f, 0x07, 0x9f, 0x44, 0x24, 0x3a, 0x67, 0x5c,
-  0x0a, 0xe0, 0x83, 0xf7, 0x11, 0x98, 0x91, 0xca, 0x85, 0x3e, 0x61, 0x10,
-  0xcd, 0x71, 0xe6, 0xd0, 0xeb, 0xb8, 0xa5, 0xd1, 0x75, 0xb5, 0x78, 0xfc,
-  0x46, 0xf8, 0x94, 0x9e, 0x07, 0xe2, 0x8a, 0xf7, 0xaa, 0x3b, 0x86, 0x63,
-  0x27, 0x5f, 0xd3, 0x9a, 0xd4, 0xa1, 0xa5, 0x6e, 0x6c, 0x97, 0x84, 0xb3,
-  0x29, 0x81, 0x5b, 0x78, 0x03, 0xe7, 0x12, 0xde, 0xaf, 0x66, 0x70, 0x90,
-  0x2b, 0xdf, 0xae, 0x71, 0x12, 0x90, 0x91, 0x58, 0x28, 0xdd, 0x6a, 0x4d,
-  0xf0, 0x74, 0xed, 0x94, 0xe8, 0x2e, 0x4f, 0x3e, 0x62, 0xd6, 0x75, 0xde,
-  0x2b, 0x61, 0xce, 0x7e, 0x76, 0x28, 0x3c, 0x60, 0xc6, 0x88, 0xb4, 0xb0,
-  0x21, 0x23, 0xc2, 0xab, 0xa3, 0x3b, 0xee, 0xc7, 0x58, 0xb2, 0xef, 0x82,
-  0xbf, 0x09, 0xef, 0xf1, 0x6d, 0x67, 0xdf, 0x95, 0x01, 0xbc, 0x1f, 0x1f,
-  0xbf, 0xfb, 0x1a, 0x1e, 0xdc, 0xef, 0x4f, 0xcf, 0x5f, 0x8f, 0xa9, 0x59,
-  0x16, 0x70, 0x36, 0x60, 0xe2, 0x63, 0x4e, 0xa8, 0xa3, 0x92, 0x73, 0xc9,
-  0x5d, 0xff, 0x51, 0xc8, 0x69, 0xe0, 0x50, 0x12, 0x30, 0xcc, 0x40, 0xe1,
-  0x61, 0xf4, 0x83, 0xee, 0x5b, 0x23, 0xa0, 0xc6, 0x2f, 0x17, 0xf1, 0xf4,
-  0x9a, 0x35, 0x74, 0x21, 0x56, 0x84, 0xda, 0x6d, 0x73, 0xce, 0xcc, 0x36,
-  0x2b, 0x5e, 0xdb, 0x55, 0x0e, 0x72, 0x44, 0x2b, 0x92, 0xad, 0x68, 0x35,
-  0xae, 0x02, 0xf3, 0x0c, 0xd1, 0xfa, 0xe5, 0x3c, 0xbe, 0x42, 0x87, 0xed,
-  0x63, 0x10, 0x74, 0xa6, 0xdd, 0x7f, 0x6a, 0x97, 0x7c, 0x6d, 0xa0, 0xbd,
-  0x63, 0x10, 0x00, 0x10, 0xd1, 0x00, 0xe9, 0xa0, 0x9e, 0x27, 0x91, 0x3a,
-  0xd9, 0x4f, 0x8f, 0x90, 0x1e, 0xae, 0x12, 0xdd, 0x2c, 0xa1, 0x84, 0xca,
-  0xbd, 0x82, 0x24, 0x43, 0x82, 0xf9, 0x30, 0x40, 0xa4, 0x11, 0xe5, 0x94,
-  0x5b, 0x0a, 0x8c, 0x40, 0xa5, 0x0f, 0x4b, 0xf4, 0x55, 0x6e, 0x64, 0xc9,
-  0x79, 0x30, 0x40, 0x53, 0x2a, 0x2d, 0xde, 0x4d, 0xc5, 0xe0, 0x1e, 0x97,
-  0xc4, 0xe3, 0x80, 0x95, 0x9e, 0xa1, 0xa3, 0xf8, 0x7a, 0x19, 0x1e, 0x55,
-  0xbe, 0xac, 0x68, 0x28, 0x31, 0x17, 0x57, 0x44, 0xc9, 0x60, 0x03, 0xcb,
-  0x26, 0x75, 0x4a, 0xb2, 0x9a, 0x7b, 0x16, 0xf6, 0x22, 0xad, 0xa4, 0xa5,
-  0xe4, 0x15, 0x38, 0xe8, 0x07, 0xbe, 0xbc, 0x04, 0xcb, 0x69, 0x43, 0x43,
-  0x0a, 0xfc, 0x3d, 0xe9, 0x4d, 0x97, 0x7c, 0xc7, 0x91, 0x10, 0x4f, 0x0c,
-  0x5c, 0x28, 0x47, 0x53, 0x70, 0x83, 0xfa, 0xac, 0xb5, 0x65, 0xb3, 0x2c,
-  0x1c, 0x69, 0x8e, 0x39, 0xb3, 0x37, 0xc3, 0xba, 0x15, 0xdc, 0x40, 0xe8,
-  0x91, 0xbb, 0x05, 0x3a, 0xf2, 0xf1, 0x63, 0x0f, 0xc8, 0x12, 0x2c, 0x9b,
-  0x04, 0xdb, 0xf9, 0xf7, 0x68, 0x8f, 0xb8, 0xa9, 0xb4, 0x2a, 0x93, 0xf9,
-  0xa5, 0x22, 0xe8, 0xc8, 0x15, 0xc2, 0xb3, 0x8c, 0x1b, 0x38, 0x3b, 0xec,
-  0x2f, 0xcd, 0x1c, 0xa8, 0x47, 0xae, 0xbc, 0xe4, 0x0a, 0x6c, 0x5d, 0x9e,
-  0x03, 0x49, 0xd6, 0x78, 0x88, 0x38, 0x45, 0xff, 0x24, 0x81, 0x5a, 0xae,
-  0xb9, 0x1a, 0xeb, 0xa8, 0x45, 0x18, 0xf3, 0xad, 0x63, 0x6b, 0xc7, 0xab,
-  0x75, 0xbf, 0x64, 0x34, 0x7c, 0x8e, 0x8a, 0xf0, 0xa5, 0x35, 0x63, 0x4b,
-  0xe3, 0x01, 0xf0, 0x47, 0xf2, 0x91, 0x93, 0x5a, 0x74, 0x6e, 0x5e, 0xc9,
-  0x73, 0x42, 0xbd, 0xce, 0x97, 0x5b, 0xc3, 0xe7, 0xe0, 0x85, 0xbc, 0xda,
-  0x8c, 0x91, 0xc5, 0x8a, 0x9a, 0x46, 0xe2, 0x8a, 0x18, 0x68, 0xaa, 0xa1,
-  0x2b, 0xbd, 0xab, 0x48, 0x17, 0x92, 0x6f, 0x76, 0x6f, 0xde, 0x3f, 0x38,
-  0x5f, 0x63, 0x51, 0x20, 0x21, 0x04, 0x07, 0x1d, 0x33, 0x29, 0xa1, 0x52,
-  0x48, 0x2d, 0x54, 0xb3, 0x36, 0xcb, 0xd5, 0xc4, 0x6f, 0x2c, 0xd3, 0x08,
-  0x82, 0x1c, 0xb9, 0x49, 0xf8, 0x9a, 0x71, 0x6a, 0x5c, 0x8c, 0xef, 0xaa,
-  0x05, 0x7a, 0x94, 0x2a, 0x74, 0x14, 0x31, 0x14, 0x24, 0x30, 0xae, 0x4a,
-  0x47, 0x39, 0xb4, 0x5a, 0x37, 0x7a, 0x21, 0x6e, 0x20, 0xfa, 0xb5, 0xcd,
-  0x6e, 0x94, 0xf3, 0xae, 0xe7, 0x37, 0x8f, 0xb3, 0x9a, 0xf6, 0x90, 0x4c,
-  0x5f, 0x9c, 0xdf, 0x0b, 0x37, 0x48, 0xb3, 0x87, 0x99, 0x8e, 0x0e, 0xe2,
-  0x93, 0x3a, 0xc6, 0x5c, 0x15, 0x2a, 0x06, 0x6e, 0x15, 0x1f, 0x7d, 0x28,
-  0x91, 0x1c, 0x48, 0x8a, 0x69, 0x24, 0x77, 0x98, 0x51, 0xd2, 0xad, 0x23,
-  0x0e, 0xbc, 0xa4, 0x7e, 0xee, 0x47, 0x5f, 0xc5, 0x65, 0x3a, 0x1d, 0x68,
-  0x95, 0x45, 0xad, 0xba, 0xc8, 0x6f, 0xf8, 0xe2, 0x7b, 0x9b, 0x92, 0xd6,
-  0xb3, 0x35, 0x8a, 0xbe, 0xb7, 0xba, 0x99, 0xa4, 0x43, 0x4a, 0x99, 0xb2,
-  0x74, 0x8a, 0xd2, 0xa8, 0x35, 0x1c, 0x21, 0xa5, 0xcf, 0x10, 0xb0, 0x07,
-  0x9d, 0xf8, 0xb2, 0x38, 0xd8, 0xd5, 0xb8, 0xbc, 0x71, 0x9e, 0x30, 0xec,
-  0x95, 0xb2, 0x22, 0xe0, 0x0c, 0x8a, 0x2c, 0x2d, 0x96, 0x81, 0x7c, 0xe5,
-  0xc2, 0x4b, 0xf0, 0xb7, 0x3b, 0xbe, 0x56, 0xed, 0x16, 0xd6, 0xd7, 0x52,
-  0xe3, 0x12, 0x2d, 0x7a, 0x84, 0xaf, 0x5f, 0x6e, 0xce, 0xb1, 0xa8, 0xe1,
-  0x90, 0x16, 0x8c, 0x97, 0x46, 0x19, 0xe8, 0xe9, 0xc5, 0xd1, 0xbf, 0x44,
-  0x07, 0x4d, 0xe7, 0x39, 0xdf, 0x4c, 0x35, 0xe0, 0xa0, 0x81, 0x27, 0x30,
-  0x8c, 0x5d, 0x42, 0x11, 0x33, 0x2d, 0x89, 0xca, 0xdb, 0xbf, 0xa1, 0x89,
-  0xcf, 0xde, 0x44, 0x5c, 0xe6, 0x1a, 0x59, 0x5d, 0xdd, 0x1b, 0x40, 0x3e,
-  0xbf, 0x06, 0x97, 0xc2, 0x9d, 0xaf, 0x02, 0x2b, 0xb9, 0xa3, 0x69, 0x2c,
-  0x91, 0xed, 0x0c, 0x0f, 0x46, 0x9b, 0x92, 0x09, 0x03, 0x45, 0x10, 0xb6,
-  0xc4, 0x0a, 0x0a, 0x00, 0x57, 0x5a, 0x41, 0xd5, 0x92, 0x0c, 0x2e, 0x29,
-  0x94, 0x17, 0x14, 0x94, 0x8d, 0x43, 0xa4, 0xb6, 0x0f, 0x7c, 0xe4, 0x3e,
-  0xd8, 0xc5, 0xa2, 0x57, 0xa0, 0x8c, 0xe5, 0x52, 0xf4, 0xa0, 0x3a, 0xc9,
-  0xda, 0xb1, 0x93, 0xdb, 0xec, 0xcc, 0xc2, 0x10, 0xb1, 0x11, 0x53, 0xe0,
-  0x20, 0xcd, 0xef, 0xc5, 0x6b, 0x8e, 0x3b, 0xd5, 0xb8, 0x66, 0x78, 0x31,
-  0x01, 0xd9, 0x0c, 0x78, 0x4a, 0xa8, 0x5a, 0xad, 0x75, 0x98, 0x24, 0xe8,
-  0x9b, 0x5a, 0xad, 0x87, 0xea, 0x23, 0x79, 0x07, 0xab, 0xca, 0xa3, 0x10,
-  0x18, 0xc1, 0x30, 0x55, 0xa0, 0x94, 0x0a, 0xad, 0x91, 0x15, 0x21, 0x6e,
-  0x10, 0x34, 0x71, 0xc3, 0xe3, 0xaa, 0xc1, 0x9e, 0x5c, 0x85, 0xa3, 0x20,
-  0x46, 0xf5, 0x8d, 0x83, 0x94, 0xd3, 0x66, 0xb9, 0x52, 0xe3, 0x34, 0x09,
-  0x32, 0x74, 0xb2, 0x7c, 0x23, 0xb8, 0xf9, 0x84, 0x7e, 0xf2, 0xd2, 0x78,
-  0xa2, 0xc0, 0x8d, 0x49, 0x91, 0xb6, 0x49, 0x22, 0x95, 0x13, 0xb8, 0xb8,
-  0x0e, 0x76, 0x11, 0x68, 0x9c, 0x7c, 0x02, 0x85, 0x32, 0x17, 0x20, 0xee,
-  0x0d, 0x4f, 0xdd, 0x7c, 0x07, 0xad, 0x9b, 0x27, 0xa7, 0xea, 0x32, 0xb9,
-  0x99, 0xbd, 0x5c, 0x44, 0x27, 0xd6, 0x53, 0x32, 0xad, 0x41, 0x09, 0xe3,
-  0x91, 0x8e, 0x9a, 0x77, 0x07, 0x92, 0x6d, 0xe6, 0xe4, 0x2c, 0xdb, 0xf4,
-  0x1a, 0x6e, 0x1e, 0xf3, 0x94, 0x59, 0xb4, 0xb8, 0xd7, 0xd4, 0x14, 0x95,
-  0x0d, 0x18, 0xe3, 0x01, 0x56, 0x89, 0xcf, 0x3f, 0x6f, 0xc9, 0x82, 0x1f,
-  0xdd, 0xd3, 0xfb, 0xf4, 0x75, 0x60, 0xfd, 0x98, 0x73, 0xa0, 0x09, 0x5b,
-  0x1b, 0x20, 0x87, 0x3a, 0x13, 0x48, 0x87, 0x86, 0x11, 0xc0, 0x80, 0x49,
-  0x8f, 0xce, 0x2f, 0xd3, 0xa2, 0xb2, 0x81, 0xe7, 0xfb, 0x1b, 0xa2, 0x5e,
-  0xcb, 0x40, 0xe3, 0x52, 0x02, 0x96, 0xd6, 0x28, 0x66, 0xc6, 0x26, 0x9b,
-  0xa3, 0x0d, 0xa4, 0x66, 0x92, 0xdc, 0x47, 0x7c, 0xa9, 0xb2, 0x12, 0x30,
-  0xce, 0xb5, 0x61, 0x5e, 0x64, 0x1d, 0x8c, 0xa3, 0x8e, 0x06, 0x1d, 0xb9,
-  0x02, 0x99, 0x9e, 0x47, 0xbc, 0x5f, 0x3f, 0x9c, 0xf7, 0xbf, 0x66, 0x38,
-  0x07, 0xd1, 0x83, 0x29, 0x1a, 0x5a, 0xfe, 0x94, 0x39, 0x7e, 0x69, 0xc9,
-  0x69, 0x39, 0xa8, 0xda, 0xe4, 0x1e, 0x59, 0x23, 0xd4, 0xb8, 0x9d, 0xd4,
-  0xeb, 0x96, 0xb5, 0x0d, 0x13, 0x59, 0x2e, 0x4f, 0x43, 0xa9, 0xe1, 0xf6,
-  0x07, 0x36, 0x94, 0x4f, 0x1d, 0xae, 0xc1, 0x5f, 0x5a, 0x0e, 0x56, 0x23,
-  0xbd, 0x42, 0xd3, 0x9e, 0x76, 0x47, 0x3b, 0xa1, 0x7c, 0xe5, 0x92, 0xa1,
-  0x0a, 0x40, 0xaa, 0x56, 0x80, 0x96, 0xf2, 0x22, 0x0a, 0xcf, 0x04, 0xd9,
-  0x81, 0x8d, 0xd7, 0xf4, 0xb3, 0x5d, 0x81, 0x99, 0xa6, 0x93, 0xa4, 0xb5,
-  0x77, 0x18, 0x41, 0x27, 0x59, 0x2c, 0x91, 0x34, 0x62, 0x1c, 0x30, 0x14,
-  0x02, 0x70, 0x8e, 0x9e, 0xfa, 0x23, 0xf5, 0xcc, 0x6d, 0xb7, 0x8e, 0x51,
-  0x72, 0x0a, 0xb4, 0x9c, 0xb9, 0x84, 0xf5, 0x43, 0xf8, 0x4c, 0x12, 0x69,
-  0xa9, 0x5a, 0x9b, 0xdc, 0x76, 0x58, 0x4f, 0x34, 0x65, 0x7a, 0xc6, 0x65,
-  0x1b, 0x5d, 0xae, 0x0a, 0x30, 0x5e, 0x05, 0x15, 0x54, 0x34, 0x1a, 0x6e,
-  0x95, 0xe3, 0x73, 0x3b, 0x38, 0x0d, 0xd2, 0xb7, 0x13, 0x14, 0x28, 0xe7,
-  0x73, 0x2d, 0xd6, 0x71, 0x20, 0x67, 0x68, 0xf9, 0x38, 0xef, 0x7b, 0x73,
-  0xe2, 0x19, 0xb5, 0x3b, 0x4f, 0x69, 0x40, 0x7d, 0xc0, 0xb2, 0x58, 0xf5,
-  0x65, 0xe5, 0x85, 0x46, 0xc2, 0x0e, 0x61, 0xbc, 0x5e, 0xd8, 0xb8, 0x5d,
-  0x8d, 0xaa, 0xc9, 0x74, 0xe5, 0x1a, 0x18, 0x44, 0xc3, 0xff, 0xa5, 0x2b,
-  0xc3, 0xe2, 0x39, 0xc7, 0x8e, 0xa1, 0x04, 0xc5, 0x32, 0x40, 0xe8, 0xd4,
-  0x14, 0x3f, 0x30, 0x7c, 0x0e, 0x0c, 0xb5, 0x79, 0xb8, 0xbc, 0x5b, 0xcb,
-  0x11, 0x02, 0xff, 0x7b, 0x13, 0x62, 0xb1, 0xd6, 0x2a, 0x4e, 0x2b, 0xab,
-  0x90, 0xe6, 0x36, 0x5c, 0x4d, 0x0b, 0x89, 0x15, 0x6c, 0x0d, 0xd8, 0x5d,
-  0x64, 0x5f, 0x71, 0xd5, 0xbf, 0xc3, 0x3c, 0x0e, 0x97, 0xd5, 0x57, 0x0d,
-  0xd3, 0x91, 0x0a, 0xf1, 0x3b, 0x53, 0x86, 0xe4, 0xb7, 0x0e, 0xe9, 0x85,
-  0xe1, 0x7b, 0x35, 0x67, 0x7c, 0x29, 0x3d, 0x8c, 0x60, 0x76, 0x97, 0x1e,
-  0xce, 0x50, 0x2b, 0xd9, 0x1e, 0xd8, 0xd7, 0x97, 0x38, 0x29, 0xb6, 0xa7,
-  0x96, 0x9c, 0xfa, 0xaa, 0xc8, 0xf3, 0x96, 0x34, 0xcb, 0x85, 0x76, 0x31,
-  0x85, 0xa1, 0x38, 0x74, 0xf8, 0x90, 0xc9, 0xaf, 0xf2, 0xae, 0x2a, 0x8f,
-  0xf7, 0xdc, 0xc4, 0x48, 0xa2, 0xee, 0xd5, 0xf6, 0xb2, 0xb7, 0xbb, 0x2d,
-  0x83, 0xd9, 0x96, 0x06, 0x44, 0xae, 0x53, 0x92, 0xf4, 0x41, 0x20, 0x06,
-  0x40, 0x14, 0xde, 0x5c, 0x9c, 0x23, 0xc0, 0xc1, 0x3b, 0x0b, 0x8d, 0x3c,
-  0x86, 0x77, 0x8d, 0xaf, 0x26, 0xba, 0x6b, 0xa5, 0xba, 0x50, 0xae, 0xfb,
-  0xb3, 0xe1, 0x37, 0x68, 0xe0, 0x44, 0x3e, 0x22, 0xa5, 0xe1, 0x6d, 0xa8,
-  0x35, 0x25, 0x0a, 0x97, 0xc9, 0x15, 0x51, 0x5d, 0x0e, 0x1d, 0x1f, 0x74,
-  0xf1, 0xaf, 0x13, 0x45, 0x9f, 0x1f, 0xbc, 0xfb, 0xfa, 0x08, 0x92, 0x80,
-  0x03, 0x52, 0x4c, 0x99, 0xda, 0x67, 0xab, 0x29, 0x54, 0x21, 0x5a, 0x31,
-  0xc4, 0xbe, 0x01, 0x5a, 0x58, 0xf8, 0x79, 0x0a, 0xa8, 0x2b, 0x21, 0x5e,
-  0x6c, 0xb7, 0x46, 0xb4, 0x6d, 0x44, 0x66, 0x51, 0x85, 0x04, 0xc1, 0x0a,
-  0x23, 0x23, 0xa5, 0xe7, 0x80, 0x36, 0x98, 0x2c, 0x63, 0x45, 0xa8, 0x89,
-  0x43, 0x08, 0x13, 0xb5, 0xb3, 0x8c, 0xea, 0x67, 0x71, 0xc3, 0xd2, 0x5b,
-  0x9c, 0x4e, 0x5f, 0x40, 0xa7, 0x1f, 0x85, 0x56, 0x35, 0x81, 0xd8, 0xd8,
-  0xdd, 0xd9, 0xf1, 0xb5, 0x63, 0x3c, 0x14, 0x4b, 0x8b, 0x5b, 0x16, 0xd1,
-  0xce, 0xf0, 0xc5, 0x8b, 0x75, 0x8c, 0xd0, 0x35, 0x0a, 0x3c, 0x94, 0x67,
-  0x9f, 0xdc, 0xe6, 0x90, 0x1f, 0x5d, 0xd7, 0x66, 0x87, 0x46, 0x83, 0x82,
-  0xf5, 0x1a, 0x4d, 0x58, 0x3a, 0xa9, 0x45, 0x2d, 0x3c, 0xe2, 0xac, 0x81,
-  0xf3, 0x2c, 0x73, 0x6a, 0x0d, 0x2f, 0xe5, 0x86, 0xc7, 0x7e, 0x06, 0x70,
-  0x86, 0x19, 0x83, 0x96, 0x1c, 0x50, 0x98, 0x3a, 0x1f, 0xee, 0x27, 0x2d,
-  0x4c, 0xa0, 0xc0, 0xaf, 0x59, 0xa2, 0xcb, 0xf6, 0x6c, 0x4c, 0x24, 0x78,
-  0x7f, 0xc6, 0xf6, 0xbf, 0xe3, 0x77, 0x5f, 0x8b, 0x39, 0x84, 0x74, 0x7b,
-  0xd8, 0xd2, 0xb7, 0x1b, 0x9a, 0xfe, 0x7b, 0x29, 0x02, 0xc3, 0xe1, 0xa4,
-  0x08, 0xde, 0x90, 0x0a, 0xae, 0x69, 0x26, 0xac, 0xc0, 0xef, 0xfe, 0x1a,
-  0x5b, 0xe5, 0x45, 0x34, 0x0c, 0x84, 0x13, 0xad, 0x00, 0xc3, 0x92, 0xc9,
-  0xe2, 0xde, 0x34, 0x23, 0xed, 0x01, 0xad, 0x9b, 0x67, 0xc6, 0x35, 0x2b,
-  0x7a, 0xae, 0xa8, 0xe7, 0xa0, 0xa0, 0x96, 0x6c, 0xd2, 0xd1, 0xa5, 0x74,
-  0x83, 0xf3, 0xdd, 0x90, 0x44, 0x3e, 0x6d, 0x28, 0x35, 0x53, 0x67, 0xbd,
-  0x66, 0x20, 0x4b, 0x56, 0x03, 0xb3, 0xfd, 0x34, 0xcd, 0x90, 0x52, 0x95,
-  0x3c, 0xe4, 0xea, 0xbc, 0xdb, 0x28, 0x30, 0x9a, 0xe7, 0xff, 0xfd, 0x71,
-  0x3e, 0x30, 0x42, 0x3e, 0xa8, 0x7c, 0x53, 0x65, 0x33, 0x6f, 0xd3, 0xd0,
-  0x11, 0x77, 0x3a, 0x42, 0x2e, 0xe4, 0x7d, 0xe9, 0x3a, 0xee, 0xee, 0x4e,
-  0xde, 0xb7, 0xa5, 0xe9, 0x38, 0x00, 0x2c, 0xd2, 0x6a, 0x8d, 0x20, 0x97,
-  0x7a, 0x6a, 0xba, 0x0c, 0x4b, 0xe1, 0xe0, 0x1c, 0x69, 0x5d, 0x2c, 0xd9,
-  0x88, 0x34, 0xbf, 0x1d, 0x05, 0x84, 0x98, 0x86, 0x80, 0x28, 0x8f, 0xcb,
-  0xeb, 0x06, 0x81, 0xa1, 0x97, 0x0a, 0xc1, 0xcc, 0x2c, 0x8d, 0x85, 0x1a,
-  0xc5, 0xb8, 0xf2, 0x40, 0xd6, 0xc5, 0x2a, 0x53, 0xde, 0xc7, 0xfa, 0x16,
-  0x0d, 0x3e, 0x2e, 0xaf, 0x51, 0x92, 0xd9, 0x99, 0xa2, 0xda, 0xe2, 0x15,
-  0xba, 0x57, 0x54, 0x66, 0x92, 0xa7, 0x44, 0x98, 0x82, 0x70, 0x5d, 0x5b,
-  0x8a, 0xfa, 0x0a, 0x6c, 0x6c, 0xb0, 0x11, 0x7e, 0x9b, 0x4d, 0xf1, 0xe3,
-  0xf6, 0x02, 0x9a, 0x2d, 0xfd, 0x41, 0x7b, 0xbc, 0xf7, 0x31, 0x3c, 0x62,
-  0x99, 0x0f, 0xac, 0x27, 0x9f, 0x7a, 0xe2, 0x44, 0x7e, 0xef, 0xf0, 0x2b,
-  0xe2, 0xd0, 0x05, 0x8c, 0xac, 0x93, 0xd4, 0xeb, 0xd6, 0xb4, 0x50, 0x17,
-  0x80, 0xd1, 0x07, 0x9a, 0x19, 0x50, 0x20, 0x1a, 0xdb, 0x05, 0x85, 0x1d,
-  0xb8, 0xb2, 0x82, 0x74, 0x66, 0xec, 0x3d, 0x84, 0x2c, 0xf1, 0xe5, 0x8e,
-  0xe6, 0x92, 0x87, 0xc2, 0xb2, 0x85, 0xa8, 0xbf, 0x70, 0x75, 0x4b, 0xf6,
-  0x1c, 0xfa, 0xc4, 0x0c, 0x65, 0x80, 0x02, 0x76, 0x50, 0x21, 0xaa, 0x7d,
-  0x7c, 0xc1, 0x66, 0x04, 0x5c, 0x7d, 0xa6, 0x8f, 0x7e, 0x77, 0x74, 0xfe,
-  0xd5, 0xe9, 0xf8, 0x88, 0xf6, 0xe3, 0xf5, 0xd1, 0x57, 0xef, 0x99, 0x6b,
-  0x31, 0x75, 0x88, 0xe9, 0x19, 0xc0, 0xc0, 0x62, 0xff, 0x02, 0xdc, 0x19,
-  0x87, 0xeb, 0x81, 0x4c, 0x45, 0x0e, 0x1a, 0x18, 0x15, 0x9a, 0x88, 0x27,
-  0xf8, 0xba, 0xf3, 0x44, 0x6c, 0x95, 0x29, 0x92, 0x10, 0x3c, 0x06, 0x38,
-  0xc7, 0xfa, 0x71, 0xcd, 0x76, 0xa8, 0x97, 0x7a, 0x94, 0xa4, 0x08, 0x65,
-  0xb9, 0xef, 0x8d, 0x9a, 0xb7, 0x62, 0x99, 0xd6, 0xc3, 0xe7, 0xeb, 0xcd,
-  0xa3, 0x02, 0x03, 0x88, 0xf7, 0xd0, 0xc9, 0xd1, 0x0a, 0xd7, 0x39, 0xcf,
-  0xe5, 0xd6, 0x44, 0x69, 0x74, 0x6e, 0x1b, 0xf7, 0x78, 0x5a, 0xe1, 0x0a,
-  0x17, 0x85, 0x42, 0xcb, 0xb4, 0x97, 0x42, 0xdc, 0xc4, 0xde, 0x24, 0xed,
-  0x7c, 0xae, 0xd7, 0x01, 0xb8, 0x5f, 0x99, 0x08, 0x4e, 0x9c, 0xdc, 0xda,
-  0xea, 0x0f, 0x97, 0x40, 0x5f, 0x2d, 0xa8, 0xb2, 0xa9, 0x4a, 0xf0, 0x1d,
-  0xe6, 0xa9, 0x05, 0x3e, 0xa5, 0x90, 0xb9, 0x95, 0xf9, 0xc3, 0xca, 0x07,
-  0x21, 0x39, 0x4a, 0x3a, 0xb7, 0xeb, 0x59, 0xcf, 0x85, 0xcc, 0x94, 0xed,
-  0x1c, 0x22, 0x08, 0x18, 0x22, 0x33, 0xa0, 0x01, 0xeb, 0x45, 0xbe, 0xbd,
-  0x80, 0x22, 0x67, 0x97, 0xf3, 0x09, 0x02, 0x15, 0x72, 0x7d, 0xe9, 0xf3,
-  0x3a, 0xb2, 0x58, 0x90, 0x4d, 0x24, 0xcc, 0x55, 0xc3, 0xf0, 0x78, 0x4b,
-  0xe1, 0x12, 0x10, 0xe2, 0x6b, 0x9f, 0x77, 0x69, 0x5d, 0xaa, 0x9e, 0xf3,
-  0x19, 0x0d, 0x1c, 0x27, 0x1b, 0x1b, 0x1b, 0xaf, 0x8f, 0x2e, 0x0e, 0x8e,
-  0x4f, 0x8e, 0x5e, 0x47, 0xc7, 0xef, 0xde, 0x9c, 0x9e, 0xbf, 0x3d, 0xb8,
-  0xd0, 0x68, 0x8c, 0xd7, 0xce, 0x22, 0xe7, 0xc1, 0x9c, 0x14, 0x8c, 0x3d,
-  0xb0, 0xd6, 0x81, 0x84, 0x69, 0x17, 0xaf, 0x14, 0x78, 0x5f, 0x96, 0x21,
-  0xa9, 0xad, 0xc1, 0x46, 0xa4, 0x51, 0x1c, 0x1e, 0xfd, 0x8a, 0xe5, 0x82,
-  0x6d, 0xe7, 0x7b, 0x1f, 0xd9, 0x72, 0x9a, 0x19, 0x0d, 0x55, 0x18, 0x1f,
-  0x6c, 0x2a, 0x66, 0x1b, 0xc8, 0xd5, 0x3c, 0xd1, 0x3b, 0x91, 0xb7, 0x53,
-  0xd2, 0xff, 0x41, 0x93, 0xc3, 0xe3, 0xed, 0x3a, 0xe4, 0x30, 0x0c, 0x2d,
-  0x06, 0x86, 0x16, 0x03, 0x0e, 0x25, 0x04, 0xdd, 0xb8, 0xcc, 0x11, 0x54,
-  0x12, 0xb6, 0xe9, 0xe0, 0x24, 0xb0, 0xa3, 0x8c, 0x1e, 0x8c, 0xd8, 0x1f,
-  0x7c, 0x12, 0xee, 0x2f, 0xe3, 0x39, 0x6c, 0x70, 0x11, 0x90, 0x4a, 0x31,
-  0x99, 0x18, 0x3f, 0xb5, 0xa4, 0x9d, 0x72, 0x67, 0x1d, 0x88, 0xae, 0x8e,
-  0x61, 0x9b, 0x77, 0x4e, 0x8b, 0x06, 0x86, 0x4d, 0x6d, 0x3a, 0x7f, 0x3d,
-  0x49, 0x4c, 0xc3, 0x63, 0x2d, 0x26, 0xc9, 0x6b, 0xc1, 0x80, 0xed, 0xfc,
-  0x33, 0x33, 0x44, 0x45, 0x17, 0x3e, 0xea, 0x35, 0xfe, 0x94, 0xa6, 0xac,
-  0x2e, 0x2a, 0x3d, 0x6d, 0xfe, 0xdc, 0x1a, 0x66, 0xcb, 0xf0, 0x35, 0x3d,
-  0x34, 0x5b, 0x2d, 0x96, 0x5a, 0x8f, 0xd8, 0x24, 0x6a, 0xd8, 0xf2, 0x6c,
-  0x0b, 0x45, 0x68, 0x83, 0xf0, 0x01, 0xc3, 0xcf, 0x1b, 0x5d, 0x03, 0x99,
-  0x07, 0xe8, 0xbb, 0x32, 0x57, 0x60, 0x05, 0x18, 0x5e, 0xf3, 0xde, 0x59,
-  0x8d, 0x13, 0x17, 0x71, 0x54, 0x93, 0x5c, 0xb0, 0x20, 0x63, 0xf7, 0x2c,
-  0x56, 0x32, 0x78, 0x21, 0xf6, 0x01, 0x4a, 0x58, 0xff, 0x4d, 0x2b, 0x98,
-  0xc2, 0x24, 0xab, 0x0d, 0xea, 0x55, 0xd1, 0x76, 0x3e, 0xd6, 0x26, 0x15,
-  0xbe, 0x58, 0x0f, 0xe9, 0x09, 0x39, 0xbd, 0x75, 0xed, 0x51, 0x74, 0x9b,
-  0x23, 0x50, 0x2e, 0x4e, 0xfc, 0xe4, 0xde, 0x8a, 0x40, 0x73, 0xdd, 0x07,
-  0x81, 0xc9, 0xdc, 0x90, 0xd4, 0x26, 0xe3, 0x94, 0x70, 0x88, 0x19, 0xf9,
-  0xae, 0x50, 0xfc, 0x38, 0xbf, 0x61, 0x5d, 0x1e, 0xa9, 0x9d, 0x5a, 0x08,
-  0xde, 0x60, 0xe6, 0x11, 0x7a, 0xa6, 0x35, 0x87, 0xc0, 0xf4, 0xb2, 0x0d,
-  0xab, 0x0e, 0x68, 0x2f, 0x59, 0x00, 0x23, 0xb8, 0xbf, 0xe0, 0xdf, 0x83,
-  0xc9, 0xb3, 0x52, 0x9d, 0xc4, 0x25, 0x14, 0x2a, 0x64, 0xe2, 0xc8, 0x9d,
-  0xe1, 0xcc, 0xb0, 0xbe, 0xc2, 0x43, 0x80, 0x97, 0x05, 0x16, 0x2d, 0xb8,
-  0xa1, 0x31, 0x83, 0x69, 0xb8, 0x22, 0xd7, 0x88, 0xba, 0x77, 0xad, 0x98,
-  0x83, 0x83, 0x9a, 0x41, 0xe8, 0xb4, 0xc6, 0x92, 0x9e, 0xe5, 0xa5, 0x9c,
-  0x37, 0x48, 0xf8, 0x3d, 0x66, 0x3d, 0x3d, 0x90, 0x41, 0x6f, 0x79, 0x4d,
-  0x7d, 0xf4, 0xa2, 0x2b, 0xd6, 0x91, 0x26, 0x34, 0xf4, 0x16, 0x03, 0x9d,
-  0xc9, 0xe3, 0xaf, 0xce, 0xe3, 0xcb, 0x38, 0x99, 0xff, 0x7e, 0x6f, 0x67,
-  0x1c, 0x5f, 0xad, 0xe6, 0xf1, 0xbf, 0xe2, 0xc5, 0x57, 0x4f, 0x9e, 0xec,
-  0xed, 0x7c, 0xf6, 0xf9, 0x4e, 0xaf, 0x19, 0x7d, 0xe0, 0x03, 0xb2, 0x10,
-  0x61, 0xc3, 0x37, 0x19, 0xf8, 0x2e, 0xfa, 0x19, 0x4d, 0xaf, 0x52, 0x28,
-  0x75, 0x2c, 0x28, 0xe9, 0x1a, 0xc4, 0xa2, 0x4d, 0x82, 0x4d, 0x0a, 0xec,
-  0x20, 0xa3, 0xf2, 0x12, 0x5d, 0xff, 0x6e, 0x77, 0x5f, 0x58, 0x19, 0x40,
-  0xa2, 0x71, 0x4f, 0xf0, 0x5a, 0xbc, 0x4c, 0x33, 0xba, 0x81, 0xbe, 0x88,
-  0xaa, 0xf8, 0xca, 0xd1, 0xaa, 0x66, 0xd3, 0x4b, 0x0e, 0x85, 0xf3, 0x6f,
-  0x5e, 0x32, 0x91, 0xa7, 0x99, 0x14, 0x67, 0xe1, 0xd2, 0x23, 0x10, 0xb2,
-  0x96, 0x49, 0x01, 0x04, 0xc1, 0xab, 0x22, 0x5e, 0x58, 0xa6, 0x0a, 0xbf,
-  0xcf, 0x51, 0x6b, 0xa3, 0xe5, 0x1c, 0x59, 0x14, 0x16, 0x7a, 0x26, 0x12,
-  0xaf, 0x10, 0xdc, 0x7c, 0x59, 0x7a, 0x10, 0x3e, 0xb9, 0x6e, 0xc2, 0xa2,
-  0x26, 0xb4, 0x58, 0xb0, 0xa9, 0xf4, 0x30, 0x2b, 0x61, 0x19, 0xe0, 0x66,
-  0x33, 0x9b, 0xe9, 0x08, 0xbf, 0x03, 0xfd, 0x21, 0x16, 0xc4, 0xc5, 0xde,
-  0x52, 0xf2, 0xaa, 0x05, 0xa3, 0xa3, 0x67, 0x69, 0x0d, 0x69, 0x6d, 0x5e,
-  0xb1, 0x8f, 0xd8, 0x8c, 0x5e, 0x9a, 0x95, 0x68, 0xf7, 0x8b, 0x57, 0x20,
-  0x88, 0xdd, 0x2f, 0xfe, 0xd5, 0x7d, 0xb6, 0xa7, 0x9f, 0xed, 0x7d, 0xf1,
-  0xaf, 0xa3, 0x11, 0xc6, 0xc7, 0x14, 0xd2, 0xb7, 0xaf, 0xfb, 0x8a, 0xb6,
-  0x12, 0xeb, 0x11, 0x96, 0xbf, 0x1c, 0xf8, 0xb1, 0xec, 0x75, 0xcf, 0x7a,
-  0x0e, 0x57, 0x79, 0xa0, 0x1e, 0x55, 0xc7, 0xb7, 0x52, 0x2b, 0x54, 0x06,
-  0x50, 0xeb, 0xb2, 0x6b, 0xd1, 0x9d, 0x1f, 0x04, 0xed, 0x68, 0xec, 0x25,
-  0x5e, 0xfe, 0x03, 0x53, 0xea, 0x1f, 0x36, 0x22, 0xf5, 0x6e, 0xf2, 0x76,
-  0xdc, 0xc3, 0xe1, 0x61, 0x64, 0x4b, 0x8f, 0xc6, 0x56, 0x44, 0x85, 0x5b,
-  0xe6, 0xdc, 0x0f, 0xbe, 0x03, 0x25, 0x64, 0x1c, 0x83, 0xfd, 0xa3, 0x82,
-  0x5f, 0xba, 0xa4, 0x19, 0x7b, 0x46, 0xf2, 0x64, 0x48, 0xc6, 0x40, 0xed,
-  0x0f, 0xa9, 0xe8, 0xf1, 0xc3, 0x0f, 0x2a, 0x50, 0xd1, 0x2f, 0x3a, 0xf2,
-  0x6b, 0xe2, 0x45, 0x33, 0x62, 0x6f, 0x0b, 0x54, 0x3c, 0x67, 0x9c, 0x41,
-  0x9a, 0x87, 0x5e, 0xf9, 0x97, 0x3a, 0x53, 0x69, 0x84, 0xb6, 0xf6, 0x60,
-  0x7c, 0x78, 0x7c, 0x8c, 0x30, 0x53, 0x2c, 0xea, 0x91, 0xb0, 0x31, 0xd0,
-  0xe6, 0x26, 0x42, 0x3c, 0x7c, 0x54, 0x62, 0x48, 0xfa, 0xbc, 0x77, 0xd8,
-  0x76, 0x50, 0x3f, 0x35, 0x66, 0x0a, 0xb8, 0x6e, 0x25, 0x68, 0x56, 0xa4,
-  0x9c, 0x57, 0x3d, 0x79, 0xf0, 0x2a, 0xed, 0xa9, 0x13, 0x4b, 0x3e, 0xe9,
-  0x79, 0xf0, 0x1c, 0xd9, 0x0f, 0x6c, 0xda, 0x2b, 0x11, 0x9d, 0xd2, 0xbf,
-  0x25, 0xaf, 0x76, 0x77, 0xba, 0x9f, 0x80, 0xd7, 0x96, 0xe1, 0xc4, 0x5f,
-  0x79, 0x87, 0xe0, 0x43, 0xcf, 0xa7, 0x33, 0x79, 0xfa, 0x3a, 0x9d, 0xcd,
-  0xe8, 0x4e, 0xb8, 0x8d, 0xe7, 0x2b, 0xa2, 0x85, 0x09, 0xdf, 0xb0, 0xfc,
-  0xff, 0x6b, 0xc6, 0x01, 0x8f, 0x95, 0x3e, 0x5b, 0xae, 0x26, 0x8b, 0xb4,
-  0x36, 0xe0, 0x6d, 0x9e, 0xe0, 0x17, 0x3c, 0xe1, 0xef, 0x13, 0x47, 0x1d,
-  0x09, 0x8b, 0x76, 0x22, 0xfb, 0xf5, 0x2f, 0xf3, 0x7c, 0x12, 0x17, 0x7d,
-  0x75, 0xe7, 0xd8, 0x38, 0xfb, 0xbb, 0x7b, 0x4f, 0x9e, 0x3e, 0xeb, 0x8f,
-  0x54, 0x4e, 0x03, 0x8b, 0xa8, 0x42, 0x80, 0x0a, 0x69, 0xc2, 0x01, 0x2a,
-  0x04, 0x58, 0xae, 0x5d, 0xce, 0x55, 0xe6, 0x62, 0xdc, 0xdd, 0x2b, 0xe9,
-  0xed, 0x5f, 0xb9, 0x9f, 0x57, 0xe8, 0xe2, 0x5f, 0xd3, 0xd9, 0x2b, 0x37,
-  0xc3, 0x7f, 0xe5, 0xb9, 0xbc, 0xd2, 0x49, 0xd0, 0xbe, 0x5a, 0x06, 0x62,
-  0x19, 0x56, 0x5b, 0x79, 0x6c, 0x73, 0x6d, 0x13, 0x37, 0x30, 0x69, 0x44,
-  0x30, 0x0c, 0x67, 0xe2, 0xfd, 0x80, 0xb4, 0xea, 0x33, 0xf0, 0xb6, 0x3f,
-  0x0e, 0xa9, 0x95, 0x21, 0xb7, 0x32, 0xf4, 0x0c, 0x1b, 0x28, 0xf0, 0x43,
-  0xde, 0x88, 0x81, 0xa6, 0x61, 0xce, 0x61, 0x65, 0x51, 0x51, 0x20, 0xcf,
-  0x11, 0x04, 0x70, 0xf8, 0xf5, 0x71, 0x5f, 0x03, 0x6f, 0x44, 0x4d, 0x1c,
-  0x74, 0xd9, 0xa7, 0x5d, 0x88, 0xe1, 0x34, 0x5e, 0xf2, 0xe9, 0xdf, 0x88,
-  0xb4, 0x38, 0x60, 0xcc, 0x71, 0x24, 0xdc, 0xaf, 0x64, 0x4c, 0x53, 0x67,
-  0x7a, 0xeb, 0xcc, 0xd9, 0xe2, 0x5d, 0x08, 0x40, 0x7d, 0xd0, 0x0c, 0x10,
-  0x9b, 0x25, 0xa0, 0x04, 0x3e, 0x9f, 0xa5, 0x4b, 0xb7, 0x1c, 0xbe, 0x71,
-  0x4e, 0x4f, 0x97, 0xde, 0xa7, 0x8f, 0xd2, 0x57, 0xc2, 0x4f, 0x8c, 0x45,
-  0xf4, 0xa0, 0x00, 0x7b, 0x3e, 0x11, 0x72, 0x0f, 0xa4, 0xfd, 0x4f, 0x12,
-  0x4d, 0xd2, 0x14, 0xb3, 0x89, 0x08, 0x86, 0xcc, 0x3f, 0x5f, 0x7e, 0x69,
-  0x28, 0xcf, 0x5f, 0x44, 0x28, 0xf0, 0x29, 0x6f, 0xa9, 0xdf, 0x51, 0x0d,
-  0x50, 0x62, 0xb3, 0xc5, 0x4b, 0xaa, 0x1e, 0x38, 0x17, 0x58, 0x10, 0x8d,
-  0xa3, 0x82, 0x81, 0x42, 0xf1, 0x63, 0xa2, 0x93, 0x7b, 0x35, 0x36, 0x70,
-  0x0b, 0xfd, 0x3f, 0xe1, 0x10, 0xbc, 0xe4, 0x6d, 0xc0, 0xd7, 0x5f, 0xf4,
-  0xc5, 0x78, 0xe8, 0xde, 0xe5, 0x61, 0x34, 0x1c, 0xc8, 0x42, 0xa0, 0xe1,
-  0x7c, 0x48, 0xa0, 0x36, 0x48, 0x63, 0x91, 0xc6, 0x18, 0xa0, 0x03, 0x55,
-  0xb0, 0x49, 0x9a, 0x9a, 0xcf, 0x14, 0xd0, 0xd3, 0x19, 0xa8, 0xa5, 0xf1,
-  0x84, 0x73, 0x1b, 0x58, 0x7a, 0xec, 0x73, 0xb4, 0x2a, 0xde, 0xeb, 0x3b,
-  0x84, 0x64, 0xd8, 0x4c, 0xc1, 0xf0, 0x8a, 0xc4, 0x70, 0x26, 0x37, 0x14,
-  0xd0, 0xdc, 0x4b, 0xf3, 0xe1, 0xc4, 0xca, 0x40, 0x78, 0xf0, 0x49, 0x8e,
-  0x82, 0x65, 0xd3, 0x3a, 0x22, 0x6f, 0x38, 0x83, 0x58, 0x3b, 0x7d, 0xc5,
-  0xcb, 0xbd, 0x3b, 0xba, 0x4a, 0x2f, 0x65, 0x31, 0x88, 0x45, 0x5e, 0x25,
-  0xdb, 0xf4, 0xe7, 0x80, 0x3e, 0xdf, 0x63, 0xa9, 0x8c, 0x7f, 0x79, 0x82,
-  0x78, 0xac, 0xf0, 0xee, 0x0f, 0xce, 0x86, 0x3b, 0x17, 0xfc, 0x4b, 0xea,
-  0xee, 0x7c, 0xf5, 0xea, 0xe8, 0x28, 0x41, 0xe6, 0xad, 0xaa, 0x66, 0x61,
-  0x50, 0x09, 0x2b, 0x5a, 0xac, 0x92, 0xae, 0x38, 0xa7, 0xc5, 0x05, 0x8f,
-  0x68, 0x20, 0x85, 0x0a, 0xea, 0x2c, 0x77, 0xa7, 0x6a, 0x9e, 0xe1, 0x1c,
-  0x20, 0xdc, 0xac, 0xc9, 0xdd, 0xd6, 0x20, 0x8c, 0xb4, 0x25, 0xf6, 0x7e,
-  0xcb, 0x59, 0xf5, 0x0c, 0xd5, 0xe1, 0x4b, 0x36, 0x71, 0xf7, 0x9b, 0xdc,
-  0xec, 0x46, 0x14, 0xa6, 0x19, 0x63, 0x9b, 0xd3, 0xe6, 0x0e, 0x06, 0x35,
-  0x51, 0x4d, 0xda, 0x64, 0x0f, 0xda, 0x16, 0x77, 0x93, 0xcc, 0x4b, 0xe8,
-  0xea, 0x0a, 0xd4, 0x68, 0xbd, 0x1a, 0x98, 0x36, 0x3a, 0xea, 0x87, 0x67,
-  0x3f, 0x9f, 0x56, 0x09, 0xe9, 0xba, 0x8c, 0xaa, 0xb5, 0x10, 0x3e, 0x77,
-  0xb4, 0x90, 0xe2, 0x90, 0x20, 0xe1, 0xf9, 0x50, 0x6e, 0x4f, 0x15, 0x89,
-  0x86, 0x6f, 0x46, 0xd1, 0x09, 0x22, 0xc6, 0xcb, 0x58, 0xd0, 0x59, 0xec,
-  0x86, 0x35, 0x6a, 0x20, 0xd2, 0x11, 0x19, 0x7c, 0x43, 0xd2, 0x5e, 0x18,
-  0x12, 0xc3, 0x48, 0x2a, 0x35, 0x98, 0x74, 0x21, 0x2e, 0x91, 0x2f, 0x54,
-  0x1e, 0x19, 0xc0, 0x16, 0xee, 0x9e, 0x83, 0xcd, 0x5f, 0xec, 0x7e, 0x48,
-  0xfe, 0x72, 0x04, 0x1b, 0x34, 0x12, 0x42, 0x61, 0x87, 0x6c, 0xdd, 0x1d,
-  0x02, 0x09, 0xa9, 0x4c, 0xc4, 0xe8, 0xc2, 0xc8, 0x0c, 0x0c, 0x12, 0x03,
-  0x9f, 0x30, 0xb5, 0x06, 0x2a, 0x03, 0xfe, 0x35, 0x91, 0x51, 0x0f, 0x7a,
-  0xe3, 0x3c, 0x71, 0xca, 0xb5, 0x96, 0xbc, 0x73, 0xe1, 0xe6, 0xb0, 0xc5,
-  0x88, 0xb8, 0xe1, 0xdd, 0x75, 0x3c, 0x48, 0x1e, 0x57, 0x7c, 0x4b, 0xbf,
-  0xb0, 0x70, 0x36, 0x29, 0x68, 0xd7, 0x93, 0x42, 0xae, 0x06, 0x89, 0x11,
-  0xca, 0x85, 0x93, 0x88, 0x9a, 0xf2, 0xf6, 0x24, 0x32, 0x94, 0x9b, 0x4b,
-  0x2f, 0x2a, 0x5a, 0x64, 0x26, 0xa6, 0xa8, 0x96, 0x11, 0x91, 0x87, 0xf4,
-  0x29, 0xb9, 0xe5, 0x64, 0x6d, 0x39, 0x53, 0x3e, 0xe2, 0xc5, 0xa9, 0x1d,
-  0xd9, 0xe0, 0x09, 0x79, 0x95, 0xe9, 0x88, 0xc8, 0xa4, 0xcf, 0x4b, 0xd0,
-  0x1f, 0x44, 0x7d, 0x1e, 0x2a, 0x7f, 0xd1, 0xc7, 0x7a, 0xe2, 0xe3, 0x60,
-  0xf9, 0xfa, 0xa3, 0x8e, 0x53, 0xc8, 0xcf, 0xbc, 0xfa, 0xb2, 0xb6, 0x4a,
-  0xf8, 0xdc, 0x9a, 0x7a, 0x25, 0x49, 0x26, 0x2d, 0x99, 0xdb, 0xde, 0x0d,
-  0xda, 0x7f, 0x75, 0x98, 0x33, 0x42, 0x21, 0x35, 0x13, 0x84, 0xb9, 0x4e,
-  0xdd, 0x67, 0x29, 0x12, 0x66, 0x5b, 0x0d, 0x3d, 0x7e, 0x8a, 0x2f, 0x8c,
-  0x15, 0xb9, 0x10, 0x50, 0xe1, 0x6e, 0x42, 0x02, 0xc6, 0x79, 0x69, 0x37,
-  0x53, 0xd1, 0xfb, 0xee, 0x72, 0x58, 0x19, 0xc0, 0x73, 0x76, 0x47, 0xc8,
-  0xa0, 0xf4, 0x55, 0x6a, 0x5d, 0x03, 0x4e, 0x79, 0xef, 0x61, 0x41, 0x7b,
-  0x2e, 0x2a, 0xd7, 0x54, 0x7a, 0x5b, 0xe5, 0x2e, 0xde, 0xb5, 0x4c, 0xa7,
-  0x80, 0xd4, 0x7e, 0xf5, 0xe5, 0x2c, 0xbf, 0x62, 0xce, 0x35, 0xa0, 0x83,
-  0xc6, 0x3f, 0x11, 0x90, 0xbc, 0xa7, 0x9d, 0xca, 0x80, 0x71, 0x56, 0x44,
-  0x8a, 0xb7, 0xbf, 0xd7, 0x84, 0xa8, 0xbe, 0x61, 0x53, 0xe8, 0x54, 0xdb,
-  0x76, 0x4d, 0xcb, 0x7e, 0x50, 0xfb, 0xee, 0x8b, 0xb0, 0x2f, 0x5b, 0x9c,
-  0x58, 0x5b, 0x86, 0x6c, 0x44, 0x9c, 0xa2, 0x92, 0xab, 0x1c, 0x1d, 0xe7,
-  0x08, 0x74, 0xab, 0x38, 0x11, 0x3a, 0xa9, 0xe4, 0xde, 0x9a, 0x6b, 0x5a,
-  0x5f, 0xff, 0xcb, 0xbe, 0xe4, 0x08, 0xf4, 0x5f, 0xf6, 0xc1, 0xc1, 0x98,
-  0x2f, 0x59, 0x55, 0x37, 0xbd, 0x9c, 0xfa, 0x72, 0x2b, 0x0e, 0x45, 0x76,
-  0x50, 0xc4, 0x3f, 0x7f, 0x40, 0x70, 0x2d, 0x7b, 0x35, 0x32, 0x0c, 0x9e,
-  0x84, 0x99, 0x00, 0x05, 0xdf, 0x31, 0x2a, 0x86, 0x2f, 0x9d, 0x54, 0x12,
-  0x28, 0xa3, 0x97, 0x2e, 0xc4, 0x32, 0xa0, 0xa5, 0x94, 0x1c, 0xbf, 0x20,
-  0x66, 0xce, 0x55, 0xb6, 0xe4, 0xdc, 0xf8, 0x29, 0x00, 0xdc, 0xf5, 0x2c,
-  0x8d, 0xa2, 0xf7, 0x99, 0x94, 0x12, 0x48, 0x58, 0x59, 0x4e, 0x8b, 0xe9,
-  0x6a, 0xc1, 0xa6, 0x8a, 0x29, 0x1b, 0xc8, 0x70, 0xf1, 0x88, 0x78, 0x50,
-  0x73, 0xcf, 0x87, 0x03, 0x16, 0xe3, 0x88, 0x18, 0xcc, 0xb5, 0x5f, 0x84,
-  0xa2, 0x70, 0x00, 0x96, 0x1a, 0xc4, 0x21, 0x15, 0x38, 0xd4, 0x14, 0x65,
-  0x40, 0xec, 0x19, 0x3c, 0x7a, 0x73, 0x74, 0x7e, 0x7e, 0x74, 0xce, 0xeb,
-  0x7d, 0xa0, 0xa1, 0x1f, 0x86, 0x5d, 0x61, 0xd0, 0xa9, 0xde, 0xd5, 0x68,
-  0x61, 0xbf, 0x6d, 0x08, 0x7d, 0x61, 0x85, 0xf1, 0x6c, 0xc6, 0x20, 0xe3,
-  0xd0, 0x20, 0x04, 0x27, 0x48, 0xea, 0x4e, 0x87, 0xe6, 0x45, 0x84, 0x7d,
-  0x3b, 0xb7, 0x41, 0x58, 0x87, 0x30, 0x90, 0x2d, 0x7c, 0x0b, 0x85, 0xd6,
-  0xd9, 0x5c, 0x59, 0x4a, 0xfe, 0x75, 0x52, 0x13, 0x53, 0x47, 0x1a, 0xa9,
-  0x9b, 0xa8, 0x33, 0x7d, 0xee, 0xec, 0x13, 0x98, 0xf2, 0x25, 0x9f, 0x51,
-  0xd6, 0x9d, 0xb0, 0x18, 0x65, 0xb5, 0x5a, 0xa6, 0x33, 0x67, 0xed, 0xa5,
-  0xcf, 0x49, 0xfc, 0x8b, 0xe4, 0x94, 0x97, 0x16, 0xeb, 0x02, 0xaf, 0xa6,
-  0x19, 0x23, 0x42, 0x6b, 0x5b, 0x03, 0xbf, 0x37, 0x42, 0xb6, 0x9c, 0x04,
-  0x8d, 0x59, 0xcd, 0xa4, 0x7a, 0x6e, 0xb9, 0xd2, 0x7e, 0x02, 0x2b, 0x23,
-  0x73, 0x0b, 0x0b, 0xbf, 0x09, 0x39, 0x03, 0xdb, 0xb2, 0x16, 0x3e, 0xde,
-  0x9d, 0x43, 0xd8, 0xf6, 0x05, 0x06, 0x05, 0x29, 0xa5, 0xc5, 0x7e, 0xf4,
-  0x63, 0x99, 0x4e, 0x7f, 0xf6, 0x97, 0x07, 0xd2, 0x7f, 0xea, 0x55, 0xd2,
-  0xb0, 0x74, 0xba, 0x50, 0xaa, 0x0c, 0x4b, 0x2a, 0xf7, 0xfb, 0xf1, 0xd1,
-  0x79, 0x74, 0xf0, 0x35, 0xa3, 0x00, 0xff, 0x37, 0x37, 0x98, 0x9f, 0xd3,
-  0xdb, 0x61, 0x43, 0x71, 0xf8, 0x14, 0xdb, 0x24, 0x31, 0x53, 0xb8, 0xe0,
-  0x72, 0xd5, 0x76, 0x36, 0xb5, 0x4a, 0xd2, 0xfe, 0xba, 0xaf, 0xef, 0xe1,
-  0x46, 0xf4, 0xe8, 0x2e, 0x7e, 0xca, 0x1e, 0xf2, 0x21, 0x0b, 0x77, 0x51,
-  0x50, 0x91, 0xc4, 0x25, 0x61, 0x7b, 0xa3, 0xa3, 0x2f, 0x5b, 0x6a, 0xa7,
-  0xec, 0xd2, 0x41, 0xd4, 0x7f, 0x9b, 0xff, 0x8d, 0x84, 0x81, 0x78, 0xfb,
-  0xc9, 0x68, 0x27, 0xda, 0xfc, 0x3e, 0xcd, 0x5e, 0x3c, 0xfb, 0x53, 0x74,
-  0xbc, 0xd5, 0xaf, 0x05, 0xf3, 0x4b, 0x65, 0xc1, 0x49, 0x9c, 0xdd, 0xb8,
-  0x2d, 0x3b, 0xc5, 0xc9, 0x96, 0xa0, 0x3a, 0xab, 0xca, 0x22, 0x05, 0x90,
-  0xd7, 0xb6, 0x88, 0xc4, 0x4f, 0xcd, 0x0b, 0x88, 0xbe, 0x73, 0x90, 0xd7,
-  0xac, 0xe5, 0xd3, 0x53, 0x33, 0x5e, 0xba, 0x17, 0xcf, 0x5a, 0x4d, 0x3c,
-  0x75, 0x6d, 0xbc, 0x97, 0x36, 0x7e, 0x61, 0x13, 0x7b, 0xa3, 0x9d, 0xbd,
-  0x68, 0xf3, 0x74, 0xbc, 0xbd, 0xe7, 0x5a, 0x68, 0x37, 0xb1, 0x87, 0x26,
-  0xf8, 0xa1, 0xfa, 0xcb, 0x4f, 0xb9, 0xff, 0x1f, 0x93, 0xec, 0xe7, 0x68,
-  0xf3, 0x87, 0xdd, 0x5d, 0x6a, 0xe0, 0x4f, 0xd1, 0xc1, 0xf1, 0x0f, 0xd1,
-  0xd3, 0x11, 0x35, 0xf6, 0x2e, 0xbe, 0xd5, 0xe6, 0x14, 0xcc, 0x76, 0x8c,
-  0x46, 0xe8, 0xfb, 0x56, 0x1b, 0xcf, 0x1a, 0x6d, 0x9c, 0x90, 0x5e, 0xf8,
-  0x91, 0xae, 0x95, 0x9d, 0xd1, 0x93, 0xbd, 0x28, 0x7d, 0xf6, 0xf9, 0x73,
-  0x6b, 0x48, 0xdb, 0xc0, 0xf7, 0x75, 0x6b, 0xa5, 0xc0, 0xa5, 0x90, 0xa8,
-  0x73, 0xf4, 0x91, 0x18, 0x1a, 0x58, 0x04, 0x2a, 0x65, 0x5c, 0xc7, 0x85,
-  0x55, 0xe5, 0xe5, 0x72, 0x07, 0xb4, 0x53, 0x0a, 0x23, 0x9d, 0xc0, 0x6c,
-  0x49, 0x17, 0xe7, 0x7e, 0x6b, 0x38, 0xac, 0x9b, 0xda, 0xa3, 0x7f, 0x8a,
-  0xde, 0x8e, 0x8f, 0x8f, 0x68, 0x46, 0x3b, 0x34, 0x34, 0xbf, 0x86, 0x32,
-  0x20, 0x7c, 0x85, 0xc5, 0x7d, 0x01, 0x54, 0x52, 0x6d, 0x23, 0xac, 0x1f,
-  0x0b, 0xa2, 0xa3, 0x8b, 0xbb, 0x44, 0xbf, 0x1c, 0x92, 0x32, 0x3c, 0xb8,
-  0x62, 0x15, 0x42, 0xae, 0x5a, 0x74, 0xfd, 0x6d, 0x9e, 0xd1, 0x31, 0x29,
-  0xf2, 0x82, 0x23, 0xa7, 0xfa, 0x35, 0x69, 0xe1, 0xdb, 0xd7, 0x47, 0x92,
-  0x52, 0xff, 0x36, 0xce, 0x88, 0x47, 0x32, 0x3a, 0x56, 0x79, 0xc3, 0xfe,
-  0x7f, 0x71, 0xe7, 0xc8, 0xfb, 0x27, 0xf7, 0xd9, 0x47, 0xda, 0xc7, 0xcf,
-  0x46, 0xbb, 0x1c, 0xb2, 0xcd, 0x5a, 0xef, 0x9b, 0xb7, 0xf4, 0xf7, 0xee,
-  0xd3, 0x7e, 0xc4, 0x5f, 0xd5, 0x35, 0x78, 0x3b, 0xaf, 0x1b, 0x87, 0xa7,
-  0xa7, 0xdf, 0x1e, 0x4b, 0x00, 0xc8, 0xa1, 0x9a, 0x55, 0x59, 0xb8, 0x72,
-  0x5a, 0xb1, 0x70, 0x57, 0xd2, 0xde, 0x7c, 0xb6, 0x12, 0x9c, 0x71, 0x37,
-  0x49, 0xb2, 0xe4, 0x68, 0x84, 0xaa, 0xc1, 0x11, 0x2a, 0xe5, 0xd1, 0x2e,
-  0xb6, 0x89, 0xc5, 0x9f, 0x1a, 0xb2, 0x57, 0xc9, 0x50, 0xc9, 0x66, 0xc2,
-  0x9d, 0xdc, 0x3b, 0xd8, 0x8e, 0xd8, 0xb9, 0xcc, 0xac, 0x6e, 0x8a, 0x36,
-  0x65, 0x26, 0x68, 0x29, 0x3a, 0x42, 0x2f, 0xaa, 0xee, 0xdb, 0x1f, 0x93,
-  0x74, 0x2f, 0x83, 0xde, 0x57, 0xab, 0x6d, 0x3f, 0xc0, 0x96, 0x86, 0x44,
-  0xbb, 0xd4, 0x52, 0x3f, 0x30, 0x1d, 0x5b, 0x44, 0xbd, 0xf1, 0xe6, 0x12,
-  0xb6, 0x6c, 0x84, 0xe7, 0xbd, 0x3b, 0x78, 0x7b, 0xf4, 0xea, 0xbb, 0x83,
-  0x93, 0xf7, 0x47, 0xf4, 0x4a, 0x0a, 0x18, 0x77, 0x17, 0xc2, 0x87, 0x31,
-  0x2e, 0x52, 0xd4, 0xae, 0x2d, 0x49, 0x3c, 0xe8, 0x6f, 0x48, 0x78, 0x79,
-  0xd4, 0xe3, 0xb7, 0x76, 0xe5, 0x35, 0xa2, 0x0b, 0xfe, 0x6b, 0x4f, 0xfe,
-  0xda, 0xfb, 0x53, 0x6f, 0xab, 0x36, 0xe9, 0x96, 0x96, 0xcc, 0xf4, 0x72,
-  0x27, 0xf5, 0x9e, 0x38, 0x3c, 0x48, 0x72, 0x37, 0x64, 0x55, 0x7a, 0xe6,
-  0xa3, 0xb1, 0xbb, 0x8d, 0x9f, 0xdd, 0x9c, 0xdc, 0x87, 0x3a, 0x78, 0x8f,
-  0x5f, 0x7a, 0x05, 0x01, 0xa3, 0x07, 0xa0, 0xfb, 0xc4, 0x56, 0x4b, 0xda,
-  0xb0, 0x26, 0x92, 0x8f, 0x4b, 0x8e, 0x88, 0xdc, 0xec, 0xc9, 0x2f, 0xaf,
-  0x5e, 0x1f, 0x5c, 0x1c, 0xf1, 0x0b, 0xd6, 0xbd, 0xd5, 0x36, 0xb0, 0x34,
-  0x0a, 0x1e, 0xcf, 0xa6, 0xba, 0xa6, 0x5f, 0xf1, 0x84, 0x7a, 0x5b, 0xe2,
-  0xcb, 0x80, 0x53, 0xbd, 0x31, 0x2e, 0xe6, 0x69, 0x12, 0xb8, 0xed, 0xd3,
-  0xd4, 0x4b, 0x8b, 0x58, 0xd9, 0xec, 0xc9, 0x77, 0x3d, 0x67, 0xc1, 0xd5,
-  0xfa, 0xf0, 0xea, 0xae, 0x9c, 0x21, 0xc9, 0xa2, 0x95, 0x59, 0x2b, 0x21,
-  0x69, 0x7e, 0x7f, 0xd4, 0x59, 0x21, 0x16, 0xa7, 0x00, 0x6d, 0xdb, 0x6d,
-  0xbc, 0xe6, 0xc1, 0xb3, 0x8d, 0x29, 0xcf, 0x77, 0xf7, 0x9e, 0xfc, 0x09,
-  0xeb, 0xf9, 0xaa, 0xb7, 0x4d, 0x77, 0x43, 0xef, 0x4f, 0xdc, 0x75, 0x6a,
-  0x36, 0xce, 0x20, 0x88, 0x9c, 0xf5, 0x29, 0xa5, 0x28, 0x09, 0x97, 0xe1,
-  0x5d, 0x0f, 0xe0, 0x7d, 0xb0, 0xa0, 0x77, 0x92, 0x25, 0x66, 0x60, 0x38,
-  0x16, 0x3c, 0x80, 0xfd, 0x9a, 0x24, 0x57, 0x69, 0x96, 0xb9, 0x1a, 0xb9,
-  0xd2, 0x5d, 0x78, 0x7f, 0x0c, 0xe4, 0x5d, 0x99, 0xa3, 0x02, 0x08, 0x71,
-  0x9f, 0x8b, 0x7b, 0x4b, 0x24, 0x2b, 0x4b, 0x53, 0x71, 0x65, 0xcf, 0x5a,
-  0x92, 0xf1, 0x44, 0x6d, 0x3b, 0xa6, 0x8c, 0x40, 0x26, 0x20, 0xd6, 0x72,
-  0x0f, 0x41, 0x09, 0xd1, 0x06, 0x61, 0x90, 0x85, 0xdd, 0xd9, 0xf1, 0x84,
-  0x93, 0xcc, 0x5d, 0x6a, 0x4c, 0xa0, 0x95, 0xbb, 0xa5, 0xb7, 0xe3, 0x97,
-  0x06, 0xc8, 0x4c, 0x7c, 0x51, 0xca, 0x5a, 0x96, 0xce, 0x86, 0x04, 0x6f,
-  0xa3, 0x3e, 0x5b, 0xdf, 0xa7, 0x46, 0x3e, 0x1a, 0xa6, 0x21, 0x2a, 0xbd,
-  0xe8, 0xc7, 0xc4, 0x6a, 0xb2, 0xa4, 0x78, 0x30, 0xc0, 0xa2, 0xc3, 0x19,
-  0x85, 0x29, 0x06, 0x91, 0x0e, 0xfc, 0xce, 0x68, 0x34, 0xf2, 0x95, 0xb6,
-  0x79, 0x5b, 0xd4, 0x07, 0x85, 0x5a, 0x46, 0x01, 0x7e, 0x2c, 0xd6, 0x78,
-  0x13, 0xc2, 0x3c, 0x04, 0xea, 0x2d, 0x0d, 0xbc, 0x51, 0x3b, 0x81, 0x3b,
-  0x1a, 0x81, 0x8d, 0xa3, 0xaf, 0xdd, 0xf6, 0x0d, 0xb4, 0xe1, 0xa6, 0x6b,
-  0x13, 0x1e, 0x18, 0x9b, 0xd8, 0x1e, 0xb5, 0xc0, 0xa6, 0xe3, 0x53, 0xb9,
-  0x5b, 0x0b, 0xa6, 0x60, 0x0e, 0x20, 0x07, 0x9d, 0x48, 0xc6, 0xb1, 0x2c,
-  0x9a, 0x0e, 0x45, 0x4b, 0xad, 0x31, 0x93, 0xcb, 0xef, 0x00, 0x82, 0x20,
-  0xc5, 0x6a, 0x96, 0x05, 0x6b, 0x7a, 0xbc, 0xc6, 0x76, 0x83, 0x2c, 0x9d,
-  0xd8, 0xac, 0xed, 0x28, 0x96, 0x30, 0xeb, 0xcc, 0x90, 0xfd, 0x35, 0xcb,
-  0x51, 0xe1, 0x68, 0x4a, 0x4b, 0xe2, 0x21, 0xb1, 0x2d, 0x5f, 0xc0, 0xed,
-  0xa5, 0x93, 0xf7, 0xe6, 0x2a, 0x8e, 0x36, 0x1b, 0x0a, 0xa0, 0x8b, 0x25,
-  0x22, 0x1a, 0xf7, 0x50, 0x50, 0x8f, 0x87, 0xfc, 0xe5, 0x53, 0x6b, 0xd1,
-  0x39, 0xcb, 0x1b, 0x6b, 0xe3, 0x6f, 0xe5, 0x3a, 0xeb, 0xa2, 0x15, 0x15,
-  0xeb, 0xb2, 0x40, 0x67, 0x78, 0xbe, 0x17, 0xc5, 0x77, 0x5c, 0xf1, 0x3d,
-  0xe1, 0xf8, 0x4c, 0x44, 0x3a, 0xc0, 0x2a, 0x73, 0x12, 0xd8, 0x19, 0xdd,
-  0x0c, 0x95, 0x6a, 0x35, 0xa6, 0x89, 0xf9, 0xce, 0xbe, 0x15, 0x8e, 0x16,
-  0xb8, 0x5c, 0x33, 0xe8, 0xa5, 0xa8, 0x70, 0xcd, 0xf0, 0xa6, 0x2a, 0xa9,
-  0x9b, 0x7a, 0xce, 0x23, 0xdf, 0x42, 0x11, 0x60, 0x11, 0xe7, 0x11, 0x97,
-  0xc8, 0x76, 0x0e, 0x89, 0xab, 0xb0, 0xd5, 0x8a, 0xb3, 0x59, 0xd0, 0x89,
-  0xf3, 0x4f, 0xab, 0xf9, 0x89, 0xc3, 0x7b, 0xb3, 0x21, 0x80, 0x2e, 0x5c,
-  0x31, 0x5d, 0x51, 0xaf, 0xae, 0xae, 0xac, 0xf2, 0x4e, 0x63, 0x6a, 0xdd,
-  0x44, 0x76, 0xc2, 0xab, 0xc2, 0x51, 0xd0, 0xf7, 0xeb, 0x56, 0xf3, 0xc2,
-  0x6c, 0x3e, 0x66, 0x75, 0xa9, 0x11, 0xb3, 0xf9, 0x24, 0x65, 0xdf, 0x2a,
-  0x97, 0x74, 0x85, 0x04, 0x8d, 0xba, 0x0f, 0xf9, 0xf4, 0x7c, 0x03, 0x85,
-  0x13, 0x32, 0x0f, 0xc8, 0x60, 0x9b, 0x0e, 0x74, 0x3e, 0x1f, 0x81, 0xe2,
-  0x23, 0x51, 0xef, 0x5c, 0xa8, 0x95, 0x54, 0x06, 0x9c, 0xc4, 0x5e, 0xe5,
-  0xda, 0x88, 0x6a, 0xd6, 0x5e, 0x2e, 0xa8, 0x72, 0x9c, 0x29, 0x1f, 0xca,
-  0x6f, 0x13, 0x0f, 0x10, 0xe9, 0x0d, 0x8e, 0x1e, 0x65, 0x57, 0x4f, 0xbf,
-  0x63, 0x26, 0x0d, 0x07, 0xaf, 0xe3, 0x57, 0x98, 0x64, 0x63, 0x55, 0x46,
-  0x51, 0xd0, 0xa4, 0x98, 0x4a, 0xf2, 0x90, 0xc5, 0xcb, 0xd8, 0xd4, 0x6f,
-  0x6d, 0x2d, 0x0a, 0x8d, 0x08, 0xc4, 0x4b, 0xa0, 0x9a, 0x48, 0xc1, 0x11,
-  0x43, 0xca, 0x77, 0x31, 0x7a, 0xde, 0xff, 0x6b, 0xb3, 0xec, 0xb9, 0x4d,
-  0xea, 0x59, 0x4d, 0x02, 0x10, 0x01, 0x68, 0x80, 0x05, 0x3a, 0xe7, 0xc2,
-  0x3f, 0x98, 0xc7, 0x1c, 0xc4, 0x92, 0x4b, 0x74, 0x00, 0xb6, 0x0c, 0x44,
-  0x0d, 0x63, 0x5a, 0x83, 0xa7, 0xb6, 0x8e, 0x9f, 0x8b, 0xd6, 0x10, 0x5a,
-  0x63, 0x21, 0x05, 0xcd, 0x10, 0x95, 0x20, 0x9a, 0x7b, 0x1a, 0x96, 0x8e,
-  0x5e, 0x8f, 0x5d, 0x30, 0xa9, 0x9d, 0xd1, 0xc7, 0x8e, 0xec, 0xd9, 0xf9,
-  0xe9, 0xd7, 0xe7, 0x47, 0xe3, 0x71, 0xf4, 0xf6, 0xe8, 0x42, 0xd4, 0xfe,
-  0x0b, 0x89, 0xc2, 0xbb, 0x62, 0xcd, 0x3d, 0x82, 0xdb, 0xc1, 0xc0, 0x9c,
-  0x2c, 0xfa, 0xc4, 0x6c, 0x0a, 0x48, 0x7f, 0xca, 0xd9, 0xa5, 0x06, 0x51,
-  0x0e, 0xfa, 0xfc, 0x5c, 0x83, 0xf7, 0xae, 0x61, 0xf8, 0x47, 0x78, 0x13,
-  0x7c, 0x93, 0xce, 0x8e, 0xee, 0x2d, 0xaa, 0x90, 0x91, 0x25, 0xe0, 0xc9,
-  0xa5, 0x1f, 0x7a, 0x6b, 0x3a, 0xdf, 0xde, 0xf4, 0x13, 0xd3, 0xfb, 0x7d,
-  0x74, 0x91, 0x57, 0x5c, 0x14, 0x9c, 0x7f, 0x3d, 0x37, 0xfa, 0xf8, 0x7d,
-  0xf4, 0x03, 0xb5, 0x39, 0xa3, 0x55, 0x67, 0x63, 0x32, 0x5d, 0xb8, 0x63,
-  0x14, 0x3e, 0xf5, 0xf5, 0x85, 0x50, 0xad, 0x34, 0xac, 0xf7, 0xbe, 0x2a,
-  0x8a, 0x51, 0x77, 0x79, 0x9e, 0x5a, 0x7d, 0x1d, 0xc1, 0xcd, 0xd4, 0xf0,
-  0x3a, 0xd7, 0xb3, 0x56, 0x34, 0x8e, 0xa2, 0x93, 0xe4, 0xb2, 0x82, 0x40,
-  0xc2, 0xdd, 0x51, 0x73, 0x3b, 0x0c, 0x04, 0xbd, 0xcb, 0x05, 0xd0, 0xe8,
-  0xd7, 0x27, 0x9f, 0x3f, 0xdf, 0xf9, 0x5c, 0x7e, 0xb5, 0x7f, 0x5f, 0x3c,
-  0xdd, 0x51, 0x40, 0x75, 0xfa, 0xeb, 0xe9, 0xfe, 0xd3, 0xdd, 0x7d, 0xc6,
-  0x79, 0xdc, 0xd9, 0xdf, 0xa1, 0xff, 0x7f, 0xaa, 0x9f, 0x30, 0x98, 0xe5,
-  0x8b, 0xbd, 0xcf, 0x3f, 0x43, 0x60, 0x0c, 0xd3, 0xc7, 0x9c, 0x3a, 0x19,
-  0x56, 0xf9, 0x10, 0x70, 0x53, 0x10, 0x82, 0x7e, 0x5f, 0x37, 0x4a, 0xb2,
-  0xa7, 0x7d, 0xca, 0x7e, 0xd5, 0x2b, 0x51, 0x6f, 0xe6, 0x09, 0x73, 0x00,
-  0x35, 0xb0, 0x0a, 0x04, 0x8e, 0x05, 0x8b, 0x4b, 0x06, 0xb7, 0x4e, 0x43,
-  0xdf, 0xae, 0xf0, 0x37, 0xf0, 0xdb, 0x6a, 0xef, 0x48, 0xcc, 0x79, 0x00,
-  0x15, 0xf7, 0x4b, 0xbb, 0xb6, 0x9c, 0xf2, 0x0d, 0x00, 0xc0, 0xe9, 0x56,
-  0xe9, 0x7b, 0x53, 0x2b, 0x0a, 0xed, 0x9e, 0x62, 0x89, 0x70, 0x21, 0xe9,
-  0x09, 0x97, 0x12, 0xb9, 0xfc, 0x4b, 0xfb, 0x13, 0x23, 0x16, 0xbf, 0xa5,
-  0xd4, 0x10, 0xb5, 0x7b, 0x73, 0x69, 0x09, 0x1d, 0x7d, 0xd5, 0x88, 0x67,
-  0xc3, 0x6f, 0xbf, 0x5f, 0x29, 0xe6, 0x6a, 0xfa, 0x90, 0x4b, 0xe7, 0x92,
-  0x1a, 0xbb, 0x1d, 0x53, 0x6e, 0x35, 0xa7, 0x64, 0xf4, 0x0b, 0x9a, 0xf3,
-  0x33, 0x02, 0x05, 0xbb, 0x9d, 0x1b, 0x06, 0x9b, 0x93, 0x4a, 0x8c, 0x9b,
-  0xad, 0x86, 0x03, 0x18, 0xb5, 0x1b, 0x4f, 0x5e, 0x75, 0x24, 0x3b, 0x94,
-  0x37, 0x54, 0xfc, 0x74, 0x29, 0x72, 0x74, 0x0a, 0x6f, 0x73, 0xdc, 0xf6,
-  0xf2, 0xbc, 0x51, 0x76, 0xab, 0x2b, 0xa6, 0xc6, 0xa0, 0x3f, 0xed, 0x03,
-  0xe7, 0xc9, 0x1d, 0xba, 0x07, 0xa7, 0xe6, 0xc3, 0xec, 0x5d, 0x8d, 0xe1,
-  0x4d, 0x17, 0xb6, 0xde, 0x75, 0x24, 0xfd, 0x73, 0x88, 0x64, 0x77, 0xcd,
-  0x85, 0x17, 0x11, 0xea, 0x4b, 0x6b, 0x85, 0x0c, 0x46, 0x2d, 0x65, 0x98,
-  0xff, 0x2d, 0x63, 0x61, 0xc3, 0xdf, 0xb9, 0x08, 0x2e, 0xdc, 0x6b, 0x5a,
-  0x2e, 0x34, 0x16, 0xca, 0x9f, 0x87, 0x69, 0xb5, 0x8e, 0xdb, 0x4d, 0xe2,
-  0xa2, 0x06, 0xa8, 0xbf, 0x21, 0x65, 0x25, 0xe8, 0xa6, 0xa5, 0x9b, 0x03,
-  0x99, 0x8f, 0x22, 0x52, 0xfc, 0xcb, 0xc6, 0xc6, 0xf8, 0xec, 0xe8, 0xe8,
-  0x75, 0x74, 0x72, 0xfc, 0xf6, 0xf8, 0x22, 0x10, 0xc8, 0xdd, 0x45, 0x62,
-  0x46, 0x57, 0x2b, 0x3e, 0xd5, 0x58, 0x0e, 0x0f, 0xdf, 0x2c, 0xfd, 0xd9,
-  0x55, 0xbe, 0x48, 0x34, 0xa1, 0x62, 0xde, 0x7c, 0x0f, 0xaa, 0x37, 0x30,
-  0x9e, 0x46, 0xd1, 0x57, 0x41, 0x8c, 0x64, 0x54, 0x92, 0x70, 0x33, 0x75,
-  0x95, 0x97, 0x87, 0x7f, 0xd6, 0x90, 0x8d, 0xba, 0xe4, 0xa4, 0x28, 0xb4,
-  0x2e, 0xbb, 0x47, 0xc3, 0x5c, 0x1b, 0xa3, 0xe2, 0xb5, 0x4d, 0x24, 0xca,
-  0x3a, 0xb0, 0xd0, 0x21, 0x82, 0xef, 0x2e, 0x01, 0xf0, 0xc1, 0x22, 0x95,
-  0xb4, 0xcb, 0x30, 0xbc, 0xd8, 0x15, 0xa3, 0xbd, 0xc8, 0x85, 0x8f, 0x87,
-  0x3d, 0x86, 0x55, 0xc6, 0x2d, 0xb6, 0xd6, 0xfa, 0x0a, 0xcb, 0x57, 0x3f,
-  0xd9, 0x71, 0x99, 0x0b, 0x4b, 0xf0, 0x1c, 0x15, 0xf5, 0xb9, 0xb3, 0xdd,
-  0x88, 0xe4, 0x91, 0x15, 0x4b, 0xf5, 0xc5, 0x2a, 0x6b, 0x5d, 0x77, 0x7f,
-  0x96, 0x77, 0x69, 0xfe, 0xcf, 0x77, 0x70, 0xbd, 0x5d, 0xc6, 0xc5, 0x90,
-  0x24, 0xaf, 0xfb, 0xa1, 0x59, 0x57, 0x85, 0x22, 0x34, 0xf4, 0x58, 0x4c,
-  0x3f, 0x89, 0xaf, 0x7b, 0xdb, 0x90, 0x16, 0x7d, 0xfa, 0x49, 0x0e, 0x17,
-  0xe5, 0x5c, 0x0f, 0x00, 0x4f, 0x9d, 0x93, 0x7e, 0xcd, 0xd8, 0xe9, 0x65,
-  0x1d, 0x8f, 0x50, 0x6c, 0xbb, 0xe8, 0x79, 0x14, 0x27, 0x23, 0x80, 0xad,
-  0x72, 0xab, 0x29, 0x4f, 0x53, 0xe7, 0xd2, 0x16, 0xad, 0x17, 0xd1, 0xee,
-  0xe7, 0x3c, 0x8f, 0x4f, 0x9b, 0xcf, 0x9b, 0xbc, 0x98, 0xba, 0xf4, 0x62,
-  0xa8, 0x0b, 0x41, 0xae, 0xa9, 0x64, 0x48, 0xa0, 0x6c, 0x93, 0xac, 0xae,
-  0xc5, 0xc7, 0x22, 0x7e, 0x8f, 0xf5, 0x13, 0x75, 0xad, 0xc3, 0x32, 0x05,
-  0x5f, 0xb7, 0x48, 0x48, 0x7c, 0xd7, 0xe8, 0xba, 0xb0, 0xad, 0x55, 0xe2,
-  0xf7, 0xfa, 0x85, 0xcb, 0x45, 0x95, 0x65, 0x60, 0xeb, 0x08, 0xd1, 0xda,
-  0x5d, 0x3a, 0x83, 0x54, 0xed, 0xb1, 0xea, 0x68, 0xbf, 0x84, 0xf8, 0x24,
-  0x6c, 0x1a, 0xee, 0x4b, 0xf8, 0x3d, 0xdd, 0xc8, 0x54, 0x80, 0xe1, 0x65,
-  0xcd, 0x61, 0x5c, 0xd8, 0x84, 0xfc, 0xc0, 0xa9, 0xce, 0xde, 0x45, 0xc0,
-  0xaa, 0x14, 0xb3, 0xe6, 0x9e, 0xef, 0x85, 0xd3, 0x06, 0xaa, 0x6a, 0x6e,
-  0x76, 0x85, 0xb7, 0x8e, 0xb0, 0xeb, 0x73, 0x66, 0xd0, 0x96, 0x60, 0xda,
-  0xbb, 0x3b, 0x24, 0xbf, 0xce, 0xf3, 0x5a, 0x15, 0x74, 0x22, 0xaa, 0xb6,
-  0x52, 0x8a, 0x69, 0x0d, 0xb1, 0x3a, 0xbb, 0x3b, 0xdf, 0xae, 0x5f, 0x75,
-  0xe0, 0xf0, 0x3f, 0xf8, 0xf2, 0xde, 0xd3, 0x07, 0x36, 0xed, 0xb4, 0x80,
-  0x5e, 0x9e, 0x58, 0x38, 0x24, 0x04, 0x41, 0xef, 0x84, 0x69, 0x6d, 0x1b,
-  0x11, 0x7e, 0x72, 0x15, 0xf3, 0xf0, 0x1f, 0x1a, 0xbd, 0xa5, 0x87, 0x34,
-  0x86, 0xf2, 0x56, 0x03, 0xb4, 0xe5, 0xcb, 0x92, 0x2d, 0x64, 0x4b, 0x20,
-  0xf5, 0x79, 0x35, 0xd6, 0x65, 0x96, 0x0b, 0x4c, 0x43, 0xf0, 0xb6, 0x70,
-  0xce, 0x41, 0x9d, 0x49, 0x18, 0xf5, 0x14, 0xc9, 0xd5, 0x4a, 0x40, 0x31,
-  0x72, 0x51, 0xfb, 0x19, 0xd8, 0x5a, 0xcf, 0x2b, 0xf1, 0x66, 0x8e, 0x24,
-  0x12, 0x7a, 0x02, 0xe3, 0x9d, 0xc6, 0x26, 0xb2, 0x8a, 0xc8, 0xd1, 0xbc,
-  0x18, 0xd8, 0x3e, 0x3b, 0x65, 0x87, 0x18, 0xb8, 0xc1, 0x46, 0xd4, 0xac,
-  0xa0, 0x2d, 0xc8, 0x8d, 0x23, 0x24, 0xfd, 0x0a, 0xa1, 0x38, 0x66, 0xcf,
-  0x19, 0x66, 0xec, 0x18, 0xab, 0xc4, 0x43, 0x80, 0x06, 0x06, 0x4a, 0xb5,
-  0x68, 0xc9, 0x75, 0xc5, 0x1c, 0xbf, 0x34, 0x04, 0x4d, 0x41, 0xdb, 0x67,
-  0xbb, 0xff, 0xe1, 0xe9, 0xbb, 0x37, 0xc7, 0x5f, 0x3b, 0x54, 0x23, 0x61,
-  0xe2, 0x35, 0xb4, 0x0d, 0xb1, 0x24, 0x87, 0x4e, 0x6f, 0xad, 0xc9, 0xa8,
-  0x81, 0xb8, 0xc4, 0x9e, 0x3e, 0x84, 0x1f, 0x80, 0x81, 0x64, 0x4f, 0xd8,
-  0x56, 0x2e, 0x50, 0x20, 0xe5, 0x96, 0xb7, 0x3c, 0x34, 0x50, 0xeb, 0x24,
-  0x61, 0x23, 0x2e, 0xaa, 0xd5, 0xd2, 0xc5, 0x13, 0x06, 0x35, 0x1d, 0x15,
-  0x87, 0xdb, 0xb2, 0xd2, 0x57, 0x4b, 0x61, 0x4d, 0x9a, 0x5b, 0x5a, 0x33,
-  0xec, 0xca, 0x1d, 0xc0, 0x96, 0x05, 0x85, 0x55, 0xd1, 0x0b, 0xa0, 0x15,
-  0xa2, 0x33, 0x67, 0xf4, 0xce, 0x30, 0x74, 0xde, 0x5c, 0x39, 0x33, 0xd4,
-  0xc5, 0x0c, 0x6b, 0x9f, 0x2f, 0x44, 0x33, 0xe3, 0x79, 0xa3, 0xb8, 0xb4,
-  0x8b, 0xcb, 0x71, 0x81, 0xc0, 0xde, 0x55, 0x54, 0xba, 0x6a, 0xd9, 0x2e,
-  0x54, 0xc9, 0x32, 0x5a, 0x63, 0x78, 0x2d, 0xe1, 0xf6, 0xc4, 0x27, 0xaf,
-  0xd8, 0x43, 0xb3, 0xcf, 0x68, 0xf4, 0x0b, 0xc1, 0x96, 0x0b, 0x33, 0x51,
-  0x95, 0x4b, 0x7a, 0xd4, 0xf8, 0xe3, 0xcb, 0x20, 0xb9, 0x4d, 0x42, 0x06,
-  0x8d, 0xe8, 0xc4, 0x5c, 0xcc, 0xb6, 0x96, 0xfe, 0xef, 0xfa, 0xc3, 0xf2,
-  0x7e, 0x31, 0xc9, 0xe7, 0x96, 0x83, 0xe1, 0xb0, 0x24, 0xec, 0xa1, 0xb0,
-  0xc6, 0x5a, 0x24, 0x4e, 0xdb, 0x2a, 0xb0, 0x50, 0xfa, 0xb0, 0x29, 0x3f,
-  0x7e, 0xa9, 0x53, 0x04, 0x4f, 0x91, 0xcd, 0x02, 0x30, 0x3f, 0xcc, 0xe3,
-  0x93, 0x6c, 0x3a, 0xcf, 0x95, 0xaa, 0x39, 0xd7, 0x1c, 0x2b, 0x55, 0x9f,
-  0x3a, 0x3b, 0xff, 0xf2, 0x15, 0x1b, 0x3b, 0x50, 0x83, 0x84, 0xc4, 0x9d,
-  0x9e, 0x82, 0x6b, 0x60, 0x82, 0xfc, 0xb6, 0x7c, 0xa1, 0x01, 0xfa, 0x01,
-  0xd4, 0x8d, 0x14, 0x2d, 0xa1, 0xa1, 0xfe, 0x24, 0xb6, 0x45, 0x71, 0x01,
-  0xfe, 0xd9, 0x3a, 0xb7, 0x47, 0x1b, 0x4b, 0x4f, 0xf4, 0x14, 0x17, 0x57,
-  0x0a, 0xd8, 0xa7, 0x4e, 0x35, 0x28, 0x89, 0xae, 0x94, 0x8c, 0xb3, 0x51,
-  0xb2, 0x50, 0xe2, 0x02, 0x68, 0x20, 0x3e, 0xad, 0x24, 0xbd, 0x50, 0x93,
-  0xaf, 0xc4, 0x3a, 0xe9, 0x08, 0x31, 0xe0, 0x38, 0xbf, 0x73, 0x61, 0x29,
-  0xb1, 0xbf, 0xcb, 0xac, 0xc2, 0x85, 0x37, 0xd5, 0xea, 0x65, 0x16, 0xbc,
-  0xc6, 0xf6, 0x3c, 0x68, 0xc2, 0x89, 0xda, 0x50, 0xa4, 0x2b, 0xc8, 0x12,
-  0x0c, 0x71, 0x83, 0x3c, 0xa0, 0xa4, 0xf4, 0x4d, 0xc8, 0xf7, 0xaf, 0xb4,
-  0xb4, 0x15, 0x9d, 0x67, 0x05, 0x4d, 0x51, 0x24, 0xc1, 0xcf, 0x77, 0xd4,
-  0x12, 0x57, 0x69, 0xe4, 0x6a, 0x19, 0x1d, 0x9c, 0x1f, 0x91, 0x64, 0x7b,
-  0x95, 0x01, 0xae, 0x22, 0xab, 0x2c, 0xbf, 0x2e, 0xc9, 0xb4, 0x96, 0x56,
-  0x66, 0xe7, 0x83, 0x3b, 0xbc, 0x0b, 0xde, 0x64, 0x62, 0xd2, 0x18, 0x01,
-  0x49, 0xe5, 0xf6, 0x24, 0x37, 0x35, 0x5c, 0x61, 0x70, 0x1d, 0x46, 0x4c,
-  0x10, 0x92, 0x62, 0x6f, 0x09, 0x75, 0x95, 0x1b, 0xa6, 0xf0, 0x59, 0x8b,
-  0xad, 0x87, 0x60, 0xc2, 0xb6, 0xd6, 0x38, 0xd5, 0x3e, 0x2b, 0xe1, 0xaf,
-  0x06, 0xd1, 0xa9, 0x7d, 0xd5, 0x3c, 0xa0, 0x9e, 0x9c, 0x06, 0xdd, 0xd6,
-  0xa3, 0xbf, 0xe2, 0x9e, 0x61, 0x59, 0xa4, 0x29, 0x17, 0x24, 0x2e, 0xd8,
-  0x5e, 0x0c, 0xd9, 0xb3, 0x40, 0xf8, 0x95, 0x6c, 0x40, 0x0e, 0xb7, 0x16,
-  0x1b, 0xb5, 0x82, 0x02, 0xa9, 0x89, 0x47, 0xd4, 0x81, 0x99, 0x9e, 0x55,
-  0xa6, 0x0a, 0x8e, 0x1c, 0x9e, 0x30, 0x70, 0x92, 0x54, 0xd1, 0xae, 0xf1,
-  0xa7, 0x4e, 0x33, 0xef, 0xef, 0xdc, 0x6c, 0xfd, 0x18, 0xdc, 0x97, 0xfc,
-  0xd1, 0x2b, 0x07, 0x74, 0xc7, 0xa3, 0x18, 0x71, 0x47, 0x60, 0xa9, 0x70,
-  0x9f, 0xf2, 0x2f, 0xf8, 0x18, 0x01, 0x70, 0x06, 0x7c, 0x0a, 0xae, 0xe3,
-  0xd0, 0xb4, 0x72, 0x75, 0xaf, 0xfa, 0x81, 0x88, 0x8f, 0x0f, 0x1c, 0x7a,
-  0x12, 0x8a, 0xc6, 0xc3, 0x6f, 0xb7, 0xad, 0x1c, 0x2e, 0x9b, 0x72, 0x38,
-  0x97, 0xd8, 0x0e, 0x7c, 0x99, 0xd4, 0xea, 0xe7, 0xba, 0xa4, 0xa1, 0xde,
-  0xb0, 0x47, 0x6b, 0xd1, 0x9f, 0xcf, 0x3d, 0xc3, 0xb7, 0xc7, 0x78, 0x57,
-  0x91, 0x5f, 0xe7, 0x05, 0x26, 0xe5, 0x5d, 0x5c, 0x98, 0xe3, 0xbe, 0x96,
-  0xed, 0xc0, 0x95, 0xcd, 0x38, 0x19, 0xc8, 0x61, 0x7c, 0x21, 0x63, 0x04,
-  0xf1, 0x02, 0xb7, 0x69, 0x69, 0x7e, 0x48, 0xa2, 0xed, 0xa9, 0x84, 0x47,
-  0x54, 0x82, 0x4d, 0x90, 0x54, 0xd3, 0x60, 0x29, 0x93, 0xe9, 0x75, 0x2e,
-  0xe1, 0xb5, 0xb4, 0x68, 0x41, 0xd2, 0x67, 0x2f, 0xfa, 0x4f, 0xa5, 0x81,
-  0x6f, 0x7d, 0xfe, 0x1e, 0x13, 0xc2, 0x48, 0x20, 0x29, 0x47, 0x9e, 0x20,
-  0x8e, 0x7e, 0xb8, 0x38, 0x3f, 0x88, 0xbe, 0x39, 0x3a, 0x78, 0x7d, 0x74,
-  0x3e, 0x6e, 0x5c, 0xfa, 0x1a, 0x09, 0x22, 0x12, 0x1a, 0xdb, 0x83, 0x21,
-  0x1a, 0x1b, 0x06, 0x81, 0x86, 0xf0, 0x1b, 0xd7, 0x23, 0xe2, 0xe1, 0x83,
-  0x44, 0xe7, 0x83, 0x15, 0x22, 0x71, 0x1c, 0x00, 0x00, 0xb9, 0x04, 0xb3,
-  0x71, 0x6d, 0x4c, 0x89, 0x43, 0x71, 0x3c, 0x83, 0x59, 0xcf, 0xc3, 0xe4,
-  0x19, 0x0f, 0xdb, 0xe7, 0x2f, 0x93, 0x59, 0x6e, 0x79, 0x81, 0xf5, 0x9d,
-  0xfb, 0xc6, 0xa7, 0x7e, 0x07, 0x6c, 0x4b, 0x2f, 0x19, 0x35, 0x20, 0xf6,
-  0x7e, 0x18, 0x52, 0xbf, 0x43, 0x5a, 0xfc, 0x21, 0xe3, 0x3a, 0xde, 0x27,
-  0x65, 0xaf, 0x61, 0x0d, 0xac, 0x77, 0xbf, 0x21, 0xd5, 0x9c, 0x5a, 0x27,
-  0xe9, 0x9b, 0xce, 0x96, 0xf8, 0x74, 0x71, 0xc1, 0xe7, 0x96, 0x06, 0x81,
-  0x4b, 0x35, 0x10, 0x92, 0xf5, 0x04, 0xb5, 0x32, 0x5d, 0x34, 0x56, 0xc9,
-  0xab, 0x99, 0x1a, 0x1a, 0x86, 0x81, 0xe8, 0x14, 0x20, 0xeb, 0xd0, 0xd9,
-  0x93, 0x4b, 0x7d, 0x2e, 0x58, 0xcd, 0x62, 0x31, 0xa3, 0x61, 0xe9, 0x43,
-  0xe1, 0xfd, 0x00, 0x5f, 0x88, 0x86, 0xe3, 0x97, 0x35, 0x57, 0xa9, 0xda,
-  0x45, 0x15, 0xc6, 0x5b, 0x9b, 0xe3, 0x31, 0x38, 0x9a, 0xb7, 0x28, 0x7e,
-  0xee, 0xd2, 0x2a, 0x8c, 0xe8, 0xbb, 0x12, 0x10, 0xc6, 0x4a, 0x3d, 0x4c,
-  0x9d, 0x52, 0xaa, 0x54, 0xea, 0x15, 0x0a, 0x63, 0x0b, 0xd2, 0x82, 0x42,
-  0x62, 0x46, 0x39, 0x34, 0x04, 0x92, 0xbb, 0xe7, 0x92, 0xe8, 0x9b, 0xbc,
-  0xc4, 0x5d, 0xd0, 0x7e, 0x9c, 0x2f, 0xf9, 0xae, 0xe5, 0xc7, 0x1b, 0xea,
-  0xea, 0x72, 0x78, 0xb1, 0x80, 0x57, 0x06, 0xfb, 0x3a, 0x3b, 0xb8, 0xf8,
-  0x06, 0x8e, 0x56, 0x90, 0xf0, 0x6b, 0x80, 0xa7, 0x98, 0x7b, 0xad, 0x9d,
-  0x9d, 0xe5, 0x14, 0x38, 0x91, 0x7f, 0x0d, 0xa3, 0xd1, 0xe4, 0x49, 0x38,
-  0xf2, 0x52, 0x89, 0x49, 0x9a, 0x4b, 0x79, 0x58, 0xf0, 0xe8, 0x5a, 0x89,
-  0x3e, 0x44, 0xc1, 0xbb, 0xd4, 0x3b, 0x17, 0x7a, 0xd9, 0x97, 0x9c, 0xf8,
-  0xbe, 0xcc, 0x09, 0x44, 0xcf, 0xc2, 0x1c, 0x6b, 0x3c, 0x21, 0x08, 0x31,
-  0xbe, 0xe0, 0xa4, 0x67, 0xf1, 0x45, 0xcd, 0xf2, 0x6e, 0x08, 0xc4, 0xe0,
-  0x48, 0x7f, 0xb9, 0xb8, 0x1f, 0xb5, 0xb1, 0x78, 0xa2, 0xaf, 0x56, 0x55,
-  0x9d, 0xad, 0x34, 0xa0, 0x90, 0x9d, 0x64, 0x59, 0xe4, 0x79, 0x15, 0x8c,
-  0x01, 0xd2, 0x4f, 0x5c, 0xe9, 0x89, 0x16, 0xac, 0x4b, 0x19, 0x0b, 0x37,
-  0x95, 0xa9, 0xdc, 0x1d, 0x0a, 0x86, 0xf1, 0xa4, 0xcc, 0xe7, 0xab, 0x2a,
-  0x08, 0xc4, 0xfe, 0x65, 0x63, 0x0e, 0x06, 0xbd, 0x79, 0x3c, 0x32, 0xdc,
-  0xcf, 0x4c, 0xd0, 0xea, 0x48, 0xd3, 0x27, 0xf1, 0x12, 0x7e, 0xc7, 0x22,
-  0xcf, 0xea, 0x75, 0xe4, 0x10, 0xf3, 0xbd, 0xb5, 0xb1, 0x31, 0xb6, 0xcd,
-  0x66, 0xe4, 0xd7, 0xf6, 0xa6, 0x7f, 0x0f, 0x69, 0x92, 0xc7, 0x20, 0x7e,
-  0x83, 0x29, 0xfd, 0x62, 0x78, 0x70, 0x89, 0xec, 0x29, 0x58, 0xb8, 0xec,
-  0x71, 0x5a, 0xd6, 0x27, 0x85, 0xaf, 0x9c, 0xe7, 0xc2, 0x52, 0xcd, 0x2e,
-  0x72, 0xc3, 0xf4, 0x57, 0xcf, 0x9d, 0x27, 0x88, 0x5a, 0x62, 0x7c, 0x27,
-  0xd8, 0x34, 0x5f, 0x02, 0x56, 0x74, 0xd8, 0x45, 0xe6, 0xf2, 0x20, 0xb7,
-  0xff, 0x6b, 0x3b, 0x1a, 0x44, 0x5a, 0x0f, 0xbe, 0x03, 0xef, 0xe8, 0xff,
-  0x42, 0x0c, 0x96, 0x22, 0xfd, 0x72, 0x9b, 0xa3, 0x3a, 0x96, 0xec, 0x88,
-  0x54, 0xa8, 0xeb, 0x62, 0xea, 0xa9, 0x9f, 0xa4, 0x83, 0xe4, 0x8e, 0xf5,
-  0x17, 0xd3, 0x11, 0x14, 0x39, 0x44, 0xea, 0xfe, 0x3a, 0x2c, 0x26, 0x20,
-  0x6f, 0x5c, 0x3a, 0xab, 0x1e, 0x97, 0xe0, 0x94, 0x7a, 0x94, 0x22, 0xd6,
-  0xa3, 0x1c, 0x93, 0x79, 0x50, 0x25, 0xb9, 0xde, 0xe9, 0xed, 0x65, 0x54,
-  0xe6, 0xf2, 0xd3, 0xf2, 0x8f, 0x34, 0xc6, 0x4b, 0xc9, 0x3f, 0x28, 0xf3,
-  0x17, 0xd4, 0xc7, 0xb5, 0xe0, 0x53, 0x09, 0xac, 0x33, 0xcf, 0xa4, 0x0d,
-  0xd2, 0xa4, 0x00, 0x76, 0x5c, 0x02, 0xe1, 0x52, 0x41, 0x48, 0x38, 0xa8,
-  0x8c, 0xe1, 0x8c, 0x25, 0x7f, 0x9b, 0x0b, 0x38, 0x9a, 0x26, 0x63, 0x57,
-  0xaa, 0x65, 0x74, 0x6c, 0x84, 0xe5, 0xb4, 0x65, 0xf8, 0x7a, 0xf7, 0x23,
-  0x1f, 0x1f, 0x4e, 0xba, 0xbb, 0x98, 0x21, 0xd3, 0xbc, 0x48, 0x60, 0x53,
-  0xd2, 0x12, 0xb0, 0x12, 0xc7, 0x11, 0xc6, 0xa6, 0xf8, 0xe0, 0xcd, 0x2b,
-  0x4e, 0xf8, 0x50, 0x93, 0x94, 0xc2, 0x9a, 0xc0, 0xfe, 0x75, 0x9d, 0x6a,
-  0x88, 0xa9, 0xac, 0x7a, 0xbd, 0xc0, 0x26, 0x2c, 0x7c, 0x1c, 0x5d, 0xe0,
-  0x1d, 0xac, 0x2e, 0x06, 0x62, 0xd4, 0x3e, 0x30, 0x23, 0x07, 0xb0, 0xaa,
-  0x97, 0xc8, 0x71, 0x98, 0x5e, 0x2e, 0x01, 0x19, 0x2e, 0xec, 0xf9, 0x13,
-  0x7b, 0x0f, 0xbb, 0xe4, 0x78, 0xd6, 0x2c, 0x92, 0x5c, 0x12, 0x45, 0x8d,
-  0xe3, 0x0b, 0x65, 0x6f, 0x17, 0x8a, 0xa9, 0x84, 0x6f, 0x00, 0xb2, 0xd4,
-  0x5a, 0x30, 0xe8, 0xb4, 0xe6, 0xe2, 0x6f, 0x0d, 0x74, 0x95, 0x5c, 0xf2,
-  0xbd, 0x7a, 0x9b, 0x45, 0x2e, 0x0c, 0xfc, 0x4e, 0xb5, 0x42, 0x72, 0x92,
-  0xd0, 0x5d, 0x56, 0xc5, 0x6a, 0x5a, 0x43, 0xeb, 0x03, 0x45, 0xd4, 0xbc,
-  0xf4, 0x6e, 0x8d, 0xf3, 0x50, 0xb7, 0x3f, 0x3e, 0x53, 0xf5, 0x5e, 0xb4,
-  0x0f, 0x1e, 0xd9, 0x66, 0x5c, 0xcb, 0x77, 0x71, 0x35, 0x46, 0xc3, 0x7e,
-  0xb7, 0x1c, 0x95, 0x0d, 0xcf, 0x5c, 0x72, 0x7d, 0xa3, 0x52, 0x3c, 0x27,
-  0x2a, 0x04, 0x77, 0xaf, 0x0a, 0x62, 0x10, 0x3c, 0x8a, 0x48, 0x71, 0x18,
-  0x21, 0xd6, 0xb0, 0xc9, 0x72, 0xc3, 0x61, 0x25, 0xd2, 0x90, 0x86, 0x1a,
-  0xb5, 0x2a, 0x8e, 0xe0, 0x6d, 0x5a, 0x48, 0xab, 0x14, 0xe4, 0x4a, 0x64,
-  0x95, 0x1e, 0x6f, 0xb1, 0x11, 0xb2, 0x0a, 0xb4, 0x26, 0x27, 0x1f, 0x2a,
-  0x6e, 0x9c, 0xae, 0xdf, 0x28, 0x7a, 0xad, 0x87, 0x42, 0x7b, 0x68, 0x8a,
-  0x13, 0xed, 0xbb, 0xf1, 0x4c, 0x50, 0x51, 0x5a, 0x74, 0xf4, 0xda, 0x6c,
-  0xaa, 0x60, 0x39, 0x58, 0x1b, 0xd6, 0x6c, 0x6c, 0x93, 0x68, 0x5d, 0xad,
-  0x0b, 0x1a, 0x02, 0xcf, 0xb8, 0x3f, 0x4f, 0x76, 0xfa, 0x41, 0x8d, 0xaf,
-  0x4d, 0x89, 0xff, 0xcf, 0xa1, 0xfd, 0x38, 0xdc, 0x42, 0xb1, 0x5e, 0x70,
-  0x9c, 0xdb, 0x56, 0xc7, 0x50, 0xa8, 0x89, 0x5f, 0x3a, 0x98, 0xdd, 0x17,
-  0x7b, 0xa3, 0xdd, 0xe7, 0x9f, 0x8f, 0x76, 0x46, 0xbb, 0x3b, 0xcc, 0x5f,
-  0x78, 0x28, 0xc1, 0xe0, 0x64, 0x5d, 0x3a, 0xba, 0xaa, 0xbd, 0xd7, 0xee,
-  0xf3, 0xdd, 0xd1, 0xc5, 0xf7, 0xa7, 0xe7, 0xdf, 0x46, 0xc7, 0xef, 0x2e,
-  0x8e, 0xce, 0xdf, 0x1c, 0x1c, 0x7e, 0x2a, 0x76, 0x7f, 0x68, 0xb6, 0x0e,
-  0xca, 0x5c, 0x27, 0x7e, 0x61, 0xda, 0xb6, 0x41, 0xbf, 0x66, 0x49, 0x75,
-  0xbd, 0xb3, 0xbf, 0xfb, 0x20, 0x3a, 0x75, 0x87, 0x79, 0xd0, 0xbf, 0x6f,
-  0x93, 0xda, 0xe5, 0x49, 0xad, 0x6f, 0xc5, 0xa1, 0x34, 0x8e, 0x25, 0xcc,
-  0xca, 0x85, 0xe8, 0x82, 0xcd, 0xa3, 0x8a, 0x12, 0xc0, 0x59, 0x95, 0xb1,
-  0x4f, 0x04, 0x07, 0x57, 0x32, 0x6d, 0x15, 0x6f, 0x46, 0xc3, 0xd1, 0x95,
-  0xe7, 0x6e, 0x48, 0x49, 0xe9, 0x4a, 0xcd, 0x29, 0x82, 0x6c, 0x3b, 0x83,
-  0x88, 0x67, 0x5c, 0x59, 0xd3, 0xd8, 0x98, 0x5a, 0xb4, 0xca, 0xa9, 0x60,
-  0x0f, 0xce, 0x5c, 0xca, 0x88, 0x03, 0x24, 0x40, 0x14, 0x84, 0xc9, 0xe9,
-  0x18, 0x6b, 0xbd, 0x2a, 0x78, 0x18, 0x49, 0xdb, 0x80, 0x61, 0x2d, 0x2d,
-  0xc4, 0x19, 0x13, 0xab, 0x99, 0x46, 0x0f, 0x75, 0x20, 0x38, 0x0d, 0xc1,
-  0x68, 0xa4, 0x2b, 0x08, 0x54, 0x8c, 0x97, 0x06, 0xa4, 0xc8, 0x1a, 0x58,
-  0xb2, 0xdc, 0x51, 0x48, 0xa3, 0x10, 0xf9, 0xcf, 0x0a, 0x5c, 0x70, 0xeb,
-  0x65, 0x0d, 0xaf, 0x30, 0x92, 0xca, 0x56, 0xe1, 0xeb, 0x22, 0x6a, 0x23,
-  0x50, 0x73, 0x56, 0xc4, 0x77, 0x28, 0xcf, 0x92, 0x7a, 0xf4, 0xd1, 0x8d,
-  0xa8, 0x56, 0x9e, 0x8b, 0x05, 0x27, 0xbf, 0xe6, 0xd1, 0xd9, 0xd1, 0xdb,
-  0xa1, 0x15, 0x15, 0xa6, 0xdf, 0xc5, 0x18, 0x65, 0x50, 0x93, 0x92, 0xe6,
-  0xb3, 0x4c, 0x32, 0x0b, 0xab, 0x01, 0x4f, 0xd4, 0x38, 0xa0, 0x70, 0x02,
-  0x7c, 0x68, 0x1c, 0x18, 0xa5, 0x46, 0x8f, 0x5a, 0xf8, 0xa5, 0xa4, 0x19,
-  0x36, 0x11, 0x3a, 0x79, 0x3f, 0x35, 0x76, 0x39, 0xda, 0x74, 0xf1, 0xba,
-  0xdc, 0x1f, 0x82, 0x52, 0x11, 0x33, 0xe0, 0xc2, 0x04, 0x72, 0x4b, 0xc2,
-  0x3e, 0xfb, 0xf6, 0x70, 0xfc, 0xbb, 0xdd, 0x3d, 0x1d, 0xce, 0x96, 0x69,
-  0x05, 0xcc, 0xab, 0x9a, 0xf9, 0xf9, 0x60, 0xd7, 0xe1, 0x18, 0x2d, 0xdb,
-  0x1a, 0x07, 0x1c, 0x9b, 0xb1, 0xe9, 0x72, 0x84, 0xb6, 0x6a, 0x49, 0x42,
-  0x1b, 0x52, 0xdb, 0xde, 0x44, 0x4c, 0x57, 0xf8, 0x97, 0x5d, 0x22, 0x28,
-  0x0f, 0xa5, 0x05, 0x9a, 0x2a, 0x17, 0xf5, 0x17, 0x67, 0xf6, 0x91, 0xb4,
-  0xac, 0xad, 0x21, 0x9d, 0xdc, 0x47, 0xb6, 0x34, 0xf7, 0x9c, 0xd7, 0xdb,
-  0x7f, 0xcb, 0x90, 0xb1, 0x7a, 0xb3, 0x1b, 0x36, 0x90, 0xef, 0x06, 0x07,
-  0x40, 0x03, 0xd9, 0x67, 0x56, 0x02, 0x2e, 0xf3, 0x15, 0x51, 0xf8, 0xe9,
-  0x53, 0xda, 0x28, 0x3a, 0x59, 0x02, 0xe1, 0xc0, 0x4c, 0x21, 0x9f, 0xb3,
-  0xea, 0xe2, 0x1e, 0x79, 0x5d, 0x70, 0xe9, 0x99, 0xa5, 0x84, 0x94, 0xbe,
-  0x1b, 0x45, 0xdf, 0x24, 0x19, 0xe7, 0xd0, 0x73, 0xf0, 0x9d, 0xa5, 0x61,
-  0x21, 0x44, 0x90, 0x6b, 0x50, 0xa2, 0x26, 0xdf, 0x49, 0x12, 0x2b, 0x3c,
-  0x27, 0xf1, 0xba, 0x52, 0x34, 0x5c, 0xab, 0x47, 0x15, 0x73, 0xa0, 0x9e,
-  0x62, 0x89, 0x3a, 0xdc, 0x0b, 0xc1, 0x8b, 0xe6, 0x06, 0x36, 0xeb, 0x18,
-  0x9b, 0xa8, 0x8e, 0x80, 0xe6, 0xf4, 0x98, 0xc3, 0xd7, 0xa4, 0x56, 0xe5,
-  0x6b, 0x20, 0x6b, 0xb3, 0xb5, 0x50, 0x34, 0x2e, 0xcf, 0x54, 0x66, 0xc5,
-  0x35, 0x9b, 0x3e, 0x4a, 0xba, 0x6e, 0xe2, 0x6c, 0x7a, 0x3f, 0x9a, 0x91,
-  0x2c, 0xcb, 0xc6, 0xb3, 0xd1, 0xea, 0x66, 0x3b, 0x38, 0xa6, 0xcc, 0xf2,
-  0xaf, 0x05, 0x2e, 0xa0, 0x6e, 0xf8, 0xb6, 0x62, 0xc7, 0x6d, 0x14, 0xb1,
-  0xb8, 0x76, 0x26, 0x98, 0x24, 0x2c, 0xf1, 0x5f, 0x8e, 0xe7, 0x5a, 0xbc,
-  0xad, 0xa3, 0xc8, 0x81, 0x1d, 0x73, 0x0b, 0xa3, 0x65, 0xb2, 0xd8, 0x77,
-  0x89, 0xc9, 0xc6, 0x1f, 0xb4, 0xc0, 0x86, 0x53, 0x2c, 0x02, 0x23, 0x6d,
-  0x96, 0x5c, 0xcd, 0x55, 0xa0, 0x08, 0x55, 0x17, 0xd7, 0x44, 0x47, 0x36,
-  0x88, 0x28, 0x3c, 0x5a, 0x2d, 0x09, 0x12, 0x3b, 0xd1, 0x61, 0xa5, 0xd1,
-  0xb5, 0xf2, 0x70, 0xc1, 0x02, 0xbd, 0x6f, 0x44, 0x41, 0x44, 0x80, 0xbb,
-  0x8c, 0xc2, 0xf2, 0x62, 0xe2, 0xb1, 0xa0, 0x24, 0x75, 0x3f, 0x31, 0x26,
-  0x2c, 0x28, 0x04, 0x88, 0xee, 0x1a, 0x20, 0x0d, 0xe7, 0xa7, 0xd5, 0x14,
-  0x96, 0xb3, 0x42, 0x5f, 0xdf, 0x3e, 0x61, 0x8b, 0xf7, 0xc5, 0xc9, 0xd8,
-  0xbc, 0x22, 0x59, 0x72, 0x17, 0x90, 0x96, 0x54, 0x21, 0x50, 0xfa, 0x63,
-  0x03, 0x90, 0xa0, 0x2b, 0x03, 0xf8, 0x00, 0x23, 0x11, 0xae, 0xe0, 0xdd,
-  0x64, 0x3e, 0x0f, 0xc2, 0x16, 0x41, 0x23, 0x8a, 0x79, 0x28, 0x56, 0xfa,
-  0x4c, 0x84, 0x21, 0x07, 0xfa, 0xc2, 0x30, 0x7e, 0x24, 0x2c, 0x3d, 0x19,
-  0x44, 0xc3, 0x3d, 0x40, 0xe9, 0xec, 0xd6, 0x17, 0x31, 0xae, 0x04, 0x31,
-  0x90, 0xdb, 0xa0, 0x96, 0xac, 0x15, 0x65, 0x07, 0x9b, 0x4a, 0xd2, 0xb7,
-  0xf4, 0x3e, 0xff, 0xd8, 0xd3, 0x09, 0xdd, 0xee, 0x22, 0x78, 0x5b, 0x20,
-  0x2c, 0xe7, 0xf7, 0x6d, 0x91, 0x61, 0xef, 0xc1, 0x5d, 0x45, 0x9a, 0xc4,
-  0x5d, 0xea, 0xb0, 0xa4, 0xa5, 0x7e, 0x02, 0x4c, 0xa1, 0x8a, 0x0e, 0x6a,
-  0x03, 0xa0, 0x25, 0x54, 0x23, 0x77, 0x16, 0xdd, 0xee, 0x99, 0xaf, 0x99,
-  0xbf, 0xb1, 0x75, 0x13, 0x63, 0xbd, 0x67, 0x22, 0xad, 0x0c, 0x46, 0x0e,
-  0x78, 0x0b, 0xa8, 0x96, 0x13, 0xa0, 0x88, 0x66, 0x89, 0x8b, 0xd4, 0xb8,
-  0x4c, 0x9e, 0xa9, 0x59, 0x41, 0xb2, 0xdf, 0x05, 0x9a, 0x9e, 0x15, 0xf8,
-  0x20, 0xcc, 0x09, 0x41, 0xe0, 0x41, 0x70, 0xe4, 0x71, 0xe6, 0x72, 0x26,
-  0xd4, 0x94, 0x0f, 0xb4, 0x3e, 0x6c, 0xff, 0x75, 0x2a, 0x86, 0x09, 0x84,
-  0x9d, 0xe2, 0x3a, 0xa7, 0x93, 0xdf, 0x8f, 0xe8, 0x30, 0xad, 0x98, 0xe3,
-  0x57, 0xae, 0x0e, 0xdb, 0x58, 0x50, 0x3e, 0xfb, 0x21, 0x9b, 0x1b, 0x7e,
-  0xc1, 0x53, 0x29, 0xfb, 0x7e, 0xee, 0x8a, 0x76, 0x5e, 0x9f, 0x88, 0xfa,
-  0x39, 0xac, 0xf2, 0xd8, 0x59, 0x61, 0x05, 0xd6, 0xfb, 0x47, 0x1f, 0x59,
-  0xc6, 0xe9, 0x6b, 0x4f, 0xf2, 0xb5, 0xa4, 0xf7, 0x63, 0x8d, 0xce, 0x8e,
-  0xdf, 0x49, 0xc9, 0x70, 0x77, 0x16, 0x12, 0x46, 0x61, 0xdc, 0x90, 0x6a,
-  0xf7, 0x18, 0x4f, 0x6c, 0x70, 0xf0, 0x62, 0x38, 0x62, 0x9a, 0x61, 0x1a,
-  0x4f, 0xb5, 0xaf, 0xf3, 0x95, 0xf4, 0xde, 0xe7, 0x7b, 0xae, 0x2c, 0xe7,
-  0xfd, 0x46, 0x19, 0x5c, 0xb7, 0x27, 0x8d, 0x0b, 0xc5, 0x59, 0xa4, 0xa6,
-  0x33, 0x2f, 0xe0, 0xa3, 0xd4, 0x37, 0xb7, 0x52, 0xe3, 0x73, 0x83, 0x46,
-  0xd2, 0x63, 0x68, 0x0a, 0xff, 0x5d, 0x34, 0xda, 0xa6, 0x0e, 0xcb, 0x6d,
-  0x7b, 0x71, 0x79, 0x33, 0x2d, 0xe9, 0x86, 0xe3, 0x0c, 0xdf, 0x1f, 0xa1,
-  0x90, 0x63, 0x3b, 0x68, 0xc4, 0xb3, 0x9f, 0xa3, 0xe1, 0x74, 0x8e, 0xf9,
-  0x45, 0x28, 0xb8, 0xfd, 0x23, 0xed, 0x3c, 0x3f, 0xf1, 0xb3, 0xdb, 0xc3,
-  0x37, 0x29, 0x9f, 0xb7, 0x8f, 0x03, 0x9b, 0xfa, 0xa9, 0x28, 0x0c, 0x02,
-  0x75, 0x1b, 0x1d, 0xcc, 0x6e, 0x39, 0xff, 0x6e, 0xa6, 0x7f, 0xf2, 0x7c,
-  0x8e, 0x32, 0x94, 0x2a, 0xc5, 0x4c, 0xe3, 0x89, 0x54, 0x27, 0xff, 0x2e,
-  0x25, 0xa5, 0xe3, 0xb0, 0x21, 0x5f, 0x70, 0x2a, 0x20, 0x0f, 0x10, 0x6f,
-  0x05, 0x5f, 0x5a, 0x5e, 0xc7, 0x40, 0xd3, 0x17, 0x7c, 0xe4, 0x1f, 0x73,
-  0x67, 0xde, 0xba, 0x51, 0xf4, 0x15, 0xfb, 0x38, 0x8b, 0x24, 0x00, 0x82,
-  0xd5, 0x8b, 0x4f, 0x4a, 0xfa, 0xf1, 0x66, 0xc4, 0x02, 0x45, 0x31, 0x72,
-  0x33, 0x69, 0xa5, 0xc3, 0xb8, 0x39, 0xb9, 0x6f, 0xea, 0x93, 0xc3, 0xb8,
-  0x2c, 0xbb, 0x9d, 0xa6, 0x62, 0xa9, 0x13, 0x51, 0x6b, 0x2a, 0x01, 0x44,
-  0xa5, 0x8c, 0x50, 0x2e, 0xcc, 0x59, 0x62, 0x39, 0xfe, 0x79, 0x08, 0xac,
-  0x62, 0x96, 0x63, 0x34, 0x65, 0x12, 0x81, 0x23, 0x09, 0xdc, 0xe1, 0x7e,
-  0xd4, 0x87, 0xd7, 0xc4, 0x9a, 0x13, 0x37, 0xd4, 0xb1, 0x98, 0xf4, 0x6c,
-  0x88, 0x63, 0xbe, 0xa3, 0x6c, 0x13, 0xdc, 0x97, 0x96, 0x28, 0x09, 0x29,
-  0x74, 0x5b, 0x78, 0x97, 0xa3, 0x5d, 0x59, 0xdd, 0xfa, 0x14, 0x38, 0xbf,
-  0x71, 0xfc, 0xfe, 0x2d, 0x57, 0x39, 0x41, 0x05, 0xeb, 0x8b, 0xf3, 0x83,
-  0x77, 0xe3, 0x37, 0x62, 0x1a, 0xbf, 0xc8, 0x83, 0xc2, 0xd8, 0xea, 0x57,
-  0x30, 0xff, 0xb1, 0x43, 0x8c, 0xbb, 0x93, 0xd2, 0x1b, 0x16, 0x5a, 0xaf,
-  0x55, 0xb3, 0x07, 0x4d, 0xe8, 0x7d, 0x29, 0xb9, 0xcd, 0xab, 0xc1, 0x43,
-  0xdb, 0x1c, 0x6f, 0x39, 0x41, 0xa8, 0x0c, 0xcb, 0xb3, 0xf9, 0xca, 0xf5,
-  0x06, 0x12, 0xad, 0x0f, 0xf1, 0xb2, 0x1c, 0xda, 0x60, 0xec, 0x53, 0xb9,
-  0x7b, 0xd7, 0xe2, 0x92, 0x1e, 0x92, 0xaa, 0x38, 0xd4, 0xa2, 0x35, 0x41,
-  0x31, 0x3a, 0x67, 0x4e, 0x95, 0xbb, 0x57, 0x51, 0xfd, 0x5c, 0xe3, 0x61,
-  0x0a, 0xa8, 0x35, 0xbd, 0xf9, 0x87, 0xdd, 0xad, 0xee, 0xe6, 0x2f, 0x7e,
-  0x69, 0xf3, 0xdd, 0x63, 0x37, 0xdd, 0xcc, 0x67, 0x17, 0x6d, 0xfe, 0x61,
-  0x6f, 0xeb, 0xc1, 0x19, 0x85, 0x09, 0x92, 0xbe, 0x4f, 0x7a, 0x83, 0x07,
-  0x1b, 0xbd, 0x92, 0x63, 0xe6, 0x64, 0x26, 0x17, 0xa1, 0x13, 0x40, 0x0f,
-  0xd7, 0xb0, 0x3b, 0x38, 0x82, 0xdb, 0x49, 0xea, 0xde, 0xf1, 0xa6, 0x89,
-  0x26, 0xc7, 0xff, 0xfb, 0x28, 0x44, 0x94, 0xcc, 0xfa, 0x55, 0x78, 0x45,
-  0x31, 0x50, 0x40, 0x99, 0x8f, 0xd0, 0xf7, 0xde, 0x03, 0x7d, 0xfb, 0xd9,
-  0x05, 0x66, 0x09, 0xf6, 0x62, 0x73, 0x18, 0x9c, 0x01, 0x63, 0x6b, 0x3f,
-  0x1b, 0xbe, 0xe2, 0xfa, 0xfa, 0xfe, 0x2e, 0x8e, 0xdf, 0x1e, 0x31, 0x80,
-  0xf6, 0xeb, 0x63, 0xc6, 0xa1, 0x1b, 0x2b, 0x12, 0xa4, 0x59, 0x20, 0x1c,
-  0x38, 0x6f, 0x58, 0x38, 0x45, 0xdc, 0xbb, 0x2e, 0xda, 0xcc, 0x71, 0x0e,
-  0xb7, 0x13, 0xdc, 0xb5, 0x86, 0x43, 0x97, 0x96, 0x74, 0x79, 0x7c, 0x39,
-  0x7c, 0x9b, 0xcf, 0xa0, 0x25, 0x0f, 0xc7, 0x08, 0x15, 0xa4, 0xb7, 0xe8,
-  0xc3, 0xf7, 0xd9, 0xa2, 0xf6, 0xf1, 0xa8, 0x23, 0x69, 0x77, 0x63, 0x5d,
-  0x7d, 0x9e, 0xbf, 0x6d, 0x0f, 0x87, 0x3c, 0x98, 0xa1, 0x84, 0x75, 0xa9,
-  0x73, 0xa7, 0x06, 0xd5, 0x61, 0xac, 0x85, 0x16, 0x28, 0x9d, 0xdf, 0x4b,
-  0x20, 0x42, 0xec, 0xc3, 0xc7, 0x7c, 0x22, 0xe7, 0x15, 0x27, 0x93, 0x79,
-  0x13, 0x9f, 0x18, 0xf1, 0x36, 0x42, 0x1c, 0x53, 0x28, 0x52, 0xc9, 0x9d,
-  0x8f, 0x7f, 0xd2, 0xf2, 0xcd, 0xf9, 0xf2, 0x1e, 0xb3, 0xbc, 0xab, 0x85,
-  0x56, 0x74, 0xfa, 0x57, 0xff, 0x26, 0xef, 0xd4, 0x2a, 0x52, 0x29, 0xdc,
-  0x74, 0x40, 0x81, 0xfa, 0x89, 0x16, 0x70, 0x3a, 0x2d, 0x82, 0xeb, 0x4a,
-  0x87, 0x6d, 0x85, 0xee, 0x02, 0x8c, 0xd3, 0x00, 0x92, 0xb5, 0x3e, 0xce,
-  0x10, 0x0f, 0x36, 0xe7, 0x2c, 0xd8, 0xd7, 0xb9, 0x73, 0x8e, 0x11, 0xdb,
-  0x59, 0xd6, 0x0b, 0x24, 0x27, 0x91, 0xe5, 0x7b, 0x4b, 0x3a, 0x7f, 0x7f,
-  0xd8, 0x47, 0x89, 0x86, 0x34, 0xeb, 0x98, 0xcc, 0xf0, 0x97, 0xcf, 0xa6,
-  0xe5, 0x7a, 0x8d, 0x7a, 0x97, 0x8c, 0x89, 0xc1, 0x7e, 0xac, 0x9e, 0x0c,
-  0x40, 0x20, 0x63, 0x84, 0xb8, 0xe8, 0x82, 0x60, 0xbe, 0x66, 0x8a, 0xa4,
-  0x28, 0xd5, 0x2e, 0x32, 0xd6, 0x19, 0xc9, 0xc5, 0x2a, 0xc9, 0x8c, 0x74,
-  0xb5, 0x9c, 0x21, 0x28, 0x43, 0xc2, 0x51, 0xff, 0x9d, 0xf1, 0xb1, 0x8b,
-  0xfb, 0x68, 0x77, 0x6f, 0x10, 0xed, 0xed, 0xec, 0xee, 0x75, 0xcc, 0xa1,
-  0xf7, 0xef, 0x1c, 0x14, 0xb5, 0x87, 0xaf, 0x7b, 0x9f, 0x3a, 0x0b, 0x9f,
-  0xda, 0x80, 0x9b, 0x44, 0x93, 0x80, 0x89, 0xf9, 0xb0, 0x7f, 0x16, 0x98,
-  0xcc, 0xa8, 0x9a, 0x0c, 0x64, 0x3b, 0x5c, 0x5b, 0x62, 0x24, 0xb4, 0x6a,
-  0x9b, 0xae, 0x8a, 0xd8, 0x0c, 0x45, 0x75, 0xa4, 0x70, 0x2d, 0x22, 0x5f,
-  0x9c, 0xa5, 0x34, 0x2e, 0x50, 0x4a, 0xb4, 0xbe, 0x47, 0x69, 0x65, 0xdb,
-  0xc2, 0xa1, 0x35, 0xbc, 0x37, 0x44, 0xef, 0xaf, 0x8f, 0x0f, 0x2f, 0x0c,
-  0xfa, 0xf0, 0x92, 0x85, 0xa7, 0xe2, 0xfe, 0xd3, 0xea, 0x32, 0x3e, 0xf8,
-  0xcc, 0x6c, 0xff, 0x3a, 0x21, 0x31, 0x3a, 0x9b, 0xac, 0xae, 0xf6, 0xff,
-  0x12, 0x17, 0x57, 0x79, 0xf6, 0xd8, 0xf3, 0x33, 0xe4, 0x96, 0xed, 0x13,
-  0x87, 0xda, 0x7d, 0xb1, 0xfb, 0x44, 0x12, 0x17, 0x52, 0xd4, 0x06, 0x62,
-  0x06, 0xd1, 0x5f, 0xf4, 0x05, 0x6b, 0x03, 0x19, 0x13, 0x0e, 0x60, 0x23,
-  0x9b, 0xf5, 0xe5, 0xba, 0x8f, 0xc3, 0x67, 0x67, 0xfa, 0xac, 0x64, 0xa1,
-  0xf7, 0x37, 0xa4, 0x4c, 0x4a, 0x9f, 0x33, 0x36, 0x57, 0xcb, 0x7e, 0x1d,
-  0x2d, 0xfe, 0x91, 0xb9, 0x72, 0x17, 0xae, 0x0c, 0xe5, 0xa1, 0xc3, 0xc0,
-  0x47, 0x32, 0x51, 0x91, 0xc4, 0x37, 0xbe, 0x8c, 0xb2, 0x07, 0xe2, 0x30,
-  0x97, 0xc7, 0xf9, 0x9b, 0x43, 0x01, 0x33, 0xb5, 0xd4, 0x29, 0x2c, 0x75,
-  0xe4, 0x4c, 0x53, 0x5b, 0x3c, 0xca, 0x47, 0xfa, 0xe7, 0xdc, 0x86, 0xfd,
-  0xd9, 0xe4, 0x13, 0x1e, 0xa2, 0x73, 0x27, 0xb8, 0x71, 0x07, 0xf5, 0x2a,
-  0x3c, 0xac, 0xa8, 0xa1, 0x94, 0x88, 0xd5, 0x4c, 0xde, 0x94, 0x9a, 0xb4,
-  0xe2, 0x71, 0xe0, 0xa1, 0x59, 0x25, 0x6a, 0xb3, 0xee, 0xd0, 0xb8, 0xb9,
-  0xde, 0xeb, 0xeb, 0x83, 0xb3, 0x40, 0xd1, 0x85, 0x22, 0xe9, 0x8d, 0x7a,
-  0xfc, 0x1c, 0x2b, 0x3a, 0x28, 0xc9, 0xae, 0x85, 0x99, 0x06, 0x5e, 0x45,
-  0xa9, 0xc0, 0x27, 0x59, 0x36, 0x42, 0x80, 0x7c, 0xae, 0xf7, 0x09, 0xec,
-  0x4f, 0x28, 0x6c, 0x30, 0x9f, 0xc5, 0x70, 0x84, 0xea, 0x2d, 0x04, 0x99,
-  0x0b, 0x6d, 0xa5, 0x1a, 0x0d, 0x45, 0x7b, 0xf3, 0x31, 0xd2, 0x24, 0x0e,
-  0xcd, 0x56, 0xd1, 0xd2, 0x23, 0x78, 0x8c, 0x13, 0x94, 0xef, 0x6d, 0x02,
-  0xc2, 0x9f, 0x69, 0xf0, 0x71, 0x79, 0x43, 0xac, 0x54, 0x1c, 0xf8, 0xd4,
-  0x7b, 0xaa, 0x2e, 0x70, 0x36, 0xfa, 0xa4, 0x12, 0x48, 0xc3, 0xe6, 0x27,
-  0x40, 0x22, 0xd5, 0x36, 0x4c, 0xae, 0x20, 0xd6, 0x38, 0xe7, 0x65, 0x22,
-  0x00, 0x86, 0xd1, 0xc5, 0x5d, 0x2e, 0x2a, 0x46, 0x69, 0xe1, 0xb5, 0x12,
-  0x8a, 0x5a, 0xae, 0x52, 0x91, 0x22, 0x69, 0xf3, 0xc0, 0x0f, 0x82, 0x82,
-  0xb2, 0x3d, 0x67, 0xf9, 0x7a, 0xed, 0xfc, 0x9e, 0xe3, 0xd7, 0xdf, 0x46,
-  0x9c, 0x5a, 0xcf, 0x7d, 0x1c, 0x32, 0xb4, 0x3f, 0x87, 0x30, 0x2c, 0xa0,
-  0xfd, 0x7d, 0xbd, 0xe2, 0xf3, 0x7e, 0x78, 0x1d, 0x2f, 0x59, 0x01, 0xda,
-  0xdd, 0x61, 0x73, 0xc9, 0xf7, 0x96, 0xa4, 0xc7, 0x07, 0xd5, 0x0a, 0xde,
-  0x97, 0xbd, 0xc0, 0x92, 0x32, 0xe3, 0x7a, 0xf5, 0xac, 0x01, 0xd5, 0x8d,
-  0xb4, 0x74, 0x7d, 0x96, 0xdb, 0x02, 0xe8, 0x5f, 0x12, 0x69, 0x14, 0xe5,
-  0xec, 0x66, 0x7b, 0x4a, 0xff, 0x3c, 0xd9, 0xd9, 0x06, 0xa6, 0x66, 0x05,
-  0x9b, 0x26, 0xd3, 0xe4, 0xde, 0xde, 0xb3, 0x67, 0x83, 0xa8, 0xc7, 0x56,
-  0x46, 0xeb, 0x80, 0x8f, 0x04, 0x9d, 0xac, 0x5e, 0x57, 0x65, 0xdd, 0xed,
-  0xe2, 0x72, 0xca, 0xff, 0xe3, 0xd7, 0xac, 0xa0, 0xe4, 0x85, 0x66, 0xdd,
-  0x60, 0x1d, 0xb2, 0x10, 0x26, 0x47, 0xc8, 0x8a, 0xbf, 0x3b, 0x76, 0x76,
-  0x24, 0x76, 0x1a, 0x2d, 0x93, 0x7c, 0x69, 0xde, 0xe1, 0x85, 0x96, 0x0a,
-  0x41, 0xf7, 0x81, 0x4b, 0x0d, 0xfe, 0x7c, 0x09, 0x87, 0x53, 0x3c, 0x84,
-  0x72, 0x35, 0x19, 0x6a, 0x62, 0xb0, 0x68, 0x95, 0x29, 0x9d, 0x5c, 0xfa,
-  0x73, 0x6e, 0xe6, 0xfa, 0x16, 0x47, 0xfe, 0x2a, 0xea, 0x29, 0x6d, 0xf1,
-  0x8f, 0x11, 0x9c, 0xbb, 0xc9, 0x94, 0xa7, 0x91, 0xbf, 0xd2, 0x3f, 0xfe,
-  0xed, 0xdf, 0xa8, 0xd9, 0x7f, 0xe3, 0x56, 0x5e, 0xfd, 0xa1, 0xac, 0xae,
-  0x83, 0x67, 0x7a, 0x4a, 0xf0, 0xc7, 0xde, 0xb5, 0x8d, 0x70, 0x35, 0x20,
-  0xce, 0x22, 0x7f, 0xed, 0xed, 0x89, 0x72, 0xe4, 0x41, 0x30, 0xbf, 0x14,
-  0x99, 0x85, 0x62, 0x24, 0x75, 0xd1, 0x22, 0x5f, 0xb1, 0xdb, 0x39, 0xe1,
-  0x8c, 0x74, 0xba, 0x48, 0x00, 0x28, 0xb8, 0x65, 0x22, 0xc6, 0xd1, 0xbb,
-  0xef, 0x8e, 0xcf, 0x4f, 0xdf, 0xbd, 0x3d, 0x7a, 0x77, 0x11, 0x7d, 0x77,
-  0x70, 0x7e, 0x7c, 0xf0, 0xd5, 0x89, 0x26, 0xbe, 0xf3, 0x14, 0x38, 0xc8,
-  0x47, 0x64, 0xef, 0x06, 0x20, 0x6c, 0x90, 0x88, 0xd4, 0x59, 0x46, 0xa4,
-  0x51, 0x20, 0xf9, 0x83, 0xa2, 0x99, 0x43, 0x13, 0xf9, 0x80, 0x8a, 0x48,
-  0x03, 0x16, 0x3e, 0x3f, 0x58, 0x71, 0x24, 0x56, 0x9e, 0xee, 0x83, 0x54,
-  0x6a, 0x8e, 0x3f, 0x62, 0x2a, 0x35, 0xfe, 0xe4, 0xcb, 0x02, 0xba, 0x3a,
-  0x1b, 0x5f, 0x4b, 0x36, 0xbe, 0x15, 0x1d, 0xb1, 0x57, 0x35, 0x33, 0x0c,
-  0x76, 0x37, 0x37, 0x86, 0x83, 0x93, 0x13, 0xdf, 0xd5, 0xc3, 0xf5, 0x68,
-  0x14, 0x89, 0x49, 0x92, 0xb7, 0xd0, 0x28, 0x3b, 0x06, 0xaf, 0x72, 0x0f,
-  0xcd, 0x9e, 0xdd, 0x87, 0x28, 0xec, 0xdc, 0x19, 0x6d, 0xc7, 0xa6, 0x40,
-  0x68, 0xb0, 0x97, 0x98, 0x0e, 0x50, 0x5a, 0xde, 0x0c, 0xa2, 0xfe, 0x1f,
-  0xfa, 0x5a, 0x52, 0x1c, 0xb8, 0xc1, 0x52, 0xed, 0x66, 0xcb, 0x0f, 0xea,
-  0xdd, 0xa9, 0x1f, 0x93, 0x3a, 0x3e, 0xdd, 0x00, 0xdc, 0x8b, 0xde, 0x6d,
-  0x5d, 0x9a, 0x3c, 0x83, 0x78, 0x51, 0xff, 0xb8, 0x96, 0x84, 0x70, 0xc8,
-  0x00, 0x4a, 0xa3, 0xec, 0xd8, 0xea, 0x7c, 0x17, 0x5a, 0x5b, 0x3c, 0x0d,
-  0xe0, 0xa1, 0x31, 0xd7, 0x8c, 0x4d, 0x1d, 0xae, 0x4c, 0x97, 0x59, 0x03,
-  0x69, 0xa9, 0xd9, 0xa6, 0xa7, 0xee, 0xc4, 0x55, 0xa9, 0x1c, 0x14, 0x54,
-  0xf5, 0x71, 0xdb, 0xaa, 0xde, 0xc0, 0xc7, 0xc8, 0xf9, 0x00, 0x45, 0x3a,
-  0x53, 0xb8, 0xc1, 0x4e, 0xaa, 0x18, 0xc1, 0x35, 0x75, 0x7e, 0x08, 0x74,
-  0xf6, 0x8c, 0xeb, 0x33, 0xfa, 0xaa, 0x1a, 0x88, 0x1d, 0x26, 0x2e, 0x52,
-  0x70, 0x42, 0x5e, 0xa6, 0x42, 0x08, 0xe2, 0x71, 0x21, 0xa3, 0xc7, 0x57,
-  0xb9, 0xc9, 0xdf, 0xb1, 0x73, 0x9a, 0xbb, 0xda, 0x63, 0x81, 0x4c, 0xef,
-  0x30, 0xc4, 0x9c, 0xc9, 0x12, 0xee, 0x75, 0x73, 0x10, 0x70, 0x78, 0x19,
-  0x6f, 0xb9, 0xd5, 0x92, 0x2e, 0x83, 0x2c, 0x6d, 0x9f, 0xbd, 0xc0, 0xbc,
-  0x44, 0x82, 0xf4, 0x0d, 0xd4, 0x0b, 0x40, 0x6a, 0x96, 0xd5, 0x8d, 0x40,
-  0x47, 0x0c, 0x8b, 0x1f, 0x44, 0x93, 0x1a, 0xb3, 0x8a, 0x26, 0xcd, 0x76,
-  0x4d, 0xa7, 0x67, 0xce, 0x09, 0x64, 0xc6, 0x89, 0xe2, 0x68, 0x92, 0x5e,
-  0x09, 0x3a, 0x00, 0xa7, 0xa2, 0x33, 0x95, 0x00, 0xec, 0x8d, 0x14, 0x7b,
-  0xde, 0x2a, 0x40, 0xb9, 0x41, 0x76, 0xbf, 0xce, 0xe7, 0x21, 0xde, 0x98,
-  0xcd, 0xa4, 0xd4, 0xaa, 0x6a, 0x66, 0xfa, 0x84, 0xeb, 0x63, 0xc5, 0xeb,
-  0x68, 0xd1, 0x68, 0x0a, 0x54, 0xae, 0xb1, 0x79, 0x6c, 0x53, 0x07, 0x6a,
-  0x62, 0x86, 0x4c, 0x20, 0xcb, 0xaa, 0xc6, 0x3a, 0x58, 0xdc, 0x32, 0x73,
-  0x0b, 0xd8, 0xd1, 0xb8, 0xe2, 0xe3, 0xa6, 0x43, 0x1a, 0xe7, 0x56, 0xa6,
-  0x82, 0xd5, 0xca, 0x44, 0x2f, 0x1e, 0xe5, 0x7a, 0x69, 0x20, 0xdd, 0x2c,
-  0x45, 0xd1, 0x22, 0x9a, 0xe0, 0x41, 0xd3, 0x4a, 0x6d, 0x06, 0x8c, 0x27,
-  0x23, 0x12, 0x91, 0xc7, 0x44, 0x81, 0xd4, 0xbf, 0x86, 0xae, 0xaa, 0x99,
-  0xfa, 0x9d, 0xb7, 0x7c, 0xdc, 0x81, 0x48, 0x01, 0x4c, 0xad, 0x53, 0xad,
-  0x2b, 0x09, 0x0f, 0x3d, 0x17, 0xc5, 0x04, 0x34, 0x54, 0xcd, 0xf6, 0x18,
-  0x59, 0xbe, 0xcd, 0x7c, 0x1e, 0x40, 0x8d, 0x8b, 0x39, 0x22, 0x6e, 0xc9,
-  0x1e, 0xec, 0x1c, 0x92, 0x34, 0x54, 0x8d, 0xfc, 0x11, 0x58, 0xe2, 0x60,
-  0x22, 0x1a, 0x53, 0xce, 0xd2, 0x59, 0xc3, 0xa4, 0x19, 0x30, 0x34, 0xf3,
-  0x8e, 0x87, 0x17, 0x93, 0x56, 0xd6, 0x48, 0xe3, 0x85, 0xc8, 0x8e, 0x9e,
-  0xfa, 0x16, 0xf7, 0x12, 0x75, 0xb8, 0xb1, 0x71, 0xf8, 0x7e, 0x7c, 0x71,
-  0xfa, 0x36, 0x3a, 0x7d, 0x7f, 0x71, 0xf6, 0xfe, 0x42, 0x6f, 0xae, 0x89,
-  0xc4, 0x6c, 0x4b, 0xe4, 0x82, 0x08, 0x01, 0xb6, 0x99, 0x0b, 0xf5, 0xef,
-  0x23, 0xc4, 0x24, 0x07, 0xc0, 0x60, 0x80, 0x2d, 0xe4, 0x72, 0xb2, 0x80,
-  0xba, 0x25, 0xc8, 0xc5, 0x58, 0xf2, 0x3b, 0x5a, 0x72, 0xe4, 0xd3, 0xc2,
-  0x90, 0x67, 0x29, 0x5e, 0x50, 0x7b, 0xec, 0xac, 0xd5, 0xab, 0xd6, 0xdc,
-  0xd7, 0xd5, 0x18, 0x38, 0xe7, 0xeb, 0x58, 0x4e, 0x61, 0xf1, 0x4c, 0xb1,
-  0xed, 0x78, 0xd3, 0x4f, 0x18, 0xd2, 0xa9, 0xa5, 0x37, 0xcd, 0x00, 0x6d,
-  0x51, 0xb5, 0x08, 0x35, 0xaa, 0x27, 0x16, 0x86, 0xf9, 0x8d, 0x55, 0x4e,
-  0x33, 0xbc, 0x76, 0x11, 0xf1, 0x1c, 0x45, 0x84, 0x48, 0x40, 0x09, 0xa0,
-  0xe0, 0x90, 0x3b, 0xd1, 0x18, 0x48, 0x0f, 0x64, 0x97, 0x45, 0xeb, 0x96,
-  0xbd, 0x8b, 0xfa, 0xdf, 0x27, 0x61, 0x83, 0xbf, 0xff, 0x0f, 0x4e, 0xdb,
-  0xfc, 0x60, 0x9f, 0xfc, 0x5d, 0xba, 0xfc, 0x29, 0xeb, 0x23, 0x80, 0xae,
-  0xee, 0x29, 0xff, 0xf6, 0xe8, 0xfc, 0xab, 0xa3, 0xf3, 0xd3, 0x31, 0xf8,
-  0x81, 0x99, 0xbb, 0xda, 0xb4, 0x7e, 0x93, 0x14, 0x93, 0xa4, 0xc8, 0xb5,
-  0xa2, 0x96, 0xfd, 0xf5, 0x6c, 0xfb, 0xeb, 0xf1, 0xf8, 0xe0, 0xec, 0xd8,
-  0xd5, 0xac, 0x71, 0x09, 0x64, 0xa2, 0x22, 0x65, 0x92, 0xe2, 0xc8, 0xf3,
-  0xb7, 0x57, 0x88, 0x2e, 0xa6, 0x37, 0x12, 0x58, 0xdc, 0xf2, 0x49, 0x9b,
-  0x5d, 0x9d, 0x9d, 0xd1, 0x9a, 0x57, 0xc8, 0x0d, 0x1b, 0x26, 0x54, 0x88,
-  0x3b, 0x2f, 0x00, 0xf1, 0xec, 0x0b, 0x18, 0xb8, 0x08, 0xbc, 0x9b, 0x62,
-  0x32, 0x24, 0x6a, 0xbf, 0xb1, 0x12, 0xce, 0x92, 0x07, 0x41, 0xac, 0x52,
-  0x02, 0xa4, 0xbd, 0xad, 0x81, 0x64, 0xba, 0xb4, 0xda, 0xbe, 0xe1, 0xf3,
-  0xc1, 0xf5, 0x54, 0xe6, 0x23, 0xe1, 0xee, 0x72, 0xa0, 0x2c, 0xea, 0x95,
-  0x59, 0xec, 0x43, 0x38, 0x15, 0xd4, 0x9b, 0x2b, 0x82, 0x28, 0xf6, 0x2e,
-  0xfa, 0xe4, 0xa9, 0x03, 0xec, 0x0a, 0x2b, 0x8a, 0x5f, 0x92, 0x00, 0xbe,
-  0xbc, 0x9b, 0xe9, 0x25, 0x02, 0xbc, 0xea, 0x4c, 0xdc, 0x13, 0xc2, 0xc3,
-  0x9b, 0x0e, 0x2a, 0x2e, 0xd4, 0x88, 0x84, 0x0d, 0x0d, 0x47, 0x8f, 0x26,
-  0xf3, 0x38, 0xbb, 0xc1, 0x6d, 0x86, 0xfb, 0x89, 0x55, 0x4e, 0x83, 0xa1,
-  0xe2, 0x02, 0x9a, 0xf0, 0x47, 0x2a, 0x32, 0x04, 0x84, 0xc0, 0x39, 0x33,
-  0xb7, 0x7b, 0xb1, 0xe5, 0x3b, 0xb4, 0xad, 0xc0, 0xf3, 0x86, 0xe3, 0xe4,
-  0x17, 0x81, 0x4d, 0x47, 0x47, 0x27, 0x74, 0x31, 0xb9, 0x24, 0x13, 0xa8,
-  0xe8, 0xc9, 0x9c, 0x4d, 0xc1, 0x16, 0x11, 0x24, 0x79, 0x95, 0x29, 0x18,
-  0x99, 0x70, 0x0f, 0x83, 0x52, 0x87, 0xff, 0x08, 0xe4, 0x82, 0xf4, 0xd1,
-  0xd2, 0x15, 0x1c, 0x51, 0xce, 0x2d, 0x4c, 0x0c, 0x38, 0xa1, 0xbe, 0xfe,
-  0x48, 0x58, 0x09, 0x47, 0xc3, 0xed, 0x0e, 0x7d, 0x3c, 0x90, 0x2b, 0x0d,
-  0x26, 0x83, 0xf0, 0x62, 0xa9, 0xf3, 0x30, 0xd6, 0xb2, 0x5b, 0xd6, 0x6e,
-  0x93, 0xbc, 0xde, 0x65, 0x04, 0x10, 0x78, 0xb3, 0x99, 0xfa, 0x3b, 0x1c,
-  0x32, 0x90, 0x85, 0x2c, 0xd7, 0xc3, 0x84, 0x6d, 0xe0, 0x12, 0x0d, 0xc0,
-  0xc6, 0xdb, 0x79, 0x65, 0x4e, 0x43, 0x84, 0xb8, 0xea, 0x0d, 0x5c, 0xcd,
-  0xc0, 0x72, 0x8a, 0x1a, 0x68, 0x6d, 0x18, 0x9d, 0x2b, 0xe0, 0x15, 0xb0,
-  0x0d, 0x4a, 0xbe, 0x06, 0xb4, 0x18, 0x27, 0xdf, 0x0e, 0xdf, 0xf1, 0x75,
-  0x91, 0x0f, 0x27, 0x2b, 0xe8, 0x65, 0x41, 0xc9, 0x2e, 0xc9, 0xe1, 0x24,
-  0x75, 0x4d, 0x70, 0xd5, 0xf0, 0x3d, 0xfb, 0xa3, 0x90, 0x1d, 0x2f, 0x2e,
-  0x2a, 0xa4, 0x4b, 0xd6, 0x31, 0x77, 0x1c, 0xd2, 0x8a, 0xe4, 0x20, 0xf8,
-  0x5a, 0xc2, 0x6e, 0x82, 0xba, 0xc9, 0x2e, 0x5a, 0x30, 0xd3, 0x82, 0xaf,
-  0xf0, 0xac, 0xd4, 0x23, 0xae, 0x2b, 0x07, 0x7d, 0x7f, 0x01, 0x31, 0x21,
-  0x51, 0x40, 0x78, 0x0b, 0xa5, 0xb6, 0xc4, 0x8d, 0xdb, 0x8a, 0x8b, 0x4c,
-  0x09, 0x48, 0x44, 0x3c, 0x97, 0x8a, 0x1d, 0x6b, 0xaf, 0x12, 0x39, 0x4c,
-  0xd5, 0xc5, 0xc5, 0x9f, 0xcf, 0x8e, 0x5e, 0xd9, 0x9b, 0x0f, 0xed, 0x99,
-  0x60, 0xa7, 0x21, 0x66, 0x26, 0x51, 0xac, 0xd2, 0xa0, 0x4c, 0x36, 0x11,
-  0xd9, 0xb0, 0x32, 0x5f, 0xbe, 0x74, 0x33, 0x8c, 0x7e, 0x78, 0x7d, 0x3c,
-  0x3e, 0x3b, 0x39, 0x3d, 0x7c, 0xf5, 0xf2, 0x07, 0x63, 0xc9, 0x5f, 0xb0,
-  0x8b, 0x40, 0xe4, 0x34, 0xf7, 0x99, 0xc7, 0x76, 0xd0, 0xf7, 0xde, 0x1d,
-  0x7d, 0xff, 0x81, 0xb4, 0x83, 0x57, 0x8c, 0xf0, 0x3e, 0xb8, 0x8d, 0xe7,
-  0xfa, 0x12, 0xab, 0x58, 0x1d, 0xb2, 0xdd, 0xa8, 0x0e, 0xc6, 0xd7, 0x5c,
-  0x58, 0x57, 0xa9, 0xd4, 0xe7, 0x29, 0xdc, 0x5b, 0x18, 0x5d, 0x50, 0x94,
-  0x2a, 0xae, 0xa5, 0xd5, 0x76, 0xd4, 0x15, 0xf6, 0xd7, 0x7f, 0xbf, 0x92,
-  0x98, 0x4a, 0x0e, 0x21, 0x08, 0x3d, 0xf3, 0x88, 0x5b, 0xd5, 0x6f, 0x7c,
-  0x3c, 0xaf, 0x22, 0x29, 0x17, 0x1c, 0xc0, 0xe2, 0xa0, 0x28, 0xb5, 0x58,
-  0x35, 0x7c, 0xde, 0x8a, 0x57, 0xa9, 0x20, 0x4c, 0x1c, 0x42, 0x6b, 0xd1,
-  0xf4, 0xc6, 0xc7, 0x54, 0x84, 0x71, 0x63, 0x89, 0xad, 0x6c, 0x2e, 0x6a,
-  0xf3, 0x9c, 0x1d, 0x9d, 0x8f, 0x8f, 0xc7, 0x17, 0xac, 0x46, 0x69, 0x0d,
-  0x47, 0xb5, 0x41, 0x5b, 0x81, 0x4d, 0x60, 0x36, 0xd4, 0xa1, 0x47, 0xc3,
-  0xba, 0x21, 0xb5, 0x13, 0xed, 0xd8, 0x5c, 0x3d, 0x89, 0x93, 0x6f, 0x00,
-  0xc9, 0x0c, 0x65, 0x41, 0x54, 0x00, 0x74, 0xe3, 0x4b, 0x3b, 0xc0, 0xb9,
-  0x92, 0x46, 0xa3, 0x7c, 0x06, 0x4a, 0xdf, 0x60, 0x77, 0xe6, 0xe9, 0x24,
-  0x28, 0x9a, 0x5d, 0x77, 0x21, 0x73, 0x74, 0x82, 0x82, 0x75, 0x84, 0x47,
-  0xc8, 0xec, 0xe1, 0x3e, 0x33, 0x5a, 0xcb, 0xfa, 0xea, 0xb5, 0xa6, 0x59,
-  0x8d, 0x61, 0xfe, 0xaa, 0x53, 0x54, 0xa1, 0x9c, 0x84, 0xe5, 0xcb, 0xf1,
-  0x69, 0x10, 0x84, 0xaa, 0xf8, 0x4f, 0x80, 0xae, 0x55, 0x96, 0xcd, 0x4c,
-  0x39, 0x95, 0x4c, 0x34, 0x36, 0xb4, 0x90, 0xd4, 0x82, 0xcc, 0x7a, 0xc4,
-  0x09, 0xe9, 0xcc, 0x5a, 0x22, 0x88, 0x8a, 0x8e, 0x57, 0x9c, 0xc2, 0x06,
-  0x90, 0xad, 0x19, 0xcb, 0x5b, 0xb0, 0xc0, 0x85, 0x9d, 0xd9, 0x75, 0xca,
-  0x2b, 0x38, 0x59, 0x85, 0x45, 0xe1, 0xdc, 0xe8, 0xa5, 0x3e, 0x09, 0x16,
-  0x1e, 0x11, 0x92, 0x71, 0x01, 0x14, 0xcb, 0x4a, 0x41, 0xe3, 0x4d, 0xf1,
-  0xd1, 0x70, 0xc7, 0x51, 0x1d, 0xcf, 0xc7, 0xe8, 0xd2, 0x0a, 0x97, 0x3e,
-  0xb4, 0xa2, 0x41, 0x15, 0x49, 0x26, 0xdf, 0x22, 0xb1, 0xb8, 0x25, 0x31,
-  0x33, 0x94, 0xec, 0x70, 0xc8, 0xa6, 0xee, 0x32, 0xe6, 0xa4, 0x23, 0xf6,
-  0x2f, 0x16, 0x8a, 0x95, 0x44, 0xec, 0x8f, 0x2d, 0xcb, 0x28, 0x3d, 0x89,
-  0x9a, 0xcc, 0xec, 0x75, 0x33, 0x1c, 0x3d, 0x1f, 0xc6, 0x2d, 0xcb, 0x1d,
-  0x90, 0x95, 0x98, 0xd7, 0xef, 0xb5, 0x43, 0x97, 0x20, 0x6f, 0x9b, 0x35,
-  0x90, 0x7c, 0xab, 0x18, 0xe9, 0x3d, 0x66, 0xd7, 0x0d, 0xd2, 0x44, 0x4b,
-  0x4d, 0xbe, 0x75, 0xee, 0x69, 0x30, 0xbc, 0x5a, 0xfd, 0x5d, 0x9e, 0x5d,
-  0xcd, 0x35, 0x48, 0xf2, 0xe5, 0x12, 0xc5, 0x94, 0xa6, 0x8a, 0x26, 0x8f,
-  0xa0, 0x5d, 0xd7, 0xa0, 0x5d, 0x22, 0x7e, 0xb1, 0x68, 0x55, 0xdf, 0xbe,
-  0x3f, 0xb9, 0x38, 0x3e, 0x0b, 0xdd, 0x8f, 0xd1, 0xf7, 0xc7, 0x17, 0xdf,
-  0x90, 0xd4, 0x3e, 0x3e, 0x7e, 0xf7, 0xf5, 0x09, 0xfb, 0x78, 0xde, 0xbe,
-  0x3d, 0x78, 0xc7, 0xe8, 0x02, 0xef, 0x10, 0xd9, 0x78, 0x00, 0xc5, 0x81,
-  0xd9, 0x11, 0x2d, 0x31, 0xd3, 0x0e, 0xe7, 0x9d, 0x0f, 0xda, 0xae, 0x86,
-  0xc6, 0xf1, 0x93, 0xfa, 0xca, 0x59, 0x7d, 0x91, 0x36, 0x50, 0x2d, 0x1b,
-  0x9a, 0xc1, 0x3d, 0x1b, 0x76, 0x70, 0x6c, 0x59, 0xd9, 0xe2, 0x85, 0x6e,
-  0xc2, 0xc8, 0x23, 0xc7, 0x51, 0x24, 0x74, 0xb8, 0xd1, 0xe5, 0xee, 0xf6,
-  0xee, 0x0b, 0xec, 0xa8, 0x03, 0xa1, 0x85, 0x1e, 0x43, 0x32, 0x53, 0xa6,
-  0x7a, 0x8d, 0xdc, 0x97, 0xf5, 0x9c, 0x03, 0xea, 0x11, 0x43, 0x42, 0x1c,
-  0x41, 0xee, 0x2d, 0x82, 0xac, 0x71, 0xb2, 0xd2, 0x7c, 0x7e, 0x12, 0x5e,
-  0xa8, 0xa3, 0x5a, 0xf5, 0x31, 0x0b, 0x0f, 0xbc, 0xca, 0x13, 0x7f, 0x72,
-  0x87, 0xa7, 0xd6, 0x8c, 0x99, 0x7f, 0xa1, 0x86, 0xc9, 0xe5, 0x32, 0x64,
-  0xbe, 0x36, 0xa4, 0x2d, 0xd9, 0x72, 0x15, 0x87, 0xd4, 0x7c, 0xb6, 0x2f,
-  0x62, 0xa5, 0x83, 0x59, 0xb6, 0x42, 0x7d, 0xd4, 0x9c, 0xb5, 0xac, 0xa1,
-  0x28, 0x88, 0xc7, 0xd6, 0xb4, 0x26, 0x9d, 0x33, 0xb8, 0xa5, 0x3d, 0x56,
-  0xcb, 0xca, 0x96, 0xfb, 0xee, 0xd4, 0x4c, 0x7b, 0x96, 0xd6, 0xe6, 0x4a,
-  0xc0, 0x79, 0xcf, 0x29, 0x8a, 0xac, 0xe5, 0xf9, 0x28, 0xf9, 0x98, 0xb0,
-  0x93, 0x93, 0x7f, 0xfd, 0xcb, 0xf2, 0x2a, 0xcc, 0x78, 0x93, 0x12, 0xd3,
-  0xcb, 0xae, 0x9d, 0x55, 0x4c, 0x67, 0x11, 0x8b, 0xb4, 0xac, 0x5d, 0x6d,
-  0x04, 0x5a, 0xab, 0x6e, 0x77, 0x5d, 0x87, 0xfa, 0xfd, 0x5e, 0xfb, 0xfb,
-  0x3d, 0x31, 0x3b, 0x1e, 0x9f, 0xdd, 0x3e, 0x77, 0x58, 0xa8, 0x92, 0xc7,
-  0x1d, 0x8a, 0x6f, 0x26, 0x14, 0x30, 0x85, 0xf1, 0xa3, 0x72, 0xe7, 0xc4,
-  0xc2, 0x13, 0xc5, 0xf6, 0xcf, 0x11, 0x64, 0xab, 0x02, 0xf9, 0xa9, 0x78,
-  0x04, 0x66, 0x62, 0x09, 0xfb, 0x45, 0x90, 0x1d, 0xf8, 0x14, 0x5f, 0x57,
-  0xd4, 0x20, 0x7d, 0xff, 0xd4, 0xc5, 0xe2, 0x7b, 0x9e, 0x86, 0x72, 0x6d,
-  0x9a, 0x0d, 0x35, 0x4c, 0x97, 0xb7, 0x56, 0xef, 0x97, 0x7e, 0x7d, 0xee,
-  0x4a, 0xf5, 0x94, 0x35, 0x1f, 0x55, 0x0d, 0x77, 0xd8, 0x98, 0x3f, 0x06,
-  0x87, 0xb0, 0x48, 0xe6, 0x0c, 0x5e, 0xc9, 0x68, 0x8c, 0x2b, 0xa9, 0x07,
-  0x64, 0x07, 0x05, 0x4b, 0x61, 0x60, 0x9e, 0x23, 0x33, 0x16, 0xfc, 0x28,
-  0x60, 0x2e, 0x21, 0xe6, 0xbf, 0xee, 0xfa, 0x8f, 0x7b, 0x3b, 0x3b, 0xbb,
-  0xfb, 0xbb, 0x9f, 0xbf, 0xd8, 0xd9, 0xdf, 0xdd, 0xdd, 0xdd, 0xdb, 0xdf,
-  0xdd, 0xdf, 0xdf, 0xdb, 0xf9, 0x79, 0x9b, 0xed, 0x47, 0xb7, 0x69, 0x72,
-  0x67, 0x8e, 0x29, 0xc9, 0xc5, 0x03, 0x59, 0x4b, 0xdd, 0x76, 0xd5, 0xe0,
-  0x55, 0xcf, 0x35, 0xc9, 0xc7, 0xa1, 0x4a, 0x48, 0xc8, 0xbc, 0x80, 0xc9,
-  0x2d, 0x7d, 0xa6, 0x29, 0xce, 0x60, 0x00, 0x78, 0x8d, 0x51, 0xfd, 0x75,
-  0xc5, 0x33, 0x9d, 0xb0, 0x38, 0x00, 0x99, 0xa6, 0x74, 0x79, 0x7d, 0x57,
-  0xf3, 0x7c, 0x32, 0x41, 0xe6, 0x82, 0x4b, 0x6d, 0x1d, 0x45, 0x8c, 0xaa,
-  0x7a, 0x23, 0x24, 0xa1, 0x9e, 0x03, 0x04, 0x15, 0xca, 0x41, 0xf7, 0xab,
-  0x23, 0x82, 0x97, 0x06, 0x52, 0x4f, 0x73, 0xae, 0x30, 0x30, 0x63, 0xa6,
-  0x44, 0x8b, 0x54, 0xb8, 0x94, 0x97, 0xe8, 0x32, 0xf9, 0x7c, 0x67, 0x7f,
-  0x9f, 0x8b, 0x80, 0xfc, 0x7e, 0x77, 0xa0, 0xf1, 0xa0, 0x61, 0x90, 0xfb,
-  0xc0, 0x5d, 0x4f, 0xd2, 0x06, 0xab, 0x1f, 0xe1, 0x3c, 0xb3, 0xd5, 0x22,
-  0x29, 0x48, 0x11, 0xe1, 0x32, 0xb2, 0x08, 0x88, 0x84, 0xd1, 0x5b, 0xd0,
-  0xd6, 0x00, 0xc8, 0xd2, 0x08, 0xc6, 0xe7, 0x1b, 0x41, 0x50, 0x63, 0x5d,
-  0x12, 0xba, 0xc0, 0x05, 0xf9, 0x29, 0xba, 0xb6, 0x51, 0x08, 0x07, 0x76,
-  0x7c, 0x49, 0x65, 0x91, 0x24, 0x1e, 0xb9, 0x6f, 0x95, 0x33, 0xe0, 0x70,
-  0x65, 0x52, 0xdc, 0x94, 0x1f, 0x17, 0x19, 0x1e, 0x16, 0x93, 0x40, 0xb8,
-  0xd5, 0xfc, 0x9d, 0x1f, 0x83, 0xc9, 0xee, 0x3d, 0xdb, 0xfd, 0x59, 0xc2,
-  0x15, 0xf9, 0x40, 0xf8, 0x55, 0xd3, 0xc2, 0x70, 0xb3, 0x30, 0x43, 0xc3,
-  0x08, 0x69, 0x33, 0x19, 0x5d, 0x8d, 0x4c, 0xaa, 0x50, 0x6b, 0xe3, 0x20,
-  0x0c, 0x1a, 0x17, 0xc4, 0x72, 0x29, 0x59, 0x0c, 0x3d, 0xcd, 0x0c, 0x4a,
-  0x66, 0x10, 0x16, 0x63, 0x66, 0xad, 0xc2, 0x0f, 0xdd, 0x30, 0x47, 0x17,
-  0x07, 0x74, 0x79, 0x7c, 0xdb, 0x56, 0xf4, 0xdf, 0x26, 0xa4, 0x95, 0xf3,
-  0x66, 0x6f, 0xe2, 0x3c, 0xdc, 0x3a, 0x9c, 0x60, 0x5e, 0xbb, 0xa7, 0xd1,
-  0x26, 0xfb, 0x2c, 0x9e, 0x7d, 0xfe, 0xec, 0xe9, 0x96, 0x14, 0x65, 0x90,
-  0xd7, 0x12, 0xce, 0x0f, 0x81, 0x55, 0x52, 0xc1, 0x69, 0xd8, 0x9c, 0xec,
-  0x58, 0xd2, 0xfb, 0xf3, 0x63, 0x39, 0xd2, 0xd7, 0x82, 0x21, 0x20, 0x4a,
-  0x6f, 0x13, 0x57, 0x0e, 0xf7, 0x6d, 0x20, 0x64, 0x2c, 0x52, 0xc6, 0x3c,
-  0x44, 0xee, 0x35, 0x5f, 0x8c, 0x2e, 0xf7, 0x1f, 0x37, 0x2c, 0x1d, 0xd0,
-  0x1c, 0xa5, 0x0a, 0xb5, 0x02, 0x14, 0x06, 0x03, 0x90, 0x44, 0xc6, 0x68,
-  0x55, 0x3a, 0x73, 0x1a, 0x18, 0xeb, 0x41, 0xc2, 0x8f, 0x84, 0xfb, 0x37,
-  0x70, 0xb9, 0xb7, 0xc4, 0xe3, 0x0f, 0xa1, 0x90, 0xc9, 0x90, 0x1e, 0xb4,
-  0xd0, 0x51, 0x1e, 0x71, 0x2d, 0x1b, 0xcd, 0x4b, 0x9b, 0x01, 0xa6, 0x93,
-  0xc1, 0xb9, 0x28, 0x2b, 0x72, 0x4b, 0x28, 0xee, 0xec, 0x0a, 0x96, 0xc5,
-  0xb4, 0x66, 0xf2, 0xd1, 0x5c, 0x7a, 0xe4, 0xb4, 0x23, 0xe4, 0x78, 0x41,
-  0xd7, 0x51, 0x71, 0xaf, 0x12, 0x36, 0xd4, 0x04, 0x57, 0x59, 0xad, 0x11,
-  0x10, 0x20, 0xa8, 0x11, 0x61, 0x24, 0xbd, 0x03, 0x4d, 0x31, 0xa5, 0xb9,
-  0x36, 0x80, 0x1a, 0xdb, 0x1f, 0x2e, 0xec, 0xab, 0x20, 0x5e, 0x26, 0x4c,
-  0x2f, 0xb3, 0xdf, 0xed, 0xb9, 0x20, 0x94, 0x32, 0x6e, 0x4e, 0x6c, 0xcd,
-  0xd0, 0x04, 0x5b, 0x13, 0xe1, 0x53, 0x4e, 0xfb, 0xd9, 0xc4, 0x48, 0xb6,
-  0xb7, 0xb7, 0xd6, 0x8c, 0x46, 0xbf, 0xee, 0xea, 0xfd, 0x0c, 0x98, 0x24,
-  0x41, 0x46, 0x27, 0xed, 0x79, 0xbd, 0x71, 0x5e, 0xda, 0xb4, 0xe4, 0x9d,
-  0x9c, 0x69, 0x5c, 0xac, 0x98, 0x51, 0x4d, 0xbd, 0x92, 0xc1, 0x1b, 0xf3,
-  0xaa, 0x4f, 0x42, 0x43, 0x71, 0x0c, 0x23, 0x4a, 0xea, 0x4b, 0x8b, 0x7b,
-  0x73, 0x14, 0x1d, 0x30, 0x35, 0xd4, 0x3a, 0x0e, 0x86, 0x6c, 0xf6, 0x5c,
-  0x43, 0x40, 0x37, 0x21, 0xd6, 0x99, 0xf3, 0x06, 0xc1, 0x97, 0x26, 0xe6,
-  0x19, 0x24, 0x80, 0x33, 0xf6, 0x4e, 0x12, 0x81, 0x3f, 0x71, 0x9c, 0x33,
-  0x40, 0x36, 0x4e, 0xb3, 0x5a, 0xc9, 0x50, 0x6d, 0x04, 0x8e, 0x6e, 0x37,
-  0x09, 0x80, 0x26, 0x16, 0x06, 0xc6, 0x1b, 0x96, 0x11, 0x04, 0x02, 0x81,
-  0x06, 0xb5, 0x8b, 0x60, 0xed, 0x88, 0x58, 0xbc, 0xad, 0x13, 0x21, 0xaf,
-  0xda, 0x7a, 0x0c, 0x84, 0xe2, 0x25, 0x88, 0x41, 0xe2, 0x6d, 0xe9, 0x90,
-  0x30, 0xc3, 0x38, 0x38, 0x3e, 0xe1, 0xa8, 0xb8, 0x13, 0x52, 0xf1, 0xc6,
-  0x26, 0x2a, 0x21, 0x4a, 0x14, 0xf1, 0x7a, 0x59, 0xca, 0xe2, 0xfa, 0xc0,
-  0x95, 0x1e, 0xb1, 0x64, 0x29, 0xe8, 0x2d, 0xec, 0xdc, 0x13, 0xd5, 0x5f,
-  0x31, 0x02, 0x69, 0xb7, 0x48, 0x5e, 0x2a, 0xc5, 0x68, 0x0b, 0x28, 0x5e,
-  0x06, 0xa9, 0x87, 0x23, 0x15, 0x2a, 0xb5, 0xb0, 0x69, 0x54, 0x3e, 0x2a,
-  0x92, 0x79, 0x72, 0xab, 0xd6, 0x55, 0x01, 0x36, 0xfd, 0x5a, 0x7d, 0x98,
-  0x52, 0xfa, 0xb4, 0xf2, 0xae, 0xd8, 0x9a, 0x9b, 0x94, 0xfb, 0xdc, 0x16,
-  0x4c, 0x18, 0x0f, 0xf5, 0xc1, 0xdd, 0x7b, 0x34, 0x7e, 0x73, 0x19, 0xf3,
-  0x7b, 0x43, 0xd6, 0x71, 0x35, 0xb4, 0xf5, 0x7d, 0xa9, 0x68, 0x0e, 0xcd,
-  0x58, 0x71, 0xb1, 0x15, 0x5a, 0xf1, 0x3c, 0x31, 0xbe, 0x0f, 0x0c, 0x2f,
-  0x59, 0x3c, 0x06, 0x7c, 0xf1, 0x0c, 0xd8, 0x50, 0x2b, 0xc5, 0xe0, 0x49,
-  0x21, 0xe3, 0xca, 0x18, 0x03, 0x49, 0x1c, 0x05, 0x6d, 0xe4, 0x73, 0xfa,
-  0x13, 0xe1, 0x54, 0x12, 0x60, 0x49, 0xcf, 0x32, 0xde, 0x6b, 0x10, 0xd1,
-  0x4a, 0x7f, 0x4a, 0x32, 0x84, 0xfe, 0x85, 0xa6, 0x8a, 0x15, 0x60, 0x85,
-  0x07, 0x72, 0x19, 0xb2, 0xd3, 0xb1, 0x9a, 0x8e, 0xdc, 0xe8, 0xd5, 0xe7,
-  0x2f, 0xe3, 0x7f, 0x6d, 0x2e, 0x69, 0x13, 0x43, 0xf2, 0xc2, 0x56, 0x57,
-  0x76, 0x61, 0x22, 0xb5, 0x0e, 0xbf, 0x5a, 0xb1, 0x33, 0xcc, 0x55, 0xf2,
-  0xe1, 0x51, 0x2c, 0xf8, 0x2a, 0x4a, 0xa4, 0xac, 0xa8, 0x6b, 0x9c, 0x35,
-  0xba, 0x15, 0xed, 0xae, 0xb4, 0x7e, 0x92, 0xdf, 0x71, 0x4d, 0xd4, 0xcb,
-  0xcb, 0x74, 0xca, 0x85, 0x6e, 0x3c, 0x7c, 0x30, 0xb3, 0x78, 0x79, 0x70,
-  0x61, 0x65, 0x98, 0x68, 0x6e, 0xd1, 0x72, 0x35, 0x99, 0xd3, 0x5d, 0x6d,
-  0xd1, 0xec, 0x74, 0xa8, 0xb0, 0x4a, 0xa4, 0x6c, 0xa1, 0x39, 0xf1, 0xe5,
-  0x43, 0xdf, 0x6c, 0x44, 0x50, 0x6b, 0xa1, 0x78, 0x96, 0xc0, 0x17, 0x28,
-  0x0e, 0xcb, 0x61, 0xc6, 0x8b, 0x3c, 0xb3, 0x64, 0x98, 0x55, 0x29, 0x60,
-  0x92, 0x56, 0x55, 0x7e, 0x43, 0x3c, 0x13, 0xe9, 0x5c, 0xd1, 0xdb, 0x55,
-  0x33, 0xc7, 0x1b, 0xe1, 0x64, 0x66, 0xc3, 0xe5, 0xf5, 0xd2, 0x76, 0xda,
-  0xe4, 0x21, 0x11, 0x96, 0x34, 0xfd, 0x02, 0x27, 0xef, 0xec, 0x9b, 0xb3,
-  0x51, 0x74, 0xc4, 0x2d, 0xc9, 0x98, 0x54, 0xce, 0x85, 0x89, 0x86, 0xbe,
-  0xa3, 0xc9, 0x5e, 0xf1, 0xfd, 0x75, 0x5a, 0xf0, 0x5f, 0x68, 0x4d, 0xbf,
-  0x14, 0xab, 0x2c, 0xbe, 0xad, 0xf7, 0x4a, 0x0d, 0x59, 0x90, 0xf5, 0x19,
-  0x7e, 0xa7, 0xa3, 0x42, 0xd2, 0x97, 0xdb, 0x26, 0xdf, 0x43, 0x5e, 0xd4,
-  0xa0, 0x77, 0xe4, 0xcd, 0x88, 0x84, 0x32, 0x88, 0x56, 0xcb, 0x7b, 0xec,
-  0x5f, 0xc0, 0x1b, 0x45, 0xfc, 0x94, 0x06, 0x02, 0xd2, 0x52, 0xf2, 0x73,
-  0xe1, 0x7b, 0x72, 0xae, 0x0a, 0x01, 0x9d, 0x29, 0x12, 0x0d, 0x76, 0xcc,
-  0xd5, 0x4b, 0x2a, 0x06, 0x8d, 0x32, 0x69, 0x1c, 0xd7, 0x40, 0x7d, 0xb3,
-  0x2f, 0x58, 0xeb, 0xe6, 0xb1, 0x90, 0xd0, 0x42, 0x5b, 0x30, 0xda, 0xf8,
-  0xbf, 0x01, 0x87, 0xa5, 0x00, 0x5a, 0xec, 0x78, 0x02, 0x00,
+  0x6b, 0x7b, 0x1b, 0x47, 0x92, 0x26, 0xfa, 0x9d, 0xbf, 0xa2, 0x1a, 0x7d,
+  0x7a, 0x48, 0x76, 0x03, 0xe0, 0x45, 0x17, 0x5b, 0x6c, 0xc9, 0x63, 0x9a,
+  0xa2, 0x6c, 0x8e, 0x29, 0x91, 0x4b, 0x50, 0xbe, 0xac, 0xed, 0x47, 0x4f,
+  0x01, 0x28, 0x92, 0xd5, 0x04, 0xaa, 0xd0, 0x55, 0x05, 0x5e, 0x7a, 0xa6,
+  0xf7, 0xb7, 0x9f, 0x8c, 0x37, 0x22, 0x32, 0xb3, 0x2a, 0x13, 0xa4, 0xec,
+  0xb1, 0xfa, 0xd9, 0x3d, 0x67, 0x3d, 0x3d, 0x22, 0x09, 0x54, 0xe5, 0x35,
+  0x32, 0x32, 0xae, 0x6f, 0x24, 0xc9, 0x63, 0xff, 0x7d, 0xc0, 0xff, 0x7f,
+  0x30, 0xff, 0x99, 0x9f, 0x6b, 0x49, 0x72, 0x5a, 0x95, 0x7f, 0xcb, 0x26,
+  0x4d, 0xfc, 0xd9, 0x0f, 0x1f, 0xfe, 0x2b, 0xe1, 0xff, 0x33, 0xef, 0xfc,
+  0x6c, 0x7e, 0xae, 0x3d, 0xd8, 0xf6, 0x56, 0xe2, 0x5e, 0xf8, 0xaf, 0x0f,
+  0x9b, 0xc9, 0x63, 0x2f, 0xfc, 0x57, 0xb2, 0x81, 0x17, 0x3e, 0x48, 0x0f,
+  0x2f, 0xe9, 0xf7, 0x0f, 0x1f, 0x1e, 0xee, 0xe4, 0x67, 0x1a, 0x15, 0xfd,
+  0xb3, 0x45, 0xef, 0xfd, 0xfc, 0x81, 0x7e, 0x35, 0x9f, 0xac, 0xad, 0xbd,
+  0xdb, 0x7f, 0x7b, 0xa8, 0xaf, 0x4e, 0x96, 0xd5, 0x2c, 0x19, 0x24, 0x4d,
+  0x95, 0x16, 0xf5, 0x45, 0x56, 0x25, 0x69, 0xf2, 0xfe, 0xec, 0x78, 0x6d,
+  0x6d, 0xf4, 0xe3, 0xbb, 0x93, 0xd3, 0xd1, 0xd1, 0xa8, 0xf5, 0xd8, 0x4f,
+  0xe5, 0xa2, 0xc9, 0xcb, 0xa2, 0xfe, 0x25, 0xf9, 0xc9, 0x3c, 0x34, 0x1c,
+  0x0e, 0x7f, 0x59, 0x5b, 0x7b, 0x7d, 0x38, 0x3a, 0x38, 0x3b, 0x3a, 0x3d,
+  0x3f, 0x3a, 0x79, 0xd7, 0x7a, 0x36, 0xc9, 0xeb, 0xc4, 0x34, 0xd6, 0x94,
+  0xe5, 0xcc, 0xfc, 0xe3, 0xda, 0x9f, 0xa6, 0x4d, 0x9a, 0x5c, 0x54, 0xe5,
+  0x3c, 0x29, 0x2b, 0xfa, 0x22, 0x4d, 0xea, 0xac, 0xba, 0xc9, 0xaa, 0x7e,
+  0xb2, 0xac, 0xf3, 0xe2, 0x32, 0x29, 0x8b, 0x2c, 0x29, 0x2f, 0x92, 0xe6,
+  0x2a, 0xd3, 0xe6, 0xea, 0xe5, 0x62, 0x51, 0x56, 0x4d, 0x36, 0x4d, 0x16,
+  0x55, 0xd9, 0x94, 0x93, 0x72, 0x56, 0x27, 0x1b, 0xaf, 0x8f, 0x0e, 0xce,
+  0xfb, 0xc9, 0x9b, 0xa3, 0xe3, 0x43, 0xf3, 0xef, 0xf9, 0x29, 0xfe, 0x19,
+  0xf5, 0x93, 0xaf, 0x4f, 0x4e, 0xbf, 0x39, 0x3c, 0xeb, 0x27, 0xdf, 0x9c,
+  0xd3, 0x67, 0xf4, 0xaf, 0xf9, 0x30, 0x39, 0x7a, 0xbb, 0x7f, 0xda, 0xd7,
+  0xe6, 0xe8, 0x0f, 0xfa, 0xf0, 0xf8, 0xb5, 0xf9, 0x90, 0x7f, 0xd0, 0x9f,
+  0xa7, 0x27, 0xa7, 0x4f, 0xe4, 0x07, 0xfd, 0x79, 0x76, 0xfe, 0xd6, 0x7c,
+  0x7b, 0x76, 0x3e, 0x32, 0xff, 0x8e, 0x0e, 0xe8, 0x1f, 0xf4, 0x32, 0x7a,
+  0xfb, 0x15, 0xfe, 0x19, 0xd9, 0xe6, 0x46, 0x6f, 0xf9, 0x73, 0xf4, 0x74,
+  0x7e, 0x78, 0xfc, 0xee, 0xf0, 0x3c, 0x49, 0x8b, 0x69, 0x72, 0x6e, 0x9e,
+  0xdf, 0x1c, 0x26, 0xe7, 0x57, 0x59, 0x32, 0x29, 0xe7, 0x73, 0xfa, 0xc8,
+  0xac, 0xc8, 0x34, 0xab, 0xf3, 0xcb, 0xc2, 0x4c, 0xc5, 0xcc, 0xfc, 0xb6,
+  0xac, 0xae, 0x93, 0xe4, 0x36, 0x6f, 0xae, 0xca, 0x65, 0xa3, 0xcd, 0x2d,
+  0xcd, 0x6a, 0x24, 0x79, 0xd1, 0x64, 0x55, 0x3a, 0xa1, 0xb5, 0x1e, 0xae,
+  0xb5, 0x56, 0xb5, 0xbc, 0x30, 0x6b, 0x58, 0x9b, 0x45, 0x1b, 0x2f, 0xeb,
+  0x59, 0x99, 0x4e, 0x69, 0xa9, 0xcc, 0x2b, 0x17, 0x4b, 0xb3, 0xc8, 0x55,
+  0x3e, 0xb9, 0xae, 0x93, 0x59, 0x7e, 0x9d, 0xd1, 0x42, 0xdd, 0xdd, 0xeb,
+  0xc2, 0xf5, 0xb9, 0xd1, 0x74, 0x69, 0xd6, 0xb4, 0x18, 0x68, 0x73, 0x4d,
+  0x3e, 0x49, 0xa9, 0x03, 0xac, 0x5c, 0xb2, 0x5c, 0x50, 0x6b, 0xbc, 0x62,
+  0xc9, 0xa2, 0xac, 0xcd, 0x4b, 0xa3, 0xd1, 0xb1, 0x19, 0x79, 0x51, 0x64,
+  0x18, 0x47, 0xdd, 0x37, 0x7f, 0x94, 0xd7, 0x79, 0x66, 0x7e, 0xb9, 0xc8,
+  0x67, 0x59, 0xc2, 0x3b, 0x6a, 0x9b, 0xa3, 0xad, 0x4d, 0xaa, 0xac, 0x5e,
+  0xce, 0x33, 0xb3, 0x7a, 0x6f, 0xb3, 0x26, 0x9d, 0xe5, 0xc5, 0xb5, 0xf9,
+  0x95, 0x26, 0x3e, 0x2f, 0xab, 0x6c, 0x98, 0xec, 0xd7, 0xc9, 0x7d, 0xb9,
+  0x34, 0x13, 0x9e, 0xcd, 0xcc, 0x9e, 0x67, 0xc9, 0x38, 0x9b, 0x95, 0xb7,
+  0x7d, 0xda, 0xe9, 0xa4, 0x58, 0xce, 0xc7, 0xa6, 0x81, 0xf2, 0xc2, 0x35,
+  0x97, 0x36, 0x4b, 0xd3, 0x1c, 0x3f, 0x3d, 0x4f, 0xcd, 0x9c, 0xcc, 0xbb,
+  0x55, 0x72, 0x95, 0x99, 0x39, 0xd7, 0x8b, 0xbc, 0xf8, 0x43, 0x7b, 0x5d,
+  0xcc, 0xd2, 0x2e, 0xca, 0xdb, 0xac, 0x32, 0x2b, 0x3b, 0xbe, 0x4f, 0xcc,
+  0x22, 0x8c, 0x99, 0x08, 0x2f, 0x0c, 0x91, 0x25, 0xa9, 0x69, 0xc2, 0x12,
+  0xe0, 0xa0, 0xca, 0x66, 0x29, 0x11, 0x93, 0xed, 0x63, 0x68, 0x36, 0x31,
+  0xb3, 0xd4, 0x26, 0xaf, 0x6e, 0x3c, 0xd9, 0xc4, 0xcb, 0x53, 0x33, 0x93,
+  0x7c, 0x56, 0x9b, 0x6d, 0xa0, 0x63, 0x21, 0xcf, 0xd0, 0xa6, 0xd2, 0x31,
+  0x31, 0xb4, 0x79, 0x5f, 0x34, 0xe9, 0x1d, 0xba, 0x17, 0xda, 0x1c, 0x4c,
+  0xb3, 0x45, 0x56, 0x4c, 0xb3, 0xa2, 0x19, 0x26, 0x3f, 0x96, 0xcb, 0x75,
+  0xd3, 0xf7, 0x45, 0x6e, 0xd6, 0x20, 0x95, 0xa6, 0x4c, 0xcf, 0x86, 0x08,
+  0x26, 0x55, 0xbe, 0xf0, 0xb6, 0xa2, 0x2c, 0xcc, 0x9e, 0x27, 0x67, 0x6f,
+  0x0e, 0x92, 0x27, 0x2f, 0x3e, 0x7f, 0xee, 0xf6, 0xdc, 0x34, 0x90, 0x4c,
+  0xd2, 0xc2, 0xcc, 0x38, 0x9b, 0xe4, 0x17, 0xf7, 0xc9, 0x7c, 0x39, 0x6b,
+  0xf2, 0x85, 0x59, 0x7d, 0xd3, 0x79, 0x4d, 0x07, 0x68, 0x91, 0x56, 0x4d,
+  0x4d, 0x44, 0x80, 0x0f, 0x30, 0xf7, 0xdb, 0x2a, 0x6f, 0xe8, 0x20, 0xe1,
+  0x3b, 0x33, 0xc2, 0xac, 0xa9, 0xb5, 0x39, 0xa2, 0x35, 0xd3, 0xcf, 0xd8,
+  0xd0, 0x96, 0x59, 0xda, 0xb4, 0x36, 0x9d, 0xee, 0xad, 0x39, 0x1e, 0x72,
+  0xd5, 0x34, 0x8b, 0xbd, 0xad, 0xad, 0x3a, 0x6f, 0xb2, 0xe1, 0x7f, 0x9a,
+  0x73, 0xd8, 0x6f, 0x6e, 0xcb, 0x7e, 0x73, 0x55, 0x65, 0xd9, 0x3f, 0x87,
+  0x86, 0x86, 0xed, 0x93, 0xa6, 0xdf, 0x7b, 0x19, 0xd8, 0x65, 0xd6, 0x98,
+  0x1e, 0xfe, 0xbe, 0xcc, 0x0a, 0x6a, 0xd1, 0x8c, 0x23, 0x9d, 0x2d, 0xae,
+  0x52, 0xb3, 0x9d, 0x99, 0xa1, 0x46, 0x3a, 0xd9, 0x86, 0x60, 0x68, 0x54,
+  0x7c, 0xb6, 0x7f, 0xfa, 0x25, 0xec, 0xf4, 0x02, 0x7d, 0x9a, 0x7f, 0x87,
+  0xf2, 0x56, 0x6a, 0x56, 0xdb, 0xf4, 0xb6, 0x45, 0x54, 0xf6, 0xd3, 0xce,
+  0x60, 0x67, 0x7b, 0xfb, 0x97, 0x61, 0x73, 0xd7, 0x7c, 0xf4, 0x2b, 0xdb,
+  0xdb, 0xee, 0x25, 0x7a, 0x7a, 0x83, 0x66, 0x9d, 0xcc, 0x0c, 0xe1, 0xd0,
+  0x10, 0xfe, 0x91, 0x55, 0x65, 0xbd, 0x19, 0x6d, 0x6c, 0x96, 0x35, 0xe6,
+  0xd8, 0x79, 0x2d, 0xa5, 0x83, 0x7f, 0xb4, 0xbb, 0x7e, 0x97, 0xd5, 0xa0,
+  0x1c, 0x37, 0xe3, 0x24, 0xad, 0x0c, 0xf5, 0x96, 0x8d, 0x63, 0x52, 0x7d,
+  0x73, 0x34, 0x1b, 0xbb, 0x3e, 0xe6, 0xe4, 0x99, 0xa7, 0x0d, 0x7b, 0x4b,
+  0x67, 0xc4, 0xd9, 0xea, 0xa4, 0xc8, 0xee, 0xec, 0x59, 0x37, 0x3c, 0x20,
+  0x4b, 0x27, 0x57, 0x49, 0x69, 0x8e, 0x40, 0x15, 0xd9, 0x88, 0xb4, 0xb8,
+  0x1f, 0x96, 0xd5, 0xe5, 0x56, 0x5a, 0x4d, 0xae, 0xf2, 0x1b, 0xb3, 0x18,
+  0x2f, 0x5e, 0x3c, 0x1f, 0x98, 0x7f, 0x5e, 0xfc, 0xb2, 0x75, 0x53, 0xce,
+  0xcc, 0xda, 0x3c, 0xfd, 0x65, 0x8b, 0x36, 0xf9, 0x3f, 0xd3, 0xfe, 0xb8,
+  0x3f, 0xf9, 0xe7, 0xf0, 0xaa, 0x99, 0xcf, 0x56, 0x92, 0x8e, 0x69, 0x2c,
+  0x49, 0xe7, 0xe5, 0xb2, 0x68, 0x2c, 0xb9, 0x18, 0xaa, 0x6b, 0x3c, 0xf6,
+  0x64, 0x0e, 0xac, 0x39, 0xa5, 0x44, 0xdc, 0x44, 0x45, 0x74, 0xee, 0xcc,
+  0x11, 0x75, 0x07, 0xb2, 0x99, 0x5c, 0x99, 0xb9, 0x1b, 0xf2, 0x49, 0x65,
+  0xfe, 0x4d, 0x9e, 0xd2, 0xd1, 0x34, 0x1c, 0x82, 0x38, 0x16, 0x9a, 0xe2,
+  0xce, 0x72, 0xf3, 0x5c, 0x59, 0x4d, 0xb3, 0xaa, 0x4d, 0xc8, 0x18, 0x8e,
+  0x1b, 0x4f, 0x62, 0xd6, 0x72, 0x61, 0x3a, 0x5f, 0x12, 0xb3, 0xc3, 0x59,
+  0xa3, 0x16, 0xcc, 0x29, 0xbd, 0x34, 0xcb, 0x64, 0x96, 0x86, 0x48, 0x8b,
+  0x56, 0xee, 0x3e, 0x79, 0x67, 0xf6, 0x8f, 0x39, 0x84, 0x47, 0x81, 0xbc,
+  0x5b, 0x91, 0x55, 0xbb, 0xbd, 0xbd, 0x5d, 0x4d, 0x4a, 0x7b, 0x3b, 0x01,
+  0x35, 0x79, 0xaf, 0xc5, 0x28, 0x60, 0x6f, 0xb7, 0xfd, 0xc2, 0xf7, 0x86,
+  0x89, 0x3a, 0x72, 0x36, 0x03, 0xf9, 0xcf, 0x7f, 0x7a, 0xf4, 0x70, 0x4b,
+  0xdf, 0xe6, 0xc5, 0x4d, 0x79, 0x6d, 0xd6, 0x00, 0xb7, 0x5c, 0xda, 0x5a,
+  0xdf, 0x84, 0xf8, 0xc4, 0x7c, 0xd1, 0xd8, 0xeb, 0x83, 0x08, 0xc5, 0x7c,
+  0x34, 0x4e, 0xc7, 0xb3, 0xfb, 0xe4, 0x2a, 0xbd, 0xc9, 0x68, 0xea, 0x0b,
+  0x43, 0x41, 0xb4, 0x18, 0x86, 0xad, 0xcf, 0xc0, 0x67, 0xe4, 0xe0, 0x4e,
+  0xcb, 0xe5, 0xd8, 0x1c, 0xfe, 0xbf, 0x2f, 0xcb, 0x86, 0xd7, 0x28, 0xbd,
+  0x29, 0xf3, 0x69, 0xeb, 0xae, 0xbc, 0xca, 0x88, 0xe1, 0x50, 0xc7, 0xb8,
+  0x44, 0x0c, 0xc3, 0xa3, 0x91, 0xe2, 0x08, 0xe4, 0x0d, 0x5d, 0x47, 0x86,
+  0x55, 0x99, 0x65, 0x29, 0x93, 0xe4, 0xb2, 0x24, 0xfa, 0x05, 0x83, 0x04,
+  0x01, 0x9a, 0xfd, 0xb9, 0x4a, 0xe9, 0xd6, 0x31, 0x2b, 0x60, 0x29, 0xb4,
+  0xca, 0xc0, 0x2b, 0xb1, 0x69, 0xe9, 0xac, 0xcf, 0xb7, 0x0b, 0xbd, 0x93,
+  0xdd, 0xa5, 0x73, 0x62, 0x44, 0xeb, 0xff, 0xb6, 0xde, 0x4f, 0xd6, 0xff,
+  0x7d, 0x1d, 0x7c, 0x7e, 0xfd, 0xcf, 0xeb, 0x6e, 0xcb, 0x8d, 0xb8, 0x74,
+  0x93, 0x4f, 0xe9, 0xa2, 0x30, 0x33, 0x39, 0x3a, 0xbd, 0x79, 0x9e, 0xfc,
+  0x83, 0xee, 0x76, 0xc3, 0x0b, 0xb3, 0x3b, 0xa5, 0x17, 0x9d, 0x9b, 0x79,
+  0x3b, 0x31, 0x4c, 0x31, 0x5d, 0xd0, 0x25, 0x9f, 0x55, 0x13, 0x43, 0x5c,
+  0xe9, 0xa5, 0x21, 0x27, 0x73, 0x57, 0x6a, 0x73, 0xd4, 0x3e, 0xbd, 0xc2,
+  0xd3, 0x32, 0x0c, 0x2c, 0x29, 0xd2, 0xb9, 0xa1, 0xd7, 0x63, 0x1a, 0x51,
+  0x5e, 0x84, 0x1b, 0xfa, 0xd3, 0x45, 0xf6, 0xf9, 0xf6, 0xde, 0xde, 0x93,
+  0x3f, 0xed, 0x3e, 0xcb, 0x9a, 0xab, 0xed, 0x5f, 0xb6, 0xec, 0x23, 0x47,
+  0x17, 0x58, 0x76, 0xa5, 0x44, 0x1d, 0x84, 0xb9, 0x85, 0x2d, 0x17, 0x37,
+  0xef, 0x9b, 0xdf, 0xb3, 0x8b, 0xfc, 0xae, 0xaf, 0xf2, 0x0c, 0x9f, 0x88,
+  0xd4, 0x50, 0x88, 0xd9, 0x3f, 0x3a, 0xbc, 0xda, 0xdc, 0xe5, 0x32, 0xab,
+  0xcd, 0x4a, 0xde, 0x5e, 0xa5, 0x4d, 0x62, 0x1b, 0xe0, 0x9d, 0x9d, 0xe7,
+  0x97, 0x57, 0x4d, 0x72, 0x9b, 0xd2, 0x65, 0x70, 0xd4, 0x70, 0x13, 0x74,
+  0x0b, 0x9b, 0x2b, 0xe0, 0x22, 0x35, 0xbc, 0x9c, 0xf6, 0x10, 0x57, 0xee,
+  0xd8, 0x49, 0x00, 0x8d, 0xa1, 0x78, 0xde, 0x10, 0x27, 0xee, 0x8c, 0xd3,
+  0x9a, 0xce, 0x54, 0x61, 0x8e, 0x6e, 0x63, 0xee, 0xf0, 0x25, 0xfd, 0x75,
+  0x65, 0x6e, 0x69, 0xac, 0x81, 0x0c, 0x14, 0x17, 0xd9, 0x1b, 0xda, 0x4e,
+  0xda, 0x1b, 0x7b, 0xb9, 0x98, 0x4d, 0xea, 0xcb, 0x36, 0xdb, 0x37, 0x6a,
+  0x73, 0xf6, 0x0c, 0xdf, 0xb0, 0x94, 0xd1, 0x23, 0xf6, 0xd7, 0xe3, 0x79,
+  0x62, 0x8c, 0x69, 0x4d, 0x17, 0x39, 0x5f, 0xd7, 0x66, 0xf0, 0xde, 0x64,
+  0xcd, 0xa2, 0xa5, 0xd7, 0x24, 0x32, 0x74, 0x04, 0x13, 0xbc, 0x36, 0x2d,
+  0x0d, 0x91, 0x99, 0xd1, 0x1a, 0x36, 0x49, 0x33, 0x23, 0xe6, 0x87, 0x55,
+  0x01, 0x91, 0x9b, 0x36, 0xe9, 0xc3, 0xbc, 0xa1, 0x3b, 0x00, 0x52, 0xa6,
+  0x19, 0xaf, 0x59, 0x14, 0x08, 0x8a, 0x86, 0x85, 0x7a, 0xf3, 0xc7, 0xf5,
+  0x65, 0x9e, 0x4d, 0x6e, 0x8c, 0x14, 0x61, 0x04, 0xc6, 0xcc, 0xbe, 0x85,
+  0xfb, 0x76, 0x42, 0xb2, 0xcb, 0xcc, 0x9c, 0x97, 0x49, 0x59, 0x55, 0x24,
+  0x91, 0xd3, 0x0e, 0x8e, 0x99, 0xc5, 0xcd, 0x33, 0x73, 0xcd, 0xfb, 0xcb,
+  0x99, 0xd3, 0x85, 0x63, 0x58, 0x8d, 0x91, 0x1b, 0xc0, 0x4c, 0xcc, 0xfd,
+  0x0e, 0x6e, 0x8c, 0x89, 0x63, 0x74, 0xd4, 0xf6, 0x64, 0x92, 0x2d, 0x9a,
+  0x3a, 0x36, 0x27, 0xdd, 0x70, 0x33, 0x9c, 0x2a, 0xa3, 0x95, 0xf7, 0x85,
+  0x22, 0xac, 0xab, 0xbd, 0x94, 0x21, 0x17, 0xa9, 0x9c, 0x61, 0xe4, 0xa4,
+  0xda, 0xae, 0x5a, 0x03, 0xda, 0x30, 0x1c, 0x0d, 0x6b, 0x3e, 0xa7, 0x81,
+  0xd2, 0xc3, 0x35, 0x9f, 0x54, 0x70, 0x4e, 0xda, 0x48, 0x96, 0x84, 0xb9,
+  0x5f, 0xba, 0x54, 0xcc, 0x7a, 0xda, 0xc6, 0x4d, 0xaf, 0x76, 0x4f, 0xa9,
+  0xfb, 0xda, 0xe8, 0x10, 0xe6, 0xa6, 0x9d, 0xd6, 0x57, 0x46, 0x38, 0xaa,
+  0xe5, 0x64, 0xe7, 0x73, 0x43, 0x33, 0x37, 0xb4, 0xbf, 0x8b, 0x2c, 0x9b,
+  0x0e, 0x93, 0x93, 0x0b, 0x62, 0xb0, 0x95, 0x19, 0x74, 0x83, 0xaf, 0x89,
+  0xe7, 0x9b, 0x75, 0x9b, 0x42, 0xc8, 0xb6, 0x47, 0x8b, 0x87, 0xe2, 0x31,
+  0x6f, 0xa2, 0x34, 0xb3, 0xd8, 0x09, 0x71, 0xb9, 0x59, 0xfb, 0x82, 0xc0,
+  0x39, 0x34, 0x8c, 0x9c, 0x86, 0x37, 0xce, 0x12, 0x50, 0xe2, 0x38, 0x6b,
+  0x6e, 0xb3, 0xcc, 0x36, 0x57, 0x67, 0xe6, 0x52, 0xa2, 0x4d, 0x63, 0xc9,
+  0x0c, 0xcc, 0x90, 0x96, 0xf6, 0xf4, 0xec, 0xe4, 0xeb, 0xb3, 0xc3, 0xd1,
+  0x28, 0x79, 0x7b, 0x78, 0x7e, 0x78, 0xd6, 0x5a, 0xe9, 0xa2, 0xac, 0xe6,
+  0xd8, 0xd1, 0x69, 0x5e, 0x2f, 0x66, 0xe9, 0x3d, 0x6d, 0xb5, 0x99, 0xc9,
+  0x65, 0x45, 0x27, 0x6b, 0x9e, 0xd1, 0x05, 0x31, 0x5d, 0x82, 0x93, 0x25,
+  0xa5, 0xe1, 0x0f, 0xa9, 0x48, 0xa4, 0xc4, 0x4c, 0x20, 0xc6, 0x16, 0x97,
+  0x6e, 0xa5, 0x0d, 0xc7, 0x91, 0x7b, 0x8e, 0x2e, 0x3a, 0xbb, 0x1f, 0x24,
+  0x1a, 0x42, 0xf9, 0xe8, 0xbb, 0xcf, 0x78, 0x99, 0x6a, 0xcc, 0xc9, 0xd0,
+  0x6c, 0x3e, 0x07, 0xb3, 0x33, 0x3f, 0x9d, 0x34, 0x98, 0x5d, 0x18, 0x51,
+  0xd8, 0xdc, 0x7d, 0x1d, 0xd2, 0xb0, 0xe3, 0xc4, 0xba, 0x42, 0xa7, 0x21,
+  0x25, 0xc7, 0x74, 0x6e, 0xc6, 0x3a, 0xcf, 0x0b, 0x43, 0x60, 0x86, 0x20,
+  0xe5, 0x94, 0x13, 0x25, 0x98, 0xb1, 0x5e, 0x30, 0x4f, 0x90, 0x15, 0x69,
+  0x2b, 0x4b, 0xe6, 0x65, 0xb3, 0xd9, 0x86, 0x0b, 0xda, 0xe9, 0x61, 0x50,
+  0x86, 0x34, 0x89, 0x5f, 0x8f, 0x89, 0x35, 0x91, 0xc6, 0x60, 0x44, 0xbb,
+  0x2c, 0xda, 0x9b, 0xbd, 0x4f, 0xcc, 0x1b, 0x66, 0x6c, 0xe6, 0x36, 0xa1,
+  0x0b, 0xe2, 0x2a, 0xeb, 0xae, 0xa2, 0x39, 0x44, 0xe0, 0x2d, 0xb7, 0x79,
+  0x8d, 0x43, 0x75, 0x5b, 0x2e, 0x67, 0x46, 0x3e, 0xa7, 0x07, 0x96, 0x0b,
+  0xbc, 0x60, 0xba, 0x5a, 0xb8, 0xd3, 0x33, 0xcf, 0xef, 0x68, 0xd5, 0xbb,
+  0xad, 0x98, 0xa1, 0x99, 0x3f, 0x17, 0x66, 0x13, 0x78, 0x38, 0xc3, 0x2e,
+  0x6f, 0x05, 0xd7, 0x08, 0xf6, 0x90, 0x4e, 0x0b, 0xd8, 0xdd, 0xe9, 0xc9,
+  0xe8, 0x9c, 0xee, 0xce, 0xd3, 0xf7, 0xe7, 0xa6, 0x21, 0x73, 0x79, 0xd6,
+  0x8d, 0xd9, 0x4e, 0x7a, 0xb1, 0xc8, 0xa0, 0x1c, 0x69, 0x73, 0x66, 0xd7,
+  0x72, 0x1c, 0x71, 0xc8, 0x06, 0xda, 0x25, 0x8f, 0x91, 0xb5, 0x47, 0x22,
+  0x5e, 0xd5, 0x1d, 0xf9, 0xf6, 0x73, 0x2f, 0x25, 0x1b, 0x5f, 0x6c, 0x9a,
+  0xed, 0x1e, 0xd8, 0xe6, 0x7e, 0xa2, 0xa7, 0x71, 0x6b, 0xd7, 0xf9, 0x3c,
+  0x9f, 0xa5, 0x9e, 0x84, 0x22, 0x9c, 0x88, 0xe8, 0xda, 0x9e, 0xc7, 0x89,
+  0x61, 0xbb, 0x18, 0xb4, 0x53, 0x91, 0x68, 0x05, 0x71, 0x9a, 0xdd, 0x46,
+  0x4d, 0xe9, 0x22, 0x85, 0x0c, 0xb8, 0xc8, 0xed, 0xc2, 0xd1, 0x8e, 0xd1,
+  0x31, 0x6f, 0x2d, 0x53, 0x77, 0xd7, 0x82, 0x65, 0x23, 0x4e, 0x0e, 0x1d,
+  0xdc, 0x2e, 0x5c, 0x6f, 0x9c, 0x56, 0x3d, 0xcb, 0xc1, 0x58, 0x31, 0x36,
+  0x8d, 0x5e, 0x2e, 0xcd, 0xe0, 0x79, 0x55, 0xfb, 0xc9, 0xe0, 0x8f, 0x34,
+  0x72, 0xd2, 0x8f, 0xec, 0x89, 0x36, 0x72, 0x77, 0x31, 0x1d, 0xae, 0x9d,
+  0x40, 0x2f, 0xb7, 0x4a, 0xfc, 0x09, 0xab, 0xef, 0x09, 0xb3, 0x7f, 0xd6,
+  0x07, 0x12, 0xd6, 0xb8, 0x8d, 0xf4, 0x75, 0x6b, 0x68, 0x30, 0x35, 0x4b,
+  0x68, 0x98, 0xc9, 0x5b, 0x1a, 0xba, 0x74, 0x26, 0x3a, 0x3f, 0xf6, 0xc9,
+  0x2c, 0xab, 0x99, 0x95, 0xbd, 0x92, 0xa7, 0xd3, 0x9c, 0xbe, 0x33, 0xc4,
+  0x6e, 0x18, 0xf5, 0x32, 0x83, 0x70, 0x2b, 0x73, 0x9c, 0xbb, 0xb9, 0x91,
+  0xb6, 0x54, 0x5f, 0x19, 0xe1, 0x38, 0xe9, 0x31, 0x43, 0x19, 0x50, 0x37,
+  0x3d, 0x5a, 0xd8, 0x79, 0xa7, 0x13, 0x33, 0x97, 0xa9, 0x5c, 0x56, 0x22,
+  0x60, 0x98, 0xed, 0x9b, 0xa7, 0xf7, 0xbe, 0x24, 0x0a, 0x96, 0x83, 0x91,
+  0x97, 0x95, 0xbd, 0xb7, 0xcd, 0xcd, 0xb0, 0x20, 0x99, 0x40, 0x58, 0x11,
+  0x78, 0x3a, 0xce, 0x4f, 0xcd, 0x43, 0xeb, 0x1b, 0xa1, 0x87, 0x9e, 0xbc,
+  0xbc, 0xd2, 0x47, 0xbd, 0xfb, 0x21, 0x35, 0x73, 0x23, 0x1e, 0x47, 0x6a,
+  0xdb, 0x54, 0xd9, 0x57, 0x59, 0xb1, 0xf2, 0x3e, 0x2b, 0x89, 0xeb, 0xf4,
+  0x58, 0xf4, 0x92, 0x91, 0x63, 0xe8, 0x44, 0x58, 0x03, 0xec, 0x2a, 0xfd,
+  0xa9, 0xcd, 0xd9, 0x61, 0xcb, 0x72, 0xd5, 0x8f, 0x0e, 0xcd, 0x2d, 0xd4,
+  0x08, 0x8b, 0x64, 0x6e, 0x80, 0x9a, 0xc8, 0x4a, 0xd7, 0x1d, 0xd4, 0x66,
+  0x38, 0xf6, 0x7a, 0xc3, 0x87, 0x03, 0x82, 0x7c, 0x67, 0xe5, 0x6b, 0xc8,
+  0xd6, 0xc2, 0x8f, 0xed, 0xcc, 0xcc, 0x8c, 0xa6, 0xb9, 0x61, 0x69, 0x86,
+  0xaf, 0xea, 0xce, 0x38, 0x7d, 0x23, 0x22, 0xcb, 0xdd, 0x07, 0x42, 0x3a,
+  0xa9, 0xce, 0x3e, 0x67, 0xd5, 0x31, 0x0d, 0x4e, 0xcc, 0x4e, 0x1d, 0x63,
+  0x1e, 0x83, 0x9b, 0x84, 0x4e, 0x83, 0x91, 0x7e, 0xe9, 0x68, 0x0c, 0x4e,
+  0x8e, 0x6f, 0x3c, 0xaa, 0x26, 0x05, 0xb1, 0xa0, 0xeb, 0xb6, 0x0f, 0x25,
+  0x7c, 0x5c, 0x96, 0x46, 0x0f, 0x73, 0x53, 0x23, 0xe5, 0x29, 0x2b, 0x88,
+  0x59, 0xc9, 0x8e, 0x0e, 0x06, 0xfc, 0x15, 0x5a, 0xbe, 0x37, 0x0a, 0x40,
+  0x7a, 0x99, 0xe6, 0x96, 0xde, 0x84, 0xb1, 0xd9, 0x67, 0x8b, 0x52, 0x1e,
+  0xa7, 0x9d, 0xa2, 0x8b, 0x5c, 0x78, 0xc8, 0x12, 0xf7, 0x5d, 0x46, 0xf3,
+  0x32, 0x4c, 0x00, 0x27, 0x59, 0x9a, 0x85, 0xf4, 0xa3, 0xcd, 0x8d, 0x21,
+  0xef, 0x91, 0xe8, 0x04, 0x4e, 0x08, 0x41, 0xc8, 0x34, 0xd9, 0x1b, 0x26,
+  0xdf, 0x94, 0xb7, 0x19, 0x4c, 0x52, 0x10, 0x53, 0x73, 0x32, 0xaa, 0x18,
+  0x89, 0xe6, 0x36, 0x4b, 0xe6, 0x46, 0x82, 0x32, 0xab, 0x89, 0x4b, 0x14,
+  0x9f, 0x99, 0x71, 0x3a, 0xd1, 0xbb, 0xbc, 0x45, 0xb7, 0x76, 0x12, 0x76,
+  0x27, 0x2f, 0xf8, 0x44, 0x24, 0x1b, 0xb8, 0xa4, 0x27, 0xb4, 0x58, 0x8b,
+  0xc6, 0xcd, 0xc2, 0xae, 0x87, 0x61, 0x9b, 0xb5, 0x77, 0xb8, 0xe8, 0xc6,
+  0x32, 0x23, 0x48, 0x3e, 0x1b, 0xee, 0xbc, 0x18, 0x6e, 0x0f, 0x49, 0xa4,
+  0xce, 0x6e, 0xf2, 0x72, 0x59, 0x9b, 0xde, 0x31, 0x94, 0xc4, 0x7b, 0x33,
+  0xab, 0x48, 0xd4, 0x2e, 0x2f, 0x2f, 0x67, 0x7c, 0x81, 0x6f, 0x95, 0x17,
+  0x17, 0xde, 0x1d, 0x5f, 0x65, 0x0b, 0x16, 0xe5, 0x69, 0x71, 0xe4, 0xd0,
+  0x31, 0x8f, 0xf3, 0x2f, 0x77, 0x59, 0x4e, 0xa7, 0x1f, 0x0f, 0xfe, 0x68,
+  0x36, 0x7a, 0xa0, 0xdc, 0x68, 0x60, 0x98, 0x51, 0xc7, 0xe4, 0xf8, 0x96,
+  0x4c, 0x33, 0xfe, 0x95, 0xe8, 0x58, 0x17, 0x0b, 0x6c, 0x39, 0x48, 0xcb,
+  0x7e, 0x68, 0x5a, 0x48, 0x2c, 0x3b, 0xf3, 0x0c, 0x3e, 0x1e, 0x91, 0x19,
+  0xe6, 0x54, 0x4c, 0xd3, 0xca, 0x68, 0xd2, 0x64, 0x37, 0x32, 0x0f, 0xd3,
+  0x69, 0x4b, 0x99, 0xdc, 0xfb, 0xcc, 0xf3, 0x1c, 0x89, 0x0d, 0xf6, 0x68,
+  0x80, 0xbe, 0x56, 0xad, 0x5c, 0xc7, 0x5c, 0x05, 0x35, 0x8f, 0x4c, 0x44,
+  0xd1, 0xd4, 0x49, 0x26, 0x8e, 0x79, 0xab, 0xde, 0x79, 0x51, 0xce, 0x66,
+  0xe5, 0x2d, 0x5d, 0x22, 0x24, 0x4c, 0x7a, 0xdb, 0xaa, 0xdb, 0x51, 0xd7,
+  0xe5, 0x24, 0x67, 0xc3, 0x91, 0x2c, 0x3a, 0x74, 0x65, 0x58, 0x39, 0xe9,
+  0xd5, 0x5a, 0x6e, 0x77, 0x12, 0x5b, 0x6b, 0xc3, 0x49, 0x12, 0xab, 0xf7,
+  0xc3, 0x54, 0xd4, 0x69, 0xce, 0x5d, 0x7a, 0x7c, 0x24, 0x85, 0x15, 0x9b,
+  0x91, 0xe4, 0xa4, 0x8f, 0xdd, 0xaa, 0xde, 0x9e, 0x4f, 0x1c, 0x6b, 0xf4,
+  0x8e, 0x6a, 0xbf, 0xd3, 0x5c, 0xbd, 0x34, 0x6d, 0x98, 0xf5, 0x9e, 0xe6,
+  0x64, 0x1f, 0x34, 0xda, 0x13, 0x9b, 0xfc, 0x58, 0xd6, 0x37, 0xaf, 0x4d,
+  0x96, 0x75, 0x63, 0x04, 0x4d, 0xed, 0x95, 0x9b, 0x32, 0xfd, 0x1a, 0x92,
+  0xdc, 0x27, 0x3a, 0xeb, 0x34, 0x67, 0x88, 0xee, 0xb3, 0xe1, 0x93, 0xe7,
+  0xc3, 0x6d, 0x8f, 0x10, 0xb6, 0x69, 0x9d, 0x49, 0xb5, 0xda, 0x19, 0x6e,
+  0x77, 0x1e, 0xdf, 0xa0, 0x3b, 0x7d, 0x53, 0x97, 0xbc, 0xb5, 0xe6, 0xb8,
+  0xed, 0xf5, 0x1c, 0x98, 0x37, 0xfd, 0x9b, 0x8c, 0xef, 0xec, 0xdc, 0x99,
+  0xa7, 0x6c, 0xef, 0x66, 0x87, 0x0b, 0x88, 0x83, 0x7c, 0x1f, 0x9a, 0xfb,
+  0x7c, 0x8f, 0x5b, 0xda, 0x19, 0xee, 0x78, 0x5b, 0x2f, 0xc3, 0xd9, 0x89,
+  0x0f, 0x27, 0x24, 0x80, 0xce, 0x60, 0x76, 0x54, 0x68, 0x66, 0x49, 0xc9,
+  0xf6, 0xdb, 0x69, 0x4e, 0x55, 0x35, 0x79, 0x51, 0x97, 0x4c, 0x16, 0xe9,
+  0x49, 0x6b, 0x91, 0x30, 0xa2, 0xdd, 0x8f, 0x58, 0x1e, 0x90, 0x49, 0x6e,
+  0xb4, 0x2c, 0xea, 0xd7, 0x6c, 0x88, 0xdb, 0x1a, 0x5e, 0x15, 0x0c, 0x75,
+  0x97, 0x07, 0x18, 0x21, 0x1d, 0x5c, 0x2c, 0xb8, 0x18, 0x68, 0xe4, 0x4b,
+  0x73, 0x6f, 0x55, 0x33, 0x68, 0x4d, 0x6a, 0xf8, 0x34, 0x8c, 0xc4, 0xf0,
+  0xb7, 0x7c, 0xd6, 0x08, 0x41, 0xb2, 0x75, 0x8a, 0xfa, 0x1a, 0x76, 0x47,
+  0xf7, 0xc0, 0x6c, 0x0c, 0x37, 0x2c, 0x16, 0x45, 0xe7, 0x85, 0xd7, 0xcc,
+  0x85, 0x45, 0xd4, 0x7e, 0x77, 0xfa, 0xce, 0xcc, 0xec, 0x78, 0x44, 0x37,
+  0x9f, 0x51, 0x4d, 0x79, 0x85, 0xf0, 0xa9, 0x59, 0x56, 0xe5, 0xed, 0x4e,
+  0x14, 0x36, 0x52, 0x70, 0xa7, 0xb9, 0x70, 0xc4, 0x6a, 0x10, 0x20, 0x03,
+  0xb4, 0xf9, 0xb6, 0x4a, 0x8d, 0xd6, 0x86, 0xb9, 0xca, 0x2c, 0x6a, 0x6a,
+  0x7e, 0xc8, 0x3d, 0x07, 0xab, 0x03, 0xe9, 0x00, 0xca, 0xa0, 0x6d, 0xb9,
+  0xfd, 0x2e, 0xaf, 0x2c, 0xad, 0x4a, 0x91, 0x5d, 0x96, 0x0d, 0x1d, 0x69,
+  0xfd, 0xcc, 0x3c, 0x33, 0xe8, 0x34, 0x87, 0x55, 0xc3, 0x80, 0xc0, 0x99,
+  0x58, 0x3f, 0x13, 0x55, 0x84, 0xf6, 0xda, 0x68, 0x5a, 0x86, 0xab, 0x81,
+  0x1b, 0xac, 0x3d, 0xb4, 0xb0, 0xcf, 0x83, 0x85, 0x4d, 0x67, 0x2b, 0x57,
+  0x96, 0xba, 0xda, 0x3f, 0x36, 0xd3, 0xa3, 0x75, 0xf5, 0x96, 0x15, 0x9f,
+  0x79, 0xcb, 0x0a, 0x73, 0xaf, 0x2e, 0xec, 0xea, 0x95, 0xc5, 0xd2, 0x7e,
+  0xf4, 0xda, 0x52, 0x27, 0xdc, 0x55, 0xf7, 0x58, 0xd6, 0xa2, 0xed, 0x7d,
+  0xcc, 0xda, 0x7a, 0x8b, 0xcb, 0x9f, 0x26, 0xbb, 0x01, 0xcb, 0x5a, 0x7c,
+  0x9a, 0xc5, 0xdd, 0x21, 0x46, 0xd5, 0xcc, 0xea, 0x9b, 0x80, 0x2f, 0x98,
+  0x49, 0x6f, 0x92, 0x85, 0x84, 0x0c, 0x75, 0x3e, 0x5f, 0xa0, 0x65, 0x76,
+  0x6c, 0xe1, 0x8e, 0x8d, 0x78, 0x3a, 0x01, 0x6b, 0x24, 0x49, 0x83, 0x73,
+  0x38, 0x2f, 0x1b, 0x7e, 0x99, 0x87, 0x3e, 0x74, 0x46, 0x57, 0x6a, 0xd5,
+  0xdd, 0xcd, 0x32, 0x9c, 0xe1, 0x76, 0xdf, 0xfd, 0xbe, 0xd3, 0x65, 0xe1,
+  0x74, 0x07, 0xdb, 0x6f, 0xb1, 0x86, 0x46, 0x4e, 0x68, 0xaa, 0x12, 0x06,
+  0xa3, 0xd6, 0x10, 0x71, 0x2b, 0x1a, 0xce, 0x38, 0x31, 0x3a, 0x9c, 0xe1,
+  0x91, 0x1b, 0x79, 0xcb, 0x5b, 0xa6, 0xb2, 0xa4, 0xd9, 0xe0, 0x71, 0x3a,
+  0xb9, 0xa6, 0x9b, 0x28, 0x17, 0x3b, 0xb4, 0x6e, 0x13, 0xdf, 0x16, 0x46,
+  0xb7, 0xbd, 0xc9, 0xc8, 0xa3, 0xa4, 0x1d, 0x6d, 0x7a, 0xac, 0x75, 0x97,
+  0x16, 0xb1, 0xae, 0x67, 0x37, 0xbb, 0x1f, 0xbb, 0x88, 0xd4, 0xa1, 0x8e,
+  0x70, 0x37, 0x5c, 0x42, 0xb9, 0xe0, 0x56, 0x2c, 0x22, 0xde, 0x76, 0xcb,
+  0x38, 0x2a, 0xcd, 0x2d, 0x9f, 0xcf, 0xb5, 0x87, 0xdc, 0xe7, 0x0c, 0x24,
+  0xed, 0x9b, 0xa7, 0x6f, 0x56, 0x1e, 0xd7, 0xa1, 0x7c, 0x9d, 0x93, 0xf3,
+  0x68, 0x9a, 0xc1, 0x4c, 0x64, 0x0e, 0xd0, 0x14, 0xce, 0x21, 0x73, 0xfd,
+  0x64, 0xa6, 0xcd, 0x2c, 0xd9, 0x20, 0x0f, 0x14, 0x39, 0x5c, 0x9e, 0xef,
+  0x7c, 0xf6, 0xdc, 0x9f, 0xf9, 0x13, 0x9d, 0xf9, 0x93, 0xdf, 0x32, 0xf3,
+  0x27, 0xff, 0x82, 0x99, 0x3f, 0x79, 0x78, 0xe6, 0x4f, 0x3e, 0x76, 0xe6,
+  0x9f, 0x3d, 0x7b, 0xfe, 0xb9, 0x3f, 0xf3, 0xa7, 0x34, 0xf3, 0x7c, 0x71,
+  0xf3, 0xb4, 0x2b, 0x49, 0xd1, 0x25, 0x29, 0x22, 0x6d, 0xd3, 0xba, 0x54,
+  0xcd, 0x2d, 0x54, 0xce, 0x6e, 0x32, 0x91, 0x33, 0xcc, 0x07, 0x47, 0xa7,
+  0x37, 0x4f, 0x49, 0x72, 0x25, 0x51, 0x8f, 0x4c, 0x4a, 0x24, 0x28, 0xc7,
+  0x08, 0x9d, 0xb4, 0x65, 0x5f, 0xf3, 0x20, 0x9b, 0x27, 0x99, 0x88, 0xbd,
+  0xd1, 0x3c, 0x97, 0xd1, 0x3c, 0x8f, 0x8d, 0xe6, 0xe3, 0x87, 0xf3, 0xdc,
+  0x1b, 0xce, 0xaf, 0x1c, 0xcd, 0x53, 0x6f, 0x34, 0x29, 0x8d, 0x26, 0x5d,
+  0x90, 0x67, 0xaf, 0x4b, 0x16, 0x6f, 0xce, 0x4f, 0xb7, 0xc8, 0x39, 0xbc,
+  0xa9, 0xae, 0x01, 0xf1, 0x92, 0x14, 0xd6, 0xa9, 0x0a, 0x15, 0x82, 0x7c,
+  0x98, 0x32, 0x54, 0x6e, 0x47, 0x14, 0xe5, 0xae, 0x00, 0x9c, 0x56, 0xe4,
+  0xf8, 0x10, 0x1f, 0xab, 0x27, 0x28, 0x9b, 0xff, 0x37, 0x24, 0x62, 0x9d,
+  0x7b, 0x64, 0xcc, 0x27, 0xab, 0x81, 0xd8, 0x03, 0x40, 0x4b, 0xf4, 0x4e,
+  0x57, 0x78, 0x29, 0xb3, 0x9a, 0x34, 0xc7, 0xec, 0x2e, 0x27, 0x9f, 0x6e,
+  0x2e, 0x36, 0x68, 0xa3, 0x29, 0x26, 0x13, 0xb6, 0xed, 0x0f, 0xc9, 0xaf,
+  0x05, 0x4a, 0x64, 0x23, 0x25, 0x06, 0x9b, 0x5c, 0xcc, 0xd2, 0xcb, 0xc8,
+  0xed, 0x9a, 0x5f, 0x16, 0xa5, 0xf8, 0x58, 0x6b, 0x43, 0xa9, 0x70, 0x8a,
+  0x0b, 0xf1, 0xd6, 0x86, 0x11, 0x15, 0x93, 0xd9, 0x12, 0x5e, 0xb6, 0x13,
+  0x33, 0xc1, 0xd1, 0xe8, 0x1b, 0x9f, 0xba, 0xf6, 0x69, 0x05, 0x49, 0x2a,
+  0x1d, 0xa4, 0x97, 0x24, 0xa0, 0xbe, 0xe4, 0x1f, 0x75, 0x43, 0xec, 0xfe,
+  0x8b, 0xb8, 0xc8, 0x34, 0x12, 0x35, 0x14, 0xae, 0x02, 0x7a, 0x75, 0xdf,
+  0x7b, 0x87, 0xd6, 0xaf, 0x76, 0xeb, 0xc8, 0xd7, 0x8c, 0x1c, 0xa4, 0x2e,
+  0x33, 0xa4, 0xb1, 0x1a, 0x76, 0x38, 0x25, 0xc5, 0x09, 0xc6, 0xcf, 0xe4,
+  0xe0, 0xeb, 0x23, 0x9a, 0x66, 0x9a, 0xcf, 0xd8, 0x32, 0x27, 0xd3, 0xce,
+  0xb3, 0x19, 0x29, 0x5d, 0x58, 0x33, 0xf8, 0x4e, 0x13, 0xdf, 0xd2, 0x2f,
+  0xff, 0xf5, 0xde, 0x96, 0xff, 0x30, 0xab, 0x98, 0x6e, 0x3d, 0x1d, 0x6e,
+  0xf7, 0x48, 0x0b, 0x30, 0xf7, 0x5d, 0x56, 0x4c, 0x4a, 0x72, 0x76, 0x8c,
+  0x67, 0x69, 0x71, 0x5d, 0xb3, 0xde, 0xc6, 0xca, 0x0c, 0x8d, 0xb5, 0x6f,
+  0x8e, 0x6c, 0x55, 0x95, 0xcb, 0x62, 0x1a, 0xd9, 0x72, 0x99, 0x0e, 0xd8,
+  0x84, 0x58, 0x5c, 0xe1, 0xe1, 0x31, 0x24, 0x53, 0x5d, 0xab, 0x65, 0x97,
+  0x6e, 0x15, 0xf8, 0x6d, 0x68, 0xeb, 0x30, 0x2e, 0xab, 0x31, 0x74, 0x9a,
+  0x1b, 0x7c, 0x03, 0x49, 0xdd, 0x90, 0x0d, 0x79, 0xd4, 0xf9, 0x9c, 0x94,
+  0x6a, 0x07, 0x0e, 0x2e, 0xd2, 0xa3, 0x0b, 0x9e, 0xba, 0x3c, 0xa8, 0x97,
+  0xbc, 0xea, 0x2e, 0xe0, 0x45, 0xec, 0xa3, 0x9f, 0xa5, 0x75, 0x03, 0x5b,
+  0x91, 0x52, 0x10, 0x3d, 0xe8, 0x4b, 0xe3, 0x69, 0x71, 0x4f, 0x31, 0x06,
+  0x1f, 0x23, 0x8d, 0x5f, 0xe4, 0x97, 0xc4, 0x8a, 0x60, 0xb9, 0x41, 0x58,
+  0x82, 0x46, 0x23, 0x90, 0x7a, 0x77, 0x55, 0x82, 0xc0, 0x8c, 0x58, 0x9c,
+  0xcd, 0x2e, 0x62, 0xe7, 0x55, 0xf5, 0x7b, 0xa8, 0xc0, 0xc2, 0xd5, 0x68,
+  0x60, 0xde, 0x51, 0x20, 0x1f, 0x76, 0x32, 0x99, 0xa5, 0xf9, 0xbc, 0x6e,
+  0x49, 0xc0, 0xc3, 0x18, 0x37, 0x21, 0x0b, 0x2e, 0xbd, 0x3f, 0x26, 0xab,
+  0x7c, 0x55, 0x93, 0xb5, 0x85, 0x36, 0x24, 0x55, 0xa1, 0x9c, 0x6d, 0xde,
+  0x57, 0xd9, 0xe4, 0x1a, 0x64, 0xe7, 0x59, 0x22, 0xbb, 0x5c, 0x98, 0x57,
+  0x1d, 0x0b, 0xb6, 0xa4, 0x88, 0x04, 0x23, 0xbd, 0x90, 0x5f, 0x2f, 0x2f,
+  0xa6, 0xcb, 0x09, 0x8e, 0x2d, 0x19, 0x57, 0x8c, 0x44, 0x57, 0xa5, 0x24,
+  0x21, 0x35, 0x1c, 0x01, 0x02, 0xba, 0x18, 0x18, 0x22, 0x58, 0x44, 0x47,
+  0x07, 0xff, 0x08, 0x8b, 0xb5, 0x2d, 0x76, 0x50, 0x8b, 0x37, 0x01, 0x86,
+  0x7a, 0x55, 0x16, 0xdb, 0xab, 0xd9, 0x69, 0x8e, 0xd7, 0xb6, 0x6f, 0xae,
+  0xa8, 0xdc, 0x08, 0x00, 0xea, 0xa2, 0x9e, 0x96, 0x42, 0x4a, 0x03, 0xa3,
+  0xde, 0xd7, 0xf9, 0x84, 0xed, 0x5a, 0xf9, 0x65, 0x46, 0x0c, 0x83, 0x64,
+  0xd5, 0x66, 0x36, 0xe7, 0x38, 0x8e, 0x2e, 0xa1, 0x0d, 0xac, 0x90, 0x17,
+  0x90, 0x95, 0xcf, 0x51, 0x58, 0xa3, 0xb1, 0xf4, 0xa1, 0x56, 0x56, 0xdf,
+  0xe6, 0x96, 0xb3, 0xf9, 0xd3, 0x0c, 0x85, 0x79, 0x66, 0x97, 0xef, 0xc0,
+  0x4d, 0x52, 0x37, 0x86, 0xb7, 0xf4, 0xe9, 0x88, 0x4c, 0x60, 0xbb, 0x26,
+  0xbb, 0xa0, 0x1a, 0x25, 0xd5, 0xba, 0x3a, 0x26, 0x39, 0x92, 0x1c, 0x56,
+  0xb7, 0xf9, 0x84, 0x7d, 0x15, 0xf0, 0xb7, 0x45, 0xac, 0x0c, 0x93, 0x59,
+  0x4e, 0x0f, 0xce, 0x8d, 0x66, 0x4c, 0x6f, 0xb1, 0xe0, 0x4d, 0x77, 0xc8,
+  0xad, 0xd9, 0xad, 0x21, 0x9f, 0x8b, 0x8c, 0x2d, 0x6e, 0xf5, 0x15, 0xac,
+  0xe4, 0x69, 0x95, 0xc3, 0xa1, 0x15, 0x34, 0xc7, 0x63, 0xa6, 0x49, 0xfa,
+  0xe3, 0x84, 0x66, 0xc6, 0x36, 0x63, 0x67, 0x6e, 0xc0, 0xd9, 0x21, 0xae,
+  0xe3, 0x1d, 0x9c, 0x31, 0x9d, 0x57, 0x0e, 0xae, 0x49, 0x5e, 0xd2, 0xdd,
+  0xf5, 0x8a, 0x66, 0xb3, 0x82, 0x25, 0x9e, 0xc2, 0x8d, 0x76, 0xd5, 0xb6,
+  0x27, 0x7b, 0xac, 0x8f, 0xad, 0x2e, 0xdc, 0x1a, 0x7c, 0x8e, 0x44, 0x3d,
+  0x51, 0x79, 0xc1, 0x50, 0x14, 0xb1, 0x43, 0xdb, 0xd6, 0xc2, 0x19, 0x97,
+  0xcc, 0xd6, 0x64, 0xf9, 0x8d, 0x7a, 0xb0, 0x3d, 0xe1, 0x1c, 0xde, 0xff,
+  0xde, 0x28, 0x6b, 0xba, 0xcd, 0x1d, 0xa0, 0xc3, 0xbd, 0x9e, 0x17, 0x44,
+  0xc0, 0xad, 0xca, 0xda, 0x8d, 0x33, 0x75, 0xf9, 0xb2, 0x31, 0xc7, 0x30,
+  0x51, 0x0a, 0x42, 0xdb, 0x79, 0xf5, 0xdd, 0xfe, 0xf1, 0xfb, 0xc3, 0x9d,
+  0xbf, 0x76, 0xc9, 0xc7, 0x7c, 0xb7, 0xcb, 0xdf, 0xed, 0xf6, 0x62, 0x3c,
+  0xcb, 0x50, 0x50, 0x92, 0xac, 0xbf, 0x5a, 0x4f, 0xea, 0xfb, 0xf9, 0xb8,
+  0x9c, 0x59, 0xbe, 0x25, 0x9d, 0xd0, 0x28, 0xfa, 0xe2, 0x3d, 0x51, 0x1f,
+  0x36, 0x16, 0x86, 0xae, 0xc8, 0xee, 0xd8, 0xe1, 0x43, 0x15, 0x59, 0x0e,
+  0x14, 0x90, 0x4e, 0xfd, 0xc5, 0xa8, 0x1b, 0x5c, 0x79, 0xb2, 0x41, 0xd4,
+  0x72, 0xcd, 0x04, 0xd9, 0x4f, 0xf8, 0x24, 0x75, 0xd9, 0x39, 0xcf, 0xd8,
+  0x7a, 0xc7, 0xd4, 0x86, 0x28, 0xba, 0x4c, 0xc2, 0xe2, 0xfa, 0xbd, 0x21,
+  0xdf, 0x86, 0x0c, 0x30, 0xef, 0x6b, 0x66, 0x2a, 0x79, 0x2d, 0xe7, 0xb3,
+  0xcb, 0xf0, 0x88, 0xe9, 0x93, 0xcb, 0xf3, 0x26, 0x6d, 0xc4, 0xa7, 0x23,
+  0x43, 0xc9, 0x8a, 0x4b, 0xb2, 0xd9, 0xf1, 0x69, 0x16, 0xf7, 0x34, 0x22,
+  0xa5, 0xc4, 0xc4, 0x40, 0x07, 0xac, 0x0a, 0x4d, 0x3b, 0xe6, 0xd4, 0x51,
+  0x8f, 0x12, 0xcd, 0x45, 0x01, 0x7a, 0xca, 0x11, 0xe8, 0x40, 0x99, 0x51,
+  0x93, 0x57, 0xf1, 0x5e, 0x8e, 0xe4, 0x7a, 0x95, 0xc9, 0xf9, 0x65, 0x07,
+  0x62, 0x97, 0xf4, 0x4d, 0x63, 0xe3, 0xbc, 0x50, 0xda, 0x16, 0x4d, 0x6e,
+  0x70, 0x4c, 0x14, 0x3d, 0x2b, 0x85, 0xa5, 0x3b, 0x1b, 0xad, 0xb8, 0x48,
+  0x2d, 0x0d, 0x44, 0xcd, 0x7f, 0xec, 0x45, 0x95, 0x7d, 0xd0, 0x51, 0xf2,
+  0xc1, 0xb2, 0xb4, 0xb4, 0x30, 0x9c, 0xbd, 0x60, 0xb2, 0x17, 0x96, 0x6b,
+  0xc4, 0xf3, 0x55, 0x54, 0x69, 0x76, 0xf0, 0x7e, 0x96, 0x6d, 0x26, 0x62,
+  0xe9, 0x7b, 0x97, 0x35, 0x88, 0x34, 0xd8, 0x92, 0x5b, 0x5c, 0x97, 0x13,
+  0xfd, 0xf2, 0xc8, 0x02, 0x8a, 0xb3, 0x43, 0x77, 0x3e, 0x52, 0xb6, 0xde,
+  0xfa, 0x67, 0x57, 0xbd, 0xab, 0xd8, 0xf5, 0x14, 0x32, 0xc0, 0x62, 0x49,
+  0x62, 0xda, 0xbb, 0x32, 0x58, 0x35, 0x9e, 0x95, 0x8d, 0xb2, 0x81, 0x67,
+  0xcf, 0xe8, 0xf9, 0x7a, 0xa0, 0xa9, 0xaf, 0x21, 0xc9, 0x15, 0x20, 0x3e,
+  0x17, 0x79, 0x27, 0x37, 0x5f, 0x97, 0x11, 0x4f, 0xdc, 0x28, 0x06, 0x7f,
+  0x4b, 0xf5, 0xd6, 0x0f, 0x66, 0x71, 0x78, 0x97, 0x55, 0xa4, 0x34, 0x1a,
+  0xb6, 0xbf, 0x6c, 0x84, 0x14, 0x61, 0xb3, 0x24, 0x3b, 0xbc, 0x6c, 0xb3,
+  0x08, 0x42, 0x6a, 0x2f, 0x07, 0x07, 0x55, 0x1f, 0x74, 0x77, 0xb3, 0xd4,
+  0xd3, 0x0d, 0xc2, 0x29, 0x27, 0x86, 0xea, 0x86, 0xd6, 0x93, 0xa5, 0x77,
+  0x74, 0xeb, 0x94, 0xcb, 0xf2, 0xf6, 0x69, 0x2b, 0x02, 0x52, 0xe2, 0xc3,
+  0x69, 0x5f, 0xa4, 0xed, 0x94, 0xfd, 0x13, 0x72, 0xc1, 0x58, 0xd8, 0x11,
+  0xe2, 0x39, 0x28, 0xe8, 0xa3, 0xb9, 0xa1, 0x86, 0x7e, 0x48, 0x4a, 0x85,
+  0x7f, 0x5a, 0x70, 0x02, 0x0b, 0x16, 0xf4, 0xc9, 0x85, 0xc2, 0x6f, 0x25,
+  0x1b, 0x46, 0xd0, 0x31, 0x4c, 0xed, 0x82, 0xdc, 0x93, 0xea, 0x37, 0x84,
+  0x63, 0xa2, 0x7b, 0x03, 0xc1, 0x3e, 0x9c, 0x4d, 0x37, 0x3b, 0x0e, 0xf0,
+  0x79, 0x39, 0x65, 0x7a, 0x80, 0x59, 0x84, 0xd9, 0xe4, 0x80, 0xe4, 0x33,
+  0xcb, 0x82, 0x2f, 0x62, 0x42, 0x9a, 0x0c, 0x4a, 0xcf, 0xb0, 0x67, 0xd4,
+  0x49, 0x11, 0x2b, 0x28, 0xfc, 0x96, 0x82, 0xf7, 0x2c, 0x3b, 0xf7, 0xcd,
+  0xf6, 0x51, 0x16, 0x46, 0x33, 0x1e, 0x97, 0x14, 0xd6, 0x20, 0x12, 0x1a,
+  0x26, 0x4c, 0xde, 0x94, 0xe4, 0x62, 0x49, 0xa1, 0x8e, 0xce, 0xf1, 0x0d,
+  0x3a, 0x23, 0xd3, 0x0d, 0xc7, 0xde, 0x06, 0x96, 0xa3, 0x6b, 0xd2, 0x1e,
+  0x71, 0x4d, 0x4b, 0x5c, 0x8b, 0x78, 0xae, 0x1b, 0xdc, 0xd7, 0x2c, 0xf3,
+  0x8a, 0x62, 0x45, 0xfd, 0x92, 0x33, 0x99, 0x8c, 0x99, 0x35, 0x44, 0xd3,
+  0x34, 0x50, 0x42, 0xb0, 0xd4, 0xe6, 0x7f, 0xde, 0xa6, 0x6e, 0xb0, 0x90,
+  0x85, 0x51, 0xf0, 0x31, 0x60, 0xf5, 0x81, 0xc4, 0xdb, 0xe5, 0x78, 0xc0,
+  0xef, 0xd4, 0x9b, 0x14, 0xeb, 0x15, 0x9a, 0xf8, 0x5a, 0x07, 0x79, 0xd5,
+  0xa1, 0xfd, 0xfd, 0x44, 0xdb, 0xaf, 0x44, 0x77, 0x19, 0xa4, 0xf5, 0x24,
+  0xcf, 0x63, 0x0a, 0x20, 0x45, 0x11, 0x9b, 0xb1, 0x1e, 0x16, 0x6c, 0x1a,
+  0xdd, 0x1f, 0x1d, 0x1c, 0x1d, 0xb9, 0x13, 0xa2, 0x81, 0x39, 0x08, 0x21,
+  0x6e, 0x3a, 0xe2, 0x7c, 0xa7, 0xb9, 0x8c, 0xdc, 0x1d, 0x13, 0x26, 0x28,
+  0x3e, 0x92, 0xe6, 0x51, 0xf2, 0x49, 0x60, 0xa5, 0xcc, 0xf2, 0xd7, 0xe2,
+  0xaa, 0xfa, 0x6b, 0x73, 0xbf, 0xc8, 0x5e, 0xed, 0xf7, 0x86, 0x6d, 0x9d,
+  0xb8, 0x4b, 0x68, 0xe9, 0x92, 0x54, 0x5f, 0xbe, 0x8b, 0x21, 0x19, 0x11,
+  0x53, 0x99, 0x4a, 0x40, 0x81, 0x5c, 0xcb, 0xe4, 0x1c, 0x9c, 0x93, 0xfa,
+  0x72, 0x01, 0x97, 0x6a, 0xf1, 0x64, 0xd7, 0xdc, 0xab, 0x46, 0xd4, 0x9c,
+  0xd7, 0xbe, 0x7c, 0x0f, 0xe9, 0xf0, 0x63, 0x6d, 0xdb, 0xb0, 0x80, 0x81,
+  0x41, 0x7f, 0x45, 0xaf, 0x75, 0xc5, 0x7c, 0xbd, 0x2b, 0xe2, 0x46, 0x11,
+  0x0a, 0x54, 0x6a, 0x1b, 0xe7, 0xad, 0x95, 0x53, 0x44, 0x3a, 0x9f, 0x47,
+  0xb1, 0x7c, 0xbc, 0x24, 0x87, 0x41, 0x20, 0xe4, 0x18, 0x8a, 0x9d, 0x19,
+  0x1a, 0x35, 0x9c, 0xb3, 0xa0, 0x9f, 0x96, 0x35, 0xe5, 0x98, 0x3e, 0x69,
+  0xd4, 0x15, 0xc5, 0xa8, 0xb5, 0xa4, 0x1f, 0x22, 0xe1, 0xe8, 0x5a, 0xca,
+  0x89, 0xc1, 0x91, 0x74, 0x9e, 0x96, 0xce, 0xcc, 0x54, 0x83, 0x49, 0x36,
+  0x60, 0x66, 0xc3, 0x45, 0x20, 0x42, 0x74, 0x20, 0x3f, 0xab, 0x94, 0x6d,
+  0x56, 0xdd, 0x13, 0xa6, 0x37, 0x03, 0x4a, 0x7e, 0x5f, 0x23, 0x28, 0xe2,
+  0x32, 0x43, 0x58, 0x18, 0xdf, 0x3c, 0x4b, 0xd5, 0xa7, 0xd9, 0x0b, 0x7b,
+  0x27, 0x7e, 0xba, 0xbb, 0xfb, 0xe0, 0xed, 0x51, 0x96, 0x31, 0xad, 0xc9,
+  0x03, 0xbc, 0x91, 0xde, 0xce, 0x76, 0xaf, 0x8f, 0x97, 0x60, 0xc4, 0xc4,
+  0x53, 0x56, 0x08, 0xa1, 0x4e, 0x31, 0x2f, 0x45, 0x74, 0xc0, 0x1b, 0x36,
+  0xf0, 0x43, 0xd5, 0x3c, 0x8e, 0x57, 0x21, 0xcf, 0xaf, 0xdc, 0x60, 0x5d,
+  0x96, 0x0f, 0xb6, 0x8b, 0x08, 0x49, 0x73, 0xbd, 0x90, 0x90, 0x66, 0x25,
+  0xe5, 0x61, 0x72, 0x00, 0xaf, 0x00, 0xb5, 0x50, 0xfb, 0x4d, 0x24, 0xde,
+  0x56, 0x05, 0xd4, 0x43, 0xba, 0x91, 0x44, 0x5d, 0xba, 0x9b, 0x1a, 0x63,
+  0x33, 0xdb, 0x70, 0x9b, 0x21, 0xb2, 0xad, 0xd5, 0x58, 0x4b, 0xd2, 0x8d,
+  0x13, 0x23, 0xb3, 0xc8, 0x8d, 0x7a, 0x13, 0xbc, 0xbc, 0x28, 0xed, 0xbb,
+  0x74, 0x6b, 0x5e, 0x17, 0xe5, 0xad, 0x91, 0xf5, 0x8b, 0x92, 0x4f, 0x98,
+  0xf2, 0x0f, 0x1a, 0x76, 0x57, 0x18, 0x31, 0xac, 0x53, 0x04, 0x63, 0x91,
+  0x82, 0x82, 0xcb, 0x5f, 0x05, 0x2d, 0x8f, 0xb5, 0x79, 0xb2, 0x49, 0x70,
+  0x21, 0x81, 0xe9, 0xd9, 0x60, 0xc6, 0xac, 0x71, 0xd2, 0x93, 0x4a, 0xb4,
+  0x5e, 0x0c, 0x17, 0x42, 0x3b, 0x8c, 0xc4, 0xda, 0x1b, 0xf4, 0xfa, 0xab,
+  0x2f, 0xa4, 0xba, 0x35, 0x03, 0x11, 0x48, 0x98, 0x5d, 0x44, 0x64, 0x22,
+  0x3a, 0x78, 0xea, 0x3e, 0x96, 0xe8, 0x56, 0x39, 0x93, 0x1c, 0x39, 0x27,
+  0x42, 0x6b, 0x44, 0x66, 0xa5, 0x93, 0xd4, 0x55, 0x4e, 0x9d, 0x7d, 0x8c,
+  0x05, 0x57, 0xab, 0xea, 0xcb, 0xd0, 0x86, 0xc9, 0x7e, 0xc1, 0x71, 0x91,
+  0xb7, 0x29, 0x28, 0xcf, 0xb6, 0x0f, 0x39, 0xbf, 0xbb, 0xda, 0xa5, 0xbd,
+  0x27, 0x5a, 0x42, 0xda, 0x0a, 0xd1, 0x48, 0xd4, 0x3d, 0x79, 0x88, 0x0e,
+  0x81, 0xe1, 0xd0, 0xeb, 0xb8, 0xe1, 0xc5, 0x4e, 0x86, 0x68, 0x13, 0xbb,
+  0x28, 0x7c, 0x6f, 0xdc, 0x5e, 0x95, 0x33, 0xf6, 0x7e, 0x77, 0x9a, 0xf3,
+  0x14, 0x3e, 0xc8, 0x2b, 0xb0, 0x33, 0x91, 0x85, 0x91, 0x84, 0x8d, 0x2a,
+  0x83, 0xe3, 0x83, 0x42, 0x5e, 0xab, 0x8a, 0x9c, 0xb3, 0xb3, 0x2c, 0xad,
+  0x66, 0xf7, 0xc3, 0x44, 0x74, 0x81, 0x64, 0x70, 0xd3, 0x69, 0x0e, 0xcb,
+  0x49, 0x66, 0x41, 0x43, 0x61, 0x69, 0x55, 0xd0, 0x43, 0xe2, 0x6d, 0xd7,
+  0x78, 0xf3, 0x86, 0xe3, 0x1f, 0x38, 0x48, 0x83, 0x84, 0xd0, 0x9b, 0x9c,
+  0x4c, 0x0f, 0x86, 0x1e, 0x8c, 0x02, 0xdb, 0xa5, 0x44, 0xf2, 0x0b, 0x80,
+  0x68, 0xd0, 0x24, 0x07, 0x97, 0x5d, 0xe5, 0x9e, 0xbd, 0xc2, 0x9c, 0xc5,
+  0x2b, 0x73, 0x43, 0xd6, 0x79, 0xb3, 0x4c, 0xa3, 0xcb, 0x35, 0x82, 0x0e,
+  0xfe, 0xd9, 0xf0, 0xe9, 0x93, 0xe1, 0xb6, 0xd3, 0x24, 0x70, 0x95, 0x53,
+  0x1c, 0x42, 0x3e, 0x97, 0x84, 0x1d, 0x51, 0xc7, 0x02, 0x59, 0x2e, 0x98,
+  0x9f, 0x46, 0xf1, 0x88, 0xa8, 0x00, 0x02, 0xd6, 0xd0, 0xfa, 0xec, 0x4e,
+  0x5a, 0x1b, 0xdf, 0xfb, 0x17, 0x7a, 0x54, 0x2d, 0x0c, 0x6e, 0x86, 0x07,
+  0xaf, 0xfc, 0x36, 0x8f, 0x88, 0xc9, 0x54, 0x2b, 0x04, 0x82, 0x03, 0xa6,
+  0x28, 0xc3, 0xf5, 0x8b, 0xa5, 0x91, 0x0a, 0x9a, 0xe4, 0x65, 0x79, 0x71,
+  0x61, 0x8e, 0xe0, 0x17, 0x81, 0x02, 0xc2, 0x8f, 0x6c, 0x9d, 0x21, 0x33,
+  0xc6, 0xbb, 0x67, 0xda, 0xc1, 0xa2, 0x09, 0x5b, 0x5e, 0xcd, 0x01, 0xba,
+  0xcc, 0x89, 0x44, 0x12, 0x6e, 0x6e, 0x18, 0x51, 0x43, 0xda, 0x4f, 0xf0,
+  0xed, 0x87, 0x37, 0x39, 0xda, 0xc5, 0xa5, 0xd2, 0x98, 0xe5, 0x6a, 0xec,
+  0xae, 0xf0, 0x34, 0xba, 0x9a, 0xea, 0x75, 0xbe, 0x58, 0x10, 0x05, 0x21,
+  0x08, 0xdf, 0xda, 0x2f, 0xa8, 0xb5, 0x71, 0x66, 0xce, 0x29, 0x08, 0x4d,
+  0x85, 0xce, 0x72, 0x69, 0xa4, 0x12, 0x65, 0x5d, 0xe3, 0xcc, 0xec, 0x63,
+  0xb7, 0x39, 0x55, 0xb7, 0x5d, 0xbc, 0xa5, 0x68, 0x33, 0x53, 0x8a, 0xad,
+  0x2c, 0x84, 0xad, 0xd3, 0x36, 0xb9, 0x10, 0x2e, 0x31, 0xf7, 0xf4, 0x23,
+  0x1c, 0xc9, 0x99, 0x96, 0x2d, 0x93, 0x19, 0x1d, 0xfd, 0xcf, 0x43, 0x17,
+  0x1d, 0x6b, 0xc3, 0x4f, 0xef, 0x71, 0x04, 0x63, 0xb7, 0xa6, 0x61, 0x77,
+  0x07, 0xc9, 0xa0, 0x87, 0x81, 0x10, 0xf7, 0xd7, 0x8b, 0xc9, 0xdc, 0xd9,
+  0x25, 0x85, 0x94, 0x70, 0x18, 0x31, 0xf2, 0x73, 0x88, 0xfe, 0xc8, 0xb8,
+  0x53, 0x65, 0x5b, 0x14, 0xc8, 0x13, 0x5a, 0x7d, 0x39, 0xb9, 0x49, 0x16,
+  0xdb, 0x49, 0x76, 0x47, 0x0d, 0x0b, 0xde, 0x10, 0xb3, 0xe8, 0x3b, 0xde,
+  0x1f, 0x0e, 0x51, 0xdc, 0x82, 0x0a, 0xc8, 0x01, 0xb6, 0x21, 0x83, 0x12,
+  0x2b, 0x28, 0x87, 0x13, 0x2e, 0x3f, 0xa5, 0x00, 0x3b, 0x98, 0xe4, 0x8b,
+  0x2b, 0xd2, 0xd4, 0x5e, 0x22, 0x6a, 0x89, 0xcc, 0xc1, 0xfc, 0xc1, 0x17,
+  0x51, 0x27, 0xd7, 0x48, 0xce, 0x45, 0x2d, 0xb7, 0xbb, 0xbe, 0x2d, 0x4c,
+  0x35, 0x57, 0xc5, 0x4a, 0xe3, 0xa0, 0x25, 0x52, 0xce, 0x34, 0xdd, 0xe5,
+  0x83, 0xe6, 0x48, 0xea, 0xcb, 0x6c, 0x6a, 0x73, 0x9a, 0x1b, 0x62, 0xbb,
+  0xf5, 0xdb, 0x61, 0x72, 0x46, 0x97, 0xf7, 0x72, 0x41, 0xea, 0x0a, 0x32,
+  0xcf, 0xf0, 0x79, 0xa0, 0x97, 0xd4, 0x8d, 0x1f, 0x98, 0x81, 0xd4, 0x2c,
+  0xbf, 0xbb, 0xa2, 0x25, 0xad, 0xe5, 0xfe, 0x77, 0x46, 0x84, 0xde, 0xeb,
+  0x5a, 0x6b, 0xc9, 0xc7, 0x2c, 0xa9, 0x1f, 0x86, 0x63, 0x17, 0x75, 0x3d,
+  0x43, 0xbe, 0xcd, 0xb4, 0x9c, 0xd4, 0x5b, 0xe9, 0x62, 0x51, 0x6f, 0xe9,
+  0xe8, 0x5a, 0x99, 0x35, 0x6a, 0xa3, 0x1a, 0x8d, 0xbc, 0xc9, 0x41, 0x85,
+  0x86, 0x15, 0xd9, 0x4a, 0x86, 0x33, 0xb8, 0xd6, 0x0b, 0x71, 0x86, 0x70,
+  0xb4, 0xdc, 0xd7, 0xc5, 0xf2, 0xfc, 0x78, 0x84, 0xf5, 0xea, 0xde, 0xe7,
+  0x94, 0xeb, 0xa1, 0xbb, 0x43, 0x6d, 0x6b, 0xd3, 0x30, 0xbb, 0xb0, 0x54,
+  0x30, 0x1a, 0x1d, 0xe0, 0xc3, 0xd1, 0x92, 0xe4, 0x2a, 0xd3, 0x45, 0x75,
+  0x9f, 0xa8, 0xcf, 0xa6, 0x4b, 0xfc, 0x66, 0xba, 0xc9, 0xc7, 0xfe, 0xa7,
+  0x0b, 0x71, 0x99, 0x37, 0xc3, 0x8b, 0x6c, 0x5a, 0x56, 0x69, 0x60, 0xd8,
+  0x2e, 0x29, 0xf3, 0x09, 0xab, 0x33, 0x31, 0x4f, 0x6d, 0x19, 0x6d, 0xe1,
+  0x83, 0x59, 0xaf, 0x21, 0xfd, 0x0e, 0x63, 0x0c, 0x2f, 0x9a, 0x7e, 0x4c,
+  0xeb, 0xf5, 0xc7, 0xd7, 0x50, 0xa6, 0xcd, 0x69, 0xa8, 0x3f, 0x25, 0x61,
+  0x1b, 0xd1, 0x11, 0xee, 0xbd, 0x69, 0x5c, 0x54, 0x3d, 0x53, 0x13, 0x7e,
+  0xe2, 0x9e, 0x74, 0x41, 0xb9, 0xdd, 0x94, 0x53, 0x23, 0x1b, 0x5e, 0x96,
+  0xe6, 0x92, 0xbf, 0x9a, 0x77, 0xd7, 0x93, 0x35, 0x1b, 0x75, 0xa1, 0x4b,
+  0x5e, 0xa3, 0x51, 0xc5, 0x6f, 0x94, 0x23, 0x2c, 0x0b, 0xaf, 0x03, 0xb3,
+  0x18, 0x86, 0x57, 0x14, 0xe2, 0xa3, 0x8b, 0x6c, 0x4f, 0x67, 0xe6, 0x9a,
+  0xdc, 0x22, 0xfc, 0x0e, 0x7e, 0xad, 0x9a, 0xbd, 0x05, 0xcb, 0xc2, 0xe5,
+  0xbf, 0xb2, 0x97, 0x89, 0xfc, 0x49, 0xb1, 0xd1, 0x61, 0x89, 0x3a, 0xc2,
+  0x45, 0x7b, 0xa9, 0x70, 0x5e, 0x07, 0xb4, 0xbc, 0xc4, 0xed, 0x5e, 0xd6,
+  0x46, 0xce, 0x32, 0xfd, 0x7c, 0x11, 0x84, 0xf4, 0xdd, 0xe5, 0xf3, 0xe5,
+  0x3c, 0xc1, 0x3e, 0xb0, 0x27, 0x4b, 0x9e, 0x54, 0x8b, 0x3e, 0xc9, 0x0e,
+  0x08, 0x7a, 0x43, 0xc7, 0xeb, 0xb5, 0xc7, 0x0a, 0x42, 0xbe, 0xd9, 0x18,
+  0xc1, 0x4e, 0x75, 0x54, 0x09, 0x9c, 0x9c, 0x53, 0xc8, 0x53, 0x9b, 0x85,
+  0x24, 0x8b, 0xab, 0xb4, 0xce, 0x5c, 0xa4, 0x3c, 0xaf, 0xb7, 0x9f, 0xf4,
+  0xd0, 0xca, 0x7d, 0xd0, 0x8c, 0x28, 0xc7, 0x70, 0x8d, 0xc4, 0x95, 0x97,
+  0x53, 0xeb, 0xe1, 0xd4, 0xcb, 0x39, 0x19, 0x50, 0x73, 0x74, 0x5d, 0xc8,
+  0x37, 0x5d, 0x75, 0xfb, 0x0e, 0x9e, 0x54, 0x16, 0x68, 0xd4, 0x8b, 0xff,
+  0xd9, 0xf0, 0xc9, 0x2e, 0x45, 0x6b, 0xf8, 0x44, 0x2a, 0x29, 0x22, 0x86,
+  0xeb, 0x4c, 0xf2, 0xb9, 0x8d, 0xbb, 0x5d, 0xad, 0x6c, 0x41, 0xf2, 0x9c,
+  0x93, 0x9c, 0x30, 0x4f, 0xef, 0xb0, 0xe6, 0x0f, 0xca, 0x9e, 0xbf, 0xd3,
+  0x69, 0x80, 0xac, 0x6a, 0xf4, 0xca, 0xaa, 0x4b, 0x70, 0x2d, 0xdf, 0xb4,
+  0x59, 0x9c, 0xbf, 0x19, 0x7a, 0xed, 0x58, 0x6d, 0x35, 0x0e, 0xb5, 0x93,
+  0xf1, 0xc4, 0x6d, 0x46, 0x0c, 0xb5, 0xb4, 0x15, 0x86, 0xdc, 0x29, 0x84,
+  0x28, 0x21, 0x63, 0x2f, 0x85, 0x80, 0xd2, 0x89, 0x2f, 0xcd, 0x07, 0x57,
+  0xb9, 0x19, 0x7b, 0x35, 0xb9, 0xba, 0x27, 0x85, 0x8b, 0x9c, 0x28, 0x64,
+  0x34, 0xf2, 0x02, 0x09, 0xba, 0xf4, 0x8b, 0x3e, 0x44, 0xd5, 0xcf, 0xc9,
+  0xa2, 0x48, 0x1a, 0x75, 0x59, 0xa8, 0x98, 0xd0, 0x19, 0x1f, 0xe9, 0x01,
+  0x74, 0x70, 0xb3, 0x59, 0x9d, 0xe1, 0x88, 0xc5, 0x46, 0x37, 0x28, 0x3d,
+  0x65, 0x08, 0xb7, 0x33, 0x69, 0x69, 0x79, 0x05, 0xe3, 0xe3, 0x85, 0xeb,
+  0x8a, 0x3c, 0x49, 0xdc, 0x1b, 0xa9, 0x86, 0xa4, 0x43, 0xde, 0x87, 0x34,
+  0x42, 0x5a, 0xba, 0xbc, 0xae, 0x6b, 0xaf, 0xfe, 0xf3, 0x40, 0x2f, 0x2a,
+  0xe5, 0x2b, 0x55, 0x20, 0x75, 0x55, 0x72, 0xcd, 0x0f, 0x64, 0xae, 0x43,
+  0xf2, 0x8d, 0x19, 0x0a, 0xe7, 0x95, 0x13, 0x27, 0x37, 0xfb, 0x77, 0xd1,
+  0x04, 0x8e, 0x1a, 0x6f, 0x4b, 0xdb, 0x3b, 0x3d, 0xbb, 0x20, 0xf1, 0xd2,
+  0xd0, 0x48, 0x93, 0x1c, 0xbf, 0xa1, 0xab, 0xf9, 0xe0, 0xcc, 0xfc, 0xcc,
+  0x35, 0xec, 0x80, 0x3c, 0x0b, 0xc8, 0x0b, 0x27, 0x9b, 0xce, 0xdb, 0xef,
+  0x46, 0xc9, 0xc6, 0xc9, 0x68, 0xeb, 0xc9, 0x8b, 0xed, 0xd0, 0xba, 0xb0,
+  0x41, 0xc9, 0xeb, 0x12, 0x6f, 0x8c, 0x80, 0xaa, 0xa7, 0xdb, 0xed, 0x68,
+  0x35, 0xea, 0x8b, 0x56, 0x12, 0x76, 0x81, 0xa8, 0x49, 0x60, 0xb4, 0x45,
+  0xe9, 0xf7, 0x9b, 0x2e, 0xe9, 0xcf, 0x1a, 0x73, 0x69, 0xa6, 0xa7, 0x87,
+  0x6f, 0xd5, 0x86, 0xcb, 0x91, 0x54, 0xc9, 0x81, 0x19, 0x35, 0xf9, 0x2b,
+  0x43, 0xc2, 0x3a, 0xcb, 0x6e, 0xd4, 0x6f, 0x70, 0x4c, 0x97, 0x21, 0x18,
+  0x0e, 0xd9, 0x97, 0x55, 0x6e, 0x58, 0x64, 0x24, 0x10, 0xba, 0xf7, 0x45,
+  0xc2, 0xe5, 0x0b, 0x38, 0x60, 0x3e, 0xe3, 0xcc, 0x8f, 0x81, 0x31, 0xb2,
+  0x37, 0x25, 0x66, 0x7e, 0xba, 0x13, 0x18, 0x89, 0x4e, 0xdb, 0x79, 0x31,
+  0xfc, 0x6c, 0xd3, 0xae, 0xe5, 0xb4, 0xaf, 0x49, 0x03, 0x2f, 0x1f, 0x70,
+  0xf2, 0x19, 0x2e, 0x22, 0xdc, 0x36, 0xf3, 0xd3, 0xb2, 0xf0, 0x1e, 0x5c,
+  0x70, 0xc8, 0x9f, 0x51, 0xef, 0xb4, 0xe7, 0x04, 0xec, 0x0a, 0xf8, 0x82,
+  0xac, 0xa0, 0xd9, 0xb9, 0xd0, 0x68, 0x52, 0x89, 0xf8, 0x4b, 0x93, 0x71,
+  0x55, 0xde, 0x92, 0x01, 0x89, 0x33, 0x58, 0x98, 0x36, 0xc9, 0x64, 0x00,
+  0xab, 0x52, 0x72, 0x95, 0x06, 0x5e, 0x58, 0x33, 0x67, 0x89, 0x49, 0x4f,
+  0xc9, 0xfb, 0xf2, 0xf6, 0x98, 0x73, 0x38, 0xe8, 0xf6, 0x5a, 0x48, 0x8c,
+  0x0d, 0xfa, 0x59, 0x8e, 0x0d, 0x87, 0x27, 0xbd, 0xb4, 0x61, 0xd9, 0x30,
+  0xaf, 0x63, 0xac, 0x17, 0xa6, 0x49, 0x2b, 0x92, 0x2f, 0x62, 0x8e, 0x4d,
+  0xb9, 0x0f, 0x9d, 0x61, 0x84, 0xd8, 0xba, 0x39, 0xac, 0x03, 0xb2, 0x7d,
+  0x76, 0x8d, 0x49, 0x8b, 0xc5, 0x4c, 0x8c, 0x70, 0x5b, 0x77, 0x03, 0x23,
+  0xd3, 0x0d, 0x68, 0x70, 0x03, 0xd3, 0x3c, 0xc7, 0x66, 0x90, 0xd5, 0xfa,
+  0xc0, 0x5c, 0xd1, 0x44, 0x28, 0xa6, 0xf9, 0xc1, 0x1b, 0xda, 0x0a, 0x7a,
+  0x24, 0xd8, 0x3e, 0x6f, 0x97, 0x44, 0xa5, 0xc6, 0xca, 0x51, 0x7a, 0x03,
+  0x3e, 0x65, 0x33, 0xf0, 0x50, 0xff, 0xaa, 0xd2, 0x5b, 0x64, 0x91, 0xcc,
+  0x10, 0x8f, 0x10, 0x89, 0xef, 0xa0, 0x97, 0x49, 0x49, 0xb7, 0x89, 0x42,
+  0xc8, 0xf3, 0x4d, 0x35, 0xab, 0x96, 0x03, 0x8f, 0xcd, 0x02, 0x36, 0x69,
+  0xe3, 0xd2, 0x05, 0x92, 0x2f, 0x25, 0x1f, 0x37, 0xb4, 0x23, 0x55, 0x12,
+  0x73, 0xb2, 0x40, 0x0a, 0x00, 0xa7, 0xa0, 0x2c, 0x8c, 0x26, 0x41, 0x26,
+  0x7b, 0xf2, 0xc6, 0x55, 0xf7, 0x9c, 0x07, 0x21, 0xfe, 0x32, 0x8d, 0x1a,
+  0x58, 0xe1, 0x3c, 0xe2, 0x49, 0xf0, 0x7b, 0xd6, 0x57, 0x47, 0xed, 0x1b,
+  0x11, 0x72, 0x20, 0x61, 0x2d, 0x34, 0x1e, 0x4e, 0xf1, 0xa1, 0x14, 0x7f,
+  0x36, 0x3e, 0x49, 0xb4, 0x4c, 0xa7, 0x39, 0x64, 0xbd, 0xa6, 0x70, 0x82,
+  0x69, 0xd3, 0x76, 0x07, 0xa2, 0x1a, 0xbb, 0xcb, 0x34, 0xaa, 0x5d, 0x7e,
+  0x89, 0x9e, 0x40, 0x84, 0x3a, 0x42, 0x88, 0x46, 0x82, 0x49, 0x59, 0xb4,
+  0xf2, 0x16, 0x06, 0x81, 0x09, 0x49, 0xf2, 0x18, 0xfa, 0x9e, 0x57, 0x3b,
+  0xa7, 0x4b, 0xca, 0xcf, 0x6d, 0xb4, 0x66, 0x37, 0xc3, 0xf6, 0xab, 0x4b,
+  0xfa, 0x44, 0x2d, 0xab, 0x11, 0xab, 0x04, 0x9b, 0xd0, 0x38, 0x6d, 0x00,
+  0xb6, 0x99, 0x7f, 0x1b, 0xb0, 0xc7, 0x19, 0x12, 0xcd, 0x92, 0x04, 0x41,
+  0xf1, 0x9b, 0xad, 0x0f, 0xa6, 0x89, 0x38, 0xef, 0x0b, 0xb3, 0x2e, 0x86,
+  0x88, 0x42, 0x6d, 0x7b, 0x36, 0x7b, 0x35, 0x33, 0xba, 0xff, 0xfd, 0x7a,
+  0x22, 0x89, 0x77, 0x92, 0x1e, 0x43, 0xb1, 0x12, 0xa9, 0xee, 0xe7, 0xe4,
+  0x6a, 0x59, 0x5c, 0xab, 0xa4, 0x35, 0x2b, 0x4b, 0x8a, 0x26, 0x22, 0x87,
+  0x4c, 0xa7, 0xb9, 0x75, 0xaf, 0xb3, 0x7f, 0xf3, 0xdb, 0x8e, 0xae, 0x32,
+  0xdc, 0x37, 0x92, 0xf5, 0x65, 0xd7, 0xc6, 0x5e, 0xad, 0x9c, 0xf7, 0x9e,
+  0x7c, 0xd9, 0xd7, 0xe0, 0x96, 0xc6, 0xf3, 0xb5, 0xa6, 0x21, 0x17, 0x70,
+  0x16, 0x46, 0x98, 0x5c, 0x6d, 0x83, 0xec, 0x15, 0x27, 0x6b, 0xb6, 0xba,
+  0x16, 0x9d, 0x39, 0x18, 0xf6, 0x48, 0x7a, 0x3c, 0x72, 0x57, 0x3b, 0x4c,
+  0x18, 0xc4, 0x4e, 0x0c, 0x93, 0xb7, 0x7e, 0x4a, 0x6d, 0x3b, 0xf8, 0xc9,
+  0xee, 0xe4, 0x30, 0x39, 0x35, 0xeb, 0x35, 0x08, 0xfc, 0xdb, 0x97, 0x5e,
+  0x73, 0xa9, 0x1b, 0xed, 0x34, 0x59, 0xbf, 0x28, 0xcb, 0x71, 0x5a, 0xb9,
+  0xc5, 0x47, 0x90, 0x0e, 0x28, 0x81, 0x63, 0xc2, 0x68, 0x3d, 0xa2, 0xa7,
+  0x23, 0x49, 0xbe, 0xe4, 0x77, 0x87, 0x22, 0x48, 0xd9, 0xcf, 0x89, 0x3f,
+  0x94, 0xb3, 0xa9, 0x5d, 0x0a, 0xbf, 0xd7, 0xc8, 0xa6, 0xd1, 0xa6, 0xf6,
+  0xcd, 0x74, 0xaa, 0x2a, 0xa7, 0xfc, 0x76, 0x73, 0xe4, 0x97, 0x55, 0xc1,
+  0xf9, 0xa7, 0x45, 0x76, 0xcb, 0xb1, 0x05, 0xd6, 0x79, 0x47, 0x11, 0x41,
+  0x94, 0x10, 0x4f, 0xa6, 0x01, 0x31, 0xf3, 0x06, 0x8e, 0x35, 0x38, 0x43,
+  0x39, 0x45, 0xdb, 0x63, 0x19, 0x0d, 0x7b, 0xf8, 0x1e, 0x66, 0x33, 0xe6,
+  0x80, 0xc5, 0x59, 0x01, 0xf8, 0x19, 0xf3, 0x0c, 0x4f, 0xe2, 0x78, 0x0d,
+  0x9e, 0xb8, 0x9c, 0x2f, 0x34, 0xb4, 0x2c, 0x2a, 0x0d, 0x7c, 0x0f, 0x8b,
+  0xbf, 0x24, 0x9e, 0x72, 0x22, 0xbc, 0x3a, 0xe8, 0x95, 0xa5, 0xb7, 0x6c,
+  0x6e, 0x71, 0xab, 0xb2, 0xbb, 0x87, 0x39, 0x16, 0xc1, 0xe6, 0x92, 0x9b,
+  0xa5, 0xf7, 0x72, 0xd2, 0xc5, 0x3b, 0xce, 0xd7, 0xa4, 0x74, 0x13, 0x73,
+  0xd9, 0x40, 0x8f, 0xe2, 0x18, 0x99, 0x1c, 0x06, 0x7d, 0xba, 0x5c, 0xcd,
+  0xeb, 0xa6, 0xa9, 0xa1, 0xc4, 0x08, 0x78, 0x99, 0xd8, 0x3a, 0xde, 0x09,
+  0x11, 0x49, 0xcc, 0xa9, 0x3c, 0xce, 0x78, 0xaf, 0x71, 0x13, 0x8b, 0x6a,
+  0x64, 0x41, 0x8f, 0x0a, 0x2b, 0xbe, 0x20, 0x3a, 0xdf, 0x3a, 0xd5, 0x33,
+  0x04, 0xfa, 0x04, 0x0b, 0xae, 0x7e, 0x60, 0x9e, 0xf1, 0x1f, 0x60, 0x47,
+  0x59, 0xe1, 0xce, 0xe7, 0x4c, 0xc5, 0x31, 0x1f, 0x55, 0x36, 0x81, 0x07,
+  0x81, 0x84, 0x5e, 0xb0, 0x40, 0xb0, 0xb2, 0x2d, 0x0d, 0x40, 0x3c, 0x91,
+  0x99, 0x6f, 0x65, 0xb3, 0x5a, 0xb1, 0xc4, 0xb8, 0x40, 0xa2, 0x72, 0xd2,
+  0x53, 0x20, 0x59, 0xd1, 0xcc, 0x7a, 0xb2, 0x5a, 0x3d, 0x51, 0x61, 0x97,
+  0xec, 0x16, 0x21, 0xbd, 0x18, 0x7c, 0xa1, 0xfa, 0xa4, 0x11, 0x87, 0xee,
+  0x32, 0x8e, 0x8b, 0x53, 0xa4, 0x8c, 0xb9, 0xcb, 0x3c, 0x78, 0x53, 0xee,
+  0xbc, 0x07, 0x25, 0x31, 0xf6, 0x72, 0x10, 0x67, 0x16, 0x27, 0x2a, 0xcc,
+  0xac, 0x33, 0xe8, 0x35, 0x9d, 0x60, 0x10, 0xa3, 0x1f, 0x70, 0x68, 0x9f,
+  0x21, 0xfd, 0x40, 0x8a, 0xa7, 0xe0, 0x1f, 0x0a, 0xf2, 0x34, 0xf4, 0x58,
+  0x97, 0xd9, 0x8d, 0x9f, 0xc2, 0xd6, 0x41, 0xa5, 0x00, 0x93, 0xfe, 0x28,
+  0x1e, 0xed, 0x87, 0x1a, 0x45, 0xd9, 0x34, 0x23, 0x64, 0x24, 0xc9, 0x6b,
+  0xe5, 0x55, 0x98, 0x88, 0x45, 0x71, 0xe1, 0x14, 0x68, 0x85, 0x70, 0xe9,
+  0x88, 0x37, 0x91, 0x40, 0xe2, 0xbe, 0x99, 0x1f, 0x32, 0x17, 0x71, 0xaa,
+  0x2c, 0xc3, 0xe2, 0x80, 0x08, 0x61, 0x69, 0x96, 0xa7, 0x31, 0xf9, 0x90,
+  0x58, 0x48, 0xd4, 0x35, 0x8d, 0x84, 0x71, 0x4e, 0xa0, 0xbd, 0xd4, 0x36,
+  0x13, 0xb4, 0xc8, 0x90, 0xff, 0x61, 0x36, 0xfc, 0xe3, 0x4c, 0xfb, 0x2b,
+  0xe9, 0x06, 0x40, 0x3b, 0x2e, 0xa1, 0x2f, 0x94, 0x79, 0x38, 0xca, 0x93,
+  0x9d, 0x54, 0x1c, 0x8b, 0x8d, 0xb5, 0x4e, 0x6b, 0x81, 0x66, 0x1a, 0xf3,
+  0x12, 0x3d, 0x40, 0x3a, 0xc4, 0x23, 0x1f, 0xa2, 0x9b, 0x73, 0xf1, 0xa7,
+  0x28, 0xd5, 0xc8, 0x5a, 0xcf, 0xc0, 0xcb, 0xe4, 0xf2, 0x20, 0x91, 0x50,
+  0x3d, 0x1f, 0x2a, 0xe9, 0x07, 0x74, 0x43, 0x8c, 0xfb, 0x11, 0x01, 0x11,
+  0x02, 0x61, 0x87, 0xd4, 0x93, 0x07, 0x12, 0xfb, 0x9e, 0x76, 0xb2, 0xbc,
+  0xda, 0x42, 0xda, 0xaf, 0x99, 0x56, 0xdf, 0xd2, 0x90, 0x30, 0x77, 0xf6,
+  0xcf, 0xc9, 0xfc, 0x54, 0x98, 0x8b, 0x5c, 0xab, 0x9c, 0x9d, 0x4b, 0xb4,
+  0x04, 0x93, 0x11, 0x27, 0xb2, 0x51, 0xd3, 0x59, 0x45, 0xa2, 0x65, 0xed,
+  0x64, 0x4f, 0xb3, 0x81, 0xed, 0x8c, 0xbb, 0x9d, 0xcf, 0x69, 0xf4, 0x81,
+  0xca, 0x8d, 0x33, 0x70, 0xf0, 0xf5, 0x11, 0x0c, 0x82, 0xb3, 0xdc, 0x5c,
+  0x10, 0xec, 0xe6, 0x94, 0xe9, 0x30, 0x18, 0x96, 0x15, 0x6a, 0x2e, 0xf3,
+  0x42, 0x55, 0xd1, 0x22, 0x8c, 0xa6, 0xd1, 0x58, 0x1f, 0x8d, 0xe9, 0x91,
+  0x7c, 0x70, 0x09, 0xcd, 0x11, 0x15, 0xc4, 0xc6, 0xdc, 0xa6, 0xce, 0x02,
+  0x1e, 0x5f, 0x3b, 0x74, 0x2d, 0xf9, 0xd9, 0xa4, 0xe5, 0xb0, 0x63, 0x04,
+  0xf7, 0x45, 0x60, 0x7f, 0x74, 0x54, 0xcb, 0xc8, 0x62, 0x59, 0xbd, 0xb7,
+  0x16, 0x78, 0x6a, 0xd1, 0x7f, 0x1c, 0xfa, 0x8f, 0xd9, 0x95, 0x03, 0x4d,
+  0x43, 0x2f, 0x1d, 0x41, 0x5e, 0x27, 0x00, 0xb5, 0x8d, 0xb5, 0xae, 0x74,
+  0x45, 0x73, 0x34, 0xb1, 0xff, 0x90, 0x08, 0x59, 0x73, 0xc4, 0x61, 0x4f,
+  0xa8, 0x4b, 0x97, 0x79, 0xa8, 0x4d, 0xd9, 0x3c, 0x03, 0x7c, 0x92, 0x06,
+  0xb1, 0x5d, 0xf6, 0xd4, 0x9b, 0x2b, 0xf1, 0x15, 0xe0, 0x9b, 0x0c, 0xf5,
+  0x4a, 0xec, 0xa6, 0x39, 0xb4, 0xa9, 0xef, 0xa6, 0xc2, 0x1d, 0x8b, 0xc1,
+  0x43, 0x5c, 0xc0, 0x32, 0xc4, 0x9b, 0x43, 0x04, 0xa5, 0xbf, 0x7a, 0x4c,
+  0x7e, 0x84, 0xda, 0x50, 0x33, 0xba, 0xdc, 0x1f, 0xba, 0x8b, 0xf7, 0xea,
+  0xf1, 0xd5, 0xfb, 0x95, 0x8b, 0xf7, 0xc8, 0xea, 0x9d, 0x5f, 0x71, 0xae,
+  0x56, 0x86, 0xf8, 0xe0, 0x57, 0x5e, 0xbc, 0x2a, 0x6c, 0x92, 0x1c, 0xf2,
+  0x64, 0x1d, 0xa5, 0x6d, 0x5e, 0xe3, 0x39, 0x22, 0x5f, 0xfd, 0x6e, 0xbb,
+  0x0e, 0x6a, 0xd4, 0xd1, 0xc7, 0x9b, 0x63, 0x87, 0x94, 0x19, 0x3c, 0xa2,
+  0xb8, 0xed, 0x66, 0x33, 0xd6, 0x10, 0xbd, 0x4e, 0xe1, 0x6a, 0x77, 0x86,
+  0xfc, 0x1b, 0x26, 0x65, 0x9c, 0x3d, 0xea, 0x2e, 0xde, 0x9c, 0xa8, 0xdf,
+  0x6a, 0x5c, 0x0b, 0xe6, 0xf7, 0xa5, 0x5e, 0x55, 0x8f, 0x4e, 0xae, 0x15,
+  0xde, 0x8a, 0xc8, 0x6a, 0xd1, 0x7e, 0x21, 0xbc, 0xf9, 0x0e, 0xd4, 0x88,
+  0x3f, 0x57, 0x39, 0x99, 0xcb, 0x52, 0x21, 0x72, 0xd4, 0x5b, 0x6c, 0xb3,
+  0xdf, 0x5e, 0x30, 0xc2, 0x5c, 0x40, 0xd3, 0xb0, 0xf3, 0xaf, 0x5e, 0xab,
+  0x1c, 0x01, 0x76, 0xb2, 0x7d, 0x64, 0x96, 0x89, 0x6e, 0xdf, 0xff, 0xe9,
+  0x53, 0x84, 0x67, 0x4d, 0x53, 0x5a, 0x78, 0x9a, 0xe2, 0x8d, 0x76, 0x44,
+  0x71, 0x89, 0xc0, 0xa8, 0x22, 0xc9, 0xfe, 0xbe, 0x44, 0xec, 0xc0, 0xe5,
+  0x2a, 0x26, 0x80, 0x1b, 0x97, 0xdc, 0xce, 0xe4, 0x51, 0x9d, 0x41, 0xad,
+  0x16, 0x97, 0xff, 0x2b, 0x67, 0xac, 0x19, 0x20, 0x52, 0x5b, 0x88, 0x96,
+  0x29, 0xf1, 0x01, 0x62, 0xb5, 0xe4, 0xd9, 0xa1, 0xcc, 0x71, 0xe6, 0x4d,
+  0x39, 0x42, 0x81, 0xe6, 0xa6, 0xca, 0x66, 0xd9, 0xa5, 0xd8, 0x1b, 0x0f,
+  0xbf, 0x3b, 0x3c, 0x0e, 0x24, 0xc8, 0x86, 0x3f, 0xb7, 0x2e, 0x64, 0xcf,
+  0x2c, 0xa5, 0xe8, 0x51, 0x30, 0xfe, 0xf0, 0x8d, 0x41, 0x38, 0x3e, 0xdc,
+  0x62, 0x34, 0x53, 0x20, 0xa7, 0xb8, 0x50, 0x49, 0x4e, 0x83, 0x95, 0x6d,
+  0x62, 0x04, 0x6b, 0x46, 0xd2, 0xab, 0x87, 0x1c, 0xe6, 0x85, 0x6b, 0xe9,
+  0xeb, 0xd1, 0x68, 0xeb, 0x3a, 0xab, 0xc6, 0x04, 0x56, 0x18, 0x12, 0x14,
+  0x94, 0xd5, 0xe4, 0x35, 0x94, 0x3f, 0x76, 0xc3, 0x20, 0xa0, 0xd5, 0xce,
+  0x24, 0x78, 0x63, 0x51, 0xce, 0xf2, 0xc9, 0x7d, 0xf2, 0x5a, 0x46, 0x56,
+  0x93, 0x76, 0x4e, 0x9b, 0x0e, 0x77, 0x8c, 0xd8, 0xc2, 0x4f, 0xbe, 0x1d,
+  0xec, 0x8f, 0x06, 0xaf, 0x0f, 0x8f, 0x0f, 0xbf, 0xde, 0x3f, 0x3f, 0xb4,
+  0x09, 0x60, 0xc8, 0x33, 0x59, 0x41, 0x17, 0x4a, 0x0f, 0xdf, 0xca, 0x48,
+  0xd9, 0xe0, 0x48, 0x89, 0x17, 0x84, 0x2e, 0x7a, 0x9d, 0x35, 0x1a, 0x21,
+  0xcf, 0xaa, 0xcb, 0x3c, 0x85, 0x04, 0x1b, 0x04, 0x7d, 0xbb, 0xe8, 0xad,
+  0xd9, 0x5c, 0x86, 0x1a, 0xcc, 0x20, 0x9d, 0xdd, 0x12, 0xda, 0xd2, 0xfb,
+  0x82, 0x94, 0x2d, 0x81, 0x3e, 0x21, 0x21, 0x1c, 0xb3, 0xf7, 0xb6, 0xc4,
+  0x5b, 0xff, 0xd6, 0x2e, 0x23, 0xd0, 0x2e, 0x2e, 0xd3, 0x70, 0xcc, 0xa6,
+  0x24, 0x2f, 0xbf, 0xc6, 0x83, 0x9d, 0x98, 0x3e, 0x17, 0x8a, 0x48, 0x8a,
+  0xa4, 0x7e, 0x17, 0x88, 0x6a, 0xa2, 0xf6, 0xd5, 0x93, 0xab, 0x6c, 0x6e,
+  0x93, 0x5f, 0x28, 0xde, 0xc3, 0x3c, 0x2d, 0x60, 0x4c, 0xe6, 0x8c, 0xdd,
+  0x52, 0x68, 0x13, 0x0e, 0x33, 0x6b, 0x50, 0x1c, 0xa3, 0x7b, 0x13, 0x58,
+  0x9f, 0x10, 0x5f, 0x94, 0x03, 0xff, 0x82, 0x23, 0x84, 0x10, 0xa6, 0x09,
+  0x22, 0xd1, 0x58, 0xfc, 0x78, 0xf4, 0xbd, 0x80, 0x69, 0x75, 0x55, 0xcd,
+  0x25, 0x92, 0x79, 0xd8, 0xb4, 0xab, 0x42, 0x34, 0x63, 0x55, 0x34, 0x6a,
+  0xf1, 0xc5, 0x09, 0xb2, 0x77, 0x03, 0x0d, 0x74, 0x68, 0xfd, 0x59, 0x61,
+  0xee, 0x0f, 0xd2, 0x82, 0xbc, 0xb0, 0x45, 0x8e, 0x43, 0xb4, 0x59, 0x3e,
+  0xe4, 0x76, 0x50, 0xa8, 0x55, 0x05, 0xcc, 0xf8, 0x6d, 0xaa, 0x20, 0x93,
+  0x29, 0xcf, 0x8d, 0x25, 0x77, 0xdc, 0xf9, 0xf1, 0xdc, 0xff, 0xf6, 0xae,
+  0x23, 0x9f, 0x7e, 0x90, 0x2d, 0xaa, 0x26, 0x12, 0xb4, 0xcb, 0x49, 0x69,
+  0xd6, 0x00, 0x3d, 0xf5, 0xb2, 0xef, 0x3d, 0x90, 0x94, 0xc3, 0xd3, 0x33,
+  0x06, 0xf4, 0x3d, 0xa6, 0x5f, 0x24, 0x12, 0xa5, 0xdb, 0x33, 0x2c, 0x13,
+  0x92, 0x35, 0x06, 0x97, 0x37, 0xf4, 0x6a, 0x1b, 0x20, 0xaf, 0xc1, 0x8c,
+  0x1c, 0xb9, 0x22, 0x50, 0x67, 0x42, 0xd2, 0x98, 0x51, 0x97, 0xda, 0x1d,
+  0xc8, 0x20, 0x86, 0x42, 0x63, 0xe8, 0xb3, 0x60, 0x84, 0x51, 0x70, 0xf8,
+  0x8d, 0x7a, 0x57, 0x4e, 0xe8, 0x4b, 0x55, 0x26, 0x56, 0x3b, 0x9b, 0x5d,
+  0xf6, 0x27, 0x35, 0x49, 0x6f, 0x25, 0x15, 0xe0, 0x09, 0x53, 0x33, 0x8e,
+  0xa1, 0x9b, 0x27, 0x77, 0xc1, 0xea, 0x1b, 0xc0, 0x07, 0xba, 0x84, 0xce,
+  0x1a, 0x1b, 0x88, 0x07, 0x7b, 0x52, 0x9a, 0x66, 0x80, 0x78, 0x86, 0x49,
+  0x5b, 0xc3, 0x4f, 0x9f, 0xa1, 0x7f, 0xd3, 0x7b, 0x48, 0x3a, 0x48, 0x75,
+  0x23, 0x37, 0x6a, 0xe0, 0x06, 0x90, 0xf4, 0x51, 0x8d, 0x63, 0xcb, 0xee,
+  0x25, 0x14, 0x9e, 0x8d, 0xbf, 0x17, 0xe2, 0xa7, 0x4c, 0x67, 0x79, 0x73,
+  0xcf, 0x7a, 0xab, 0x6f, 0x02, 0xb9, 0x4a, 0x63, 0xb9, 0x5d, 0x66, 0xe1,
+  0x2d, 0x3e, 0x12, 0x26, 0x2a, 0xdb, 0x16, 0x5a, 0xfa, 0x41, 0x1b, 0x3e,
+  0x78, 0x12, 0x40, 0x92, 0xee, 0xc8, 0x93, 0x90, 0x93, 0x96, 0x2f, 0x43,
+  0xe1, 0xc5, 0x21, 0x2c, 0x22, 0xa1, 0xf2, 0xa2, 0x8c, 0x51, 0x15, 0x73,
+  0x08, 0x33, 0xd4, 0x94, 0x21, 0x56, 0xda, 0x24, 0xb8, 0x2a, 0xe8, 0x50,
+  0x73, 0xab, 0xf0, 0x32, 0x52, 0x96, 0xaf, 0x00, 0xc0, 0xec, 0x1f, 0x0d,
+  0xec, 0x1b, 0xec, 0x79, 0xc8, 0x7c, 0xca, 0x2e, 0x2e, 0xcc, 0x1d, 0x17,
+  0x40, 0xd4, 0xf0, 0x38, 0x49, 0xb6, 0xb4, 0x9e, 0x59, 0x22, 0x9a, 0xa0,
+  0x63, 0x06, 0x9a, 0x80, 0x65, 0x0a, 0x6f, 0xe0, 0x80, 0x19, 0x65, 0x92,
+  0xa1, 0x57, 0x29, 0x0c, 0x82, 0x89, 0x78, 0x9c, 0x99, 0x2e, 0x73, 0x42,
+  0xc2, 0xf2, 0x61, 0xdd, 0x42, 0xbb, 0x93, 0x21, 0x3c, 0xc3, 0xe4, 0xc5,
+  0x89, 0x43, 0x2f, 0x22, 0x98, 0xdc, 0x83, 0x73, 0xe3, 0x4c, 0x02, 0xc4,
+  0x84, 0x0f, 0x4e, 0xfb, 0xea, 0xe9, 0x64, 0x48, 0x92, 0x20, 0xbe, 0x1f,
+  0xf1, 0xef, 0x16, 0x92, 0x49, 0x1e, 0x4d, 0xeb, 0x9b, 0xf8, 0xd1, 0xae,
+  0x6f, 0xa2, 0x47, 0x9b, 0xcf, 0xb6, 0x67, 0x7a, 0x9e, 0xfa, 0xb0, 0x25,
+  0xad, 0xf3, 0x3d, 0xfa, 0xce, 0x06, 0x98, 0x45, 0xae, 0x6c, 0x3e, 0xd5,
+  0x3a, 0xb1, 0xd8, 0xb1, 0x16, 0xc1, 0xcd, 0x1e, 0x6c, 0x3d, 0xd9, 0x8f,
+  0x1e, 0x6d, 0x39, 0xdb, 0xa6, 0x7f, 0x39, 0xd0, 0xa7, 0xfb, 0xa3, 0xef,
+  0x3a, 0x47, 0xb9, 0x7b, 0x78, 0x03, 0x59, 0xa0, 0x81, 0xef, 0x98, 0x59,
+  0x01, 0xb5, 0x15, 0xa5, 0xf1, 0xfa, 0xe6, 0x63, 0x68, 0xdc, 0x0c, 0x24,
+  0xa0, 0xf1, 0x60, 0x79, 0x1f, 0xa2, 0x71, 0x7f, 0x8f, 0x5a, 0x96, 0x9b,
+  0x2c, 0xf9, 0x95, 0x54, 0x4e, 0xb6, 0xb4, 0x95, 0x34, 0x6e, 0xc6, 0xf9,
+  0x6b, 0x68, 0x1c, 0x2f, 0x04, 0x24, 0xae, 0x3b, 0xfa, 0xab, 0x69, 0x5c,
+  0xce, 0x46, 0x40, 0xe2, 0xf0, 0x78, 0x9d, 0xf6, 0x3d, 0xda, 0x6e, 0x11,
+  0x6c, 0x51, 0x0f, 0x1c, 0x74, 0xed, 0x4b, 0xfb, 0xeb, 0x17, 0x11, 0xd8,
+  0x2a, 0x9f, 0x6c, 0x19, 0x4a, 0xaa, 0x5c, 0x36, 0x97, 0xa0, 0xc3, 0xd7,
+  0xef, 0x46, 0x0e, 0x2a, 0xa8, 0xb9, 0xaa, 0x80, 0x68, 0xe7, 0xb5, 0x36,
+  0x7c, 0xd8, 0x9c, 0x9e, 0x2a, 0xde, 0x32, 0x63, 0x83, 0x53, 0x07, 0x03,
+  0x6f, 0x58, 0xc9, 0x86, 0x24, 0x13, 0xb2, 0x43, 0xd8, 0x03, 0x65, 0xb5,
+  0x01, 0xfb, 0x17, 0xc0, 0x55, 0x34, 0xc3, 0x10, 0x6c, 0x7b, 0x0a, 0x4e,
+  0x9a, 0x91, 0x09, 0x54, 0xb2, 0xd8, 0x6d, 0x3e, 0x6d, 0xd1, 0x41, 0xea,
+  0x4d, 0x36, 0x22, 0xcd, 0x15, 0x9a, 0x44, 0xb4, 0xf9, 0xa0, 0x23, 0xa0,
+  0x0d, 0x79, 0x14, 0xc3, 0xb5, 0x71, 0xce, 0x3a, 0x01, 0x81, 0xa8, 0x22,
+  0x31, 0xcf, 0x19, 0xe7, 0x8e, 0xf8, 0x88, 0x35, 0x42, 0x7d, 0x36, 0xe9,
+  0x00, 0x70, 0xfd, 0x83, 0x94, 0xfa, 0xb2, 0xe8, 0x29, 0x75, 0xc4, 0x82,
+  0x08, 0x72, 0x42, 0x82, 0x07, 0x99, 0x2b, 0x1f, 0x04, 0x51, 0xc2, 0xce,
+  0x2f, 0x6e, 0x9e, 0x0e, 0x68, 0xaa, 0x66, 0xaf, 0x16, 0x03, 0x99, 0x73,
+  0x74, 0xeb, 0x55, 0x1a, 0x19, 0xe7, 0x8c, 0x6c, 0xe0, 0x3f, 0xcf, 0x62,
+  0x86, 0x51, 0x10, 0x69, 0xa1, 0x01, 0xb5, 0xe1, 0x93, 0x43, 0x80, 0x09,
+  0x56, 0x7a, 0xca, 0x51, 0x8b, 0x6e, 0xe4, 0xc2, 0x26, 0xc4, 0x08, 0x76,
+  0x7a, 0x10, 0x65, 0x70, 0x1f, 0xbc, 0x02, 0x69, 0x75, 0xb9, 0x0c, 0x9c,
+  0xab, 0xb0, 0x79, 0x39, 0xaf, 0xa0, 0x26, 0x16, 0xf8, 0x90, 0x1f, 0xff,
+  0x67, 0x6f, 0xe2, 0xc7, 0xec, 0xe2, 0xf3, 0xdf, 0x7f, 0x17, 0x9f, 0xff,
+  0x6f, 0xb2, 0x8b, 0xcf, 0xff, 0x7f, 0xb2, 0x8b, 0x0a, 0x57, 0xe2, 0xed,
+  0x49, 0x7f, 0xf5, 0x76, 0x8e, 0x24, 0xaf, 0x46, 0x23, 0x73, 0x69, 0x0b,
+  0xb4, 0x05, 0x36, 0x30, 0x44, 0xa0, 0x19, 0xf8, 0xc2, 0x43, 0x06, 0x5d,
+  0x1c, 0x4c, 0x4e, 0xac, 0x27, 0xda, 0xe8, 0xd1, 0xa9, 0x87, 0x52, 0xe3,
+  0x76, 0x47, 0xe1, 0x0a, 0xc5, 0x28, 0x10, 0x8d, 0x78, 0xa8, 0xc9, 0x0d,
+  0x6e, 0x78, 0x39, 0x87, 0xfd, 0x73, 0x2a, 0x2e, 0x5c, 0xe5, 0xbc, 0x5f,
+  0x10, 0x48, 0xc6, 0x1a, 0x23, 0x69, 0x36, 0x69, 0xef, 0x25, 0xad, 0xf6,
+  0x80, 0x1f, 0xff, 0x22, 0x9a, 0x8f, 0x05, 0x40, 0x42, 0x37, 0xa4, 0x15,
+  0x89, 0x3f, 0xaa, 0x43, 0x5a, 0x82, 0xd0, 0x88, 0x05, 0x9f, 0x24, 0x7c,
+  0xd0, 0xb1, 0xc7, 0xc8, 0xe1, 0xb7, 0x50, 0xc3, 0x7f, 0x8f, 0x1c, 0x32,
+  0xba, 0xac, 0x81, 0x30, 0x48, 0xee, 0xec, 0xf7, 0x67, 0xc7, 0xab, 0x60,
+  0x68, 0xd8, 0x61, 0x6c, 0x46, 0xd0, 0x3b, 0x63, 0x3c, 0xc2, 0x2a, 0x39,
+  0x4d, 0x2f, 0xb3, 0x9e, 0x8f, 0x4d, 0xf9, 0x11, 0x30, 0x34, 0x01, 0x90,
+  0x0b, 0xe9, 0xde, 0x2e, 0xbe, 0xd1, 0xc7, 0x6d, 0x81, 0xf9, 0xc5, 0xa1,
+  0xb6, 0xb0, 0xf7, 0x36, 0x06, 0x75, 0xc7, 0x32, 0x72, 0x3b, 0xe1, 0x5e,
+  0x91, 0x3d, 0xc4, 0xb7, 0xd5, 0xfb, 0x2b, 0xa5, 0x3b, 0xf4, 0x74, 0x80,
+  0x76, 0xca, 0x61, 0xc4, 0x38, 0x3d, 0xe2, 0x0c, 0xc8, 0xed, 0x24, 0x09,
+  0x4d, 0x30, 0xb3, 0x09, 0x2c, 0x80, 0xcd, 0xbf, 0x62, 0x40, 0xdb, 0x8b,
+  0x72, 0xd6, 0x25, 0x4d, 0x86, 0xc4, 0x34, 0x5c, 0xe0, 0x58, 0x86, 0xb5,
+  0x27, 0x9e, 0x75, 0xde, 0x4b, 0x1d, 0x94, 0x88, 0x0d, 0xbe, 0x74, 0x9a,
+  0xce, 0xa8, 0xf6, 0x48, 0x37, 0x06, 0x93, 0xe8, 0xd7, 0xc2, 0x84, 0x90,
+  0xe5, 0x0b, 0x99, 0xc6, 0x24, 0x65, 0xe4, 0x28, 0x44, 0x61, 0xa7, 0xf5,
+  0x09, 0x1d, 0xce, 0x87, 0x70, 0xcc, 0x53, 0xc4, 0xe5, 0x4b, 0x2f, 0x02,
+  0xf1, 0xa7, 0x3d, 0x35, 0x97, 0xfc, 0x12, 0x4f, 0xa7, 0x08, 0x91, 0x28,
+  0xdb, 0x81, 0x10, 0x8a, 0x45, 0xe2, 0x87, 0x35, 0x26, 0x31, 0xfb, 0x2e,
+  0x96, 0x5b, 0x51, 0xe4, 0x25, 0xca, 0x04, 0x04, 0x20, 0x85, 0x8e, 0x28,
+  0x08, 0x33, 0x81, 0xa3, 0x8a, 0x3d, 0x21, 0xa6, 0xf7, 0x01, 0x97, 0x0e,
+  0x80, 0x52, 0x1e, 0x58, 0xac, 0x28, 0x8c, 0x09, 0x07, 0xcb, 0xeb, 0x57,
+  0x05, 0x38, 0x73, 0x60, 0x4e, 0xbf, 0x3d, 0x18, 0xfd, 0x71, 0x67, 0x57,
+  0x63, 0x37, 0x29, 0x2c, 0x5b, 0xe2, 0x19, 0x46, 0x00, 0xdd, 0xe9, 0x92,
+  0x37, 0xe9, 0x45, 0x5c, 0x70, 0x08, 0x1e, 0x1e, 0x0a, 0xfb, 0xb4, 0x50,
+  0x0f, 0xee, 0x65, 0x04, 0x7c, 0x61, 0x78, 0x9c, 0x0c, 0xa8, 0x31, 0xf2,
+  0x59, 0xd4, 0x6a, 0x61, 0x36, 0xc8, 0x5a, 0xcd, 0x18, 0x96, 0xc9, 0xae,
+  0x5b, 0x0b, 0xce, 0xca, 0x5c, 0x8a, 0x15, 0x82, 0x4a, 0x4c, 0xcf, 0x1c,
+  0x26, 0x16, 0x86, 0xcd, 0x31, 0xe6, 0x76, 0x0c, 0xee, 0x4a, 0x63, 0xbc,
+  0x51, 0xf6, 0x80, 0xc4, 0xe4, 0x9e, 0xb7, 0x24, 0xbd, 0xd8, 0x56, 0xf8,
+  0x09, 0x77, 0x8b, 0x8a, 0xf3, 0x10, 0xaf, 0xb3, 0x7b, 0x1b, 0xc9, 0x2f,
+  0x5b, 0xea, 0xaf, 0x2c, 0xe1, 0xfe, 0x9a, 0x9f, 0x74, 0x65, 0x4f, 0xff,
+  0x10, 0x8b, 0x54, 0x60, 0xd2, 0x62, 0xe5, 0x8b, 0xda, 0xa2, 0x08, 0x17,
+  0x87, 0x80, 0x35, 0x47, 0xe9, 0x0c, 0xa9, 0x2d, 0x34, 0xbb, 0x8f, 0x6a,
+  0x5a, 0xae, 0xf2, 0x16, 0x73, 0x5e, 0xa8, 0x73, 0x1c, 0x94, 0x88, 0x9c,
+  0x92, 0x36, 0xec, 0x63, 0x56, 0xf8, 0x07, 0x23, 0x30, 0x67, 0x16, 0x7e,
+  0xce, 0x14, 0x19, 0xd8, 0xf3, 0xc9, 0x35, 0x24, 0x79, 0xd1, 0x9c, 0xfd,
+  0xb9, 0x69, 0x84, 0x0e, 0x47, 0xe5, 0x47, 0x96, 0x1f, 0xd9, 0x32, 0xe4,
+  0x6e, 0x20, 0x7a, 0xa4, 0x6b, 0x30, 0x2f, 0x34, 0xa3, 0x8f, 0x32, 0x59,
+  0x6e, 0xf2, 0xaa, 0x2c, 0x20, 0x9c, 0xdc, 0xa4, 0x55, 0x0e, 0x7d, 0xd4,
+  0x8c, 0xf5, 0xc3, 0xeb, 0xa3, 0xb3, 0x64, 0xc3, 0xec, 0xe8, 0xf8, 0x7e,
+  0x05, 0x28, 0xeb, 0x56, 0xd6, 0x4c, 0xb6, 0x16, 0xd7, 0xf9, 0x56, 0x51,
+  0xd7, 0xd3, 0xf1, 0xa6, 0xc5, 0xed, 0x41, 0x77, 0x20, 0x40, 0x26, 0xe2,
+  0x1d, 0x02, 0x4c, 0x9e, 0x2e, 0x49, 0xff, 0xdf, 0x30, 0x0b, 0x10, 0x24,
+  0x15, 0xd4, 0x66, 0xa1, 0xe7, 0xc3, 0xba, 0xdc, 0x94, 0xba, 0x65, 0x37,
+  0x69, 0x3e, 0xb3, 0xe6, 0x82, 0x82, 0x9b, 0xe2, 0x58, 0x34, 0x01, 0x49,
+  0x21, 0xd7, 0x4c, 0x36, 0x5d, 0x11, 0x97, 0xa5, 0xf1, 0x49, 0x8c, 0x3a,
+  0xcc, 0xc0, 0x22, 0x1a, 0x5e, 0x64, 0x96, 0x13, 0x69, 0xe3, 0x36, 0x56,
+  0xbe, 0x4f, 0x25, 0x3a, 0x68, 0x51, 0xd8, 0x4d, 0x48, 0x96, 0x8f, 0x68,
+  0x20, 0x62, 0x6f, 0xb8, 0xd5, 0x4b, 0x6c, 0x51, 0x12, 0xb3, 0xca, 0x28,
+  0xb1, 0xe3, 0xaa, 0xc0, 0x18, 0xf2, 0xba, 0x58, 0xd6, 0xd6, 0x14, 0x9c,
+  0xda, 0xfd, 0x1a, 0xc6, 0xcd, 0x4e, 0x76, 0x3b, 0xc5, 0x65, 0x5b, 0x27,
+  0xbd, 0xbd, 0x1e, 0xce, 0x54, 0x81, 0xa2, 0x08, 0x2c, 0xdd, 0xc8, 0xa0,
+  0xb0, 0x55, 0xbd, 0x9f, 0x7b, 0x49, 0x12, 0x98, 0x82, 0xf9, 0x1c, 0xe5,
+  0x0e, 0x3e, 0x9f, 0xd2, 0x77, 0x2f, 0x8b, 0xfc, 0x1f, 0x8c, 0x82, 0x62,
+  0x4f, 0xef, 0x34, 0x43, 0xe2, 0x47, 0x56, 0x0d, 0x5b, 0x43, 0x88, 0xa2,
+  0xf1, 0xb8, 0x21, 0xfd, 0x1c, 0x0e, 0x49, 0x0b, 0xc5, 0xa4, 0xf4, 0xb5,
+  0x19, 0x92, 0x3a, 0xa4, 0x79, 0x08, 0x11, 0x03, 0x49, 0x7b, 0x40, 0xb6,
+  0xd4, 0x8c, 0x17, 0x3e, 0x11, 0x04, 0x70, 0xe7, 0x27, 0x23, 0xf1, 0x8b,
+  0xbd, 0x4d, 0x27, 0x89, 0xf9, 0xe3, 0x07, 0x08, 0x16, 0x9b, 0x34, 0xf2,
+  0x36, 0x32, 0xa3, 0x1e, 0x31, 0x66, 0x89, 0xcc, 0x04, 0x63, 0xe0, 0x8c,
+  0x7d, 0x0f, 0x91, 0xc4, 0x3b, 0x38, 0xde, 0xfd, 0x97, 0xe5, 0xe0, 0x8a,
+  0xe3, 0x4c, 0xcc, 0xf8, 0xb0, 0xc6, 0x93, 0x38, 0x99, 0x06, 0xc1, 0x44,
+  0xf6, 0xfd, 0x2d, 0xe5, 0x3d, 0x60, 0x3e, 0x36, 0xd0, 0x1b, 0xa2, 0x27,
+  0x31, 0x61, 0x18, 0xf6, 0xcd, 0x57, 0x66, 0xaa, 0x84, 0x49, 0xc5, 0x10,
+  0x38, 0x41, 0x7c, 0x42, 0xc3, 0x86, 0x0d, 0x65, 0xf8, 0xd6, 0x5f, 0xe6,
+  0x0f, 0x94, 0x83, 0xbc, 0x5d, 0x67, 0x43, 0x1b, 0x58, 0xfa, 0x2f, 0x20,
+  0x7e, 0xd0, 0xfe, 0x6f, 0x22, 0xfd, 0x4f, 0x17, 0x7c, 0x26, 0xa9, 0xec,
+  0x2f, 0x63, 0x38, 0x09, 0xa3, 0x6c, 0xa6, 0x45, 0x2b, 0x34, 0xfb, 0x6f,
+  0x52, 0xdd, 0x2f, 0xc8, 0xee, 0x26, 0x09, 0xf0, 0xbc, 0x3e, 0xa8, 0x74,
+  0xc0, 0x89, 0x7e, 0x7e, 0x65, 0x93, 0x61, 0x24, 0x93, 0xd5, 0xf5, 0x28,
+  0x69, 0x90, 0x64, 0xbc, 0x31, 0x1b, 0x42, 0x72, 0x43, 0xaa, 0x9f, 0x51,
+  0xd6, 0xaf, 0xa1, 0xca, 0x29, 0xe7, 0x1b, 0xd9, 0xc4, 0xb1, 0x00, 0x62,
+  0x84, 0xda, 0xa9, 0x7d, 0xff, 0x3e, 0x1d, 0x13, 0xc2, 0x45, 0x20, 0x66,
+  0x0b, 0x07, 0xe3, 0xa6, 0xa7, 0xc9, 0xc8, 0xf3, 0x41, 0x25, 0x06, 0xd5,
+  0x1a, 0x2c, 0xb3, 0x34, 0x0d, 0x55, 0xcb, 0x02, 0x9d, 0xb7, 0x57, 0xca,
+  0xb2, 0xf7, 0xee, 0x39, 0x3b, 0x3b, 0x1a, 0x1d, 0x24, 0x74, 0xbe, 0x4e,
+  0xde, 0x1d, 0xff, 0x48, 0x92, 0x36, 0xc0, 0x35, 0x50, 0x04, 0x8c, 0xfa,
+  0x8f, 0x5d, 0x0c, 0x75, 0xdf, 0xe5, 0x03, 0x44, 0x78, 0x07, 0x5f, 0xc9,
+  0x83, 0x5b, 0xdd, 0x62, 0x97, 0xb2, 0x47, 0xe4, 0x02, 0x7f, 0xa1, 0x21,
+  0xb8, 0x9c, 0xc4, 0x0f, 0x0a, 0xd6, 0x9b, 0x68, 0x44, 0xd5, 0x32, 0x44,
+  0xf3, 0xa3, 0x68, 0x17, 0x5f, 0xc2, 0x67, 0xf5, 0x88, 0xcc, 0x85, 0xa6,
+  0x77, 0x33, 0xd1, 0x4e, 0xda, 0xb1, 0x99, 0xe8, 0x25, 0xfb, 0xad, 0x57,
+  0x64, 0xca, 0x40, 0x18, 0xb4, 0xd8, 0x19, 0xbc, 0xb6, 0x38, 0x7c, 0x72,
+  0xd6, 0x45, 0x40, 0x3f, 0x24, 0x34, 0xde, 0xc5, 0x7d, 0xf2, 0x75, 0x4a,
+  0xfc, 0x00, 0x56, 0xbf, 0x34, 0x9b, 0x07, 0x17, 0x74, 0x5d, 0x92, 0x8b,
+  0x55, 0xac, 0x70, 0xf8, 0xdd, 0x92, 0x33, 0x90, 0x31, 0x39, 0x00, 0x33,
+  0xa1, 0xc5, 0x9c, 0x52, 0xe8, 0x80, 0x52, 0x0f, 0x68, 0xce, 0x0c, 0x25,
+  0x0c, 0x2b, 0xd2, 0xaa, 0x46, 0xc3, 0x4e, 0x16, 0xdb, 0x80, 0x9b, 0xe0,
+  0xa9, 0x75, 0x93, 0xd8, 0xcc, 0xac, 0xe1, 0x70, 0xdf, 0xd9, 0xde, 0x7e,
+  0x34, 0xb3, 0x50, 0xf4, 0x29, 0x4d, 0x30, 0x04, 0x91, 0x9a, 0xd3, 0xac,
+  0xd9, 0x85, 0x8d, 0xd6, 0x8a, 0x72, 0xb9, 0x85, 0x40, 0x11, 0x49, 0x73,
+  0x81, 0x6d, 0xea, 0x34, 0x47, 0x5d, 0xda, 0x3c, 0x3f, 0x1b, 0xbd, 0x0a,
+  0x21, 0x19, 0xef, 0x66, 0xc8, 0x33, 0x24, 0x9f, 0xed, 0x21, 0x86, 0x58,
+  0xef, 0xb5, 0xdf, 0x89, 0x82, 0x37, 0xb2, 0x5f, 0xdb, 0xc7, 0x64, 0x37,
+  0x9c, 0xee, 0x2b, 0x07, 0x60, 0xee, 0x52, 0x2d, 0x31, 0x2e, 0xe2, 0x10,
+  0x3c, 0xfe, 0x87, 0x4c, 0xaf, 0xf1, 0xe4, 0xc1, 0x3f, 0x70, 0x4c, 0x2e,
+  0x5a, 0xac, 0x9b, 0x72, 0x51, 0xa3, 0x49, 0xc0, 0x85, 0xc6, 0xf8, 0xa0,
+  0x9f, 0xd5, 0x98, 0xd6, 0xea, 0xb7, 0xb7, 0xf3, 0xbe, 0x22, 0x7d, 0x3b,
+  0x03, 0xbe, 0x04, 0x63, 0x9a, 0x3c, 0x98, 0x96, 0xf4, 0xf4, 0xb3, 0x4e,
+  0x8e, 0x97, 0x61, 0xf5, 0xc8, 0xaa, 0x49, 0x5e, 0xd2, 0xbf, 0x2b, 0x68,
+  0xd7, 0xd3, 0x64, 0x10, 0xfc, 0xd0, 0x12, 0x01, 0xe9, 0x65, 0x89, 0xfc,
+  0xa6, 0x1c, 0xb0, 0xd6, 0xf5, 0x11, 0x3a, 0x11, 0x28, 0xcc, 0xdf, 0x48,
+  0x55, 0xfd, 0xe4, 0xf5, 0xe1, 0x19, 0x2e, 0x97, 0xc3, 0x77, 0x5f, 0xc3,
+  0xe9, 0xe8, 0xdd, 0xd6, 0xd4, 0x64, 0xcd, 0x17, 0x0d, 0xd7, 0xd7, 0x51,
+  0xc9, 0xbf, 0xd3, 0x1c, 0x49, 0x67, 0x64, 0xfd, 0x82, 0xf8, 0x3e, 0xfd,
+  0xa4, 0x09, 0x96, 0x29, 0xab, 0x7f, 0x07, 0xfb, 0xfe, 0xec, 0x7e, 0x9b,
+  0xda, 0xe7, 0x2f, 0x9e, 0x82, 0xde, 0x99, 0x11, 0x19, 0xde, 0x10, 0x71,
+  0x69, 0x52, 0xda, 0x9b, 0x07, 0xa1, 0x47, 0x9c, 0x58, 0x84, 0x24, 0x87,
+  0xcf, 0x96, 0x24, 0x66, 0x58, 0xad, 0xdc, 0x38, 0xb6, 0x33, 0xad, 0x16,
+  0x1f, 0x36, 0x08, 0x60, 0xcb, 0xd7, 0xf8, 0x6c, 0xa6, 0x1e, 0x5d, 0x0e,
+  0xe2, 0xcf, 0x6a, 0xcb, 0x3b, 0x81, 0x67, 0x84, 0xef, 0x79, 0x3d, 0x1e,
+  0x8a, 0xa2, 0x87, 0x15, 0xef, 0xb3, 0x6c, 0xd6, 0x5a, 0x7a, 0xb3, 0xa7,
+  0x62, 0x51, 0x10, 0x56, 0x15, 0x44, 0x7a, 0x20, 0x7b, 0x01, 0xd1, 0x49,
+  0x5e, 0x9b, 0xc1, 0xa6, 0x3a, 0x8c, 0x43, 0x10, 0x4b, 0xbd, 0x5a, 0x91,
+  0x90, 0xec, 0x8f, 0x83, 0xf7, 0x67, 0xc7, 0x1f, 0x0e, 0xf6, 0x3f, 0x7c,
+  0xf5, 0xfe, 0xdd, 0xeb, 0xe3, 0xc3, 0xf5, 0x2e, 0x45, 0x5e, 0x48, 0x24,
+  0x4f, 0x4d, 0x61, 0x2b, 0x02, 0x3d, 0xe3, 0x03, 0x3a, 0x80, 0x51, 0x03,
+  0x43, 0x92, 0x59, 0xb6, 0xc0, 0xeb, 0xe8, 0x8a, 0x77, 0x8d, 0x5a, 0xcb,
+  0x62, 0x0a, 0x08, 0x3f, 0x6f, 0xf2, 0x8a, 0x36, 0x25, 0x8c, 0x4e, 0xc7,
+  0x17, 0x05, 0x1b, 0x24, 0x14, 0xae, 0x29, 0x2c, 0x28, 0x9a, 0x93, 0xcc,
+  0x58, 0x0a, 0xae, 0x2c, 0x5d, 0xcb, 0x38, 0x43, 0x69, 0x42, 0xcc, 0x22,
+  0xcd, 0x80, 0x22, 0xdb, 0x5d, 0xb7, 0xf2, 0x60, 0xa8, 0x15, 0x43, 0xc9,
+  0x03, 0x19, 0xe4, 0xa4, 0x6a, 0xd6, 0xfb, 0x2a, 0x7d, 0xfa, 0xa9, 0x82,
+  0x90, 0xd2, 0x82, 0xf4, 0x33, 0x4a, 0xef, 0x4d, 0x99, 0xae, 0x87, 0xd9,
+  0x5d, 0x26, 0x60, 0x7e, 0x78, 0xeb, 0x40, 0xc4, 0xbb, 0xef, 0xcb, 0x0a,
+  0xd6, 0xed, 0xd7, 0x4e, 0xcc, 0xe3, 0x87, 0x8c, 0xee, 0x1f, 0xc6, 0xda,
+  0x12, 0xd3, 0x4d, 0x51, 0x66, 0x09, 0x25, 0x7e, 0x4f, 0xf7, 0xcf, 0xbf,
+  0x89, 0x1d, 0xe1, 0xb8, 0xd8, 0x2d, 0x55, 0x28, 0x48, 0xdd, 0x03, 0x92,
+  0xba, 0x68, 0xb7, 0x7d, 0xff, 0x0b, 0x43, 0xd5, 0x5d, 0x86, 0x11, 0x53,
+  0x0a, 0x7d, 0x25, 0x90, 0xf5, 0x0d, 0x51, 0x38, 0x9c, 0x80, 0xa3, 0x84,
+  0x1d, 0xcf, 0xe6, 0xd7, 0x9a, 0xce, 0x86, 0x01, 0x2e, 0xa8, 0x20, 0xc7,
+  0xa7, 0x65, 0x44, 0x20, 0xc3, 0x0e, 0x23, 0x72, 0x82, 0xf5, 0x7f, 0x9f,
+  0x25, 0x79, 0xd9, 0xdc, 0xe1, 0x29, 0x65, 0x3e, 0xa5, 0x32, 0x0c, 0x78,
+  0x93, 0x4b, 0xda, 0xa2, 0x91, 0xd9, 0x8a, 0x54, 0xf6, 0x36, 0x20, 0xcc,
+  0x70, 0x9b, 0x48, 0x17, 0x72, 0xb8, 0xb9, 0x48, 0xfa, 0x7b, 0xbd, 0x64,
+  0x23, 0x1b, 0x5e, 0x9a, 0xf6, 0x7a, 0xd4, 0xce, 0xce, 0x1e, 0xfd, 0xbb,
+  0x8b, 0x7f, 0x9f, 0xf4, 0x36, 0x03, 0x7b, 0x55, 0x0d, 0xf6, 0x15, 0x66,
+  0xfd, 0xe2, 0x16, 0xf7, 0x2c, 0x50, 0x8a, 0xd8, 0x90, 0xaf, 0x22, 0x24,
+  0x91, 0xd3, 0x63, 0x48, 0x34, 0x6e, 0x21, 0xc0, 0x2a, 0xe1, 0xa0, 0xc6,
+  0x4d, 0x6b, 0xe6, 0x36, 0x61, 0xc0, 0x07, 0x3f, 0xcf, 0x67, 0xf2, 0xa1,
+  0xca, 0xcc, 0x65, 0x6c, 0x78, 0xc4, 0xb2, 0xc9, 0x29, 0x6c, 0x25, 0x52,
+  0xf9, 0x62, 0x26, 0xa9, 0x88, 0x66, 0xc6, 0xd2, 0xb1, 0x22, 0xc1, 0xda,
+  0xad, 0x65, 0x43, 0x31, 0x09, 0x42, 0xf2, 0xc4, 0x40, 0x2a, 0x5c, 0xc7,
+  0x18, 0xa1, 0x1a, 0x6e, 0xe9, 0x31, 0xbf, 0x3e, 0xe5, 0x9c, 0x0c, 0xe1,
+  0x08, 0xa4, 0x21, 0x7f, 0x7a, 0x3e, 0xc9, 0x19, 0x97, 0x84, 0x73, 0x2a,
+  0x79, 0xd4, 0x61, 0x4e, 0x12, 0xdf, 0x71, 0x22, 0x5f, 0xd8, 0xbf, 0xc1,
+  0x41, 0xac, 0x62, 0x8e, 0x1a, 0x96, 0x6d, 0xe2, 0xfb, 0x98, 0xf8, 0x2e,
+  0x70, 0x57, 0x1f, 0xd0, 0x4f, 0x26, 0xcb, 0xc9, 0xa5, 0x4a, 0xec, 0x02,
+  0x33, 0x1f, 0xc3, 0xfe, 0xb6, 0x7c, 0xfa, 0x37, 0x9f, 0x9c, 0x45, 0x6e,
+  0x96, 0x67, 0xba, 0x58, 0x8e, 0x49, 0x63, 0x7e, 0xc9, 0x7f, 0x25, 0xe6,
+  0xcf, 0x59, 0x3e, 0x81, 0x12, 0xbd, 0x71, 0x85, 0x22, 0x78, 0x9b, 0x1f,
+  0x73, 0x82, 0x38, 0xa4, 0xa5, 0x93, 0xa6, 0xad, 0x8d, 0xb1, 0x4a, 0xce,
+  0x80, 0x49, 0x1b, 0x41, 0x94, 0x8b, 0xf4, 0x22, 0x75, 0x4e, 0xf9, 0x38,
+  0xf9, 0x17, 0x7d, 0x6e, 0x4f, 0x50, 0xea, 0x69, 0xe8, 0x6c, 0xf2, 0x8d,
+  0xa0, 0x0e, 0xdb, 0x8d, 0xb1, 0x2e, 0x3d, 0x6f, 0x4a, 0x72, 0xb3, 0x1b,
+  0xe6, 0x45, 0xc2, 0x96, 0x07, 0xc2, 0x8a, 0xf0, 0xe0, 0x56, 0x65, 0x65,
+  0x07, 0xdc, 0x43, 0x86, 0xba, 0xe7, 0x4f, 0x6d, 0xf4, 0x76, 0x7d, 0x95,
+  0xee, 0x3e, 0x7b, 0x2e, 0xc3, 0x6e, 0x99, 0x85, 0xd6, 0xf9, 0xab, 0xad,
+  0x2d, 0x2e, 0x02, 0x4c, 0x87, 0xbc, 0x7b, 0x69, 0xb0, 0x17, 0x8b, 0x9e,
+  0xfd, 0xeb, 0x7a, 0x34, 0x2f, 0xcd, 0x2f, 0x98, 0x91, 0xa2, 0xda, 0x49,
+  0x59, 0x75, 0x2a, 0xd0, 0xf7, 0xdb, 0x81, 0x24, 0x16, 0x23, 0x65, 0xb5,
+  0x74, 0xe3, 0xd7, 0x07, 0x65, 0x91, 0x3e, 0x47, 0xb0, 0x6d, 0x73, 0x3f,
+  0x4c, 0xf6, 0x5b, 0xeb, 0x53, 0xab, 0x32, 0x18, 0x9c, 0x2e, 0xe7, 0x5b,
+  0xed, 0x1a, 0x43, 0x98, 0x12, 0x6d, 0x4e, 0xb7, 0xe6, 0x85, 0x71, 0x52,
+  0x02, 0xf3, 0xc5, 0x65, 0x60, 0x68, 0xb4, 0x74, 0x61, 0xd9, 0x62, 0x53,
+  0xb6, 0xe3, 0x7c, 0xbc, 0x2b, 0x7e, 0x5c, 0x56, 0x4d, 0x07, 0x26, 0x25,
+  0x60, 0x74, 0x88, 0x1b, 0xa2, 0xa5, 0x40, 0x22, 0x49, 0x25, 0xc2, 0xbf,
+  0xda, 0xd9, 0xa3, 0xf9, 0x04, 0xbe, 0x43, 0xec, 0xc5, 0x70, 0x1b, 0x97,
+  0x9a, 0xe5, 0x7e, 0x0c, 0x50, 0xc4, 0x58, 0x45, 0xa3, 0x6f, 0x09, 0x1b,
+  0x65, 0xdf, 0x2f, 0x44, 0x47, 0xb9, 0x43, 0x61, 0xb8, 0x96, 0xdc, 0xb3,
+  0x88, 0xa0, 0x2a, 0x67, 0x17, 0xa6, 0xa1, 0xad, 0x83, 0xfb, 0x14, 0x4c,
+  0x4d, 0xc8, 0x46, 0xab, 0xfd, 0xf8, 0x28, 0x13, 0x4f, 0xb9, 0xef, 0x4e,
+  0x73, 0x9d, 0x91, 0xf4, 0xd1, 0x74, 0xac, 0xe5, 0x13, 0x75, 0x71, 0xa8,
+  0x43, 0x30, 0x1a, 0xb1, 0x62, 0x6d, 0x20, 0x9f, 0xf4, 0x32, 0x26, 0xe5,
+  0xa9, 0x6e, 0xd2, 0x66, 0x59, 0x3f, 0xaa, 0x37, 0x59, 0x21, 0x5f, 0x6b,
+  0xdd, 0x99, 0x97, 0x2c, 0xc8, 0x9a, 0xc0, 0x9d, 0xad, 0xd4, 0x9b, 0x2c,
+  0x26, 0x2c, 0xa4, 0x2d, 0x8f, 0x20, 0x47, 0xdc, 0x8e, 0xa2, 0x1d, 0x6d,
+  0xa4, 0xd7, 0xa9, 0x59, 0xa1, 0x83, 0xd1, 0x29, 0xf5, 0xb0, 0xa0, 0x30,
+  0xa8, 0x4d, 0x3a, 0x55, 0x01, 0xb0, 0x89, 0xd6, 0x96, 0x5a, 0x99, 0x70,
+  0xe7, 0x56, 0xc7, 0x07, 0x28, 0xf6, 0x06, 0xcb, 0xc7, 0x10, 0x8e, 0x38,
+  0x46, 0xf4, 0xc2, 0xed, 0x1d, 0x74, 0xb4, 0x30, 0x77, 0xe8, 0x74, 0xd3,
+  0x6a, 0xab, 0xfd, 0x40, 0x7d, 0xad, 0x97, 0x97, 0x97, 0x12, 0xd5, 0x24,
+  0xd1, 0x0e, 0x6e, 0x35, 0x02, 0x19, 0xd4, 0x1e, 0xf0, 0x2b, 0xc4, 0x1d,
+  0xd0, 0x5d, 0xac, 0xe0, 0x1e, 0xe0, 0x6b, 0x45, 0xe9, 0x1a, 0x4e, 0xd9,
+  0xb2, 0x95, 0x3b, 0xb0, 0xcf, 0x08, 0x54, 0x34, 0xef, 0x89, 0x62, 0xb8,
+  0x12, 0x5c, 0xe3, 0x0a, 0xbf, 0x77, 0x5e, 0xab, 0x11, 0x53, 0xeb, 0x40,
+  0xa2, 0xc0, 0x21, 0x69, 0x1c, 0x2e, 0x8d, 0xc7, 0x11, 0xb1, 0x9e, 0xa7,
+  0x48, 0xf9, 0x04, 0xa2, 0x6b, 0xa5, 0xdc, 0x8e, 0x9f, 0xfa, 0xe9, 0x4e,
+  0x5b, 0x39, 0xbf, 0x48, 0x67, 0x75, 0x36, 0x40, 0x66, 0xe8, 0xda, 0x43,
+  0x04, 0xe6, 0xe2, 0xc6, 0x60, 0x5c, 0xa4, 0xb7, 0x24, 0x9f, 0x54, 0xaa,
+  0x6a, 0x69, 0x29, 0x29, 0x5b, 0x38, 0xba, 0xbb, 0x51, 0x6f, 0xbc, 0x77,
+  0x38, 0x68, 0x9f, 0xc2, 0xdc, 0x00, 0x8b, 0x47, 0xda, 0x0e, 0xa6, 0xa2,
+  0xde, 0x4a, 0x0e, 0x7b, 0x14, 0x50, 0x01, 0x61, 0x41, 0xab, 0x31, 0x39,
+  0x38, 0xd7, 0x44, 0x18, 0x16, 0x9f, 0x00, 0x1d, 0x11, 0x6f, 0xf4, 0x7a,
+  0x9d, 0xbc, 0xc9, 0x8b, 0xdc, 0x5c, 0x2f, 0x5c, 0x90, 0x38, 0xbd, 0xcc,
+  0xc2, 0x8d, 0x32, 0x34, 0x5e, 0xb3, 0xfd, 0x2d, 0x4d, 0xa4, 0x9e, 0x4a,
+  0x95, 0x2f, 0xd8, 0xe6, 0x23, 0xc9, 0x83, 0xe2, 0x1b, 0x5d, 0x22, 0x94,
+  0xd0, 0x4e, 0xf3, 0x37, 0xef, 0xa5, 0xb2, 0x1f, 0xb1, 0xef, 0xaf, 0x36,
+  0xf0, 0xd3, 0x25, 0x4f, 0x96, 0x23, 0xf2, 0x1c, 0x7c, 0x66, 0x58, 0x1b,
+  0x7c, 0xa0, 0x14, 0xff, 0x5e, 0x81, 0x24, 0xe1, 0x43, 0xd8, 0xd9, 0x1e,
+  0xbe, 0xa0, 0x3f, 0xf0, 0xf1, 0xa6, 0xdb, 0xfe, 0x87, 0x0c, 0x35, 0xbb,
+  0x2d, 0x5a, 0xb8, 0x40, 0x80, 0xa1, 0xa1, 0xcf, 0xb8, 0x69, 0xed, 0x0d,
+  0x01, 0x8d, 0xd6, 0x94, 0x6c, 0x44, 0x73, 0xda, 0xa0, 0xda, 0xa2, 0x5c,
+  0x2b, 0x99, 0x4f, 0xc1, 0x26, 0xf9, 0x46, 0xf5, 0x02, 0x05, 0x40, 0x98,
+  0x56, 0xb1, 0x0c, 0x0d, 0x34, 0x5a, 0xec, 0x14, 0xd8, 0x08, 0x50, 0x84,
+  0x10, 0x76, 0x2d, 0xd1, 0xa2, 0x94, 0x26, 0x4b, 0x16, 0xad, 0xac, 0x99,
+  0x78, 0x5f, 0x4e, 0x33, 0xa9, 0xac, 0xde, 0xbd, 0x23, 0xcc, 0xb0, 0x88,
+  0x75, 0x70, 0xf0, 0xab, 0xe9, 0xf3, 0xa8, 0x90, 0x78, 0x59, 0xc9, 0xd6,
+  0xc3, 0x06, 0xa6, 0x02, 0xe9, 0x6f, 0x47, 0x78, 0xc1, 0xf8, 0x7e, 0x81,
+  0xf6, 0x41, 0xae, 0x24, 0x3c, 0x00, 0xf4, 0x77, 0x86, 0x5a, 0xeb, 0xb3,
+  0x0f, 0xca, 0xa5, 0x1f, 0x23, 0xe7, 0xff, 0xed, 0xb1, 0x7d, 0x00, 0xbc,
+  0x16, 0x19, 0x17, 0xdd, 0xe6, 0x24, 0xea, 0xb1, 0xbc, 0x20, 0x6c, 0x57,
+  0x98, 0x3d, 0x35, 0x0d, 0x98, 0x06, 0xc6, 0x3e, 0x5d, 0x92, 0xa1, 0x37,
+  0x45, 0x2e, 0xe3, 0xdc, 0x18, 0x26, 0x7f, 0x23, 0x08, 0x0d, 0x02, 0xdd,
+  0x48, 0x31, 0x2f, 0x20, 0x3c, 0xf0, 0x06, 0x34, 0x16, 0xec, 0x9c, 0x8b,
+  0x67, 0xd3, 0x28, 0x05, 0xff, 0x75, 0x77, 0x77, 0x45, 0x88, 0x8d, 0x20,
+  0x49, 0x8b, 0x5b, 0x8d, 0x16, 0x63, 0x50, 0xa7, 0x17, 0x99, 0x72, 0xe0,
+  0x8a, 0x21, 0x52, 0xcb, 0x89, 0x59, 0x42, 0x4e, 0xb4, 0xc5, 0x67, 0x45,
+  0x88, 0x99, 0x56, 0x2f, 0x27, 0xa4, 0xa7, 0x90, 0x3d, 0xdb, 0xb2, 0x45,
+  0x92, 0xea, 0x6a, 0x3d, 0xc3, 0x33, 0x73, 0x86, 0x34, 0x9c, 0x94, 0x4a,
+  0x92, 0x0a, 0x64, 0x04, 0x69, 0x0a, 0x91, 0x90, 0xe8, 0x0e, 0xe2, 0x35,
+  0x8c, 0x79, 0x37, 0x14, 0xda, 0x63, 0x98, 0x7f, 0xa7, 0xfd, 0xa7, 0xdb,
+  0x3b, 0x18, 0xee, 0xd3, 0xed, 0xcf, 0xfc, 0x62, 0x50, 0x16, 0x7b, 0x47,
+  0x0a, 0x9e, 0x48, 0x9e, 0xd7, 0xc3, 0x49, 0xf8, 0x33, 0x72, 0x0e, 0x88,
+  0x61, 0x77, 0x39, 0x83, 0x18, 0x26, 0x90, 0x44, 0x83, 0xbc, 0x60, 0x48,
+  0x1a, 0x4a, 0xeb, 0xc5, 0x5e, 0xa6, 0xf0, 0x7c, 0x85, 0x22, 0x77, 0xa2,
+  0x08, 0x7d, 0xab, 0x70, 0x8a, 0x04, 0x2f, 0xdd, 0x8b, 0xc0, 0x05, 0xd6,
+  0x12, 0xb8, 0x57, 0x60, 0xf8, 0x72, 0x3a, 0xdf, 0x81, 0xe0, 0x12, 0x9d,
+  0x93, 0x11, 0x54, 0x0c, 0x72, 0x86, 0x2f, 0x6e, 0x01, 0x82, 0x48, 0xb2,
+  0xec, 0x26, 0x84, 0x6a, 0xcc, 0xaf, 0x94, 0x54, 0x80, 0xad, 0xd3, 0xdc,
+  0xee, 0x93, 0xcf, 0x3f, 0x97, 0x41, 0x64, 0x92, 0x92, 0xe4, 0x0a, 0xcb,
+  0x90, 0x3c, 0xce, 0x68, 0x05, 0xec, 0x85, 0xa6, 0x8a, 0xf4, 0x48, 0x7b,
+  0xe6, 0x60, 0xf9, 0x88, 0xd2, 0xba, 0x2e, 0x6b, 0xba, 0x2e, 0x09, 0xc8,
+  0x36, 0x51, 0x33, 0x4d, 0xa4, 0x66, 0xba, 0xd4, 0x3e, 0x6e, 0xa3, 0x46,
+  0x6b, 0x81, 0xc8, 0x2f, 0x83, 0xa4, 0x8f, 0xcb, 0x02, 0x3d, 0xfe, 0x8d,
+  0x54, 0xe0, 0xcb, 0xac, 0x09, 0x93, 0x4a, 0x3d, 0xec, 0x93, 0x56, 0xe3,
+  0x2b, 0xc1, 0x75, 0x5d, 0x09, 0x2b, 0x4d, 0x8b, 0x7d, 0xc9, 0xfa, 0xbd,
+  0x42, 0x68, 0x7a, 0x55, 0xb3, 0xbf, 0x04, 0x19, 0xbd, 0x94, 0x90, 0x8b,
+  0x28, 0x32, 0xfb, 0x97, 0x82, 0x21, 0x2d, 0x5a, 0x12, 0xc0, 0x8d, 0x9b,
+  0x26, 0x9d, 0x5c, 0x39, 0x66, 0x0e, 0x84, 0x1d, 0x18, 0xf1, 0x44, 0x2f,
+  0x93, 0x12, 0x6d, 0x41, 0x9c, 0x4d, 0x6e, 0x0b, 0x9c, 0xbe, 0x54, 0x68,
+  0x6a, 0xf3, 0x12, 0x80, 0xf2, 0xb9, 0x46, 0x18, 0x8d, 0x26, 0xb6, 0x14,
+  0x75, 0x44, 0xa4, 0x65, 0x89, 0xc6, 0xbd, 0xeb, 0x2d, 0x54, 0xa4, 0x46,
+  0x87, 0xd4, 0x0f, 0xd7, 0xea, 0x66, 0xb0, 0x89, 0xb9, 0xc4, 0x31, 0xb1,
+  0x13, 0xbb, 0x6b, 0xb3, 0x2f, 0xc7, 0x3e, 0x59, 0xa7, 0x87, 0xba, 0x27,
+  0x9f, 0x5e, 0x5a, 0xd7, 0x38, 0x15, 0x3f, 0x78, 0x03, 0x84, 0xc9, 0xc3,
+  0xb1, 0x20, 0xee, 0x1c, 0x4c, 0x41, 0x5d, 0x4d, 0x57, 0x20, 0x06, 0xd3,
+  0x9b, 0x80, 0xb4, 0xdd, 0x8b, 0x9a, 0x63, 0x07, 0x6f, 0xec, 0x48, 0x5f,
+  0x7d, 0xd9, 0x6a, 0xed, 0xf6, 0x76, 0x38, 0xbf, 0xd7, 0xef, 0xea, 0xe1,
+  0xa4, 0x9c, 0x47, 0x60, 0xf3, 0xa4, 0xe2, 0x0b, 0x93, 0x94, 0x83, 0x03,
+  0xf2, 0x6b, 0x06, 0x2b, 0x79, 0x21, 0xd8, 0x9e, 0xf3, 0xc6, 0xb3, 0x95,
+  0x45, 0x7d, 0x6c, 0x65, 0x84, 0x4b, 0x84, 0xb3, 0x93, 0xa2, 0x82, 0xf2,
+  0x18, 0x4a, 0x4b, 0x84, 0x6d, 0xd2, 0x54, 0xcb, 0x09, 0x5d, 0x48, 0xef,
+  0xc9, 0xcf, 0xd7, 0x2c, 0x0b, 0x2e, 0x97, 0x1e, 0x78, 0x5f, 0xac, 0x9a,
+  0xa7, 0x8a, 0x0c, 0x8d, 0x55, 0xe5, 0x17, 0xe7, 0xe3, 0x4e, 0xc5, 0xc4,
+  0xba, 0xc8, 0x0d, 0x1b, 0xa0, 0xfb, 0x5f, 0xf0, 0x11, 0xfa, 0x61, 0x1a,
+  0x83, 0x0b, 0x6a, 0xa0, 0x16, 0x48, 0x5a, 0xa9, 0xf3, 0x7f, 0x64, 0x2a,
+  0x20, 0x49, 0x16, 0x13, 0x83, 0x43, 0x43, 0xc4, 0x0a, 0xe5, 0xd1, 0x1f,
+  0x6d, 0xb9, 0x76, 0xdc, 0x59, 0x1c, 0xad, 0xa3, 0xd0, 0x8d, 0x08, 0xca,
+  0x68, 0x73, 0x25, 0xb5, 0x57, 0xa8, 0x12, 0xd1, 0x65, 0x18, 0xa8, 0x27,
+  0xb1, 0xde, 0xe7, 0x24, 0x2b, 0x01, 0x05, 0x71, 0xf8, 0x0e, 0x2b, 0x77,
+  0xbc, 0x77, 0x9b, 0x8d, 0x5f, 0x7d, 0x49, 0xb1, 0x49, 0x77, 0xc0, 0x7d,
+  0xe5, 0xba, 0x14, 0x44, 0xee, 0x5b, 0xf4, 0x67, 0x2f, 0x21, 0x43, 0x71,
+  0x64, 0xc3, 0xcd, 0x31, 0x59, 0xd5, 0xa2, 0x07, 0x6d, 0xe5, 0xb5, 0x76,
+  0x51, 0x96, 0x2b, 0x1b, 0xd3, 0xc2, 0xab, 0x58, 0x09, 0x2f, 0xb7, 0x85,
+  0x33, 0x3e, 0x1c, 0xf5, 0x33, 0xc5, 0x0b, 0x88, 0x99, 0xc7, 0x01, 0x62,
+  0x90, 0x0d, 0x30, 0x58, 0xf2, 0xc5, 0xad, 0xe9, 0xdb, 0xaf, 0xfa, 0x40,
+  0x75, 0x82, 0x6a, 0xb4, 0x7a, 0x41, 0xe8, 0xe9, 0x57, 0x5f, 0x02, 0x12,
+  0x93, 0x7e, 0xfd, 0xab, 0x7d, 0x9b, 0xfe, 0x31, 0xc7, 0xc7, 0x30, 0xa1,
+  0x95, 0x13, 0x21, 0xc5, 0x4b, 0x9f, 0xdf, 0x62, 0x3b, 0xa0, 0x5a, 0x76,
+  0xd6, 0xfb, 0xeb, 0x44, 0x53, 0xeb, 0x7f, 0x5d, 0x47, 0x48, 0x8c, 0xba,
+  0x6d, 0x50, 0x2b, 0x90, 0x6b, 0x2c, 0x97, 0x41, 0xbc, 0x37, 0xe5, 0xe5,
+  0xe0, 0x81, 0x1a, 0x03, 0x7f, 0x6c, 0xcc, 0x3f, 0xf7, 0xec, 0xa8, 0x7f,
+  0xee, 0xb9, 0x71, 0xff, 0xdc, 0x73, 0x23, 0xff, 0xb9, 0xf7, 0x1b, 0x76,
+  0x74, 0x9d, 0x9b, 0x77, 0xad, 0x7b, 0x8d, 0x7b, 0x6d, 0xf7, 0xd6, 0x57,
+  0x35, 0xed, 0x22, 0x15, 0x72, 0x65, 0x02, 0x6e, 0x85, 0xe8, 0x88, 0xcb,
+  0x2a, 0x70, 0x49, 0xe4, 0x72, 0xe9, 0xe6, 0x0d, 0xc3, 0x6f, 0x10, 0x3e,
+  0xe6, 0x3d, 0x41, 0x6b, 0x4a, 0x82, 0x78, 0x3d, 0x23, 0x9b, 0xad, 0x87,
+  0x2b, 0xab, 0x9d, 0xd8, 0x95, 0xd6, 0xc0, 0xa3, 0x20, 0x1a, 0xcd, 0xbe,
+  0x1e, 0x85, 0x83, 0xbd, 0x58, 0x56, 0x1c, 0xee, 0xc8, 0xac, 0x9d, 0x01,
+  0x73, 0x14, 0xbc, 0x5a, 0xfa, 0x7a, 0xbb, 0xff, 0xee, 0xfd, 0xfe, 0xf1,
+  0x83, 0x91, 0xf7, 0x7e, 0x88, 0xac, 0xf5, 0xf8, 0xc1, 0x4a, 0xe1, 0x9b,
+  0x22, 0x28, 0xf7, 0x88, 0x24, 0x8d, 0xa5, 0x61, 0xa1, 0x3f, 0x91, 0xe0,
+  0xf1, 0x4b, 0x34, 0x3d, 0xee, 0x7b, 0x91, 0xb7, 0xdf, 0xf8, 0x85, 0xe3,
+  0xae, 0x39, 0xa3, 0xab, 0xa7, 0xef, 0xd3, 0xeb, 0x3d, 0x89, 0x7a, 0xb0,
+  0xf5, 0xe4, 0x63, 0x65, 0x8b, 0xed, 0xf5, 0x64, 0x7d, 0xd0, 0x6a, 0xde,
+  0x92, 0xfc, 0x2e, 0xc5, 0x52, 0xe4, 0x64, 0xe7, 0x8b, 0x8b, 0x95, 0x11,
+  0x1c, 0xfb, 0x07, 0x07, 0x2e, 0x5b, 0xb3, 0x8d, 0xfb, 0xd2, 0x8a, 0xdd,
+  0xfe, 0xfd, 0x6d, 0x38, 0x58, 0xb8, 0x19, 0x2a, 0xc0, 0x53, 0x7e, 0xd7,
+  0xa0, 0x29, 0x39, 0x59, 0xfa, 0xa5, 0x8c, 0xe6, 0x8b, 0xe8, 0x3a, 0x9a,
+  0x01, 0xf8, 0xd2, 0xb0, 0x96, 0xf1, 0x44, 0xc1, 0xd2, 0x91, 0x38, 0xb6,
+  0x4f, 0xf7, 0x81, 0x14, 0x2e, 0x99, 0xc3, 0xa2, 0xd5, 0x04, 0x79, 0x1e,
+  0x99, 0x2b, 0x6c, 0x63, 0xe7, 0xaf, 0x68, 0x73, 0x6a, 0xff, 0x13, 0xd9,
+  0x31, 0x39, 0x5f, 0xce, 0x0d, 0xf9, 0x1a, 0xb9, 0x68, 0x6a, 0x94, 0xe6,
+  0x87, 0x63, 0x71, 0x75, 0x77, 0xc9, 0xf9, 0xc8, 0xf1, 0xc1, 0x22, 0xb6,
+  0xa6, 0xd1, 0xb0, 0xe3, 0x7e, 0xdc, 0x29, 0xd0, 0x1b, 0x1d, 0x9d, 0x1f,
+  0x9a, 0xdd, 0x79, 0x7f, 0xfe, 0x4d, 0x4f, 0x34, 0x9f, 0x2e, 0x18, 0x02,
+  0x10, 0xf0, 0x8c, 0x32, 0x6e, 0x96, 0x5e, 0x53, 0x2c, 0x2b, 0x66, 0xb9,
+  0x61, 0x65, 0x95, 0x4e, 0x10, 0x5c, 0x67, 0xa3, 0x9f, 0x0d, 0x9f, 0x6d,
+  0x76, 0x36, 0x66, 0x35, 0xae, 0x71, 0xb7, 0xfc, 0xae, 0xd0, 0xb4, 0x00,
+  0xeb, 0x52, 0x90, 0xfa, 0x96, 0x2b, 0xc6, 0xc1, 0xa2, 0x7d, 0xaa, 0x51,
+  0x37, 0x11, 0xe4, 0x16, 0x87, 0x63, 0x63, 0x0d, 0x03, 0x40, 0xff, 0xb5,
+  0xd0, 0x93, 0x22, 0x73, 0x89, 0xed, 0xae, 0x98, 0xa6, 0xd5, 0xd4, 0xa6,
+  0x10, 0x86, 0xd0, 0x06, 0xea, 0x6a, 0x22, 0xb0, 0x7f, 0x2a, 0xfa, 0xe8,
+  0x57, 0xfb, 0x0b, 0x0d, 0xbe, 0x2a, 0xe7, 0x68, 0x8e, 0x68, 0xa0, 0xf7,
+  0x0a, 0xae, 0xf0, 0x3c, 0x67, 0x30, 0x31, 0x0f, 0x58, 0xb8, 0x4b, 0xc9,
+  0xa2, 0x3a, 0xfe, 0xc4, 0x3f, 0xe3, 0x3c, 0x00, 0xe2, 0x01, 0x15, 0x18,
+  0x87, 0xb0, 0x20, 0x6f, 0x70, 0x30, 0x0a, 0xa7, 0xa0, 0xb8, 0x82, 0x88,
+  0xd0, 0xa8, 0x38, 0xfc, 0x87, 0x96, 0x38, 0xac, 0xd4, 0xb0, 0x31, 0xda,
+  0xb4, 0x45, 0xac, 0x49, 0x82, 0x97, 0xd6, 0x28, 0x05, 0xa9, 0x93, 0x72,
+  0xe4, 0xc1, 0xf5, 0x08, 0xda, 0x51, 0x0c, 0xc2, 0xd1, 0x3b, 0x89, 0xe1,
+  0x45, 0x0b, 0xee, 0x37, 0xb9, 0x9d, 0xc6, 0x71, 0x24, 0x58, 0x00, 0xe2,
+  0x0c, 0x46, 0x57, 0xff, 0xe6, 0xe0, 0xfb, 0xd7, 0x5e, 0x55, 0x16, 0x54,
+  0x7b, 0xa6, 0x59, 0x81, 0x10, 0x18, 0xd3, 0xa6, 0x58, 0x85, 0x2f, 0xa2,
+  0x11, 0x00, 0x86, 0x96, 0x86, 0xa8, 0xe3, 0x35, 0xcd, 0xb2, 0x85, 0x45,
+  0xb8, 0xe6, 0xca, 0x27, 0xa8, 0xde, 0x68, 0x8e, 0x1c, 0x59, 0xb6, 0xee,
+  0x81, 0x44, 0x7a, 0xbf, 0x62, 0x74, 0xc2, 0x06, 0x86, 0x7e, 0x75, 0x57,
+  0x2a, 0x38, 0x41, 0x15, 0xb9, 0x77, 0x3e, 0x7b, 0xf2, 0x79, 0x52, 0x53,
+  0xee, 0x70, 0xee, 0x2f, 0x19, 0x43, 0xa2, 0xad, 0x46, 0x8e, 0xe9, 0xd4,
+  0xc8, 0x92, 0x3c, 0x7a, 0xa3, 0xd5, 0x97, 0xb7, 0x19, 0x6e, 0x2e, 0xc9,
+  0x70, 0x0d, 0x81, 0x44, 0xcc, 0x22, 0xca, 0x82, 0x89, 0x80, 0x8b, 0x75,
+  0x62, 0x5b, 0xd1, 0xd0, 0xa3, 0xcc, 0xa9, 0x61, 0x3a, 0x54, 0x7c, 0xc3,
+  0xb0, 0x87, 0xb3, 0xc3, 0xf3, 0x33, 0xf3, 0x63, 0x74, 0x7e, 0x72, 0xb6,
+  0x02, 0xee, 0xa7, 0x99, 0x80, 0xed, 0xd1, 0xa2, 0xa9, 0x21, 0x4e, 0x1d,
+  0x58, 0x1e, 0xbf, 0x40, 0xb4, 0x02, 0xb3, 0x90, 0x3a, 0x8a, 0xe6, 0xea,
+  0x81, 0xba, 0xd6, 0xed, 0x62, 0x60, 0x17, 0x86, 0x97, 0x3f, 0x38, 0x31,
+  0xde, 0xf3, 0x87, 0x29, 0x04, 0x13, 0x26, 0x62, 0xa4, 0x19, 0x5b, 0xa6,
+  0x8d, 0xd1, 0x4a, 0x0d, 0x6e, 0xe7, 0xf6, 0x15, 0x83, 0xcb, 0x0a, 0x0a,
+  0x61, 0xb2, 0xe2, 0x72, 0xe7, 0x89, 0xd3, 0x78, 0x0d, 0xd7, 0xd4, 0x94,
+  0xf0, 0x1e, 0xc5, 0x17, 0x5c, 0xdb, 0xc2, 0x19, 0x8f, 0xd0, 0x6f, 0x5a,
+  0x5b, 0x4b, 0x13, 0x5d, 0x99, 0xe5, 0x3c, 0x63, 0x69, 0x9e, 0xdd, 0xb8,
+  0xca, 0x75, 0xf8, 0x9e, 0x60, 0xa8, 0xb3, 0x24, 0x06, 0x84, 0x60, 0x71,
+  0x62, 0x69, 0x97, 0xd7, 0x03, 0xb4, 0x39, 0xde, 0x17, 0x23, 0xe0, 0xcc,
+  0x1a, 0x00, 0xf0, 0xae, 0xeb, 0xa8, 0xd6, 0x1f, 0x86, 0xb3, 0x7e, 0x36,
+  0xdc, 0xe9, 0x72, 0x67, 0x4a, 0xce, 0x8f, 0x73, 0x18, 0x04, 0xae, 0xb6,
+  0x40, 0x01, 0x2e, 0xa4, 0x0a, 0x27, 0x24, 0x02, 0xbf, 0x82, 0xc8, 0xa9,
+  0x3c, 0x15, 0xcd, 0xf1, 0x43, 0x2a, 0x31, 0xe5, 0x82, 0x58, 0x1a, 0x97,
+  0xad, 0xe7, 0x6c, 0xf9, 0x65, 0x97, 0xab, 0xb6, 0x84, 0xa5, 0x90, 0x8f,
+  0x46, 0xea, 0xbe, 0x25, 0x83, 0xd3, 0x2d, 0x07, 0x4a, 0xa0, 0x30, 0xc8,
+  0xad, 0x99, 0xef, 0xc4, 0x05, 0x90, 0x55, 0xc0, 0x84, 0x5d, 0x29, 0x04,
+  0x06, 0x66, 0x96, 0x2b, 0x2b, 0x91, 0x45, 0xe2, 0x08, 0x26, 0x46, 0x17,
+  0x15, 0x28, 0x91, 0xc2, 0x55, 0x03, 0xd4, 0x45, 0x24, 0x94, 0x1c, 0x52,
+  0x50, 0xf9, 0x96, 0x9a, 0x96, 0x9c, 0xa4, 0x40, 0x8b, 0x10, 0x09, 0xc5,
+  0x86, 0xe0, 0x8a, 0xb0, 0x73, 0xbd, 0x5a, 0xa4, 0x3d, 0xb1, 0x58, 0x54,
+  0x44, 0xe0, 0x9d, 0xa4, 0x75, 0x0e, 0x88, 0x08, 0x68, 0xe0, 0xd4, 0xdf,
+  0x44, 0x66, 0x75, 0x10, 0xc7, 0x1d, 0x8f, 0x68, 0x38, 0xa7, 0xa4, 0x0d,
+  0xa8, 0xc0, 0x73, 0x0d, 0x9d, 0x1f, 0x18, 0x14, 0xc3, 0x1d, 0x48, 0x65,
+  0xbe, 0x36, 0x8e, 0x80, 0x8a, 0x72, 0xdd, 0x7b, 0x8d, 0x4a, 0x16, 0x81,
+  0xde, 0x06, 0xf9, 0xe2, 0x71, 0x48, 0x17, 0x52, 0xd8, 0x35, 0xc8, 0xc5,
+  0x25, 0x34, 0xb6, 0xbc, 0x57, 0xea, 0x75, 0xca, 0x43, 0xa8, 0x26, 0x44,
+  0x80, 0x8a, 0x35, 0x53, 0x00, 0xfb, 0x8c, 0xb8, 0x45, 0x83, 0x6e, 0xe1,
+  0x45, 0x70, 0x6f, 0x42, 0xca, 0x0e, 0xc2, 0x7c, 0x65, 0x78, 0x2d, 0x19,
+  0xbf, 0x79, 0x33, 0xfc, 0xaa, 0x1d, 0x03, 0x2f, 0x92, 0x00, 0xb6, 0x31,
+  0x33, 0x5e, 0x3b, 0xe0, 0xd0, 0x1e, 0x21, 0x48, 0x56, 0x2c, 0xd1, 0xe8,
+  0x99, 0x9a, 0xc8, 0x7d, 0xee, 0xf7, 0xd5, 0xa2, 0xe0, 0xa7, 0xc3, 0xdd,
+  0xcd, 0x07, 0xb3, 0x39, 0x49, 0x7e, 0xb7, 0xd0, 0x0b, 0xa4, 0x6a, 0x31,
+  0xb8, 0x0c, 0x83, 0x84, 0x54, 0x16, 0x7a, 0x41, 0x50, 0x64, 0x31, 0x8b,
+  0x30, 0x70, 0x80, 0x56, 0xa8, 0xbb, 0x6f, 0x04, 0x5e, 0xf9, 0xf8, 0x7e,
+  0x41, 0x08, 0x4e, 0x93, 0x53, 0x73, 0xc7, 0xd8, 0x25, 0xf6, 0xa0, 0x31,
+  0xcc, 0x3b, 0x50, 0x37, 0x68, 0x18, 0x9b, 0xdd, 0x0b, 0x91, 0xbc, 0xa1,
+  0x88, 0x86, 0x7c, 0xe3, 0x3c, 0x08, 0xa4, 0xfc, 0x51, 0x3d, 0x31, 0xf2,
+  0x62, 0x54, 0x66, 0x18, 0xc0, 0x1c, 0xe3, 0x82, 0xe1, 0x38, 0xb4, 0x64,
+  0x2a, 0x57, 0x7e, 0xba, 0x16, 0xbd, 0xa7, 0xb1, 0xb6, 0xee, 0x22, 0xa0,
+  0x28, 0x7b, 0x73, 0x32, 0x6b, 0xbf, 0x9c, 0xe0, 0x72, 0x91, 0x68, 0x69,
+  0xda, 0xdb, 0x02, 0xd5, 0xac, 0x92, 0x90, 0x9a, 0x30, 0x7c, 0x3a, 0x3b,
+  0x1d, 0x4f, 0xdf, 0xee, 0xf6, 0xf0, 0xae, 0xcb, 0x4e, 0xeb, 0x7a, 0x36,
+  0x98, 0x4c, 0x26, 0x0f, 0x70, 0xd4, 0x83, 0x83, 0x03, 0xf3, 0xc1, 0x01,
+  0x50, 0xa1, 0x08, 0xd3, 0x1e, 0x23, 0x3d, 0xb8, 0x22, 0x93, 0xcd, 0x6c,
+  0x33, 0x19, 0x5d, 0x2d, 0x29, 0xd4, 0xd8, 0x8c, 0x86, 0x8b, 0xaf, 0x8d,
+  0x8e, 0xb7, 0x42, 0xd7, 0x2f, 0xd5, 0x8e, 0xab, 0xb4, 0x00, 0x63, 0x4b,
+  0x83, 0x61, 0x01, 0x0e, 0x00, 0xb3, 0x9a, 0xe8, 0xa5, 0x74, 0xc5, 0x3d,
+  0x44, 0x13, 0x91, 0x97, 0x85, 0x2d, 0x80, 0x69, 0x35, 0xac, 0x22, 0x2b,
+  0x90, 0xf5, 0x60, 0x6b, 0x7f, 0x20, 0x9c, 0xa9, 0x4e, 0xde, 0xed, 0x9f,
+  0x93, 0xf3, 0xae, 0x91, 0x1c, 0xea, 0x78, 0xf2, 0xa8, 0x45, 0x27, 0x86,
+  0x19, 0x2c, 0xf5, 0xea, 0x4c, 0xe9, 0x1d, 0x00, 0x56, 0x94, 0xd7, 0xca,
+  0x1a, 0x05, 0x03, 0x35, 0x56, 0x43, 0x43, 0x56, 0x74, 0x60, 0x6f, 0x20,
+  0xce, 0x3f, 0xa4, 0x3f, 0xbb, 0xae, 0xd7, 0x9d, 0xe7, 0xe1, 0xfd, 0xd6,
+  0x7a, 0xfd, 0x27, 0xc6, 0xff, 0xd8, 0x92, 0x5e, 0x7f, 0xf9, 0xed, 0xdb,
+  0x94, 0x09, 0xb7, 0xa0, 0xc7, 0x98, 0x34, 0xce, 0x23, 0xb9, 0x39, 0x1e,
+  0xdb, 0xb5, 0x95, 0xcf, 0x38, 0xe7, 0x55, 0x80, 0xb6, 0x6b, 0xb3, 0xdd,
+  0x53, 0x54, 0xa1, 0xe4, 0x6b, 0xc0, 0x66, 0xa2, 0x53, 0x30, 0x79, 0x24,
+  0x56, 0xa3, 0x83, 0x96, 0x56, 0x1a, 0xe6, 0xc2, 0x01, 0xaf, 0xb6, 0xf9,
+  0x2a, 0x5b, 0x30, 0x50, 0xad, 0xdf, 0xfc, 0x2a, 0x3d, 0xce, 0x97, 0xfa,
+  0x7d, 0x68, 0x14, 0x1d, 0x63, 0xdd, 0x6e, 0x05, 0x1d, 0xa5, 0x79, 0xd4,
+  0x4e, 0x9e, 0x4a, 0xcf, 0x9d, 0xaa, 0xf3, 0xe1, 0x0e, 0xed, 0x46, 0x77,
+  0x88, 0xa9, 0x34, 0xbe, 0x1f, 0x67, 0x72, 0xec, 0xf5, 0x34, 0x48, 0xd8,
+  0x8a, 0xd2, 0xd8, 0xac, 0xbc, 0xa4, 0xf4, 0x28, 0xc6, 0x59, 0xc3, 0x22,
+  0x69, 0x7d, 0xb7, 0xae, 0x7d, 0x82, 0x29, 0xb8, 0x66, 0x67, 0x70, 0xdb,
+  0x11, 0xc6, 0xb2, 0x08, 0xf1, 0x14, 0x4b, 0xf7, 0x0a, 0xde, 0x68, 0x21,
+  0x83, 0x62, 0xb1, 0x33, 0x1a, 0x98, 0x37, 0xa1, 0x9c, 0x2a, 0x78, 0x70,
+  0xeb, 0xb6, 0xfd, 0x37, 0x6f, 0x45, 0x87, 0xa8, 0x8a, 0x5a, 0x2f, 0x17,
+  0x51, 0x37, 0xb4, 0xcc, 0x30, 0x5c, 0xb5, 0xed, 0x4d, 0xb9, 0xb2, 0x8d,
+  0x5c, 0x61, 0xd8, 0x98, 0x33, 0x83, 0x88, 0x6c, 0x18, 0x80, 0x0b, 0x8d,
+  0xb9, 0x84, 0xcd, 0x8d, 0x02, 0x46, 0x4b, 0x11, 0x69, 0x89, 0x48, 0x6e,
+  0xb1, 0x78, 0xf2, 0x26, 0x48, 0x2a, 0x1b, 0x7b, 0xf4, 0xf8, 0x8f, 0x95,
+  0xf5, 0x4d, 0xc4, 0xac, 0x2c, 0x08, 0x34, 0xf0, 0xdd, 0xf9, 0xd8, 0xd2,
+  0xae, 0xde, 0x84, 0x34, 0x7a, 0x11, 0xcd, 0x5c, 0x13, 0x63, 0x7b, 0x5a,
+  0x99, 0x9f, 0x0d, 0x83, 0x0b, 0x61, 0x3e, 0x33, 0x4a, 0x33, 0x24, 0x39,
+  0x69, 0x98, 0x1c, 0x8b, 0x9d, 0x7e, 0xfd, 0x4b, 0x8e, 0x4e, 0x4b, 0xd6,
+  0x5f, 0xae, 0x27, 0xab, 0x2b, 0x6b, 0xd4, 0x7d, 0x1b, 0xdf, 0xb2, 0xce,
+  0xa6, 0xe7, 0x75, 0x1d, 0x82, 0x08, 0xef, 0x3c, 0x2c, 0x05, 0x29, 0x52,
+  0x6c, 0x7d, 0x92, 0x88, 0x22, 0x7a, 0x6c, 0x1b, 0xae, 0x6f, 0xc1, 0x19,
+  0xea, 0xe4, 0xd6, 0x02, 0x0a, 0x34, 0xbb, 0x2c, 0x2f, 0xd8, 0x97, 0xbb,
+  0x5e, 0x23, 0x62, 0x8b, 0x6b, 0x70, 0xc6, 0xc2, 0x46, 0x35, 0x5f, 0x19,
+  0x3a, 0x00, 0x46, 0x24, 0x63, 0x01, 0xe4, 0xc3, 0x64, 0x82, 0xd8, 0x36,
+  0x08, 0x87, 0xe6, 0x5b, 0x23, 0xd5, 0xf0, 0x49, 0xa7, 0x79, 0x93, 0xd1,
+  0xf8, 0x65, 0x37, 0xe0, 0xfd, 0x22, 0x4b, 0x69, 0x37, 0x11, 0x7b, 0xd4,
+  0xad, 0x83, 0x32, 0xb8, 0x24, 0x89, 0xf0, 0x72, 0x56, 0x8e, 0xcb, 0x8b,
+  0x8b, 0x07, 0x4c, 0x92, 0x0c, 0x8a, 0x84, 0x36, 0x98, 0x44, 0x7b, 0x04,
+  0x0a, 0x40, 0xef, 0x8d, 0x19, 0x34, 0xab, 0x32, 0x34, 0xdb, 0x1b, 0xb2,
+  0x65, 0x46, 0xaa, 0xd4, 0x06, 0xb3, 0x72, 0xe2, 0x47, 0xdf, 0x22, 0x17,
+  0x68, 0xda, 0xb3, 0x69, 0x4e, 0xe5, 0x4c, 0x49, 0x76, 0x70, 0x50, 0xe8,
+  0x75, 0xf2, 0x9f, 0xff, 0xfc, 0xe9, 0x97, 0x15, 0x95, 0x44, 0x25, 0x49,
+  0x0b, 0x71, 0xc5, 0x8c, 0xb3, 0x68, 0x31, 0xb4, 0x5d, 0xc5, 0x48, 0x92,
+  0xf1, 0xb2, 0xd9, 0xc5, 0xd0, 0x4b, 0x08, 0x0f, 0x19, 0x1c, 0x31, 0x72,
+  0xed, 0x50, 0x2b, 0x92, 0x4a, 0xe8, 0x02, 0xe1, 0x4c, 0x02, 0x67, 0xd7,
+  0x39, 0xff, 0x2c, 0x86, 0x1d, 0x6b, 0xef, 0xe1, 0x81, 0xb2, 0x50, 0xa4,
+  0xd6, 0x1b, 0x2c, 0x7c, 0xf6, 0xfd, 0xd9, 0x91, 0xd5, 0xed, 0xbc, 0x9d,
+  0xf8, 0x1a, 0x3b, 0x11, 0x2c, 0x9b, 0x05, 0xf3, 0x8f, 0x00, 0x68, 0x21,
+  0x10, 0x98, 0x54, 0x6b, 0x61, 0x3e, 0xad, 0xda, 0x27, 0x64, 0xf7, 0x1a,
+  0x4c, 0xfb, 0xd1, 0xca, 0x0f, 0xfd, 0xa0, 0x1a, 0x4c, 0x15, 0xc2, 0x83,
+  0x7b, 0xa0, 0x27, 0xb9, 0x0d, 0xd9, 0xe8, 0x34, 0xf7, 0xf5, 0xa1, 0xab,
+  0x4e, 0xe4, 0x39, 0xef, 0x14, 0x22, 0xd7, 0x55, 0x2e, 0x02, 0xd0, 0x30,
+  0x91, 0xff, 0x6d, 0x4e, 0x99, 0x5b, 0x8a, 0x66, 0x1f, 0xd5, 0x8a, 0xce,
+  0x1d, 0x24, 0x3e, 0xb3, 0x2e, 0x05, 0x92, 0x75, 0x2b, 0x78, 0xac, 0xf9,
+  0x9f, 0xeb, 0xff, 0xbe, 0xee, 0x70, 0xbb, 0x23, 0xf9, 0xcf, 0x16, 0xb4,
+  0x25, 0x09, 0x31, 0x34, 0x07, 0x47, 0x7d, 0x37, 0x52, 0xd7, 0xa1, 0xce,
+  0x63, 0x1c, 0xa9, 0x3b, 0xb4, 0x6a, 0x18, 0xdf, 0x1c, 0xee, 0xbf, 0xb6,
+  0x59, 0x64, 0xff, 0x0a, 0xf0, 0x4b, 0x67, 0x10, 0x1a, 0x67, 0x5c, 0x5e,
+  0x69, 0xa9, 0xba, 0x24, 0x36, 0x45, 0xef, 0x0e, 0x90, 0x88, 0x91, 0xb6,
+  0x29, 0x10, 0x8f, 0x48, 0x36, 0x54, 0x1d, 0xc5, 0xfa, 0xb4, 0x52, 0x79,
+  0xf4, 0x0c, 0x74, 0x6a, 0xec, 0xa3, 0xc3, 0xcb, 0x2c, 0xce, 0xa3, 0x5f,
+  0x1f, 0xd4, 0xe4, 0x25, 0xff, 0x5c, 0x71, 0x29, 0x1c, 0xa2, 0x76, 0x82,
+  0x3c, 0x6a, 0xd6, 0x52, 0xb0, 0xb1, 0x95, 0xef, 0x2a, 0xcd, 0x40, 0xe5,
+  0xd2, 0x80, 0xd7, 0x18, 0xf1, 0x69, 0xdd, 0x6b, 0x91, 0x1d, 0x7e, 0x94,
+  0x82, 0x44, 0xca, 0x52, 0x5c, 0xc8, 0x33, 0x12, 0x4c, 0xbd, 0x4e, 0xeb,
+  0x28, 0xcc, 0xb0, 0x3a, 0x9d, 0xbc, 0x82, 0x4a, 0x46, 0x2d, 0x23, 0x24,
+  0x35, 0xa3, 0x5c, 0x1b, 0x39, 0x45, 0x07, 0x4c, 0x8f, 0x5d, 0xa5, 0x5e,
+  0xb9, 0x28, 0xae, 0x61, 0x1c, 0xa4, 0x8a, 0x14, 0x99, 0x97, 0x59, 0x6b,
+  0xed, 0x1a, 0x5c, 0xb3, 0x80, 0x15, 0x42, 0xb5, 0xbd, 0xf6, 0xd9, 0xf7,
+  0x4f, 0x41, 0x9a, 0x55, 0xa1, 0x18, 0x2c, 0xf1, 0x9c, 0x45, 0xdf, 0xa9,
+  0xd1, 0x3d, 0x71, 0xb6, 0x0f, 0xe0, 0xe1, 0xf8, 0x72, 0x78, 0xb8, 0xeb,
+  0xb4, 0x76, 0x0c, 0x40, 0x0d, 0xbc, 0x15, 0xba, 0x49, 0x26, 0xd7, 0x39,
+  0xa2, 0xad, 0x9b, 0x25, 0x78, 0x7c, 0x5a, 0xf8, 0xa3, 0xb4, 0x98, 0x87,
+  0xd3, 0x12, 0x2b, 0x1d, 0x27, 0x22, 0x95, 0x29, 0x09, 0x0a, 0x4e, 0x47,
+  0x23, 0x88, 0x32, 0x5a, 0x6c, 0x45, 0xf9, 0x36, 0x0a, 0xaa, 0x63, 0x67,
+  0x17, 0x61, 0xd8, 0x27, 0x29, 0xa5, 0xe6, 0x3d, 0x28, 0x5e, 0xb7, 0x92,
+  0x2b, 0xba, 0x5e, 0x65, 0x0c, 0xd1, 0x48, 0x15, 0x64, 0x49, 0x56, 0xb1,
+  0xc8, 0x73, 0x34, 0x65, 0x59, 0x1e, 0xc3, 0xef, 0x2f, 0xf3, 0x9b, 0xa8,
+  0x9d, 0x59, 0x07, 0x06, 0x2b, 0xb5, 0x8e, 0xc2, 0xc2, 0xda, 0x5b, 0x83,
+  0x1e, 0x23, 0xa5, 0x26, 0x54, 0x0a, 0xc5, 0x6e, 0x5f, 0x88, 0xa6, 0x42,
+  0x57, 0x18, 0xb9, 0xf6, 0x8b, 0x3d, 0x43, 0xf8, 0x49, 0xef, 0x9b, 0xb2,
+  0x6e, 0xf6, 0x7a, 0x5e, 0x89, 0x76, 0xc5, 0x06, 0x69, 0x51, 0x8e, 0xd4,
+  0x0e, 0x09, 0xa2, 0xc8, 0x70, 0xb7, 0xf3, 0xf9, 0x33, 0x17, 0x8b, 0x3c,
+  0xac, 0xae, 0x48, 0x41, 0x33, 0xb1, 0xd8, 0x50, 0x54, 0xa6, 0x60, 0x9e,
+  0xcb, 0x10, 0x00, 0x7f, 0x14, 0x46, 0x1c, 0xd0, 0x90, 0x7e, 0x18, 0x1c,
+  0xa0, 0xf3, 0xc1, 0x37, 0x68, 0xef, 0xaf, 0x3d, 0xab, 0x76, 0x77, 0xbf,
+  0x32, 0x03, 0x8f, 0xa7, 0xdc, 0xf9, 0x30, 0xe5, 0xf5, 0xb2, 0x52, 0x24,
+  0x15, 0x98, 0xd3, 0x65, 0x94, 0xc8, 0xe1, 0x9d, 0x4e, 0xb7, 0xec, 0xa6,
+  0xb3, 0xe7, 0x2f, 0x96, 0xd9, 0x2f, 0x09, 0xa3, 0x0b, 0x44, 0x16, 0x4e,
+  0x07, 0xe5, 0xc5, 0x00, 0x85, 0xe4, 0xe7, 0x69, 0x75, 0x4d, 0x7e, 0x16,
+  0xef, 0xd4, 0x21, 0xf8, 0x13, 0x79, 0xea, 0xd3, 0x69, 0xec, 0xae, 0x96,
+  0xdc, 0xbc, 0xca, 0xaa, 0xad, 0x32, 0x18, 0xd9, 0xcc, 0x3d, 0x52, 0x75,
+  0xf4, 0x75, 0x5b, 0xbb, 0x84, 0xca, 0xaf, 0x4b, 0xe9, 0x92, 0xa0, 0xdc,
+  0x33, 0x02, 0x09, 0xfb, 0x7c, 0x9d, 0x63, 0xd2, 0x60, 0xc5, 0x73, 0xb6,
+  0x20, 0xc1, 0x0a, 0x60, 0x54, 0x7f, 0x12, 0x4c, 0xa9, 0x8e, 0xd0, 0xc3,
+  0x75, 0x40, 0xf7, 0xfb, 0x82, 0xbd, 0x3c, 0x30, 0x1d, 0x49, 0xf5, 0x80,
+  0x36, 0xfc, 0xd4, 0x2a, 0x88, 0xe4, 0x11, 0xc5, 0x7e, 0x88, 0xf8, 0xf9,
+  0xd9, 0xf0, 0xc9, 0x67, 0x54, 0x96, 0xd4, 0xa2, 0x4e, 0x0e, 0x06, 0x66,
+  0xe9, 0xee, 0xee, 0x07, 0x8e, 0x69, 0x62, 0x2b, 0x3d, 0xfa, 0xea, 0x52,
+  0x15, 0x0a, 0x0a, 0xd3, 0x7a, 0x4c, 0x05, 0x2b, 0x07, 0xd5, 0x6a, 0xee,
+  0xee, 0x57, 0xc5, 0x21, 0x05, 0xbe, 0x97, 0x3f, 0x8a, 0x4f, 0x1f, 0xb4,
+  0xf4, 0x86, 0x2e, 0xa4, 0xc1, 0x3b, 0xc3, 0xe8, 0xf6, 0x92, 0xff, 0x28,
+  0xb3, 0x1e, 0x0a, 0x09, 0xef, 0x6d, 0x6d, 0xed, 0xbc, 0xd8, 0x35, 0x0a,
+  0xc7, 0xe7, 0xc3, 0xed, 0xe1, 0xce, 0x56, 0x90, 0xee, 0xb1, 0x7f, 0xf6,
+  0xee, 0xe8, 0xdd, 0xd7, 0x7b, 0xb6, 0x62, 0x93, 0x40, 0x50, 0x6b, 0x2c,
+  0x98, 0x6f, 0x4b, 0x75, 0xa5, 0xda, 0xe8, 0x91, 0x3c, 0x86, 0x1e, 0x6c,
+  0xe1, 0xf0, 0x06, 0xcc, 0xb2, 0xd8, 0xa2, 0x51, 0x65, 0x6c, 0xb3, 0x61,
+  0x91, 0xcd, 0x16, 0xf4, 0xe8, 0x73, 0x25, 0x35, 0x2d, 0x75, 0x48, 0x95,
+  0xbb, 0xa2, 0x50, 0x2b, 0x84, 0xa7, 0xe5, 0x01, 0x6a, 0x79, 0xe9, 0x38,
+  0x33, 0xd4, 0x3b, 0x2b, 0x7d, 0xfa, 0xf2, 0x60, 0xbc, 0x43, 0x43, 0x33,
+  0xec, 0x0c, 0x57, 0xa5, 0xc4, 0xb5, 0xf3, 0x4d, 0x66, 0xf1, 0x92, 0x19,
+  0x00, 0xb5, 0xc6, 0xae, 0xd5, 0x39, 0xae, 0x52, 0xb7, 0x26, 0x2b, 0xe4,
+  0x47, 0x07, 0xfa, 0x65, 0xee, 0x77, 0x36, 0x75, 0x43, 0x80, 0xd1, 0x4f,
+  0x5d, 0x01, 0x11, 0xbb, 0x06, 0x8f, 0x00, 0xb8, 0x21, 0x82, 0x88, 0xd6,
+  0x38, 0x12, 0x59, 0x80, 0xa4, 0x23, 0x77, 0x90, 0xb7, 0x58, 0x1d, 0x8c,
+  0xb9, 0xe3, 0xe8, 0x15, 0xbd, 0x46, 0x3d, 0xc5, 0x90, 0xa6, 0xb8, 0x58,
+  0x8e, 0xe7, 0xd3, 0x67, 0xc9, 0x4b, 0xf3, 0x4f, 0x98, 0x53, 0x75, 0xa0,
+  0xde, 0x5b, 0x32, 0x30, 0x13, 0x1b, 0x13, 0x3c, 0x14, 0x16, 0xf7, 0xe9,
+  0xd7, 0x27, 0xbb, 0xa6, 0xe1, 0xbb, 0x54, 0x53, 0xe7, 0x93, 0xa9, 0x59,
+  0xbd, 0x26, 0x9e, 0xd9, 0xac, 0x7a, 0x91, 0x57, 0x17, 0x89, 0x16, 0x7c,
+  0x67, 0xf7, 0xf3, 0x64, 0x9c, 0x37, 0xc9, 0xdb, 0xd7, 0xcf, 0x8c, 0xe6,
+  0x97, 0x4d, 0xae, 0xeb, 0xe5, 0x5c, 0x99, 0x84, 0xd4, 0x68, 0xa5, 0x71,
+  0xae, 0x77, 0xef, 0x6a, 0x97, 0x21, 0xd4, 0x6f, 0xd9, 0x6a, 0x2f, 0xd4,
+  0xa6, 0xec, 0x95, 0x2f, 0xb6, 0xcc, 0x8c, 0x5a, 0x12, 0x9b, 0x76, 0xc4,
+  0x5a, 0x62, 0xd6, 0xc0, 0x74, 0x5e, 0x73, 0x96, 0x50, 0xc7, 0x3a, 0xfb,
+  0x59, 0xdb, 0xf2, 0xc4, 0x49, 0x70, 0x5a, 0x02, 0x61, 0x60, 0xe4, 0xef,
+  0xcb, 0x20, 0xae, 0x9a, 0xbc, 0x91, 0x24, 0x02, 0xf5, 0x93, 0x23, 0x3c,
+  0xcd, 0xf6, 0x24, 0x79, 0xe3, 0x18, 0x6f, 0x78, 0xa8, 0x6b, 0x2c, 0x19,
+  0x12, 0x8b, 0xcc, 0x27, 0x4b, 0x54, 0x23, 0x0a, 0x65, 0x48, 0xad, 0x18,
+  0xab, 0x18, 0x87, 0xd5, 0xb2, 0xc0, 0x2e, 0xec, 0x2f, 0x28, 0x90, 0x32,
+  0xd9, 0x19, 0xde, 0xf5, 0x25, 0x5a, 0xd0, 0x2f, 0x37, 0x4d, 0xc2, 0x5a,
+  0x19, 0xdc, 0xd7, 0xf0, 0x2e, 0x74, 0x46, 0x43, 0x6d, 0x73, 0x08, 0xeb,
+  0x8c, 0xbc, 0x6c, 0x15, 0x1f, 0x8b, 0x5d, 0x73, 0x3f, 0x5f, 0xa6, 0xe3,
+  0xfb, 0x58, 0x12, 0x21, 0xcd, 0x11, 0x46, 0x9a, 0x8d, 0x1a, 0x45, 0x9a,
+  0x3f, 0x1b, 0x3e, 0x25, 0x5b, 0x46, 0x9f, 0x0a, 0x2a, 0x2e, 0x30, 0x61,
+  0x72, 0x49, 0x5a, 0x83, 0x2d, 0x19, 0x14, 0xf3, 0x4b, 0xba, 0x97, 0xc4,
+  0xd3, 0x15, 0xf8, 0x06, 0x5d, 0x94, 0x9d, 0x5a, 0x6c, 0x1d, 0x9c, 0x9a,
+  0x47, 0xbb, 0x79, 0x1f, 0xd8, 0xb8, 0x10, 0x42, 0xe3, 0x12, 0xeb, 0x91,
+  0x48, 0xa8, 0x0a, 0xfb, 0xa7, 0x7c, 0x58, 0xb3, 0x40, 0x38, 0xf2, 0x5b,
+  0x2b, 0x65, 0x78, 0x4f, 0x04, 0x82, 0x08, 0xda, 0x01, 0x9c, 0x21, 0xee,
+  0x15, 0xe1, 0x52, 0xbc, 0x07, 0x03, 0x12, 0x24, 0xfb, 0xa4, 0x89, 0x58,
+  0xc7, 0xb9, 0x8b, 0x79, 0x47, 0xa3, 0x61, 0x6e, 0x2e, 0x32, 0xc6, 0x35,
+  0x6c, 0x7d, 0x38, 0xf4, 0x66, 0x75, 0xa4, 0xf2, 0x78, 0x6c, 0x4a, 0x54,
+  0xc5, 0x77, 0xeb, 0xcd, 0xd1, 0xf1, 0xe1, 0x66, 0xf2, 0x26, 0xd3, 0x34,
+  0x36, 0x7f, 0x66, 0x74, 0x03, 0xfe, 0x81, 0x3f, 0x51, 0x02, 0x11, 0x3b,
+  0x42, 0xac, 0x02, 0xb3, 0x6e, 0x09, 0xeb, 0x41, 0x4c, 0x35, 0x60, 0xf0,
+  0x9c, 0x5a, 0x5f, 0x22, 0x76, 0x56, 0x6b, 0x39, 0xab, 0xd7, 0x3a, 0xba,
+  0x42, 0x08, 0xd8, 0x73, 0x45, 0xd5, 0x5d, 0x29, 0xbb, 0xd2, 0x8f, 0xf8,
+  0xa0, 0x91, 0x4b, 0x7c, 0xa8, 0x46, 0x01, 0xe4, 0xb5, 0x61, 0x5c, 0xf7,
+  0xb1, 0x93, 0x08, 0x17, 0x2d, 0x88, 0x01, 0x55, 0x43, 0x29, 0x3c, 0x68,
+  0x5e, 0x4e, 0x5d, 0x0e, 0x10, 0x57, 0xec, 0x2e, 0x66, 0xad, 0x6a, 0x21,
+  0x1e, 0x82, 0x73, 0x0c, 0xf6, 0xe7, 0x94, 0x33, 0x50, 0x90, 0x7c, 0xe0,
+  0x47, 0x9d, 0x30, 0x7d, 0x39, 0x3d, 0xdc, 0x36, 0x33, 0xb4, 0x81, 0x8b,
+  0x94, 0x73, 0x52, 0xc5, 0xbc, 0x9e, 0x16, 0x40, 0xb9, 0xef, 0xbb, 0xb0,
+  0x4a, 0xbe, 0x55, 0x24, 0xcc, 0x75, 0xbf, 0xd0, 0xe0, 0xb2, 0x84, 0xcb,
+  0x16, 0x72, 0xe1, 0xd0, 0x20, 0xf7, 0x30, 0x12, 0x00, 0x28, 0xd7, 0xb9,
+  0x37, 0x33, 0xa3, 0xcc, 0x6d, 0xef, 0xed, 0xe8, 0x55, 0x4e, 0x91, 0xbb,
+  0x45, 0xd6, 0x20, 0xf2, 0x8d, 0x02, 0xf3, 0xb6, 0x3e, 0x5d, 0x08, 0xd6,
+  0xdf, 0x88, 0x34, 0xff, 0xb6, 0x2c, 0xae, 0x0d, 0x6d, 0xd5, 0x44, 0xc1,
+  0x52, 0x03, 0xb1, 0x8e, 0x9f, 0x3e, 0x87, 0x9d, 0xd2, 0x2d, 0xc2, 0x39,
+  0xf1, 0x4b, 0x3a, 0xa6, 0x5e, 0xb9, 0x9c, 0xfe, 0x03, 0xc9, 0xfb, 0xce,
+  0x74, 0x42, 0x59, 0x9d, 0xb9, 0x99, 0x70, 0x35, 0x65, 0x2b, 0x4a, 0x4f,
+  0x86, 0x93, 0x68, 0xc3, 0xbd, 0xa1, 0x5f, 0xb2, 0x27, 0x88, 0x05, 0xac,
+  0x05, 0x94, 0x41, 0xf0, 0xfa, 0xad, 0x42, 0x28, 0x5e, 0x35, 0x86, 0x6e,
+  0x49, 0x49, 0x06, 0x4d, 0xb4, 0x65, 0x12, 0x90, 0x49, 0xd0, 0xcb, 0x42,
+  0x14, 0x19, 0x86, 0xcb, 0xd0, 0x5a, 0xcd, 0xb5, 0x82, 0xcb, 0xeb, 0x08,
+  0x93, 0xee, 0xe0, 0xac, 0x70, 0x63, 0xc4, 0xd6, 0xf5, 0xe0, 0x5c, 0x4e,
+  0x66, 0x25, 0xed, 0x0e, 0x31, 0x3e, 0x6f, 0xe5, 0xff, 0x83, 0x25, 0x51,
+  0xba, 0x09, 0xe5, 0xa4, 0x0f, 0x22, 0xa1, 0x7e, 0x7e, 0x0d, 0x38, 0x45,
+  0x3c, 0x40, 0xda, 0x19, 0x44, 0xdc, 0x13, 0xaf, 0x0d, 0x0e, 0x34, 0xb7,
+  0xa0, 0x08, 0xf1, 0xc2, 0xc3, 0xc2, 0xdd, 0x3c, 0xeb, 0x94, 0xbd, 0x2b,
+  0x5e, 0x9b, 0x63, 0x5b, 0xd6, 0x39, 0xcb, 0x27, 0x2e, 0x0e, 0xd3, 0xf3,
+  0x6d, 0x84, 0xa1, 0x56, 0x8a, 0xe6, 0x64, 0x59, 0xb9, 0x0d, 0x3e, 0x53,
+  0xab, 0xcc, 0xa3, 0xd8, 0xf4, 0xf6, 0x84, 0xd6, 0x7e, 0xe1, 0x58, 0x29,
+  0xfb, 0xe6, 0xc0, 0x36, 0x19, 0x30, 0x2b, 0x12, 0x0a, 0x29, 0x3e, 0x59,
+  0x04, 0x8c, 0xd9, 0xc8, 0x4e, 0x85, 0x3c, 0xbb, 0x15, 0x4c, 0x0c, 0xe7,
+  0x4c, 0x54, 0xf4, 0x4a, 0x2e, 0x8e, 0x10, 0xd8, 0x95, 0x28, 0x48, 0xe1,
+  0xb6, 0xca, 0x1b, 0x24, 0x25, 0xd1, 0x10, 0x34, 0x5f, 0x88, 0x75, 0x91,
+  0x89, 0x69, 0x78, 0xd8, 0x29, 0x21, 0x61, 0x5d, 0x03, 0x8b, 0x10, 0xb7,
+  0x03, 0xb6, 0x0f, 0xbf, 0x78, 0x6f, 0x07, 0xfe, 0xb1, 0xed, 0xfb, 0x8d,
+  0x81, 0x92, 0xc0, 0x46, 0x6d, 0x9e, 0x70, 0xe1, 0x69, 0x84, 0x67, 0x44,
+  0x36, 0xc1, 0x3f, 0x99, 0x13, 0x6b, 0xc4, 0xf0, 0x82, 0x2a, 0x2d, 0x6f,
+  0xdc, 0x67, 0xcd, 0xa6, 0xab, 0x0d, 0xa4, 0x81, 0xa0, 0xab, 0x8a, 0x08,
+  0x07, 0x10, 0x31, 0x64, 0xab, 0x91, 0x97, 0x18, 0x8e, 0x9f, 0x96, 0xbc,
+  0x02, 0x14, 0x16, 0x79, 0x14, 0xa5, 0xb8, 0xd3, 0xaa, 0xe6, 0x22, 0x65,
+  0x4f, 0x55, 0xdf, 0x38, 0xbc, 0xcb, 0xaa, 0x09, 0x99, 0x19, 0xff, 0xb6,
+  0x9c, 0xe6, 0x13, 0xc4, 0x7c, 0xd8, 0x32, 0x10, 0xbe, 0x0d, 0xba, 0x95,
+  0xfd, 0x14, 0x64, 0x5c, 0x7f, 0xcf, 0xb8, 0x2c, 0x86, 0x03, 0xec, 0x1b,
+  0x01, 0xa7, 0xbc, 0x5c, 0x7a, 0xe4, 0x23, 0xac, 0x57, 0xd3, 0x36, 0x5a,
+  0x39, 0x17, 0x69, 0xf2, 0xfa, 0xf8, 0x38, 0xac, 0x75, 0xc1, 0x0a, 0x02,
+  0x67, 0x75, 0xb0, 0x99, 0x9b, 0x9a, 0x60, 0x27, 0xc0, 0xcc, 0x03, 0x9a,
+  0xec, 0xe0, 0xbd, 0x20, 0xcc, 0xd9, 0x0c, 0x65, 0x10, 0x84, 0x2f, 0xde,
+  0xe2, 0x6e, 0xa0, 0xa0, 0x21, 0x9a, 0x56, 0x05, 0xef, 0x48, 0x73, 0x6f,
+  0x3e, 0xb8, 0x68, 0x6e, 0x53, 0xbf, 0x1a, 0xeb, 0xe0, 0x9a, 0xe5, 0x9b,
+  0x3a, 0x16, 0x3e, 0xaa, 0x59, 0xa5, 0xbe, 0xa2, 0xe0, 0x45, 0xd5, 0x8b,
+  0xfd, 0xc8, 0x96, 0x6e, 0x97, 0x6b, 0xaf, 0xa7, 0xad, 0xf5, 0xba, 0x4a,
+  0x6c, 0x2b, 0x91, 0x9f, 0x03, 0xa0, 0xbd, 0x2a, 0x1a, 0xfb, 0x86, 0x9e,
+  0x83, 0x47, 0xc8, 0xbd, 0xc6, 0x84, 0x16, 0xec, 0xb6, 0x66, 0x32, 0xcd,
+  0xcd, 0xca, 0xa8, 0x2b, 0xae, 0x9d, 0x19, 0xdd, 0x06, 0x45, 0x61, 0x9c,
+  0x1b, 0x30, 0x8f, 0x94, 0xd2, 0xc5, 0xc2, 0xa4, 0x6a, 0x0b, 0xcb, 0x8d,
+  0x19, 0x6b, 0xbe, 0x0f, 0xd2, 0x29, 0xbc, 0x31, 0x79, 0xc5, 0x70, 0x93,
+  0xd5, 0x93, 0xa5, 0x40, 0x4f, 0x1b, 0xd4, 0xd2, 0x5a, 0xe4, 0x30, 0xa8,
+  0xc5, 0x33, 0x16, 0x38, 0x67, 0x08, 0x6c, 0xbe, 0x80, 0x6a, 0x63, 0x08,
+  0xf5, 0x25, 0x32, 0xbc, 0xc4, 0x59, 0x98, 0xd8, 0x70, 0x72, 0xe4, 0x41,
+  0x22, 0x88, 0x7c, 0xaf, 0x6b, 0x14, 0x34, 0x57, 0x77, 0x6d, 0xee, 0x6e,
+  0x40, 0xf4, 0x5c, 0xa5, 0x77, 0x77, 0xc3, 0x3a, 0xdb, 0x32, 0xd2, 0x53,
+  0xbd, 0x55, 0xd7, 0x33, 0xc0, 0x01, 0x21, 0x51, 0xc3, 0x91, 0xc2, 0xb7,
+  0x5c, 0x70, 0xb8, 0x30, 0x82, 0x33, 0xc5, 0x3b, 0xe3, 0x67, 0x0c, 0xc1,
+  0x4e, 0xa1, 0xeb, 0x58, 0x94, 0xf3, 0x1e, 0x74, 0x57, 0x2f, 0x80, 0xa3,
+  0x25, 0xea, 0x93, 0x6f, 0x60, 0x29, 0x8d, 0x39, 0x09, 0xd3, 0x12, 0xe9,
+  0x6d, 0x09, 0x95, 0x43, 0xae, 0xb1, 0xa4, 0x48, 0x61, 0xab, 0x6c, 0x1f,
+  0x73, 0x5b, 0xd5, 0xdd, 0x6b, 0x97, 0xc3, 0xbb, 0xba, 0xba, 0xbb, 0x30,
+  0x4b, 0x15, 0x34, 0xb3, 0xa2, 0x6d, 0x17, 0xb5, 0x98, 0x69, 0x64, 0x42,
+  0x34, 0xbb, 0xa1, 0xcf, 0xab, 0x95, 0xaf, 0xcb, 0xce, 0x27, 0x0d, 0x15,
+  0xb2, 0xf3, 0x47, 0x10, 0x6c, 0xdc, 0x89, 0x94, 0x38, 0x55, 0xa7, 0x61,
+  0x5e, 0x39, 0x6f, 0x64, 0x6d, 0x8d, 0x75, 0xee, 0x8a, 0x6b, 0x17, 0xb0,
+  0x8f, 0x2e, 0x88, 0x94, 0x0e, 0xa7, 0x22, 0xf6, 0x0e, 0xff, 0x7d, 0x8c,
+  0x35, 0x37, 0xda, 0x91, 0xd1, 0xc2, 0x20, 0xdd, 0x8a, 0xa1, 0x4f, 0x7d,
+  0xd8, 0x5c, 0x74, 0xaf, 0x8e, 0xe6, 0xec, 0x25, 0xc7, 0x04, 0xad, 0x64,
+  0xd5, 0x7d, 0xc6, 0x48, 0x9c, 0x40, 0x42, 0x0d, 0x11, 0xe2, 0xf5, 0xd2,
+  0xc2, 0xd6, 0xc6, 0x98, 0xac, 0x1f, 0x42, 0xa8, 0xd0, 0xdb, 0x9c, 0x4d,
+  0x61, 0x34, 0x14, 0x40, 0x83, 0x08, 0x36, 0x46, 0x5d, 0xf6, 0x55, 0x0b,
+  0x98, 0x01, 0xbe, 0xaa, 0xcb, 0xfa, 0x78, 0xc8, 0x89, 0x43, 0x61, 0xad,
+  0x9d, 0x2d, 0x42, 0xf7, 0xcb, 0xfa, 0x70, 0x6a, 0x7b, 0xd5, 0x59, 0x39,
+  0xb3, 0x3b, 0xd9, 0x76, 0x31, 0x66, 0x84, 0x19, 0x1b, 0xed, 0xf2, 0xb6,
+  0x94, 0x71, 0x31, 0x7c, 0x08, 0x4a, 0x5a, 0xab, 0xc1, 0x83, 0x2a, 0x29,
+  0x3d, 0x32, 0x3a, 0x57, 0x4f, 0x5d, 0x13, 0x11, 0xbd, 0x31, 0x60, 0xa6,
+  0x4d, 0xed, 0xb6, 0x7c, 0x55, 0x85, 0xa7, 0x96, 0x87, 0x9a, 0x42, 0xc9,
+  0xc4, 0x99, 0xe9, 0xef, 0x69, 0xfb, 0x39, 0x21, 0x9d, 0x00, 0xb8, 0x53,
+  0xe4, 0x37, 0xc9, 0x52, 0xe1, 0x0c, 0x17, 0x42, 0x87, 0x17, 0xdc, 0x65,
+  0xd9, 0x89, 0xc4, 0xa6, 0xbe, 0x78, 0x61, 0xd6, 0x61, 0x54, 0xbf, 0xc0,
+  0xe0, 0x26, 0xee, 0xf2, 0x66, 0x73, 0x99, 0xc5, 0xbb, 0xda, 0x4b, 0x92,
+  0x9f, 0x7f, 0xee, 0x27, 0x84, 0xc1, 0xfb, 0xb3, 0x51, 0x36, 0x7f, 0x36,
+  0x24, 0xf7, 0x33, 0x97, 0xc1, 0xfd, 0xf9, 0xc6, 0xb0, 0xed, 0x55, 0x59,
+  0x30, 0x5e, 0xc1, 0x53, 0x07, 0xf6, 0x2d, 0xf5, 0xab, 0xc9, 0x06, 0xc1,
+  0xe8, 0x3e, 0x43, 0x4f, 0x00, 0x8b, 0x55, 0x4a, 0x32, 0x3b, 0xb3, 0x9c,
+  0x17, 0x7c, 0x77, 0x0a, 0xab, 0x01, 0x17, 0x00, 0xab, 0x58, 0xff, 0xe3,
+  0xba, 0xdb, 0x1b, 0xaf, 0x24, 0xb6, 0x28, 0xc8, 0xf4, 0x60, 0x0c, 0x3f,
+  0x91, 0x0c, 0x42, 0x88, 0xa1, 0x67, 0x24, 0x60, 0x1c, 0x6e, 0x68, 0x94,
+  0x27, 0x64, 0xda, 0xbd, 0x45, 0xf1, 0x7a, 0x50, 0x0e, 0x6f, 0x30, 0x59,
+  0xa5, 0x17, 0x57, 0xf7, 0x10, 0xe8, 0x03, 0x65, 0xaa, 0xc8, 0xda, 0xa7,
+  0x25, 0x9e, 0xcf, 0xd9, 0x46, 0xfb, 0x74, 0xa2, 0x2c, 0x05, 0x00, 0xf8,
+  0x6c, 0xd7, 0x0c, 0x67, 0x7d, 0xb0, 0xde, 0x06, 0xe0, 0xaf, 0x42, 0x35,
+  0xbd, 0x9d, 0x6e, 0x88, 0xf4, 0xc8, 0xe1, 0xea, 0x5c, 0x29, 0x81, 0x2f,
+  0x1b, 0x33, 0x83, 0xb6, 0x1e, 0x30, 0xb8, 0x28, 0xd5, 0x48, 0x21, 0xfd,
+  0xab, 0xde, 0x1c, 0xfa, 0x84, 0x60, 0x69, 0xe6, 0x5a, 0x44, 0x3a, 0x97,
+  0xbc, 0x49, 0xbc, 0xdb, 0x76, 0x40, 0xde, 0x61, 0x2b, 0x3e, 0x11, 0x75,
+  0x90, 0x40, 0x4b, 0xd9, 0x73, 0x04, 0xa7, 0x70, 0x1f, 0xe1, 0xd2, 0xfa,
+  0x26, 0x8d, 0xa3, 0x64, 0xff, 0x06, 0xc5, 0x06, 0x81, 0xc5, 0x26, 0xa3,
+  0xb2, 0xcf, 0x75, 0x32, 0xad, 0x1e, 0x6b, 0xd3, 0x28, 0x23, 0xa1, 0xbc,
+  0xd1, 0x4c, 0x3c, 0x1a, 0xcf, 0xab, 0xa4, 0xb7, 0xfa, 0x1e, 0xec, 0x45,
+  0x41, 0x88, 0x54, 0x99, 0xa4, 0x6c, 0xf6, 0x6b, 0xc1, 0x97, 0x17, 0x75,
+  0x6b, 0x43, 0x2f, 0xf4, 0xbf, 0xeb, 0x25, 0xbe, 0x29, 0xa6, 0xc4, 0x28,
+  0x32, 0xa9, 0x45, 0xb7, 0xf2, 0xae, 0x48, 0x8b, 0x29, 0x98, 0x33, 0x94,
+  0xfe, 0x05, 0xc1, 0x57, 0xa8, 0x71, 0x48, 0x5f, 0x78, 0x80, 0xf3, 0x92,
+  0x05, 0x9a, 0x7a, 0x14, 0xc3, 0xbd, 0x26, 0xa9, 0x59, 0x7b, 0x2f, 0x2c,
+  0xb4, 0xa2, 0x76, 0x90, 0x38, 0x4d, 0x10, 0xc9, 0xc1, 0xca, 0xec, 0x6c,
+  0xda, 0xd4, 0xf6, 0x0a, 0xca, 0x22, 0xcc, 0x65, 0xe2, 0x97, 0xea, 0x5d,
+  0x95, 0x8c, 0xfa, 0xd7, 0xdb, 0x4b, 0x8e, 0x1a, 0x71, 0x37, 0x7b, 0xb3,
+  0x0c, 0xef, 0x48, 0x60, 0x2a, 0x7e, 0x73, 0xf2, 0xf6, 0xd0, 0x86, 0xc8,
+  0xb3, 0xc9, 0x88, 0x3e, 0x89, 0x62, 0xf7, 0x0e, 0x11, 0xdf, 0xa4, 0x58,
+  0x08, 0xfd, 0xb0, 0x3c, 0x2a, 0x2f, 0xd1, 0x65, 0xd6, 0x2c, 0x6e, 0x97,
+  0xf9, 0x74, 0x03, 0x80, 0x15, 0xef, 0x8b, 0xfc, 0x6e, 0x00, 0x93, 0x18,
+  0x03, 0x5b, 0xd7, 0x8a, 0xd8, 0xa0, 0x60, 0x0f, 0x6c, 0x77, 0x9d, 0x47,
+  0x70, 0xdb, 0xe4, 0x5a, 0xf3, 0x15, 0x31, 0x64, 0x75, 0xe5, 0x05, 0x3b,
+  0x57, 0xb9, 0xc1, 0x4d, 0x62, 0x00, 0x2a, 0xda, 0x63, 0xdb, 0x63, 0xe1,
+  0xfe, 0xed, 0x95, 0x48, 0xf6, 0x4f, 0x4f, 0x5f, 0xef, 0x9f, 0xef, 0xdb,
+  0xb9, 0x31, 0xa0, 0x16, 0x71, 0x15, 0x18, 0x3a, 0x48, 0x72, 0x13, 0xf8,
+  0xa6, 0xf5, 0x3f, 0x51, 0x2e, 0x58, 0xf7, 0xb2, 0x3f, 0x3d, 0x3b, 0x21,
+  0x83, 0xd5, 0x9f, 0x7e, 0xde, 0xf7, 0x40, 0x52, 0x5e, 0xa7, 0x4d, 0x1a,
+  0x06, 0xe0, 0xef, 0x6e, 0xd2, 0xf8, 0x6e, 0xed, 0xf8, 0x24, 0x64, 0x88,
+  0x91, 0x21, 0x92, 0x0f, 0xb4, 0xa1, 0xd5, 0xc4, 0x4a, 0x4e, 0xba, 0x1a,
+  0x58, 0x80, 0x18, 0x94, 0xac, 0x37, 0x91, 0xd2, 0x71, 0x31, 0x85, 0x7c,
+  0xd4, 0xc5, 0x9a, 0x19, 0x89, 0xdf, 0x88, 0xad, 0x0d, 0xd8, 0x07, 0xd9,
+  0x8d, 0x89, 0xbe, 0xa6, 0xb4, 0x52, 0x5d, 0x74, 0xea, 0xee, 0xf6, 0xb8,
+  0xc2, 0x0c, 0xcc, 0x01, 0x38, 0x34, 0xbc, 0xe4, 0x72, 0xc6, 0x43, 0x19,
+  0xad, 0x2b, 0x68, 0x1c, 0x9c, 0x1d, 0x76, 0x6e, 0x1a, 0x3a, 0x57, 0x7a,
+  0x1c, 0x86, 0x5e, 0xa8, 0xc1, 0x60, 0xa0, 0x3e, 0x2a, 0x9e, 0xb8, 0xf9,
+  0x20, 0x78, 0xa8, 0xd1, 0xb2, 0xad, 0xca, 0xe8, 0xe3, 0x7c, 0xc2, 0xe7,
+  0x0f, 0x5d, 0x69, 0x5e, 0xe0, 0x53, 0xe4, 0x29, 0x5a, 0x75, 0xc8, 0xce,
+  0xbd, 0xd0, 0x72, 0xae, 0xbe, 0x3d, 0xf3, 0x68, 0xbd, 0x24, 0xe3, 0x1f,
+  0xfd, 0xb5, 0xb5, 0x33, 0xdc, 0xee, 0x85, 0xa3, 0x47, 0x64, 0x31, 0x2c,
+  0xac, 0x5a, 0xaa, 0x83, 0xab, 0xaf, 0x94, 0x8f, 0x0f, 0x90, 0x19, 0x98,
+  0x11, 0x49, 0x17, 0xa6, 0x83, 0xe8, 0x58, 0x06, 0x27, 0x81, 0x1d, 0x9e,
+  0x7d, 0x8c, 0xc2, 0x12, 0x0d, 0x47, 0x2c, 0x4a, 0x80, 0x06, 0xa4, 0xa4,
+  0x0f, 0xc1, 0xaa, 0xd7, 0x8b, 0x2f, 0x70, 0x31, 0xe5, 0x20, 0x89, 0xce,
+  0x3a, 0x3f, 0xea, 0x4f, 0x8a, 0xe7, 0xa9, 0x5a, 0x1a, 0xb0, 0x1f, 0xaf,
+  0xe4, 0x76, 0x2d, 0x27, 0xd2, 0x75, 0x66, 0xc4, 0xc0, 0x19, 0x92, 0x32,
+  0xc9, 0x28, 0xbb, 0x0a, 0x5d, 0xba, 0x15, 0x99, 0xa6, 0xc1, 0xb5, 0x78,
+  0x23, 0xf5, 0xf5, 0x38, 0x1f, 0xdc, 0x93, 0xdc, 0x3f, 0x08, 0x1a, 0xcf,
+  0xa7, 0x01, 0x44, 0x85, 0xf8, 0x08, 0x6c, 0xac, 0x89, 0x1d, 0x05, 0x99,
+  0x27, 0xc6, 0x22, 0xe8, 0xda, 0x2e, 0x54, 0x3c, 0x24, 0xc4, 0xb9, 0x9b,
+  0x7c, 0xba, 0x0c, 0x04, 0x86, 0xee, 0xeb, 0x43, 0x62, 0xb1, 0x2d, 0x04,
+  0x22, 0xb6, 0xbc, 0xd0, 0x13, 0xa5, 0x35, 0x1f, 0x93, 0x67, 0x91, 0x0f,
+  0x55, 0x60, 0x11, 0xbf, 0x60, 0x6c, 0x70, 0xbe, 0xc5, 0xcf, 0x0f, 0x4e,
+  0x3f, 0x7c, 0x7b, 0x78, 0x78, 0x7a, 0xf4, 0xfa, 0xf8, 0x50, 0xc2, 0xd1,
+  0xed, 0x47, 0xef, 0xce, 0xbf, 0x3b, 0x56, 0xb8, 0x70, 0xdd, 0xa6, 0xc0,
+  0xa6, 0x4a, 0x01, 0x8c, 0xd4, 0xdc, 0x71, 0x5e, 0x2c, 0xef, 0xfa, 0x80,
+  0xca, 0x32, 0xb4, 0xbc, 0x7f, 0xf4, 0x43, 0x3f, 0xf9, 0xe6, 0x74, 0xf0,
+  0xfe, 0x87, 0x00, 0x04, 0xc7, 0xb3, 0x1a, 0x19, 0x26, 0xd4, 0x95, 0x2c,
+  0x6d, 0x02, 0x01, 0xca, 0x48, 0xba, 0xb9, 0xab, 0x06, 0xdc, 0xf6, 0x7c,
+  0x7d, 0xfe, 0x29, 0x52, 0x7b, 0x83, 0xe6, 0x96, 0x85, 0x57, 0x3a, 0xc6,
+  0x13, 0xe3, 0xe5, 0xee, 0x05, 0x79, 0x3e, 0xdf, 0x56, 0x34, 0xf2, 0x36,
+  0x01, 0xde, 0x27, 0x2f, 0xcd, 0x3f, 0x31, 0x48, 0xc8, 0xad, 0xd1, 0xe8,
+  0x9b, 0xcd, 0xe4, 0xd4, 0x2b, 0x01, 0x63, 0x8d, 0x51, 0x43, 0x0d, 0x17,
+  0x86, 0x31, 0xa8, 0xf4, 0xcd, 0x5a, 0x15, 0x41, 0xf7, 0x87, 0x21, 0x1f,
+  0x5a, 0xc8, 0x41, 0x2f, 0x71, 0xd5, 0x00, 0x59, 0xb6, 0x84, 0x2b, 0xcc,
+  0x74, 0x87, 0x1b, 0xa0, 0x0d, 0x88, 0x0d, 0x86, 0xdd, 0x15, 0x8d, 0xe4,
+  0x86, 0x6f, 0xa9, 0x00, 0x38, 0x9f, 0xd3, 0x7c, 0xca, 0x09, 0x6b, 0x39,
+  0x54, 0x1f, 0x12, 0x14, 0x28, 0x53, 0xec, 0x7f, 0x6d, 0x0d, 0xeb, 0xfa,
+  0x6a, 0x2b, 0x9f, 0x7e, 0xa8, 0xea, 0x74, 0xbd, 0x7b, 0x39, 0x7b, 0x5f,
+  0x4f, 0xe9, 0xeb, 0x64, 0x7d, 0x68, 0x1f, 0x95, 0xdf, 0xe9, 0xf3, 0x4f,
+  0x89, 0xb3, 0x67, 0x96, 0xe6, 0x71, 0x8c, 0xf2, 0x60, 0x2b, 0xe8, 0xd9,
+  0x61, 0xc7, 0x76, 0x81, 0x56, 0xb0, 0x0f, 0xbc, 0xbb, 0x66, 0x6b, 0x82,
+  0xdd, 0x00, 0x3c, 0xa3, 0x5f, 0xdb, 0x27, 0x37, 0x87, 0xf6, 0xf5, 0xe1,
+  0x59, 0x9f, 0x71, 0xcb, 0x7d, 0xcc, 0x72, 0x0f, 0x66, 0x90, 0xb5, 0x9a,
+  0x08, 0x10, 0xa1, 0xdb, 0xab, 0x7f, 0x1d, 0x5c, 0xf9, 0x75, 0x35, 0x4e,
+  0x5e, 0xce, 0xcc, 0x8b, 0xb3, 0x78, 0xfa, 0xba, 0x14, 0x3f, 0x77, 0x15,
+  0xdc, 0x3b, 0xd0, 0x4e, 0x22, 0xb3, 0xb2, 0x09, 0x07, 0xed, 0xac, 0xd4,
+  0x4c, 0x1b, 0x98, 0xc5, 0x00, 0x00, 0xda, 0xcd, 0xf5, 0x5d, 0x47, 0x5c,
+  0x3d, 0x51, 0x09, 0xc1, 0x57, 0xd1, 0x4f, 0xf0, 0x7d, 0x29, 0x7c, 0xbf,
+  0xde, 0x0f, 0xb5, 0xef, 0x75, 0x59, 0xf6, 0x75, 0xb3, 0x9c, 0x23, 0x71,
+  0xe6, 0xd3, 0x21, 0x62, 0xbc, 0x55, 0x2a, 0x77, 0x81, 0xb1, 0x68, 0x11,
+  0x26, 0x3a, 0x0b, 0x2e, 0xaf, 0xb8, 0x0e, 0x70, 0xe3, 0x6c, 0x73, 0xdd,
+  0x50, 0xce, 0xb8, 0x39, 0x2e, 0x5a, 0xef, 0x30, 0xb5, 0x85, 0x93, 0xda,
+  0x75, 0x0e, 0xaf, 0x65, 0xe9, 0x9e, 0x5a, 0x22, 0x88, 0x16, 0x02, 0x40,
+  0x5e, 0x20, 0x8d, 0x13, 0x09, 0xc2, 0x24, 0x8e, 0x50, 0x5c, 0x09, 0x45,
+  0x87, 0x0f, 0xbe, 0x23, 0x35, 0x50, 0x9d, 0xb6, 0x5c, 0xba, 0x41, 0x02,
+  0x0e, 0xab, 0xd8, 0xb1, 0xb6, 0x25, 0xf2, 0xf2, 0xe6, 0x13, 0x92, 0xce,
+  0x0c, 0x15, 0xe5, 0xf2, 0xba, 0x19, 0x90, 0x0f, 0x74, 0x35, 0x86, 0x84,
+  0x64, 0x44, 0xa9, 0x17, 0xd6, 0x2b, 0xec, 0xc2, 0x0c, 0x8c, 0xcb, 0xe6,
+  0x22, 0x6e, 0x14, 0xb0, 0x4b, 0xc4, 0x17, 0x07, 0xb1, 0x92, 0x7d, 0xe6,
+  0xbc, 0x65, 0xb7, 0xad, 0xac, 0x68, 0xdf, 0x0e, 0x2f, 0x91, 0x09, 0x50,
+  0x9c, 0x14, 0x5d, 0x00, 0x95, 0x66, 0xea, 0x50, 0x25, 0x9c, 0xa7, 0x93,
+  0x2b, 0x23, 0x3e, 0x0e, 0x10, 0x7e, 0xde, 0xc6, 0x66, 0x22, 0x63, 0x42,
+  0x67, 0xa0, 0x09, 0x47, 0x15, 0x70, 0xc9, 0x1d, 0x84, 0x33, 0xae, 0x44,
+  0x7f, 0xc6, 0x10, 0xad, 0x93, 0x85, 0x71, 0xef, 0x2d, 0x08, 0x00, 0x14,
+  0xd5, 0xb2, 0xb2, 0xf0, 0xf9, 0xd6, 0x47, 0x1d, 0xf1, 0xc2, 0x0a, 0x38,
+  0xbe, 0x77, 0x07, 0x09, 0xec, 0x58, 0x9a, 0xbc, 0x3b, 0x1e, 0x9d, 0xfb,
+  0xb1, 0x0c, 0x1c, 0xfc, 0x54, 0x34, 0xb6, 0xde, 0x7a, 0xd4, 0x8b, 0xe6,
+  0xc7, 0x7c, 0x1e, 0x1f, 0x8d, 0xce, 0xa3, 0x36, 0x01, 0xc3, 0xe3, 0x47,
+  0x50, 0x0b, 0xfc, 0x0c, 0x39, 0x5b, 0x39, 0x86, 0xf6, 0x80, 0x03, 0x33,
+  0x58, 0x1f, 0xc8, 0x2b, 0x3f, 0xfb, 0xb1, 0xdb, 0x9c, 0x19, 0xe5, 0x5f,
+  0xd9, 0x94, 0x2a, 0x51, 0x75, 0x1a, 0xad, 0x5b, 0x2f, 0xc7, 0x03, 0x0f,
+  0x97, 0x80, 0x19, 0x02, 0xc0, 0xbd, 0xf2, 0x09, 0x29, 0xf8, 0xd7, 0xa1,
+  0x87, 0x66, 0xe3, 0xf4, 0xe4, 0xf4, 0x89, 0x90, 0x93, 0x40, 0x48, 0xb4,
+  0x1c, 0xe6, 0x93, 0x84, 0x84, 0x34, 0x41, 0xd3, 0xa3, 0x67, 0xfb, 0x6a,
+  0x29, 0x67, 0xea, 0x8a, 0x95, 0x0f, 0x97, 0xd2, 0x83, 0x47, 0xc1, 0x62,
+  0x8a, 0xaf, 0xa2, 0x1d, 0x26, 0x4b, 0x01, 0x24, 0x36, 0x40, 0x26, 0x02,
+  0x05, 0xa4, 0xe1, 0x32, 0x4a, 0x86, 0x92, 0x90, 0xd3, 0x22, 0x42, 0x3d,
+  0xb6, 0xde, 0xb0, 0x29, 0x56, 0x30, 0x48, 0x45, 0x33, 0x52, 0xbb, 0x91,
+  0x36, 0xd5, 0x49, 0xd8, 0x82, 0x95, 0xe0, 0xe4, 0x28, 0x94, 0xc1, 0xa4,
+  0xb8, 0x04, 0xe0, 0x5c, 0xaf, 0xda, 0x49, 0x05, 0x06, 0x91, 0xd8, 0x2f,
+  0x09, 0x5d, 0xff, 0x81, 0x9d, 0xb0, 0x1c, 0x29, 0x6d, 0x91, 0x4b, 0xfa,
+  0x8f, 0x94, 0x79, 0xf3, 0xca, 0x82, 0x73, 0x06, 0xa6, 0x51, 0xb9, 0x8d,
+  0x20, 0x69, 0x57, 0x4e, 0x56, 0x4a, 0x5c, 0x75, 0x32, 0x6f, 0xf2, 0xd3,
+  0x99, 0x5f, 0x62, 0x71, 0x1f, 0xd8, 0xae, 0x75, 0xca, 0x83, 0x2e, 0xf2,
+  0xbf, 0x93, 0x83, 0x8c, 0x59, 0xfd, 0x05, 0x02, 0x89, 0xc5, 0x95, 0x87,
+  0xb0, 0x9f, 0xbc, 0x59, 0xaf, 0x15, 0xeb, 0x93, 0x16, 0x25, 0x72, 0x94,
+  0xaf, 0x33, 0x3f, 0xfa, 0xbb, 0x2d, 0x37, 0xee, 0xee, 0xb4, 0x90, 0x42,
+  0x5a, 0x45, 0x30, 0xa3, 0xe1, 0x2d, 0x28, 0x93, 0xb8, 0xd9, 0x71, 0x9a,
+  0x72, 0x08, 0x93, 0x87, 0x3b, 0x2b, 0x7d, 0x01, 0xc9, 0x9b, 0x06, 0x46,
+  0x32, 0x6e, 0x77, 0x5c, 0x48, 0x8a, 0x02, 0x22, 0xb7, 0x62, 0xd5, 0x35,
+  0x89, 0xad, 0xbf, 0xb9, 0x21, 0xb0, 0xd3, 0x2e, 0x38, 0xb7, 0x5b, 0x03,
+  0x33, 0x02, 0xa2, 0x93, 0x26, 0x4f, 0x7e, 0xf8, 0xa1, 0x0d, 0xcf, 0xb8,
+  0xb9, 0x2a, 0xb9, 0xc3, 0x16, 0xbf, 0x98, 0x46, 0x79, 0x82, 0x12, 0x80,
+  0x10, 0x17, 0x05, 0x1a, 0x40, 0x79, 0x87, 0x0d, 0x5d, 0x76, 0xfa, 0x32,
+  0xc3, 0x36, 0x30, 0xd9, 0xf8, 0xa1, 0x4e, 0xe1, 0x65, 0xec, 0x62, 0x86,
+  0xfa, 0x36, 0x3e, 0x91, 0x43, 0x2b, 0x10, 0x00, 0xa6, 0x8b, 0x45, 0x6b,
+  0x55, 0xdb, 0xeb, 0xc4, 0x08, 0x01, 0xb7, 0xc5, 0x30, 0x56, 0xb6, 0xb4,
+  0x23, 0x62, 0xd8, 0x84, 0x79, 0x89, 0xb1, 0xe3, 0xfa, 0xad, 0x00, 0x15,
+  0x26, 0xbb, 0xe0, 0xc4, 0x4c, 0x92, 0xe5, 0x84, 0x5a, 0xe2, 0x2e, 0x83,
+  0x20, 0x19, 0x76, 0x42, 0x50, 0x38, 0x0c, 0x26, 0x98, 0xda, 0xc8, 0xc7,
+  0xa4, 0x81, 0x23, 0x4f, 0xdd, 0x94, 0xfe, 0x5e, 0x49, 0xec, 0x65, 0xa4,
+  0xcc, 0x0e, 0x6a, 0x8b, 0x32, 0x50, 0xa2, 0xd8, 0x4d, 0x11, 0x1a, 0x23,
+  0xb9, 0x69, 0x4c, 0xfc, 0x7f, 0x51, 0xc0, 0x23, 0xaf, 0x52, 0x12, 0x93,
+  0x5e, 0x88, 0x54, 0x5c, 0x16, 0x83, 0xa6, 0x5a, 0x62, 0x85, 0x48, 0x5d,
+  0xa2, 0xc4, 0xd6, 0xd2, 0xc1, 0x92, 0x91, 0x48, 0xa9, 0x21, 0x40, 0x28,
+  0x8f, 0xc7, 0xc9, 0x15, 0x73, 0xe0, 0x2f, 0x85, 0x41, 0x0e, 0x2e, 0xae,
+  0x95, 0xf3, 0x66, 0x29, 0x4f, 0xb6, 0xe5, 0xf9, 0x1c, 0x0c, 0xe6, 0xe9,
+  0xdd, 0x00, 0x8f, 0xd5, 0x41, 0xa9, 0x26, 0xdf, 0xd6, 0x29, 0x00, 0xa5,
+  0x25, 0x2b, 0x28, 0xde, 0x9a, 0xa9, 0x56, 0x6b, 0xf3, 0x77, 0x24, 0xe8,
+  0x9a, 0x48, 0xc8, 0x9c, 0xba, 0xaf, 0x0f, 0xcf, 0xbb, 0x47, 0x0b, 0x60,
+  0x2a, 0x62, 0x22, 0x40, 0xd2, 0x8c, 0xf9, 0xfb, 0xf4, 0xfd, 0xf9, 0xa6,
+  0x33, 0x03, 0x4d, 0xcb, 0x8e, 0xad, 0xd2, 0x26, 0x73, 0x84, 0x50, 0xb1,
+  0x9c, 0xa8, 0x22, 0x1c, 0x16, 0x70, 0xb0, 0xae, 0xb2, 0x93, 0xd1, 0x35,
+  0x9f, 0x6c, 0xef, 0xf4, 0xcd, 0x3f, 0xbb, 0xb0, 0xb6, 0x3d, 0xd9, 0x7e,
+  0x62, 0xfd, 0x42, 0xfa, 0x54, 0xe0, 0x45, 0x98, 0xf2, 0x8b, 0xce, 0x13,
+  0xf1, 0xe4, 0xee, 0x0e, 0x1f, 0xf7, 0x5b, 0x01, 0xed, 0x55, 0x36, 0x50,
+  0x0c, 0xa6, 0x07, 0x5c, 0x26, 0x3a, 0x70, 0xb7, 0xe2, 0x30, 0x9b, 0x2d,
+  0x0b, 0x8e, 0x1d, 0x03, 0x74, 0x31, 0x25, 0xc3, 0x3c, 0x00, 0xd6, 0xe7,
+  0xc1, 0xf4, 0x09, 0x44, 0x81, 0x0f, 0x52, 0x67, 0xc8, 0xc5, 0xcf, 0x9e,
+  0x92, 0xd4, 0x9a, 0x80, 0x31, 0xd2, 0x33, 0x92, 0xbc, 0x6d, 0x56, 0xe1,
+  0xce, 0xad, 0xd1, 0xf8, 0xbe, 0x0d, 0x4c, 0x6a, 0x98, 0xa5, 0xb0, 0x22,
+  0xd5, 0xfc, 0x93, 0x15, 0x08, 0x95, 0x7b, 0x14, 0x4e, 0x6e, 0x4e, 0x05,
+  0x56, 0x58, 0x7f, 0xdd, 0x95, 0x72, 0xa4, 0xfc, 0xd7, 0x13, 0x5f, 0xb7,
+  0xd0, 0x42, 0xcf, 0xd1, 0x5a, 0x67, 0xfb, 0x5c, 0x7a, 0xb8, 0x13, 0xcf,
+  0x4d, 0x87, 0x90, 0xb6, 0x81, 0x12, 0xdf, 0x48, 0x92, 0x16, 0xe4, 0x04,
+  0xe7, 0x60, 0x65, 0xad, 0x2a, 0x52, 0x53, 0x90, 0xb6, 0x08, 0x80, 0x9e,
+  0x5a, 0x5f, 0x7a, 0xc0, 0x93, 0x3c, 0x48, 0xc4, 0x3f, 0xce, 0xfb, 0x2c,
+  0x1e, 0x5d, 0x09, 0xd0, 0xbe, 0x10, 0x14, 0xcf, 0x28, 0xca, 0x13, 0xd7,
+  0x0b, 0x32, 0xc2, 0xfd, 0x4d, 0x3a, 0x63, 0x54, 0x32, 0x9b, 0x53, 0x52,
+  0xe9, 0x98, 0x38, 0x17, 0xc1, 0x45, 0xf2, 0xd1, 0x7b, 0x7f, 0x78, 0x14,
+  0x02, 0xe4, 0x31, 0xa9, 0xdb, 0xc5, 0xa3, 0xc5, 0xa2, 0x88, 0x5a, 0xf2,
+  0xf8, 0x83, 0xa9, 0xe9, 0xe0, 0x17, 0x03, 0x98, 0x07, 0x5e, 0x1a, 0x99,
+  0x23, 0x9b, 0xae, 0x72, 0xd7, 0x23, 0xf0, 0x58, 0x6b, 0xae, 0x69, 0x52,
+  0x31, 0xde, 0x43, 0x80, 0x4d, 0xaa, 0x70, 0xc5, 0xae, 0xa2, 0xc5, 0x20,
+  0x46, 0x24, 0xc0, 0xce, 0x74, 0x20, 0x07, 0xd0, 0x0d, 0x01, 0x9e, 0xa8,
+  0xf0, 0x3c, 0x12, 0x0a, 0x2a, 0x0b, 0x20, 0x82, 0x12, 0x75, 0x81, 0x40,
+  0xb8, 0x34, 0x10, 0x84, 0xa9, 0x1a, 0xa8, 0x60, 0x65, 0xca, 0xb6, 0xaf,
+  0x4f, 0x59, 0x3e, 0xc6, 0x26, 0xd8, 0xa1, 0xd2, 0x19, 0x91, 0x30, 0x32,
+  0xce, 0x88, 0x32, 0xf7, 0x41, 0x10, 0xb2, 0x32, 0x36, 0x4d, 0xdc, 0xe6,
+  0xd3, 0xe6, 0x0a, 0x28, 0xb5, 0x1a, 0xc8, 0x07, 0x0c, 0x24, 0x2b, 0x6d,
+  0x04, 0xb9, 0x86, 0xe3, 0x15, 0xd5, 0x97, 0x78, 0x8b, 0xb0, 0xa8, 0x09,
+  0x43, 0x3b, 0x51, 0xa6, 0x0b, 0xf6, 0x01, 0x41, 0xca, 0x5b, 0x6c, 0x24,
+  0xb2, 0xe0, 0x25, 0x46, 0xe8, 0x5b, 0x5e, 0x10, 0xde, 0x6d, 0x20, 0x3e,
+  0x6a, 0x76, 0xe0, 0x50, 0xcf, 0x04, 0x92, 0x91, 0xaf, 0x39, 0x29, 0xf7,
+  0xdb, 0x75, 0x2d, 0xeb, 0x46, 0xec, 0x1e, 0xe7, 0x9f, 0x33, 0xd3, 0xc8,
+  0x8f, 0x90, 0x5c, 0xe7, 0xb3, 0xc0, 0x28, 0x81, 0xde, 0xcd, 0xbd, 0xb5,
+  0x3e, 0x5f, 0x87, 0xf7, 0xff, 0xed, 0xba, 0x44, 0xab, 0x10, 0x20, 0x64,
+  0x26, 0x21, 0xd4, 0x7d, 0x01, 0xb0, 0x5d, 0xbf, 0xe4, 0x6e, 0xbe, 0x76,
+  0x0f, 0x75, 0x9a, 0x73, 0x51, 0xd7, 0x6a, 0x4c, 0xaf, 0xf7, 0x92, 0xdd,
+  0xed, 0xed, 0x6f, 0x0d, 0x8f, 0x9d, 0x63, 0x53, 0x76, 0xbe, 0x8e, 0xae,
+  0x10, 0x2f, 0x10, 0x68, 0x48, 0x40, 0x99, 0xd2, 0x1b, 0x98, 0xbc, 0x65,
+  0xd1, 0x30, 0x23, 0xe4, 0xbf, 0x2f, 0x3d, 0x2b, 0x65, 0x74, 0xe3, 0x6c,
+  0xaa, 0x3d, 0x19, 0x44, 0xbb, 0xc8, 0x32, 0x73, 0xe4, 0x5d, 0xd1, 0xce,
+  0x5f, 0x99, 0xdf, 0x32, 0x8f, 0x28, 0xd0, 0x4f, 0x04, 0xb7, 0xc5, 0x08,
+  0x1e, 0x84, 0xdd, 0xb9, 0xac, 0x6a, 0xaa, 0xf9, 0x48, 0x51, 0xc5, 0x80,
+  0xbe, 0xe3, 0x5a, 0x83, 0x0d, 0xbb, 0x97, 0x8a, 0x92, 0xc1, 0x94, 0x6c,
+  0x4a, 0x86, 0x9b, 0x4e, 0xc4, 0x6e, 0xc8, 0x15, 0x09, 0x6b, 0x57, 0x2f,
+  0x69, 0xf0, 0x23, 0x31, 0x48, 0x0c, 0x80, 0x0f, 0xa1, 0x75, 0x7e, 0x72,
+  0x8e, 0xb6, 0x9f, 0xbe, 0xd2, 0x9d, 0x2c, 0xd1, 0xa5, 0x14, 0x4f, 0x21,
+  0xb5, 0x13, 0x56, 0x55, 0xcc, 0x91, 0xf0, 0xd4, 0x61, 0x29, 0xa7, 0xbb,
+  0x8c, 0xc0, 0xee, 0xd0, 0x32, 0x0c, 0xc0, 0x33, 0x7a, 0x60, 0x46, 0x2a,
+  0x75, 0x19, 0xa4, 0xff, 0xcd, 0x16, 0xb0, 0x2c, 0xdb, 0xdb, 0xc8, 0x1b,
+  0x14, 0x81, 0x1a, 0x4c, 0x34, 0xee, 0xf0, 0x53, 0x5a, 0x99, 0x80, 0xea,
+  0xc9, 0xe0, 0x41, 0x2f, 0x0d, 0x01, 0x7f, 0xf1, 0xd3, 0xc0, 0xfc, 0xfb,
+  0x4b, 0x10, 0xe3, 0xd4, 0x30, 0xdc, 0x92, 0xd9, 0x3c, 0x3a, 0x4a, 0x9a,
+  0x83, 0x59, 0xb9, 0x6a, 0x9f, 0x68, 0x87, 0x41, 0x0c, 0xf8, 0xdb, 0xda,
+  0xab, 0x93, 0x1a, 0x0f, 0x30, 0x57, 0xa3, 0xfe, 0x46, 0xbd, 0x39, 0x4c,
+  0xda, 0x95, 0xbd, 0x39, 0x31, 0x41, 0x1b, 0xa2, 0x8b, 0xb1, 0x60, 0xf6,
+  0x84, 0xd0, 0xb2, 0x2e, 0xd5, 0x4c, 0x52, 0xba, 0x45, 0x6c, 0xb8, 0x15,
+  0x9a, 0xd0, 0xf9, 0x8e, 0x97, 0xf5, 0x3d, 0x81, 0xa2, 0xb1, 0x13, 0x03,
+  0xf9, 0x3a, 0x8a, 0xe7, 0x4e, 0x55, 0x25, 0x68, 0xf8, 0x61, 0x84, 0x1a,
+  0x85, 0xe0, 0x71, 0x64, 0x7b, 0x53, 0x9a, 0x6b, 0x3e, 0xad, 0x2a, 0x23,
+  0xab, 0xc9, 0x56, 0x4b, 0x66, 0xae, 0x19, 0x3b, 0xe9, 0x3e, 0xb0, 0x07,
+  0x59, 0xef, 0x84, 0x69, 0x7b, 0xb9, 0x88, 0x84, 0x94, 0x51, 0xae, 0x7e,
+  0x00, 0x94, 0xd8, 0x02, 0xc2, 0x50, 0xfd, 0x43, 0xe5, 0xcd, 0x87, 0x54,
+  0xa0, 0x63, 0xe2, 0xb2, 0x6d, 0x8d, 0x89, 0x0f, 0x8b, 0x48, 0x43, 0x5c,
+  0x78, 0xca, 0xe5, 0xd9, 0xc6, 0xb1, 0x17, 0x92, 0xbf, 0x38, 0xe8, 0x4f,
+  0xae, 0xae, 0xea, 0x72, 0x9d, 0x04, 0x83, 0x8e, 0x22, 0x2a, 0x48, 0x55,
+  0x74, 0x32, 0x79, 0x39, 0x8c, 0x15, 0x1c, 0xa0, 0x67, 0x4a, 0xd6, 0x2a,
+  0xd9, 0x9c, 0xd0, 0x54, 0xe5, 0x74, 0x39, 0x81, 0x89, 0x85, 0x82, 0xe7,
+  0xf2, 0xe6, 0x3e, 0x19, 0x33, 0x12, 0xa1, 0xc2, 0x61, 0x50, 0xd3, 0x56,
+  0x20, 0xee, 0x34, 0x07, 0x63, 0xa1, 0x66, 0x02, 0xe7, 0x8d, 0xa0, 0x1f,
+  0xb3, 0xed, 0x97, 0xee, 0x19, 0xf2, 0x4d, 0x5a, 0x74, 0xed, 0x2e, 0x9e,
+  0x7d, 0x71, 0xb1, 0xa2, 0x42, 0x00, 0x7b, 0x41, 0x49, 0x1f, 0xb8, 0x6b,
+  0x6c, 0xf0, 0x47, 0xca, 0x41, 0xa4, 0x10, 0x55, 0xbf, 0xa2, 0xe0, 0xef,
+  0x4e, 0x7b, 0x3e, 0xee, 0xfd, 0xbc, 0x2f, 0x12, 0xfa, 0x83, 0x8e, 0xac,
+  0x8f, 0xac, 0x8f, 0x8a, 0x23, 0x70, 0x7b, 0x55, 0x92, 0x90, 0xe3, 0x64,
+  0x94, 0x48, 0x88, 0x04, 0x15, 0xc0, 0xf0, 0xb0, 0x02, 0xbd, 0x2c, 0x1f,
+  0x42, 0x3f, 0xa3, 0x91, 0x6a, 0xed, 0xbd, 0x31, 0x8a, 0x17, 0xfd, 0xad,
+  0x1c, 0x8b, 0x86, 0x47, 0x82, 0x69, 0x2c, 0x6d, 0xf6, 0x02, 0xf9, 0x07,
+  0x86, 0xc7, 0x1a, 0xfe, 0xce, 0xb1, 0x25, 0x34, 0xa0, 0x22, 0x6b, 0x88,
+  0xdb, 0x20, 0x02, 0x15, 0xa6, 0x9e, 0xe4, 0x12, 0xb9, 0xe7, 0x1c, 0x6e,
+  0x4e, 0x3c, 0x80, 0x4c, 0x6d, 0x9d, 0xe6, 0x3e, 0x1b, 0x3e, 0xd9, 0xa5,
+  0xa4, 0xc6, 0xe6, 0xd1, 0x72, 0xa9, 0x7d, 0x9b, 0x23, 0x22, 0xa1, 0x79,
+  0xb4, 0x3e, 0x83, 0xd0, 0x5f, 0x2b, 0x3a, 0x47, 0x46, 0x68, 0x99, 0x35,
+  0x16, 0x30, 0xa5, 0x60, 0xe9, 0x74, 0x72, 0xaf, 0x80, 0xe1, 0x2e, 0x56,
+  0x4c, 0x2b, 0xd6, 0x9a, 0x81, 0xe1, 0xe9, 0xa0, 0x0e, 0x46, 0x61, 0x07,
+  0x41, 0x5c, 0x3b, 0x07, 0xf0, 0x49, 0x37, 0xbb, 0x53, 0x2b, 0xae, 0xd9,
+  0xfa, 0xb7, 0x2b, 0x14, 0xaf, 0xdf, 0x95, 0xe5, 0x5e, 0xe6, 0xc5, 0x40,
+  0x25, 0xfa, 0x97, 0xf2, 0xcb, 0x43, 0x02, 0x20, 0xde, 0xb0, 0x3a, 0x80,
+  0xf0, 0x55, 0xb9, 0x9d, 0xd5, 0xfc, 0xd4, 0xa2, 0xdb, 0x07, 0x54, 0x18,
+  0x87, 0x55, 0xc6, 0xad, 0x3a, 0xd5, 0xc2, 0x0b, 0x33, 0x5a, 0x54, 0x65,
+  0x53, 0x4e, 0xca, 0x99, 0xb5, 0x87, 0x45, 0xf3, 0x2e, 0x84, 0xaa, 0xe9,
+  0xdc, 0xab, 0x19, 0x4a, 0x06, 0xd5, 0x19, 0x4d, 0xb2, 0xdf, 0xa0, 0x78,
+  0x83, 0xe4, 0x65, 0x07, 0x36, 0xe9, 0xa3, 0xb7, 0xfb, 0xa7, 0xfd, 0x04,
+  0xf6, 0x41, 0xae, 0xd7, 0xf2, 0x96, 0xa0, 0x8d, 0x05, 0xad, 0xbd, 0x35,
+  0x79, 0xf6, 0xa3, 0x41, 0x00, 0xf0, 0xaa, 0x3b, 0x77, 0xe5, 0xb6, 0xb1,
+  0x46, 0x39, 0xb6, 0x17, 0x4e, 0xca, 0x95, 0x93, 0xb1, 0x8f, 0x10, 0x3b,
+  0x77, 0x9f, 0x7c, 0xfe, 0xb4, 0x8f, 0xdf, 0x9e, 0x6d, 0xbf, 0xd8, 0x15,
+  0xcf, 0xeb, 0xd1, 0xe1, 0xf9, 0x9b, 0xae, 0xc6, 0x51, 0x19, 0x6d, 0x8d,
+  0xff, 0x1d, 0x64, 0x69, 0x75, 0x95, 0x56, 0x0d, 0x45, 0x4d, 0x0d, 0xea,
+  0x79, 0xb3, 0x18, 0x6c, 0x6f, 0x0f, 0x1b, 0xc3, 0x50, 0x7c, 0xde, 0xfe,
+  0xe4, 0xe9, 0x70, 0x7b, 0xf3, 0x53, 0x12, 0x10, 0x99, 0xe8, 0x06, 0xb4,
+  0xc4, 0xc9, 0x4b, 0xc9, 0x29, 0x0a, 0xdd, 0x69, 0x6f, 0x19, 0xab, 0x47,
+  0xa3, 0xbe, 0x1c, 0x98, 0xaa, 0xbc, 0x21, 0x62, 0x7f, 0x2b, 0xc8, 0xd6,
+  0x11, 0x40, 0xe4, 0xc2, 0xee, 0x7a, 0x97, 0x24, 0x99, 0x69, 0x43, 0xcb,
+  0xb2, 0x49, 0xd1, 0x71, 0xea, 0x08, 0xa5, 0x39, 0x20, 0x41, 0x8a, 0x7d,
+  0x30, 0x0a, 0xcb, 0x50, 0x4b, 0xf6, 0x6d, 0x95, 0x11, 0x9e, 0x19, 0x5f,
+  0x42, 0x12, 0x50, 0x21, 0xf8, 0x0f, 0x0f, 0x61, 0x59, 0xee, 0x3e, 0x6b,
+  0x97, 0x59, 0xc2, 0x9a, 0x80, 0xef, 0xfd, 0x8a, 0x35, 0x69, 0x2f, 0x89,
+  0xbb, 0xf9, 0x58, 0xa4, 0x84, 0xe1, 0x5a, 0x1c, 0x62, 0x21, 0x8a, 0x4b,
+  0xad, 0x85, 0x0e, 0x1e, 0x1e, 0xe6, 0x76, 0x77, 0x98, 0x77, 0x28, 0xc5,
+  0x0d, 0x23, 0xf1, 0x4b, 0x88, 0xef, 0x1f, 0xa3, 0xf9, 0xe1, 0xf1, 0x0d,
+  0xd5, 0x60, 0x36, 0x5d, 0x35, 0x05, 0xbe, 0x1b, 0x55, 0xb1, 0x83, 0x03,
+  0x33, 0x26, 0x6c, 0xe1, 0x51, 0x67, 0xee, 0xcb, 0xdb, 0x19, 0x9c, 0xa0,
+  0x4b, 0xf0, 0xe9, 0x7e, 0x1b, 0xbc, 0x2a, 0x22, 0x04, 0xc3, 0x75, 0x8d,
+  0xb2, 0x51, 0x69, 0xd1, 0x46, 0x41, 0x44, 0x55, 0x1c, 0xd8, 0x24, 0xb3,
+  0x3b, 0xc4, 0x00, 0x1a, 0xa5, 0xfe, 0xf9, 0x93, 0xd0, 0x06, 0x7e, 0x72,
+  0x7e, 0xb8, 0xe7, 0x8a, 0x21, 0xb3, 0xb5, 0x5c, 0xec, 0x54, 0x1c, 0xaf,
+  0x47, 0x30, 0x12, 0x04, 0xb8, 0x44, 0xa8, 0xcc, 0xfe, 0xec, 0xfa, 0xb1,
+  0x4a, 0x5c, 0xc8, 0x77, 0xa5, 0x42, 0x99, 0xec, 0xff, 0x58, 0x99, 0x14,
+  0xc3, 0x19, 0xe6, 0x22, 0x7e, 0xb0, 0x6b, 0x39, 0x56, 0x0c, 0xea, 0x82,
+  0xb1, 0x0c, 0x00, 0x0f, 0xc0, 0xe4, 0x19, 0x2c, 0x14, 0x13, 0x07, 0xab,
+  0xc0, 0xd6, 0xe7, 0x65, 0x6e, 0x91, 0x49, 0x56, 0x05, 0xa1, 0x19, 0x50,
+  0xbb, 0xc9, 0x65, 0x43, 0x8b, 0x05, 0x29, 0xc3, 0xa5, 0x4e, 0x74, 0x89,
+  0xb7, 0x9a, 0x2c, 0x9a, 0xc7, 0x88, 0x77, 0x64, 0xc3, 0x40, 0xdb, 0xa4,
+  0xdb, 0x77, 0x18, 0xef, 0x2c, 0x89, 0x71, 0x9c, 0x1e, 0xdc, 0x43, 0x88,
+  0x66, 0x88, 0x9a, 0x11, 0x5b, 0x45, 0xb7, 0x40, 0xed, 0x3a, 0x3a, 0x8d,
+  0xca, 0x9d, 0xe4, 0x8b, 0xdc, 0x83, 0x80, 0xb6, 0x51, 0xa8, 0x21, 0xde,
+  0x05, 0xb9, 0x45, 0xd0, 0x84, 0x3d, 0x4c, 0xa5, 0x03, 0xcd, 0xe0, 0xb6,
+  0xcb, 0xe1, 0x03, 0x47, 0xc3, 0x1f, 0x98, 0x3f, 0xae, 0xc2, 0x43, 0xd2,
+  0x6c, 0xd5, 0x79, 0x4b, 0x36, 0xbe, 0x3b, 0x7b, 0xf3, 0xa3, 0x4d, 0x54,
+  0xdd, 0xec, 0xc7, 0xad, 0xe9, 0x3a, 0x03, 0xcf, 0xb3, 0xed, 0x24, 0x08,
+  0x11, 0x29, 0x5a, 0x6b, 0xe7, 0xfe, 0x08, 0x89, 0x6d, 0x5a, 0x22, 0xe2,
+  0x68, 0x83, 0x6a, 0x11, 0x51, 0xfd, 0x42, 0x11, 0xfb, 0x9f, 0x0c, 0x9f,
+  0xc1, 0x13, 0xf5, 0xe6, 0xe0, 0xd9, 0x93, 0xdd, 0x9d, 0xcd, 0x61, 0x78,
+  0x1b, 0x3c, 0x3a, 0xcd, 0xf6, 0x96, 0x65, 0x77, 0x0b, 0x22, 0x98, 0x8d,
+  0xc3, 0x1f, 0x4e, 0xdf, 0x79, 0x13, 0xb4, 0x7b, 0x12, 0x88, 0x75, 0xfe,
+  0x0c, 0xd9, 0xed, 0x68, 0xe7, 0xe8, 0xac, 0x9d, 0x01, 0x55, 0xf4, 0xf9,
+  0xe4, 0x04, 0x1e, 0x92, 0xde, 0x9b, 0x2a, 0xa7, 0x43, 0xd0, 0xa3, 0xf5,
+  0xe8, 0x1d, 0x1b, 0xf9, 0xd5, 0x28, 0x26, 0x27, 0x84, 0x74, 0x97, 0xf5,
+  0x3a, 0xd0, 0x74, 0xed, 0xd9, 0xb5, 0x2c, 0xd8, 0x50, 0x27, 0x23, 0x8a,
+  0xa4, 0xf2, 0x34, 0x07, 0xe4, 0x63, 0x35, 0x01, 0x52, 0x80, 0xac, 0xf5,
+  0xb6, 0x16, 0x4d, 0xc6, 0xc6, 0x65, 0x18, 0x95, 0x27, 0x80, 0xbe, 0xb2,
+  0x7e, 0x1b, 0xb9, 0x4f, 0xfb, 0x2b, 0x91, 0x84, 0x11, 0xc3, 0x93, 0xb5,
+  0xeb, 0x7b, 0x85, 0xf5, 0xac, 0x3b, 0xf8, 0x0b, 0x10, 0x1b, 0x7a, 0x24,
+  0x85, 0x8e, 0xeb, 0x65, 0x35, 0x5d, 0xce, 0xcd, 0xfc, 0xbf, 0xb2, 0x29,
+  0x47, 0x92, 0x24, 0xc1, 0x1a, 0x7b, 0x24, 0xab, 0x21, 0x63, 0xcf, 0xef,
+  0xb3, 0xed, 0x56, 0x7b, 0x43, 0xac, 0x82, 0x3f, 0x4c, 0x8a, 0x27, 0xdf,
+  0xb1, 0xe1, 0xe3, 0xa4, 0xfd, 0xc3, 0x3a, 0xd8, 0xb5, 0xb9, 0xd1, 0xad,
+  0xfd, 0x29, 0xa5, 0x8a, 0xac, 0x49, 0x49, 0xf2, 0x7f, 0xa4, 0x8c, 0x45,
+  0xe3, 0x83, 0xbe, 0xb2, 0x9b, 0x9e, 0x68, 0x55, 0xca, 0x29, 0xd3, 0xfd,
+  0x2f, 0x0c, 0x92, 0x40, 0xd1, 0x42, 0xda, 0x7a, 0x2b, 0xbd, 0xd8, 0xe2,
+  0xba, 0x60, 0x91, 0x36, 0xef, 0x9d, 0xe5, 0xbf, 0xa7, 0xc9, 0x06, 0xc4,
+  0xb2, 0xcf, 0x9f, 0x3d, 0xdd, 0x84, 0xca, 0x6f, 0x43, 0x74, 0x36, 0x23,
+  0xde, 0x37, 0xac, 0x9a, 0x4d, 0x07, 0x24, 0x88, 0x7d, 0x14, 0xc7, 0x03,
+  0x9d, 0xbb, 0x7c, 0x0b, 0x80, 0x17, 0x98, 0x13, 0x00, 0x8b, 0x92, 0x84,
+  0x22, 0x04, 0xf6, 0x2c, 0xc4, 0x03, 0x71, 0x6d, 0xbd, 0x64, 0x43, 0x0e,
+  0x87, 0xbb, 0x31, 0x2c, 0xb4, 0x02, 0x07, 0xc9, 0xe3, 0x7a, 0xb0, 0xf9,
+  0x16, 0x9b, 0x64, 0x03, 0x8b, 0xd9, 0x83, 0xa1, 0x6b, 0x78, 0x65, 0x43,
+  0x51, 0x5e, 0xba, 0xf4, 0x2e, 0x22, 0xf6, 0x05, 0x88, 0xc9, 0x5f, 0xee,
+  0xba, 0x24, 0x06, 0xd4, 0x6a, 0xe4, 0x57, 0x4e, 0x19, 0xa1, 0xdb, 0xd3,
+  0x2e, 0x24, 0x87, 0x0e, 0x03, 0x0d, 0x8f, 0xf6, 0x5f, 0x5b, 0x90, 0x80,
+  0x1e, 0x57, 0xe6, 0x3a, 0xb0, 0xb6, 0xcd, 0xb3, 0xb9, 0x02, 0xa4, 0xf3,
+  0xad, 0x5e, 0x56, 0xae, 0xda, 0x16, 0xdb, 0x73, 0xf8, 0x8a, 0x46, 0x10,
+  0xe3, 0x2a, 0x94, 0x19, 0x55, 0x47, 0x52, 0x85, 0xe3, 0x68, 0x0d, 0x6c,
+  0x45, 0xd1, 0x1a, 0x4b, 0x6c, 0x7e, 0xaa, 0xba, 0xf8, 0xa1, 0x10, 0xd3,
+  0xaa, 0xbf, 0x5b, 0xa2, 0x0c, 0x2b, 0x4e, 0x71, 0xa7, 0x9d, 0x65, 0x58,
+  0x31, 0x78, 0x2e, 0x3a, 0x05, 0x8c, 0x01, 0xa8, 0x36, 0x83, 0x30, 0x5f,
+  0x25, 0xd9, 0xc0, 0x78, 0xb7, 0xb6, 0x36, 0x1f, 0x1d, 0xb3, 0x3c, 0xf8,
+  0xd8, 0x18, 0x4f, 0x59, 0xdd, 0xa0, 0xc5, 0xcd, 0x1c, 0x16, 0x99, 0x1b,
+  0x04, 0x75, 0x9a, 0x23, 0x1b, 0x1c, 0xc5, 0x59, 0xfb, 0xad, 0xc0, 0x70,
+  0x23, 0x09, 0x85, 0x76, 0x29, 0x9e, 0x32, 0xcf, 0xae, 0x3d, 0x71, 0x11,
+  0x5c, 0x19, 0xf8, 0x40, 0xb3, 0x62, 0x25, 0x5d, 0x83, 0xcc, 0xd7, 0xb3,
+  0xa0, 0x70, 0xa2, 0x37, 0x2a, 0x1c, 0x07, 0x6f, 0x7e, 0xac, 0x09, 0x39,
+  0xaf, 0x32, 0x1f, 0x0b, 0xc5, 0x63, 0x67, 0xef, 0x73, 0xc8, 0x8a, 0xf5,
+  0xe9, 0x4e, 0x21, 0xf0, 0x61, 0x00, 0x6b, 0xc7, 0x0f, 0xd2, 0xe1, 0xb1,
+  0x88, 0x39, 0x79, 0x11, 0x93, 0x5a, 0xad, 0x63, 0x4c, 0xda, 0x34, 0x5a,
+  0xfe, 0xb5, 0x9b, 0x37, 0x23, 0x54, 0x6a, 0xca, 0x9a, 0x83, 0x9f, 0x40,
+  0xfe, 0x69, 0x1c, 0xa5, 0xc3, 0x52, 0x37, 0xd6, 0x4c, 0x0b, 0x45, 0xe2,
+  0xd3, 0xd6, 0x72, 0xf6, 0xf9, 0x90, 0x22, 0xd6, 0x3e, 0x26, 0x04, 0xa3,
+  0x1e, 0xc8, 0x83, 0x62, 0x3f, 0xb0, 0x9e, 0xcc, 0xb0, 0xda, 0x75, 0xea,
+  0x39, 0xbd, 0x69, 0x6c, 0x17, 0x5a, 0xa2, 0xd2, 0x86, 0xde, 0x0d, 0x5a,
+  0x90, 0x95, 0xa9, 0xc8, 0x9a, 0x6a, 0x12, 0x18, 0x96, 0xae, 0x5d, 0x6d,
+  0xc3, 0x9a, 0xbd, 0x91, 0xb4, 0x48, 0x43, 0x3c, 0x6c, 0xba, 0xff, 0x20,
+  0xbf, 0x94, 0x36, 0x1b, 0x62, 0xd3, 0x3f, 0x14, 0x91, 0xa0, 0xf7, 0xf5,
+  0xda, 0x46, 0xe9, 0x4b, 0x94, 0x14, 0x31, 0x49, 0xd6, 0x99, 0x6d, 0xf6,
+  0xbc, 0x73, 0x97, 0xdb, 0x32, 0x0e, 0xf7, 0x8b, 0x20, 0xfc, 0x75, 0x62,
+  0x43, 0xbd, 0x38, 0xc3, 0x05, 0xa8, 0x1e, 0x9c, 0xfd, 0xe1, 0x22, 0x17,
+  0xa0, 0x1c, 0x30, 0xe4, 0x8d, 0x53, 0x1c, 0xb8, 0x5e, 0x62, 0x64, 0x74,
+  0x81, 0x11, 0x81, 0x0c, 0x37, 0x98, 0xe3, 0xc6, 0x33, 0x33, 0xb3, 0x66,
+  0xb1, 0xb1, 0xb3, 0xc9, 0x10, 0xdf, 0x52, 0x8e, 0xa9, 0x74, 0x7b, 0x1b,
+  0x2a, 0x09, 0x88, 0xeb, 0x4a, 0x0e, 0x3c, 0xa7, 0x31, 0x32, 0xf7, 0x51,
+  0x86, 0x81, 0x64, 0x3a, 0x90, 0x50, 0x2a, 0x29, 0xac, 0x1a, 0x26, 0x06,
+  0xdf, 0x57, 0x44, 0xaa, 0x84, 0x25, 0x78, 0x41, 0x99, 0x0e, 0x35, 0x57,
+  0xef, 0xdc, 0x70, 0x35, 0x3f, 0xf8, 0x6a, 0x48, 0xb2, 0x9c, 0x63, 0x34,
+  0xca, 0x6a, 0x36, 0x1d, 0xd0, 0xcd, 0x71, 0x59, 0x95, 0xcb, 0xc5, 0xa0,
+  0x8a, 0xe0, 0x7a, 0xc9, 0xed, 0x01, 0xae, 0x1e, 0x4b, 0xbc, 0x49, 0x7a,
+  0x94, 0x93, 0xd3, 0xb3, 0x97, 0xbb, 0x9f, 0xf6, 0x13, 0xcf, 0x9c, 0xe1,
+  0xdd, 0x0c, 0x8b, 0x87, 0x27, 0x7f, 0x5f, 0xe6, 0x86, 0xa2, 0x69, 0x5b,
+  0x11, 0xca, 0x88, 0x14, 0x8f, 0xcc, 0x06, 0x00, 0x18, 0xc6, 0x41, 0x31,
+  0x0e, 0x9c, 0x2f, 0x46, 0xa6, 0x6c, 0xa8, 0xf3, 0x4a, 0x60, 0x81, 0x6d,
+  0x52, 0xec, 0xcc, 0x2a, 0x0b, 0x00, 0xef, 0xbb, 0x14, 0x49, 0x13, 0x51,
+  0x7c, 0x1c, 0xd7, 0xc1, 0x42, 0x33, 0x71, 0x75, 0x26, 0x80, 0x55, 0xd5,
+  0xa8, 0xd6, 0xe7, 0xf7, 0x74, 0x87, 0xad, 0xb7, 0xa8, 0x2e, 0x59, 0xaf,
+  0xc9, 0x16, 0xd8, 0xac, 0xeb, 0xf2, 0x22, 0x54, 0xef, 0x81, 0xca, 0x76,
+  0xab, 0xba, 0x66, 0xaa, 0xe6, 0x2e, 0x5c, 0xeb, 0xdc, 0xb8, 0x3b, 0x7d,
+  0xef, 0xfa, 0x1c, 0xf4, 0x3e, 0x5e, 0x52, 0xb0, 0x49, 0xa7, 0xe9, 0xd7,
+  0xcc, 0xa8, 0x59, 0x20, 0xe0, 0x27, 0xa4, 0xbc, 0x27, 0x82, 0x01, 0x39,
+  0xd9, 0xa4, 0xa6, 0x1c, 0xc5, 0xb9, 0x5f, 0x24, 0x97, 0xcc, 0xaa, 0x64,
+  0xc7, 0xee, 0x6e, 0xfb, 0x12, 0x64, 0x5d, 0xf7, 0xdb, 0xd8, 0x7c, 0x9d,
+  0xc8, 0x44, 0xee, 0x86, 0xe2, 0x4f, 0xfc, 0xe6, 0x63, 0x7e, 0x71, 0xbc,
+  0xae, 0x04, 0xab, 0x4a, 0x2f, 0x5f, 0x3a, 0x62, 0x55, 0x95, 0x26, 0x6c,
+  0x05, 0x0f, 0xb3, 0x1e, 0x93, 0xab, 0x65, 0x71, 0x6d, 0x86, 0x10, 0x86,
+  0x3c, 0xab, 0x7f, 0x23, 0xa7, 0x63, 0x6d, 0x08, 0x04, 0xe8, 0x8d, 0x0e,
+  0x9e, 0x84, 0x5b, 0x20, 0xf4, 0xbd, 0x1b, 0x48, 0x24, 0x41, 0x6d, 0xa4,
+  0xd8, 0xe8, 0xe4, 0xa6, 0xe3, 0x51, 0xd9, 0x05, 0x7c, 0x28, 0x07, 0xd2,
+  0x2b, 0x1c, 0x53, 0x64, 0x97, 0x08, 0x85, 0x10, 0x51, 0x94, 0x33, 0x31,
+  0x15, 0x56, 0x08, 0x3a, 0x82, 0xda, 0x38, 0x63, 0x85, 0xa7, 0x51, 0x73,
+  0x52, 0xb6, 0x95, 0xa8, 0xd4, 0x87, 0x43, 0x8d, 0x8c, 0x44, 0x58, 0xf0,
+  0x20, 0xc2, 0x4b, 0xce, 0xbb, 0x15, 0x43, 0x1c, 0x31, 0xea, 0x6b, 0xfd,
+  0x16, 0x1e, 0x36, 0x43, 0xab, 0x72, 0xf6, 0x40, 0x13, 0x01, 0x89, 0x37,
+  0x47, 0x62, 0xc3, 0xa8, 0x17, 0xe5, 0x6c, 0xc9, 0xf5, 0xec, 0xc8, 0x1e,
+  0x46, 0x99, 0x24, 0x9b, 0x7a, 0x9a, 0xf8, 0xfc, 0x39, 0x9c, 0x09, 0xe1,
+  0x62, 0x51, 0x94, 0x39, 0x04, 0x7c, 0xfb, 0xe6, 0x5e, 0x8e, 0xcf, 0x55,
+  0xc5, 0x9d, 0xe4, 0x7f, 0xaf, 0xb9, 0x05, 0xa2, 0x4f, 0x6f, 0x2c, 0x54,
+  0x5e, 0x60, 0x3c, 0x52, 0x3d, 0xc2, 0x5f, 0x0f, 0x6b, 0x4e, 0x25, 0xa9,
+  0xc0, 0xd5, 0x8a, 0xf3, 0xc1, 0x6e, 0xa1, 0x6b, 0x50, 0x67, 0x0f, 0xc6,
+  0x47, 0x3c, 0x10, 0x0f, 0x18, 0x5d, 0x6b, 0xad, 0xfc, 0x82, 0x94, 0xfd,
+  0x7b, 0x95, 0xf8, 0x65, 0x68, 0x22, 0xa8, 0xdf, 0x63, 0x54, 0xf3, 0x25,
+  0xf9, 0x18, 0x02, 0x33, 0xb3, 0xd9, 0x95, 0xd9, 0x92, 0xcb, 0x0d, 0x90,
+  0xbf, 0xda, 0x49, 0xe7, 0xe9, 0x98, 0x36, 0x67, 0x7c, 0x6f, 0xe7, 0xa9,
+  0xe9, 0xf5, 0x48, 0x86, 0x57, 0x55, 0x3a, 0x24, 0x0f, 0x7d, 0xac, 0xd3,
+  0xcf, 0x77, 0xc2, 0x5b, 0x03, 0xb2, 0x60, 0x1f, 0x88, 0x8f, 0x97, 0x72,
+  0x2d, 0xec, 0x44, 0x99, 0xec, 0x32, 0x62, 0x2e, 0xb5, 0x83, 0x51, 0x49,
+  0x9d, 0xcc, 0x01, 0x29, 0x17, 0x37, 0x12, 0x00, 0x1f, 0x59, 0x03, 0x4d,
+  0x8a, 0x29, 0xdb, 0x39, 0x58, 0xe6, 0xe8, 0x94, 0xc0, 0xf3, 0x5f, 0x01,
+  0xde, 0x2b, 0x15, 0x8b, 0xdf, 0xe9, 0x63, 0xc9, 0xc6, 0xe8, 0xf4, 0xdd,
+  0xe1, 0xd7, 0x27, 0x9b, 0x8f, 0x79, 0x15, 0x48, 0x2b, 0x87, 0xb7, 0x0e,
+  0x71, 0x28, 0x38, 0x56, 0x38, 0xe0, 0x91, 0x96, 0xd8, 0x63, 0x55, 0xde,
+  0xdd, 0x7b, 0x6d, 0xc6, 0x02, 0xee, 0xfa, 0x9c, 0x89, 0xca, 0xe7, 0x95,
+  0x11, 0x32, 0xed, 0xf0, 0x7f, 0x6d, 0xb0, 0x3f, 0x0b, 0x5f, 0xb8, 0x74,
+  0xbe, 0x1e, 0x8d, 0x06, 0xfb, 0xa7, 0x47, 0x00, 0x5d, 0x18, 0x8d, 0xcc,
+  0x2f, 0xab, 0x20, 0xf8, 0x87, 0x52, 0xff, 0x81, 0x22, 0xfb, 0xbd, 0xd0,
+  0x7e, 0xb9, 0x13, 0x33, 0x96, 0x95, 0x6d, 0x78, 0xbf, 0x0b, 0xe8, 0xa7,
+  0x0e, 0xba, 0xd7, 0xed, 0xe9, 0xd1, 0x16, 0xfa, 0x82, 0x4b, 0x03, 0xeb,
+  0x10, 0x8f, 0xe7, 0x5b, 0x86, 0x85, 0xe5, 0x68, 0x55, 0x91, 0xad, 0x01,
+  0xfa, 0x54, 0xf6, 0x91, 0x1a, 0xc9, 0x93, 0x7c, 0xbf, 0x4b, 0x8c, 0x2d,
+  0x52, 0x25, 0xdb, 0x0b, 0xd6, 0xe2, 0x82, 0x0e, 0x5a, 0x68, 0xa2, 0x63,
+  0xbd, 0x87, 0x71, 0x96, 0xa1, 0x5b, 0x09, 0x68, 0x7f, 0x24, 0xae, 0xe2,
+  0xae, 0x5d, 0x6f, 0x7d, 0xb0, 0x4c, 0xf6, 0x50, 0x82, 0x38, 0x2b, 0xa8,
+  0xbc, 0x78, 0xcb, 0x60, 0x26, 0x2c, 0xb8, 0x5d, 0x44, 0xd2, 0x65, 0x86,
+  0x9a, 0x11, 0x2e, 0xe3, 0xa3, 0x33, 0x27, 0x94, 0x84, 0x2b, 0x76, 0x04,
+  0x72, 0x60, 0xf6, 0x74, 0xf8, 0xaf, 0x28, 0xce, 0xe4, 0x1f, 0x09, 0x2f,
+  0xb1, 0xed, 0xa1, 0x6b, 0x5e, 0x98, 0x8c, 0x4b, 0x82, 0x13, 0x8f, 0x86,
+  0x95, 0x36, 0xcf, 0x0f, 0x4e, 0xbd, 0x08, 0x80, 0x7e, 0x68, 0xf0, 0x70,
+  0x08, 0x35, 0x92, 0x98, 0x5b, 0xd8, 0xd6, 0xe7, 0xf1, 0xab, 0xcf, 0x56,
+  0x0b, 0x90, 0x64, 0x8a, 0x55, 0xb7, 0x9f, 0x7f, 0xf9, 0x49, 0x1c, 0xea,
+  0xea, 0xab, 0xcf, 0xcd, 0xc0, 0xbb, 0xfd, 0xec, 0x87, 0x9d, 0xa5, 0x11,
+  0x5c, 0xb2, 0x7c, 0x1a, 0xcd, 0xd2, 0x92, 0x05, 0xd2, 0xa2, 0x4a, 0xb2,
+  0x44, 0x04, 0x02, 0xa4, 0xd8, 0x6f, 0x47, 0xaf, 0xcd, 0x60, 0x48, 0x0e,
+  0x23, 0xdd, 0xf3, 0xab, 0x7b, 0x9b, 0x22, 0x1f, 0x0a, 0x90, 0x5e, 0x79,
+  0x0d, 0x70, 0x6e, 0x2a, 0x97, 0xe7, 0x99, 0x2c, 0xa9, 0x95, 0x6c, 0xe8,
+  0x49, 0x04, 0x1c, 0x1c, 0x25, 0xb8, 0x83, 0x71, 0xc4, 0x6a, 0x22, 0x0e,
+  0xc4, 0x1b, 0x5e, 0x2d, 0xb9, 0x10, 0xb0, 0x40, 0x11, 0xd9, 0x0a, 0x9c,
+  0x55, 0x06, 0x1f, 0x28, 0x0d, 0xd8, 0x1b, 0x71, 0x50, 0xd5, 0x93, 0xb5,
+  0x71, 0x73, 0xe6, 0xe7, 0x92, 0x7e, 0x30, 0xae, 0xca, 0x6b, 0x73, 0x5a,
+  0xe9, 0x3d, 0xc8, 0xcd, 0xb4, 0xf6, 0x2c, 0xc3, 0xa9, 0x5a, 0x69, 0x6e,
+  0x94, 0xa9, 0xf5, 0x89, 0x46, 0xa2, 0x4f, 0xa9, 0x8a, 0x89, 0xe4, 0x13,
+  0x3a, 0x59, 0x88, 0xeb, 0x4b, 0x20, 0x93, 0x4f, 0x11, 0x89, 0x61, 0x3c,
+  0x5f, 0x4e, 0x26, 0x99, 0x77, 0x4d, 0x86, 0xce, 0x6d, 0x29, 0x0c, 0xf2,
+  0xaf, 0xa3, 0x21, 0x4b, 0x16, 0x3e, 0x0d, 0x45, 0xf6, 0xbc, 0x45, 0x4c,
+  0xcc, 0xf4, 0x5f, 0x1a, 0xaa, 0x62, 0x6e, 0x4e, 0x56, 0xb9, 0xae, 0x59,
+  0x18, 0xf5, 0x75, 0x06, 0x0e, 0x32, 0x07, 0x16, 0x6a, 0x68, 0x23, 0x14,
+  0x90, 0xc2, 0xf1, 0x1b, 0x53, 0x57, 0x12, 0x4c, 0x70, 0x8f, 0xfb, 0xcc,
+  0x8c, 0x43, 0x31, 0x03, 0xe9, 0x25, 0xf6, 0xd6, 0x66, 0xc5, 0x0a, 0x4c,
+  0x82, 0xf6, 0x07, 0xc8, 0x7b, 0xc8, 0x2b, 0x17, 0x17, 0xca, 0x9f, 0x7d,
+  0x30, 0x12, 0xf4, 0x15, 0xa8, 0x14, 0x5c, 0x28, 0xc3, 0x86, 0xc8, 0x70,
+  0xa4, 0xab, 0x4d, 0xf9, 0x25, 0x08, 0x75, 0x9f, 0x67, 0x30, 0x28, 0x73,
+  0x72, 0x48, 0xf1, 0x2e, 0x11, 0x3d, 0x87, 0xe1, 0xd5, 0x72, 0x9b, 0xbd,
+  0x93, 0x0b, 0xa2, 0x2c, 0xfb, 0x23, 0x44, 0x6f, 0x4c, 0xd5, 0xd7, 0x60,
+  0xe1, 0x9a, 0xb8, 0x8e, 0x74, 0x28, 0x40, 0xd2, 0x88, 0xd8, 0x98, 0x2f,
+  0xd8, 0x06, 0xfa, 0x81, 0xad, 0x90, 0xf1, 0xc6, 0xc5, 0x78, 0x13, 0x88,
+  0x32, 0x59, 0x8f, 0xa0, 0x12, 0x71, 0x1c, 0x65, 0x6c, 0xb2, 0x89, 0xf7,
+  0x98, 0xff, 0xca, 0xde, 0xe7, 0xdb, 0x7d, 0xe1, 0xf8, 0x64, 0xb0, 0xf3,
+  0x9f, 0x41, 0xfc, 0x51, 0xa8, 0x46, 0x00, 0x82, 0xb2, 0x6c, 0xec, 0x93,
+  0xdd, 0xca, 0x36, 0x2f, 0x86, 0x4f, 0x37, 0x5b, 0xf4, 0xd2, 0xcc, 0xe6,
+  0x5d, 0xb9, 0x24, 0x79, 0x77, 0x7e, 0xfc, 0x36, 0x09, 0xcc, 0x01, 0x1c,
+  0xed, 0x19, 0xfb, 0x2e, 0xb0, 0x73, 0x22, 0x0e, 0x9b, 0x02, 0xc9, 0x8d,
+  0xf0, 0x98, 0x5f, 0x16, 0x0c, 0xca, 0xf4, 0x36, 0x9f, 0x54, 0x25, 0x61,
+  0xab, 0xb1, 0x09, 0x49, 0x94, 0x6b, 0xf3, 0xc5, 0xd1, 0xd1, 0x28, 0xb9,
+  0xcd, 0xc6, 0x9a, 0x65, 0x15, 0x44, 0x15, 0x36, 0x4c, 0x3e, 0x74, 0x7d,
+  0x56, 0x79, 0xd6, 0x90, 0xa4, 0xa1, 0xf6, 0x3c, 0x4a, 0xbe, 0xa6, 0x77,
+  0xb2, 0x41, 0x56, 0x18, 0x7d, 0x33, 0x83, 0xea, 0x46, 0x15, 0x4b, 0x66,
+  0xe0, 0x4a, 0x46, 0xe0, 0x2e, 0x23, 0x46, 0x5d, 0x1e, 0x80, 0xb2, 0x14,
+  0x5e, 0x1b, 0xdc, 0x15, 0xe3, 0xb4, 0xb6, 0xc0, 0x53, 0x79, 0x45, 0x14,
+  0x47, 0xb2, 0x86, 0x58, 0x62, 0xae, 0x73, 0x64, 0xf8, 0x07, 0x99, 0xef,
+  0x52, 0xcf, 0xb6, 0x63, 0x8e, 0x28, 0xa6, 0x65, 0x05, 0xff, 0x88, 0x87,
+  0xca, 0x8e, 0x82, 0x26, 0x4b, 0x44, 0x7e, 0x82, 0x6b, 0xde, 0x47, 0x24,
+  0xf6, 0xab, 0x52, 0x60, 0x3d, 0x78, 0xa5, 0x89, 0x31, 0x71, 0x5a, 0x20,
+  0x92, 0x32, 0x04, 0x65, 0x19, 0x45, 0xb1, 0x2d, 0x27, 0x79, 0x44, 0xc2,
+  0xd3, 0xfd, 0x70, 0x99, 0x49, 0x62, 0x67, 0x7f, 0x9d, 0x5f, 0xae, 0xa8,
+  0xb5, 0x61, 0x43, 0x9d, 0x3d, 0x11, 0x93, 0x46, 0x23, 0xec, 0x52, 0x25,
+  0xcb, 0xa0, 0xa6, 0x53, 0x0c, 0x09, 0xa4, 0x25, 0x59, 0x1a, 0x6a, 0x7b,
+  0x04, 0x61, 0xfb, 0x61, 0xb1, 0x12, 0x97, 0x9e, 0x64, 0x8e, 0x6a, 0x42,
+  0x68, 0x60, 0x18, 0x7d, 0x20, 0x3d, 0xd4, 0xc9, 0x8f, 0x34, 0x9f, 0x7f,
+  0x49, 0x99, 0x11, 0x77, 0xd8, 0x4a, 0x32, 0x76, 0x88, 0x51, 0x20, 0x9a,
+  0x08, 0xf0, 0x3d, 0x63, 0x2a, 0x89, 0xd9, 0xa0, 0x94, 0x87, 0xfc, 0xe4,
+  0xbb, 0xba, 0x99, 0x96, 0xcb, 0xc6, 0x56, 0x49, 0xa0, 0x1b, 0x9c, 0x2f,
+  0xef, 0xff, 0xfc, 0x67, 0x98, 0x8b, 0xf4, 0xd3, 0x2f, 0x30, 0x5d, 0x01,
+  0x3a, 0xc3, 0xa2, 0x48, 0x28, 0xd9, 0xd4, 0xae, 0x80, 0x10, 0xed, 0x10,
+  0x61, 0x44, 0x59, 0xe8, 0x77, 0x86, 0x4c, 0xec, 0x0a, 0xa7, 0x1a, 0x6e,
+  0xad, 0x70, 0x95, 0x32, 0x3a, 0x65, 0xfc, 0x40, 0xcd, 0x4e, 0x3d, 0x2b,
+  0x9a, 0x2a, 0x9f, 0x82, 0x87, 0x3e, 0x5d, 0x55, 0xd1, 0x40, 0xb1, 0x66,
+  0xda, 0xd5, 0xab, 0x00, 0xf2, 0xc1, 0x2e, 0x1f, 0xcc, 0x80, 0x2e, 0x96,
+  0x63, 0xae, 0x0b, 0x1b, 0xe2, 0xf2, 0xf2, 0xde, 0x8a, 0x6b, 0xe3, 0x3f,
+  0xcd, 0x66, 0xf4, 0x9b, 0xdb, 0xf2, 0x9f, 0x43, 0x0a, 0x66, 0x04, 0xe7,
+  0x1d, 0x94, 0x49, 0x8f, 0x46, 0xfb, 0xe1, 0x8f, 0x3b, 0x14, 0x3d, 0x14,
+  0x80, 0x8c, 0xb0, 0x1b, 0xda, 0xee, 0xb3, 0x45, 0xe0, 0x59, 0x01, 0x03,
+  0xdc, 0xee, 0x8e, 0x7a, 0xe9, 0xd3, 0x25, 0xf0, 0xcf, 0x21, 0xfd, 0xfb,
+  0xd3, 0xce, 0xe0, 0xd9, 0x2f, 0xb6, 0xd7, 0x3f, 0xee, 0x7c, 0xf8, 0xe3,
+  0x6e, 0x2f, 0x16, 0x1d, 0x26, 0x39, 0x81, 0xed, 0x58, 0xbe, 0x1a, 0xd5,
+  0x90, 0x25, 0x78, 0x56, 0x84, 0x7f, 0xe7, 0xb7, 0x45, 0x85, 0xa7, 0x48,
+  0xc6, 0x07, 0x59, 0xa1, 0xe2, 0x38, 0x89, 0xd0, 0x66, 0x34, 0xf0, 0xce,
+  0xd5, 0x05, 0xf7, 0x1c, 0xa1, 0x52, 0x26, 0xdb, 0x79, 0x71, 0xc4, 0x9c,
+  0x19, 0xe0, 0x93, 0x53, 0x82, 0xea, 0xf4, 0xde, 0x5c, 0x74, 0x0c, 0xab,
+  0x69, 0x41, 0x02, 0x54, 0x74, 0x14, 0xb2, 0x15, 0x6c, 0xae, 0x0d, 0x17,
+  0x00, 0x05, 0x4c, 0xb9, 0xcd, 0x98, 0x65, 0xc2, 0x99, 0x84, 0x1c, 0xcd,
+  0x4b, 0x09, 0x67, 0x1c, 0x5e, 0x26, 0x76, 0x77, 0x80, 0xba, 0xb0, 0xb9,
+  0xd1, 0xe3, 0xe3, 0xb5, 0x95, 0xfa, 0x8e, 0x29, 0xae, 0x7f, 0x26, 0x19,
+  0xc5, 0x16, 0xcb, 0x9e, 0x71, 0xfa, 0x32, 0x92, 0x5f, 0xbb, 0xf7, 0xce,
+  0xc6, 0x89, 0xd3, 0x73, 0x66, 0x59, 0xab, 0x5a, 0x86, 0xff, 0xb2, 0xe7,
+  0x08, 0xcf, 0xd8, 0xba, 0x84, 0xf8, 0x94, 0x65, 0x13, 0x82, 0x90, 0x0c,
+  0x37, 0xa3, 0x09, 0x14, 0x82, 0x15, 0x28, 0xb9, 0x80, 0xe9, 0x8d, 0x73,
+  0x9b, 0xac, 0xc4, 0xc3, 0x55, 0x0e, 0xd0, 0x5d, 0xd5, 0x54, 0x52, 0x23,
+  0xd8, 0x15, 0x97, 0xda, 0x6a, 0x74, 0x7e, 0x36, 0x9f, 0x97, 0x76, 0xde,
+  0xaa, 0x4c, 0x12, 0x36, 0x27, 0xb9, 0x56, 0x12, 0x3f, 0xbe, 0x12, 0x9b,
+  0x57, 0xc0, 0x5f, 0x80, 0x04, 0x86, 0x7a, 0x04, 0xec, 0x6b, 0x08, 0xb2,
+  0xd5, 0x3c, 0x4a, 0x8f, 0xe6, 0x49, 0xf8, 0xab, 0xca, 0xb0, 0xbb, 0x36,
+  0xa0, 0x9d, 0xe6, 0x02, 0x7d, 0x02, 0xb9, 0xee, 0x8c, 0x5e, 0x9c, 0x4d,
+  0x57, 0xe3, 0x22, 0x59, 0x97, 0x38, 0x15, 0xa7, 0x50, 0xd4, 0xf4, 0x24,
+  0x9b, 0x51, 0xa1, 0x20, 0xf5, 0x60, 0x01, 0xb0, 0xac, 0x8d, 0x42, 0x6c,
+  0xc3, 0xd8, 0x57, 0xc3, 0x0b, 0x0f, 0xdb, 0xf7, 0x63, 0xab, 0x3e, 0xa4,
+  0x4d, 0x84, 0x84, 0xda, 0x33, 0xb9, 0x2a, 0x4b, 0x89, 0xfd, 0x5c, 0x85,
+  0xc0, 0xcb, 0x68, 0x43, 0x30, 0x59, 0xad, 0x80, 0x95, 0x56, 0x79, 0xd4,
+  0x0b, 0xac, 0x08, 0x7c, 0x77, 0xe9, 0x74, 0x9a, 0xeb, 0x71, 0xf6, 0xd7,
+  0xb8, 0x93, 0xbb, 0xcb, 0xe3, 0xb1, 0x70, 0xcd, 0xce, 0x9c, 0x10, 0x8b,
+  0x16, 0x64, 0x77, 0x54, 0x7c, 0x79, 0x44, 0xc4, 0xf1, 0x17, 0x25, 0x8a,
+  0x80, 0x2c, 0x9e, 0x55, 0x62, 0xe4, 0xc0, 0x3e, 0x06, 0xd5, 0x00, 0x7a,
+  0xc2, 0x73, 0x0a, 0x32, 0xf6, 0xcb, 0x11, 0xb6, 0x83, 0x02, 0xc8, 0xfe,
+  0xb4, 0xbb, 0xbd, 0x0a, 0xf9, 0x97, 0x1a, 0xd2, 0x92, 0x70, 0x74, 0x1a,
+  0x6b, 0x3d, 0x8e, 0x2c, 0x8e, 0xbb, 0xda, 0x33, 0x19, 0xb2, 0xad, 0x28,
+  0x18, 0x62, 0x40, 0xf4, 0x12, 0x98, 0x08, 0x5c, 0xc7, 0xd1, 0xb0, 0xdd,
+  0xdf, 0xca, 0x99, 0x1f, 0x63, 0xcc, 0xe6, 0xf2, 0x27, 0x81, 0x69, 0x77,
+  0x30, 0xce, 0xcc, 0xc5, 0xdd, 0x9d, 0xe3, 0x06, 0x07, 0xe5, 0x72, 0xce,
+  0x7e, 0x3b, 0xfa, 0x8c, 0xfa, 0xfa, 0x0a, 0xef, 0x24, 0xe7, 0x50, 0x89,
+  0xe9, 0x44, 0x9c, 0xec, 0xbf, 0x3f, 0xff, 0x26, 0xd9, 0x1d, 0x6e, 0xcb,
+  0xfe, 0x3e, 0x98, 0x39, 0xcc, 0xa0, 0x24, 0xad, 0x36, 0x5c, 0x69, 0x62,
+  0xd2, 0x76, 0xfe, 0xb6, 0x2c, 0xda, 0xb5, 0x39, 0x62, 0x0e, 0xc2, 0x90,
+  0x20, 0x5b, 0xa1, 0x5d, 0xca, 0x21, 0xc5, 0x1a, 0x05, 0xa4, 0x43, 0x18,
+  0x00, 0x07, 0xcb, 0x50, 0x48, 0x43, 0x83, 0xab, 0x0a, 0xf9, 0x80, 0x2d,
+  0xca, 0x68, 0x65, 0xb8, 0x0a, 0xaf, 0xa2, 0xb1, 0x62, 0x55, 0x26, 0x5e,
+  0xc6, 0xa6, 0x5b, 0x20, 0xf0, 0xec, 0xcd, 0x41, 0xa7, 0xb9, 0xe7, 0x9f,
+  0x3d, 0xdb, 0xfe, 0x94, 0x91, 0x3c, 0xad, 0xc2, 0x42, 0xff, 0xb2, 0xc2,
+  0x6d, 0x5a, 0x8d, 0xe8, 0xd7, 0x55, 0x6d, 0x8b, 0x03, 0x37, 0x74, 0xf3,
+  0x3b, 0x5d, 0x9c, 0x94, 0x5f, 0x93, 0x8e, 0x74, 0xce, 0xbc, 0xf6, 0x4c,
+  0xcb, 0x88, 0x95, 0x5b, 0x16, 0x11, 0xef, 0xb4, 0x78, 0x10, 0x20, 0x28,
+  0x73, 0x81, 0x0e, 0x33, 0xc3, 0x83, 0x93, 0x77, 0xef, 0x0e, 0x0f, 0xce,
+  0x5d, 0x1d, 0xa2, 0x5b, 0xad, 0x75, 0x09, 0x66, 0x9a, 0x5a, 0x08, 0xa7,
+  0x78, 0xe1, 0x36, 0x29, 0x1b, 0xe4, 0x74, 0x7e, 0xfa, 0xe3, 0x56, 0x62,
+  0x9b, 0xf5, 0x4b, 0x26, 0x3e, 0x49, 0x7a, 0x90, 0x2b, 0x25, 0xa2, 0xc1,
+  0xff, 0xdf, 0x7a, 0x5d, 0xff, 0x8d, 0x7a, 0x5d, 0xdf, 0x48, 0xdc, 0x47,
+  0x07, 0x46, 0x38, 0x56, 0x8f, 0x4a, 0xe0, 0xfa, 0xbd, 0x88, 0x90, 0xf0,
+  0xfe, 0xb2, 0xe4, 0xe0, 0x52, 0x19, 0x29, 0x24, 0xb9, 0x6e, 0xdd, 0x36,
+  0xba, 0xbf, 0xab, 0x6a, 0x70, 0x7d, 0xf2, 0x3a, 0x4d, 0xab, 0x83, 0x4f,
+  0xa8, 0xd0, 0x98, 0x95, 0x6f, 0x07, 0x8b, 0xbe, 0x72, 0x84, 0x86, 0xb2,
+  0xd6, 0x66, 0x31, 0x07, 0x84, 0x54, 0x02, 0x15, 0x2a, 0x56, 0xd6, 0xb3,
+  0x31, 0xb8, 0xb3, 0xef, 0xc6, 0xe0, 0x2c, 0x10, 0xcd, 0x13, 0x44, 0x15,
+  0x15, 0x03, 0x34, 0x65, 0x4d, 0x22, 0x02, 0xd6, 0xa7, 0x85, 0x07, 0xf8,
+  0x4c, 0x60, 0x24, 0x44, 0xcc, 0x15, 0xdc, 0x0a, 0xee, 0x08, 0x05, 0xb6,
+  0x32, 0xab, 0x6a, 0xce, 0xcd, 0x0d, 0x3e, 0x53, 0xb8, 0x84, 0xbc, 0x91,
+  0xfa, 0xd7, 0x28, 0x67, 0x83, 0x03, 0x6d, 0xb3, 0xa8, 0x6a, 0x01, 0x2d,
+  0x37, 0x9d, 0x0c, 0x02, 0xa7, 0xf6, 0x0c, 0x59, 0xbd, 0x55, 0x49, 0x07,
+  0x08, 0xc2, 0x1b, 0x70, 0xe8, 0xdd, 0xf1, 0xf0, 0x96, 0xa1, 0xc3, 0x1d,
+  0x22, 0x92, 0x89, 0xb5, 0x0d, 0xd8, 0xc4, 0x01, 0xf1, 0x70, 0x31, 0x30,
+  0x83, 0x24, 0xcd, 0x89, 0x77, 0x40, 0x39, 0x85, 0x48, 0x95, 0xa4, 0xf5,
+  0xc7, 0x15, 0x5a, 0x16, 0x57, 0x15, 0x99, 0x46, 0x96, 0x4a, 0x57, 0xaa,
+  0x29, 0x3d, 0x46, 0x7f, 0xda, 0x97, 0x12, 0xda, 0x9c, 0xbe, 0xb9, 0x2a,
+  0x74, 0x5c, 0xab, 0x68, 0xc3, 0x30, 0x55, 0x5b, 0x6c, 0x01, 0xf6, 0x49,
+  0x48, 0xa9, 0xef, 0xb2, 0xda, 0x42, 0xb8, 0x64, 0x41, 0xd9, 0xe5, 0x25,
+  0xa9, 0x9a, 0xe0, 0x85, 0x11, 0x9c, 0x73, 0x78, 0x3a, 0xcc, 0x16, 0x60,
+  0xc9, 0x4c, 0xd3, 0xc2, 0xc2, 0xc5, 0x2a, 0x34, 0x77, 0xa8, 0x1d, 0x82,
+  0xf7, 0xc5, 0xa8, 0x88, 0x52, 0x24, 0x3d, 0x39, 0xea, 0x1e, 0xb6, 0x05,
+  0x0a, 0x7f, 0x4c, 0x5c, 0xd9, 0x9f, 0x86, 0x43, 0x0c, 0x50, 0x9c, 0xa4,
+  0x55, 0xe1, 0x83, 0xb1, 0xb7, 0xb1, 0x94, 0x84, 0x56, 0x1d, 0x47, 0x14,
+  0x99, 0xcc, 0x28, 0x16, 0x7a, 0xdd, 0xe7, 0x05, 0x1a, 0x3e, 0x8e, 0xb0,
+  0x12, 0xb3, 0x50, 0x9a, 0x61, 0xdd, 0x2a, 0xcf, 0x9e, 0xd6, 0xd7, 0xf5,
+  0x6a, 0x84, 0xa6, 0x56, 0x44, 0x8c, 0x19, 0x9d, 0x57, 0xcc, 0x47, 0x5b,
+  0x65, 0x5c, 0xdf, 0xc6, 0x1f, 0x25, 0xed, 0x55, 0xbb, 0x39, 0xbb, 0x45,
+  0x01, 0xce, 0x5a, 0xa0, 0xd4, 0xdb, 0x9a, 0x3e, 0x81, 0xb2, 0xcf, 0x5f,
+  0x0f, 0xb3, 0xa4, 0x47, 0xd5, 0x7e, 0x7a, 0x7e, 0xda, 0x96, 0x64, 0x3a,
+  0xea, 0xab, 0x04, 0xe3, 0x63, 0x86, 0xea, 0x02, 0xe8, 0x43, 0x89, 0xb0,
+  0xa5, 0xa8, 0xb1, 0x7a, 0xb3, 0x41, 0x41, 0x5b, 0xe0, 0xbf, 0x21, 0xae,
+  0xa3, 0x9d, 0xf7, 0x03, 0xa3, 0xd2, 0x02, 0x82, 0x3b, 0xdb, 0xc3, 0x9d,
+  0xd6, 0xe8, 0x70, 0xa9, 0x53, 0x24, 0x89, 0xdf, 0x4e, 0xe4, 0x2e, 0x8c,
+  0x19, 0xcd, 0xfd, 0x0e, 0xe6, 0xf7, 0x43, 0x2f, 0xba, 0x27, 0xe8, 0x42,
+  0x22, 0x80, 0xba, 0x2d, 0x0f, 0x3c, 0x54, 0x22, 0x21, 0xb5, 0x05, 0x05,
+  0x43, 0x59, 0x1c, 0x10, 0x6f, 0x53, 0x35, 0x41, 0x49, 0x15, 0x8e, 0x08,
+  0x14, 0x98, 0x97, 0x7e, 0xa2, 0x28, 0x65, 0xe6, 0xdc, 0x78, 0xae, 0xc0,
+  0x4f, 0x8c, 0x89, 0xa9, 0x4e, 0x38, 0xdf, 0x4b, 0x79, 0x7a, 0x72, 0x76,
+  0x2e, 0xa8, 0x40, 0xcc, 0x16, 0xd2, 0xfa, 0x66, 0x68, 0x9f, 0x84, 0x1b,
+  0xd8, 0x96, 0x7f, 0x89, 0x58, 0x45, 0xe9, 0x81, 0xc3, 0xd3, 0xb3, 0xf3,
+  0x2e, 0x76, 0x94, 0x6d, 0xda, 0x07, 0x28, 0x19, 0x0c, 0xc4, 0xe7, 0x31,
+  0xc8, 0x16, 0x21, 0x6c, 0x1e, 0x9a, 0xa1, 0xfc, 0xea, 0x0c, 0x1e, 0x5e,
+  0x7a, 0xfb, 0x2f, 0x7f, 0x79, 0xa4, 0x3e, 0xe6, 0xce, 0x8b, 0xe1, 0x33,
+  0x67, 0x04, 0x64, 0xec, 0x85, 0xa4, 0xb7, 0xf7, 0x13, 0xb2, 0x8d, 0x7e,
+  0x19, 0xfc, 0x64, 0xfe, 0xfc, 0xa5, 0x67, 0xb9, 0x28, 0x85, 0xe0, 0x85,
+  0x85, 0xc6, 0x30, 0x47, 0x4d, 0x89, 0xa1, 0x47, 0x6d, 0xb0, 0x3a, 0xe4,
+  0x32, 0x72, 0xd6, 0xe2, 0xb0, 0x56, 0x62, 0x48, 0x28, 0x35, 0x62, 0xe6,
+  0x3c, 0x94, 0x71, 0x18, 0xce, 0x00, 0x42, 0x91, 0xcd, 0xba, 0x71, 0x2f,
+  0xf7, 0xb5, 0x42, 0x95, 0x80, 0x54, 0x90, 0x24, 0x20, 0x30, 0x07, 0xcc,
+  0xc7, 0x87, 0x41, 0xf0, 0x9d, 0xd8, 0x9f, 0x84, 0xcd, 0x73, 0xb6, 0xad,
+  0x11, 0xa4, 0xa8, 0x24, 0x2e, 0x87, 0x86, 0xb0, 0xd0, 0x94, 0xd9, 0xa8,
+  0x2d, 0x9b, 0xd8, 0x1a, 0x8d, 0x41, 0xac, 0xaf, 0x69, 0xc6, 0x92, 0x5e,
+  0xee, 0x21, 0xe1, 0x61, 0x8c, 0x9a, 0x8b, 0x4d, 0x10, 0xf2, 0x1a, 0xa1,
+  0xde, 0x52, 0x11, 0xa8, 0x62, 0xe3, 0xcb, 0xc5, 0x55, 0x65, 0x9a, 0x7f,
+  0x00, 0x19, 0xd5, 0x3c, 0xc5, 0xcf, 0x58, 0x42, 0xf7, 0x30, 0x35, 0x3f,
+  0xa5, 0x06, 0x93, 0x36, 0x57, 0x03, 0xa8, 0xcb, 0x5d, 0xb1, 0xca, 0x01,
+  0xf0, 0x60, 0xf7, 0x68, 0x8e, 0x57, 0x29, 0x4a, 0xc4, 0xb8, 0x4a, 0x08,
+  0x66, 0x59, 0xb6, 0x86, 0xc3, 0x2d, 0x12, 0x38, 0xb7, 0xcc, 0x8f, 0xdc,
+  0xc3, 0x89, 0xe8, 0xc2, 0x5f, 0x1b, 0x15, 0x9e, 0xfa, 0x22, 0x17, 0xb3,
+  0x54, 0x43, 0x76, 0x91, 0xa9, 0xf5, 0xdf, 0x97, 0x08, 0xd5, 0xaf, 0x48,
+  0xf6, 0x60, 0x8c, 0x1f, 0x2a, 0x0f, 0x67, 0x75, 0xbb, 0xf0, 0x14, 0x69,
+  0xd8, 0x1e, 0xd7, 0x92, 0x77, 0x42, 0xa8, 0x03, 0x36, 0x66, 0xef, 0x2e,
+  0x4d, 0x22, 0x6f, 0x14, 0x1b, 0x05, 0x08, 0x4b, 0x69, 0xf3, 0x60, 0x40,
+  0xf1, 0xd3, 0xdd, 0x76, 0x9e, 0x8d, 0x80, 0xfd, 0xac, 0xa8, 0xf2, 0x85,
+  0xcb, 0x53, 0xe3, 0x32, 0x2b, 0x60, 0x31, 0x36, 0x48, 0x74, 0xfd, 0x6c,
+  0xf7, 0xc9, 0xf6, 0xd6, 0xf3, 0xe1, 0xd3, 0xe1, 0xae, 0x0d, 0x26, 0x32,
+  0x1c, 0xcb, 0xec, 0x4f, 0x03, 0xf4, 0xa7, 0x55, 0x82, 0xb0, 0xb9, 0x51,
+  0x4a, 0xbf, 0x30, 0xbc, 0x48, 0x07, 0x2e, 0x5f, 0x86, 0x80, 0x8c, 0x76,
+  0xfc, 0x2c, 0x97, 0x61, 0xa4, 0xc2, 0x27, 0xc9, 0x86, 0x34, 0x08, 0xf5,
+  0x51, 0x2d, 0x2b, 0x09, 0xea, 0x18, 0xe7, 0x46, 0x8e, 0x6a, 0xa8, 0xa8,
+  0x13, 0x39, 0x3c, 0xb3, 0xb1, 0x2d, 0x98, 0x06, 0xd4, 0x3a, 0xcc, 0x83,
+  0x42, 0x9a, 0x22, 0x3a, 0x22, 0x0f, 0x1e, 0xde, 0x15, 0x2f, 0xce, 0x02,
+  0x99, 0x34, 0x39, 0x97, 0xe9, 0xe0, 0xba, 0x3f, 0x24, 0xd9, 0x4c, 0x8c,
+  0x6a, 0x9a, 0x7c, 0x63, 0x4e, 0xeb, 0x0d, 0x29, 0x3b, 0x21, 0x8a, 0x84,
+  0x5c, 0xf5, 0x74, 0x72, 0xac, 0xb3, 0xde, 0x4c, 0x0c, 0xa8, 0x58, 0x58,
+  0x46, 0xf8, 0x63, 0xe5, 0x03, 0xce, 0xd9, 0x60, 0xcf, 0x15, 0xe6, 0x1d,
+  0xab, 0x9f, 0xe9, 0xca, 0xcf, 0xba, 0x23, 0x21, 0x58, 0xcd, 0x94, 0xc4,
+  0xcf, 0x2e, 0x69, 0x17, 0x00, 0xe4, 0x97, 0xae, 0x8d, 0x3a, 0xce, 0x1e,
+  0xaa, 0x38, 0x2a, 0x90, 0x4f, 0xbf, 0x99, 0x20, 0x9e, 0xfc, 0xfe, 0x04,
+  0xb1, 0xfb, 0x7f, 0x09, 0xe2, 0x5f, 0x49, 0x10, 0x2f, 0x62, 0x04, 0xf1,
+  0xe4, 0x37, 0x13, 0xc4, 0xd3, 0xdf, 0x9f, 0x20, 0x9e, 0xfc, 0x5f, 0x82,
+  0xf8, 0x17, 0x12, 0xc4, 0xee, 0xf3, 0xce, 0x95, 0x41, 0x0a, 0xb9, 0xb9,
+  0xf3, 0x55, 0x2f, 0xff, 0x22, 0x72, 0xb5, 0xd6, 0x49, 0xd2, 0x85, 0x13,
+  0x93, 0x14, 0x47, 0xc1, 0xd4, 0x74, 0x4a, 0x3d, 0x2a, 0x9a, 0x11, 0xca,
+  0xa3, 0xa2, 0x38, 0x86, 0x36, 0x1d, 0x42, 0x83, 0x4d, 0x67, 0xc3, 0xe4,
+  0xd4, 0xbe, 0x45, 0x66, 0x52, 0xfa, 0x6c, 0xc9, 0x61, 0x3e, 0xd9, 0x05,
+  0xb6, 0x02, 0xc2, 0x5c, 0x1f, 0x5f, 0x42, 0xf4, 0x24, 0xbb, 0x5b, 0x90,
+  0x24, 0x81, 0xc8, 0x20, 0x8d, 0x3e, 0x41, 0x3b, 0x29, 0x96, 0xd6, 0xa6,
+  0x52, 0x69, 0x02, 0xef, 0xba, 0xb9, 0xc6, 0x09, 0x97, 0xda, 0x55, 0xc8,
+  0x5a, 0x54, 0x59, 0x58, 0xad, 0xeb, 0x8e, 0x23, 0x33, 0xfe, 0x91, 0x55,
+  0x65, 0xa2, 0x90, 0x12, 0x02, 0x04, 0x88, 0xba, 0x76, 0x2a, 0x35, 0xb9,
+  0x0f, 0xa9, 0xd7, 0x40, 0x4f, 0xfb, 0x0b, 0x2a, 0xc7, 0x32, 0xf8, 0x23,
+  0x41, 0xcc, 0xd8, 0xc4, 0xae, 0xa2, 0xe5, 0x07, 0x71, 0x0b, 0xa7, 0x3a,
+  0x05, 0xd2, 0x47, 0x82, 0xa4, 0x00, 0xda, 0x48, 0x32, 0xbd, 0xf8, 0x91,
+  0xef, 0x56, 0x55, 0xbf, 0x60, 0xf0, 0x2b, 0x1e, 0x8e, 0xad, 0x65, 0x33,
+  0x8c, 0x68, 0x3a, 0xaf, 0xb3, 0xe2, 0x5e, 0xa3, 0x8c, 0x5c, 0x6c, 0x0a,
+  0x6c, 0x0f, 0x37, 0x62, 0x3f, 0xb1, 0xd5, 0x35, 0x35, 0xd8, 0xca, 0x0e,
+  0x31, 0x1c, 0x52, 0x7b, 0xcc, 0x4d, 0x24, 0x5c, 0xf3, 0x95, 0x5d, 0x06,
+  0x89, 0xc6, 0xf4, 0xd7, 0x62, 0x03, 0xa9, 0x60, 0xea, 0x98, 0x45, 0x7f,
+  0xda, 0xe2, 0x83, 0xcb, 0xc0, 0x39, 0xdd, 0x6c, 0x21, 0xaa, 0x97, 0xe3,
+  0xbf, 0x11, 0x8f, 0x02, 0x61, 0xce, 0x52, 0x64, 0x4c, 0xb6, 0x6a, 0xfe,
+  0x52, 0xcd, 0xa2, 0xe5, 0x98, 0x85, 0xc0, 0x26, 0x6c, 0xce, 0x7c, 0x08,
+  0x97, 0xb1, 0x2d, 0xfb, 0x24, 0x74, 0xe6, 0x45, 0x9c, 0x45, 0xab, 0x57,
+  0x4b, 0xe0, 0x54, 0xb0, 0xef, 0x7a, 0x9e, 0x48, 0xd1, 0xaa, 0x25, 0x44,
+  0xc6, 0xdf, 0x2c, 0xbb, 0x9a, 0x22, 0xda, 0x6b, 0x80, 0x18, 0x3d, 0xbe,
+  0xb2, 0x2d, 0x43, 0xad, 0x7d, 0x14, 0x3e, 0xea, 0xff, 0x85, 0x7e, 0xc4,
+  0x55, 0xce, 0x16, 0xf2, 0xb6, 0x46, 0x93, 0xd2, 0xe3, 0x38, 0x1a, 0x78,
+  0x7d, 0x55, 0x07, 0xaf, 0xe8, 0x5b, 0xee, 0xe1, 0xe1, 0xb6, 0xe1, 0xa7,
+  0xff, 0x15, 0x1d, 0xbc, 0x2f, 0x14, 0xb4, 0x41, 0xc9, 0x7c, 0x61, 0x21,
+  0xa0, 0x92, 0xdb, 0xb4, 0x2a, 0x38, 0x14, 0x94, 0x8d, 0xa2, 0x62, 0x1e,
+  0x4b, 0x28, 0xfb, 0x8e, 0x90, 0x82, 0x22, 0x72, 0x74, 0x7a, 0x41, 0xb6,
+  0xbe, 0x04, 0x16, 0x3f, 0xda, 0x5b, 0x4e, 0xb5, 0x15, 0x4c, 0x57, 0x0d,
+  0x9d, 0x5c, 0x94, 0x0d, 0xa3, 0xcb, 0x52, 0x00, 0x1e, 0xe9, 0x64, 0x15,
+  0x5d, 0x10, 0x91, 0x6a, 0x00, 0xba, 0x11, 0x5a, 0xff, 0x8e, 0x9a, 0xa5,
+  0x06, 0x97, 0x0b, 0x12, 0xca, 0x05, 0x66, 0x86, 0x19, 0x9a, 0xc0, 0x8f,
+  0x29, 0xe5, 0x72, 0xcf, 0xdd, 0x10, 0x2b, 0xc4, 0xff, 0xe0, 0xc6, 0xb3,
+  0xf0, 0xb4, 0x37, 0x65, 0xee, 0xaa, 0xbc, 0x3e, 0x18, 0xa7, 0xbe, 0xba,
+  0xc4, 0x4a, 0xdf, 0x2b, 0x9d, 0x98, 0xd6, 0x7e, 0x1e, 0x4f, 0x18, 0xdf,
+  0x68, 0xad, 0x16, 0x46, 0x81, 0x24, 0xec, 0x09, 0x43, 0xc4, 0x45, 0x6a,
+  0x6b, 0x73, 0xb9, 0x6d, 0xc0, 0x28, 0xb9, 0x50, 0x10, 0x29, 0x27, 0x54,
+  0x8c, 0xb2, 0x8c, 0x21, 0x84, 0xac, 0x70, 0x83, 0x77, 0xf0, 0x1a, 0x76,
+  0x83, 0xfb, 0x64, 0xa0, 0xf4, 0x6e, 0xef, 0x95, 0xf8, 0xb5, 0xa2, 0x0b,
+  0x45, 0x57, 0x8a, 0x5d, 0x5d, 0x54, 0xdf, 0x32, 0x8c, 0x8a, 0xb4, 0x30,
+  0xa4, 0xd2, 0x31, 0x72, 0xf8, 0xc4, 0xe8, 0x59, 0x2b, 0xfc, 0xa1, 0x87,
+  0x0f, 0x9f, 0x46, 0x3b, 0x1a, 0x10, 0x29, 0x9d, 0xb5, 0xe1, 0xbc, 0xfc,
+  0x87, 0xd1, 0xe5, 0xd2, 0x61, 0x59, 0x5d, 0xc6, 0x49, 0x5e, 0x0b, 0x8d,
+  0x75, 0x1f, 0xd6, 0xa7, 0xf7, 0x09, 0x33, 0x49, 0xc8, 0x9b, 0xe2, 0x72,
+  0x0a, 0x9b, 0x8b, 0xee, 0x26, 0x22, 0x08, 0xf0, 0x5c, 0xe2, 0x97, 0xea,
+  0x6a, 0x1d, 0x7e, 0x78, 0xff, 0x6e, 0xf4, 0xfe, 0x94, 0xec, 0x1e, 0x87,
+  0xaf, 0x3f, 0x9c, 0x9e, 0x9d, 0x58, 0x92, 0x3c, 0x3f, 0x39, 0x38, 0xf1,
+  0xaa, 0x19, 0xfb, 0x94, 0x01, 0x64, 0xd3, 0x0e, 0xa6, 0xac, 0xc7, 0x4e,
+  0xee, 0x3c, 0x58, 0xa6, 0x0d, 0x1a, 0xb5, 0xc7, 0xf9, 0xbf, 0xb7, 0x95,
+  0x1d, 0x3d, 0x42, 0x83, 0x22, 0x0b, 0x33, 0x23, 0x8c, 0x5e, 0x69, 0x72,
+  0xb9, 0x84, 0x15, 0x90, 0xa3, 0x0a, 0xb5, 0x72, 0xa6, 0x85, 0x53, 0xae,
+  0xb3, 0xcc, 0x6d, 0x2e, 0x03, 0x0c, 0xdb, 0xdc, 0x4a, 0xd7, 0x53, 0x4b,
+  0x29, 0x7d, 0x16, 0x91, 0x30, 0x18, 0xfe, 0xe1, 0x71, 0x39, 0xc3, 0xa7,
+  0x08, 0xbd, 0x16, 0xbc, 0x35, 0x45, 0x80, 0xbd, 0x8a, 0x8b, 0x9c, 0xfb,
+  0x29, 0x1d, 0x44, 0x00, 0x60, 0x28, 0x6b, 0x71, 0xd1, 0x12, 0x32, 0xaa,
+  0x4c, 0xf0, 0xa6, 0x22, 0x77, 0xd5, 0x63, 0x44, 0xc4, 0x13, 0xb0, 0xcc,
+  0xf8, 0x21, 0x7e, 0x89, 0x1a, 0x31, 0xcc, 0x28, 0xe1, 0x39, 0x50, 0x98,
+  0x97, 0x51, 0x6b, 0xf4, 0xb6, 0xa3, 0xaf, 0x3a, 0xb9, 0x00, 0x92, 0x81,
+  0x44, 0x6d, 0x50, 0x70, 0xb1, 0x27, 0x5d, 0x71, 0xe8, 0xa1, 0x78, 0x10,
+  0x34, 0x9d, 0x4c, 0x4d, 0x29, 0x6b, 0x36, 0xd3, 0x93, 0x33, 0xc7, 0x05,
+  0x05, 0x47, 0xa1, 0xf6, 0xc8, 0x66, 0x64, 0x44, 0xda, 0x3d, 0x86, 0x6c,
+  0x93, 0x28, 0x5b, 0xce, 0x3b, 0x47, 0x26, 0xca, 0xc1, 0x29, 0x87, 0xda,
+  0x6b, 0xde, 0xf9, 0x9a, 0x87, 0xa5, 0x50, 0xcb, 0x2b, 0x4f, 0xb7, 0x87,
+  0xdb, 0xc9, 0xe8, 0xed, 0x57, 0x02, 0xc7, 0xf5, 0xd5, 0x88, 0x91, 0x17,
+  0xe9, 0x5a, 0xd0, 0xf7, 0x5a, 0x11, 0x57, 0x34, 0x7c, 0x33, 0x86, 0xbf,
+  0xa4, 0x2e, 0x57, 0x5a, 0x6f, 0x0e, 0x0e, 0xf3, 0x8f, 0xee, 0x6b, 0xdf,
+  0xcb, 0x05, 0x37, 0x04, 0x5c, 0xbb, 0x41, 0xd9, 0x19, 0xd9, 0x83, 0x43,
+  0x53, 0x8b, 0x93, 0x61, 0x84, 0x31, 0xdd, 0xdd, 0x0f, 0x0c, 0x63, 0xa1,
+  0x98, 0x83, 0x07, 0xb9, 0x11, 0x0c, 0xc0, 0x84, 0xff, 0x9a, 0x73, 0xa5,
+  0xb4, 0x4e, 0x96, 0x8c, 0x06, 0x0e, 0x2b, 0x5c, 0xff, 0x7c, 0x19, 0x38,
+  0x43, 0xf0, 0x28, 0x49, 0xe6, 0x5c, 0x50, 0xa4, 0x71, 0x00, 0xb4, 0xea,
+  0x0d, 0x97, 0x4b, 0x8f, 0xd1, 0x23, 0x05, 0x3e, 0x12, 0x37, 0x05, 0xf9,
+  0xc1, 0xe3, 0xea, 0xd4, 0x96, 0x4d, 0x7c, 0xaf, 0xa8, 0xce, 0xe0, 0xc0,
+  0x48, 0x2e, 0x8b, 0x0e, 0x7c, 0xe4, 0x93, 0xd8, 0x94, 0x51, 0xbe, 0xfe,
+  0x51, 0xf6, 0xbb, 0x12, 0xec, 0x30, 0xf1, 0x67, 0xaa, 0x33, 0x5b, 0xe5,
+  0x47, 0xe6, 0x49, 0xca, 0x1c, 0xdf, 0x73, 0x76, 0x25, 0xda, 0x04, 0xa2,
+  0x38, 0x6d, 0x3d, 0x2d, 0x8b, 0xd7, 0x17, 0xa3, 0xe9, 0x07, 0x13, 0x86,
+  0x33, 0x8c, 0xf1, 0xdf, 0xf9, 0x39, 0xb9, 0xdc, 0x5c, 0x55, 0xc5, 0xee,
+  0x20, 0x65, 0x57, 0x62, 0xe5, 0x55, 0xc0, 0x85, 0xd1, 0x11, 0x0d, 0x2c,
+  0x6f, 0x67, 0xc1, 0xf1, 0x1a, 0x4d, 0x11, 0x64, 0xfc, 0x38, 0x4b, 0xc2,
+  0xc8, 0x39, 0x22, 0xb9, 0x3b, 0x02, 0xf1, 0x8c, 0xfd, 0xb6, 0x45, 0xe2,
+  0xfe, 0x23, 0xab, 0x24, 0x7d, 0x45, 0x51, 0xd5, 0xfd, 0x65, 0x0a, 0x66,
+  0xb4, 0x2a, 0xbb, 0xcf, 0x9f, 0x94, 0x55, 0xe7, 0xd0, 0xd5, 0xa3, 0x89,
+  0x7e, 0x98, 0x62, 0x00, 0x91, 0xe1, 0x4d, 0xf8, 0xc1, 0x29, 0xda, 0x01,
+  0xb5, 0x66, 0xd9, 0xf5, 0xd9, 0xaf, 0x18, 0x88, 0x14, 0x5d, 0x68, 0x11,
+  0xc6, 0x83, 0x76, 0x2f, 0x1b, 0xc8, 0xfd, 0xf1, 0xd3, 0xa7, 0xd0, 0xf1,
+  0xdf, 0x73, 0x4f, 0x91, 0xb4, 0xd0, 0xda, 0x51, 0x74, 0xd1, 0x9a, 0xca,
+  0x83, 0x31, 0x1f, 0x3a, 0x0d, 0xb2, 0x30, 0xe4, 0x13, 0x0e, 0x26, 0x25,
+  0x84, 0x51, 0xfc, 0x45, 0x7f, 0x7c, 0xf1, 0x60, 0x74, 0x81, 0x0a, 0xd4,
+  0x16, 0x38, 0xd5, 0x13, 0x20, 0xa4, 0x11, 0xd6, 0x8e, 0x6d, 0xa4, 0x4c,
+  0xe0, 0xd3, 0xe5, 0x7d, 0x88, 0x89, 0x80, 0x0e, 0x5b, 0x3a, 0xa4, 0xb8,
+  0x44, 0xb8, 0x1c, 0x0f, 0x38, 0x3e, 0x8f, 0xae, 0x68, 0x5f, 0x4e, 0xae,
+  0xa7, 0x22, 0x96, 0x20, 0xc6, 0x99, 0xfe, 0xde, 0x72, 0xad, 0x74, 0x12,
+  0x44, 0x9e, 0x3e, 0x69, 0x61, 0x29, 0x4a, 0x07, 0x3b, 0xe6, 0x72, 0x7a,
+  0x89, 0xdf, 0x10, 0xe1, 0xbc, 0x47, 0xf2, 0xd8, 0x2f, 0xdd, 0x35, 0x7a,
+  0x6f, 0xad, 0x17, 0xce, 0x17, 0xcc, 0x04, 0x90, 0xd0, 0xfb, 0xba, 0x85,
+  0x5a, 0xe6, 0xd9, 0x21, 0x17, 0x0b, 0x1c, 0xdd, 0xea, 0x1a, 0x60, 0x79,
+  0xe3, 0x95, 0x00, 0x23, 0xe8, 0x15, 0xbc, 0xbc, 0xb3, 0xfd, 0xf9, 0x76,
+  0x34, 0x72, 0x0c, 0xe2, 0x81, 0x06, 0xbc, 0x4e, 0x32, 0xaf, 0x1a, 0x75,
+  0xee, 0x0a, 0x11, 0x7a, 0x81, 0x07, 0xba, 0xad, 0x14, 0x7f, 0x11, 0x13,
+  0x51, 0x10, 0x8d, 0x91, 0x8b, 0x97, 0x52, 0x3c, 0x7a, 0x16, 0x15, 0x54,
+  0xa3, 0x16, 0x6c, 0xc0, 0x80, 0x8d, 0x4a, 0x88, 0xe0, 0x98, 0xb8, 0x08,
+  0x2d, 0xee, 0x9f, 0xd6, 0xc5, 0xb3, 0x60, 0x58, 0xef, 0x9f, 0x2f, 0x89,
+  0xca, 0x83, 0x3b, 0xad, 0x4d, 0x59, 0x8e, 0x1f, 0x28, 0xb3, 0x47, 0x8e,
+  0x24, 0xce, 0x13, 0x79, 0xb0, 0xc2, 0x9e, 0xcd, 0x72, 0xe5, 0xf4, 0x08,
+  0xc9, 0x2d, 0x09, 0x2a, 0x31, 0xae, 0x2a, 0xb0, 0xf7, 0x89, 0xfd, 0xad,
+  0x1b, 0xfb, 0xf0, 0x2b, 0x7d, 0x36, 0x7c, 0xf2, 0x82, 0xa0, 0x5d, 0xc0,
+  0x56, 0xfc, 0xb5, 0x37, 0xfc, 0xa4, 0x24, 0x30, 0x52, 0x06, 0x42, 0x91,
+  0x90, 0x60, 0x5e, 0xfd, 0x55, 0xf3, 0xb0, 0x16, 0x98, 0x45, 0xa7, 0xea,
+  0x1d, 0x8c, 0x9a, 0x08, 0x4f, 0x68, 0xa7, 0x05, 0xc3, 0x16, 0x7a, 0x49,
+  0x31, 0x1a, 0x83, 0x30, 0x93, 0x92, 0xfd, 0x7d, 0x62, 0x96, 0x9c, 0x0e,
+  0xbb, 0x28, 0x0a, 0x0b, 0xb7, 0x03, 0x32, 0x38, 0x3f, 0x69, 0x3a, 0x80,
+  0xf7, 0x1f, 0xeb, 0x5d, 0x38, 0x46, 0x41, 0x6e, 0x2a, 0x5c, 0xac, 0x20,
+  0x36, 0x54, 0x90, 0x75, 0x71, 0x0f, 0xcc, 0xef, 0x7c, 0x5c, 0xd7, 0x57,
+  0xbb, 0x86, 0x1a, 0x76, 0x87, 0x9f, 0x73, 0x68, 0x25, 0xbb, 0x40, 0x57,
+  0xe0, 0x7d, 0x0a, 0x48, 0x55, 0xa7, 0xbd, 0x93, 0x45, 0x56, 0x8c, 0x46,
+  0xc7, 0x3e, 0x08, 0xce, 0xdf, 0x6d, 0x0a, 0x30, 0x27, 0xfc, 0x5a, 0x10,
+  0x2e, 0x4a, 0x6e, 0x71, 0x85, 0xd6, 0x4b, 0xcf, 0x96, 0x63, 0x8b, 0x50,
+  0x68, 0x05, 0xdc, 0x00, 0x40, 0xc7, 0xaf, 0xe7, 0xec, 0x47, 0x72, 0x91,
+  0x21, 0x4a, 0xa3, 0x39, 0xa5, 0x28, 0x0c, 0x12, 0x14, 0xfc, 0x0a, 0xdf,
+  0x11, 0x10, 0xf3, 0x0e, 0xea, 0x4c, 0xac, 0x6a, 0x74, 0x9d, 0xa5, 0x95,
+  0x51, 0xe6, 0xe1, 0x60, 0x74, 0x93, 0xfb, 0x1f, 0xd4, 0x2e, 0x8a, 0xbc,
+  0xbb, 0x2a, 0x4f, 0x91, 0x90, 0x9d, 0xad, 0x11, 0xc7, 0xed, 0x8c, 0x50,
+  0x8b, 0x83, 0x3c, 0xe2, 0xd5, 0x38, 0x6f, 0xaa, 0x54, 0x2a, 0xd0, 0x49,
+  0x55, 0x2c, 0x2f, 0xa2, 0x08, 0x90, 0x3b, 0x55, 0x42, 0xaf, 0x45, 0x0d,
+  0xd7, 0xc3, 0xe4, 0x7f, 0xa0, 0x53, 0x79, 0x9b, 0xf5, 0x24, 0x84, 0xb1,
+  0x7d, 0x75, 0xf8, 0xe6, 0xe4, 0xec, 0xb0, 0x0d, 0xfd, 0xc9, 0xe5, 0x77,
+  0xb8, 0xf6, 0x50, 0x77, 0x74, 0x7f, 0xa3, 0xc4, 0xf4, 0x16, 0x6c, 0x99,
+  0x16, 0xf2, 0x39, 0xfd, 0xfe, 0xb5, 0x17, 0x3d, 0xa0, 0xf5, 0xda, 0x3c,
+  0x54, 0xc9, 0x32, 0x52, 0x7e, 0x90, 0x42, 0x42, 0x36, 0x5d, 0xe5, 0x07,
+  0x3b, 0x3e, 0xc6, 0xdb, 0x47, 0x50, 0xa3, 0x96, 0x4b, 0x41, 0x52, 0x6c,
+  0x5d, 0x93, 0x6d, 0xdc, 0x36, 0x1a, 0x04, 0x14, 0x65, 0x54, 0xcc, 0x41,
+  0xbc, 0xb5, 0x2c, 0x96, 0xa7, 0x9c, 0xf4, 0x41, 0x99, 0x20, 0xc3, 0x24,
+  0xec, 0x48, 0xc3, 0xf9, 0xd0, 0x4b, 0x2c, 0x0e, 0x93, 0x02, 0xc1, 0xf9,
+  0x4e, 0x65, 0x66, 0x1d, 0xe4, 0x1c, 0xf4, 0x93, 0xbf, 0x71, 0x69, 0xc5,
+  0x0b, 0x2e, 0x4d, 0xe0, 0x16, 0x32, 0x22, 0x45, 0x99, 0x3e, 0x37, 0x6a,
+  0xb2, 0x6d, 0x7a, 0x43, 0xb5, 0xdf, 0x24, 0x2a, 0x36, 0xac, 0xff, 0x65,
+  0xdd, 0x99, 0x81, 0xb9, 0xb0, 0x52, 0x1c, 0xb1, 0xc0, 0x21, 0x2e, 0x6d,
+  0x3e, 0x16, 0x7b, 0xab, 0x33, 0x1e, 0x4a, 0x7a, 0xfd, 0x8a, 0x70, 0x27,
+  0x2d, 0xcd, 0xad, 0xb1, 0x05, 0x5a, 0x6c, 0x5a, 0x6e, 0x02, 0x6d, 0x85,
+  0xcf, 0x1a, 0xd7, 0x85, 0x40, 0xf8, 0x5d, 0xc0, 0x95, 0x5c, 0xac, 0x20,
+  0x4a, 0xd9, 0x4b, 0x91, 0xcd, 0x1f, 0x15, 0xdb, 0x00, 0xf8, 0xa0, 0xf5,
+  0x7d, 0xd1, 0x20, 0x04, 0x8c, 0x11, 0xa4, 0x26, 0x65, 0xc5, 0x3a, 0x6f,
+  0x48, 0xc6, 0x76, 0xbf, 0x50, 0x61, 0x83, 0xfc, 0x44, 0x2f, 0x9e, 0xbd,
+  0xa0, 0x83, 0x87, 0xe8, 0x52, 0x41, 0x20, 0x92, 0xa4, 0x4d, 0x64, 0xc3,
+  0xb6, 0xc7, 0x3c, 0x08, 0x32, 0x5d, 0xa9, 0x2d, 0x31, 0x3b, 0x8c, 0xb3,
+  0x19, 0x57, 0x77, 0x1a, 0x79, 0x8d, 0x0c, 0x1f, 0x0c, 0xe3, 0x5c, 0x15,
+  0xa1, 0xc9, 0x57, 0x8b, 0x14, 0x11, 0x34, 0xfb, 0x90, 0x5e, 0x4b, 0x20,
+  0xb8, 0x9c, 0x06, 0x6e, 0xbc, 0xaf, 0xbb, 0xff, 0xc0, 0xe8, 0x84, 0x14,
+  0x28, 0xda, 0xdf, 0x10, 0x26, 0x05, 0x7c, 0x6c, 0xfc, 0x79, 0xd3, 0xe2,
+  0x44, 0x4a, 0x01, 0x1e, 0x42, 0x80, 0x5f, 0x66, 0x2d, 0x78, 0xdb, 0x55,
+  0xcd, 0x5d, 0x80, 0x61, 0x99, 0xc5, 0x1b, 0xc7, 0xec, 0x10, 0x75, 0x53,
+  0x2e, 0x92, 0x54, 0x4b, 0xc7, 0xcb, 0xde, 0x87, 0x31, 0x3b, 0x28, 0x40,
+  0x88, 0x04, 0xd8, 0x31, 0x17, 0x02, 0x52, 0x81, 0xc1, 0x48, 0xc3, 0x05,
+  0x22, 0x31, 0x85, 0x1a, 0xe5, 0x92, 0x44, 0x34, 0x9a, 0x99, 0xab, 0xb9,
+  0x26, 0x23, 0xac, 0xe9, 0xef, 0x6d, 0x96, 0x24, 0x37, 0x84, 0x9c, 0x23,
+  0x0d, 0x38, 0xc7, 0x51, 0x16, 0x66, 0x67, 0x99, 0x99, 0xa1, 0x90, 0x10,
+  0x9c, 0x87, 0xe4, 0x8a, 0x5a, 0x01, 0xc9, 0xd1, 0x36, 0x95, 0x34, 0x35,
+  0x9a, 0xc0, 0xa0, 0x6e, 0xee, 0xd9, 0x7a, 0x9c, 0xcd, 0x09, 0xf1, 0xad,
+  0x5e, 0xa4, 0x13, 0x0e, 0x49, 0x96, 0x42, 0x95, 0x48, 0x02, 0x0f, 0x08,
+  0x98, 0x92, 0xc2, 0x89, 0x0c, 0xde, 0x58, 0x3f, 0xa6, 0xa8, 0xa7, 0xea,
+  0x34, 0x21, 0xdb, 0x86, 0x33, 0x08, 0x62, 0x71, 0x78, 0x4a, 0x2b, 0x29,
+  0x2e, 0x44, 0x17, 0xbc, 0xba, 0xac, 0x16, 0x0c, 0x0f, 0x16, 0xc3, 0x2e,
+  0xf3, 0x53, 0x10, 0xf8, 0x51, 0xe5, 0x14, 0xb6, 0x4e, 0x36, 0xbf, 0x7b,
+  0xf4, 0xba, 0x85, 0x2a, 0xc9, 0xf9, 0x65, 0xe3, 0xfb, 0x78, 0x73, 0x0e,
+  0xd3, 0x92, 0xc2, 0x66, 0xdd, 0x5d, 0x62, 0x9b, 0x72, 0x32, 0xf3, 0x58,
+  0x73, 0x4b, 0xf1, 0x5d, 0xbc, 0x39, 0x69, 0x85, 0x23, 0x6f, 0xb9, 0x0d,
+  0x6d, 0x18, 0xa4, 0xa2, 0x38, 0xfc, 0x44, 0x0c, 0x84, 0xa6, 0xac, 0xdd,
+  0x84, 0x61, 0xef, 0x57, 0xf3, 0x72, 0xca, 0x21, 0x99, 0x8f, 0xae, 0xc5,
+  0xbc, 0x9c, 0x7a, 0x6c, 0x53, 0xfc, 0x62, 0xb5, 0x8f, 0x78, 0x8d, 0x76,
+  0xc6, 0xb9, 0xcd, 0xcc, 0x89, 0x37, 0xe7, 0xa6, 0xca, 0x95, 0x9a, 0xa9,
+  0x79, 0xbc, 0xe9, 0x4f, 0xa1, 0x48, 0xca, 0x49, 0xe3, 0xcd, 0x80, 0x1e,
+  0x88, 0x37, 0xa7, 0xe1, 0x5f, 0xc1, 0xcc, 0xc8, 0x82, 0x8c, 0x8c, 0x91,
+  0x87, 0x67, 0xc6, 0x0f, 0x06, 0x9b, 0x6c, 0x3e, 0x64, 0x26, 0x1e, 0xec,
+  0xf0, 0xea, 0x99, 0xc5, 0x76, 0x18, 0x23, 0xe8, 0x6e, 0x30, 0x96, 0x8c,
+  0x51, 0x5d, 0x62, 0x8c, 0xdc, 0x19, 0x08, 0x79, 0x75, 0x24, 0x59, 0xe6,
+  0x81, 0x0d, 0x96, 0x5e, 0x82, 0x55, 0x98, 0x15, 0x52, 0xf4, 0xeb, 0x03,
+  0xe3, 0x59, 0x11, 0xb8, 0x76, 0xf3, 0xe1, 0xe1, 0x05, 0x99, 0x15, 0x5a,
+  0x89, 0x14, 0xa0, 0x89, 0x96, 0x59, 0x48, 0xaa, 0x68, 0xda, 0xae, 0x51,
+  0x2a, 0x50, 0x98, 0x2b, 0xc8, 0xde, 0xf5, 0xe7, 0x4a, 0x3e, 0x2e, 0xca,
+  0x9c, 0xcb, 0x68, 0xd8, 0x74, 0x0d, 0x7f, 0x88, 0x49, 0xcc, 0xd9, 0xee,
+  0xf9, 0xdc, 0x83, 0x29, 0xce, 0xaf, 0xc9, 0x7c, 0x6c, 0x45, 0x83, 0x0f,
+  0xab, 0xa3, 0x59, 0x41, 0xc7, 0xfc, 0xb8, 0xa3, 0x63, 0x9e, 0x95, 0x0d,
+  0xd3, 0xb6, 0x59, 0x8d, 0x8f, 0xef, 0x76, 0xbb, 0x4b, 0x7b, 0x26, 0xbb,
+  0xe3, 0x5b, 0xdc, 0x4e, 0xb5, 0x73, 0xfa, 0x55, 0x3b, 0xd6, 0x4b, 0x1f,
+  0x21, 0x94, 0x0a, 0x47, 0x46, 0xa2, 0x2b, 0x37, 0x76, 0xa1, 0x82, 0xf5,
+  0x8a, 0xa5, 0x58, 0x91, 0x17, 0xba, 0x16, 0x18, 0xfc, 0xd0, 0x9c, 0x56,
+  0xea, 0xc1, 0x76, 0xac, 0x5e, 0x1c, 0x79, 0xda, 0x0d, 0x91, 0xf9, 0xbb,
+  0x0f, 0xc8, 0x1b, 0x2e, 0xd0, 0x6a, 0x86, 0x27, 0xbd, 0x76, 0x0e, 0xc4,
+  0x34, 0xa3, 0x2a, 0xc8, 0x42, 0x0a, 0x94, 0x2f, 0xcb, 0x0d, 0x29, 0xdf,
+  0x7b, 0x88, 0x90, 0x56, 0xae, 0x71, 0x35, 0x7f, 0xe4, 0x90, 0x9b, 0x07,
+  0xdc, 0xac, 0x28, 0xdf, 0xc3, 0x9b, 0x55, 0x70, 0x32, 0xe5, 0x18, 0xaf,
+  0x58, 0xf9, 0x55, 0x23, 0x68, 0x51, 0xe1, 0x43, 0x23, 0xa1, 0x07, 0x63,
+  0x83, 0xf1, 0x8a, 0x27, 0x93, 0xf7, 0xfc, 0xde, 0xe3, 0x94, 0xf1, 0xe6,
+  0x64, 0xb8, 0xee, 0x3d, 0x59, 0x9e, 0xbe, 0x85, 0x89, 0x13, 0xd3, 0x09,
+  0x69, 0xcd, 0x21, 0x6d, 0xe8, 0x01, 0xff, 0x55, 0x0c, 0x82, 0xd4, 0xb5,
+  0x99, 0x77, 0x08, 0x07, 0x15, 0x12, 0x57, 0x61, 0xff, 0x7a, 0x89, 0x1f,
+  0xd1, 0xcc, 0xb7, 0x2d, 0xd5, 0xb0, 0xb6, 0xc8, 0x2f, 0x82, 0xf4, 0x08,
+  0x84, 0xab, 0x10, 0x3b, 0xa1, 0x1a, 0x0b, 0x12, 0x21, 0xbc, 0x41, 0x01,
+  0xe7, 0x9c, 0xe9, 0x44, 0x32, 0x02, 0x81, 0x15, 0x04, 0x97, 0xba, 0x59,
+  0x9b, 0x4d, 0x0d, 0x06, 0x46, 0xd3, 0x3b, 0xc3, 0x9d, 0xbe, 0x6a, 0x63,
+  0x22, 0x2f, 0x69, 0xe8, 0x10, 0x7d, 0x92, 0x0a, 0xa0, 0x4a, 0x02, 0x97,
+  0x4c, 0xd7, 0xce, 0x70, 0x46, 0xfd, 0xd6, 0x61, 0x3e, 0x23, 0x02, 0x8b,
+  0x9c, 0x24, 0x4f, 0x85, 0x12, 0x82, 0x05, 0xdc, 0x1e, 0x3c, 0x7d, 0xf1,
+  0xa2, 0x75, 0xa5, 0xf9, 0x7a, 0xf3, 0xb3, 0xed, 0x6d, 0x2e, 0x1f, 0xd1,
+  0x7d, 0xcd, 0x7c, 0x31, 0x78, 0x81, 0x17, 0xdb, 0xaf, 0x71, 0xe9, 0xa2,
+  0xd5, 0xef, 0x0d, 0xe8, 0x9b, 0x48, 0x77, 0xb0, 0xa7, 0xac, 0x7c, 0xeb,
+  0x05, 0x75, 0x17, 0x79, 0x0b, 0x0f, 0xf3, 0x3a, 0x96, 0x17, 0x17, 0x14,
+  0x2a, 0x4b, 0x4f, 0x82, 0xf3, 0x1b, 0x61, 0xf0, 0x36, 0xad, 0xa6, 0xe1,
+  0x74, 0xb7, 0xfb, 0x83, 0x9d, 0x55, 0xd3, 0x85, 0x45, 0x80, 0x46, 0x82,
+  0xed, 0x24, 0x05, 0xca, 0x08, 0xcf, 0x1c, 0xfe, 0xd6, 0x6d, 0x68, 0xc7,
+  0x8c, 0x68, 0xe7, 0xc5, 0x8b, 0x3e, 0x8d, 0xec, 0xd9, 0x8b, 0x17, 0x2b,
+  0x43, 0x23, 0xbc, 0x6e, 0x6e, 0x4b, 0x67, 0x7e, 0xa2, 0xd7, 0x1d, 0xcd,
+  0xd4, 0x24, 0xa3, 0xc7, 0xfb, 0xa1, 0x6f, 0x92, 0x57, 0xa8, 0x80, 0xe1,
+  0x59, 0x66, 0x5c, 0x2e, 0x55, 0x27, 0x7d, 0x9b, 0x12, 0xc2, 0xee, 0x55,
+  0x1d, 0x34, 0xea, 0x45, 0x18, 0xf1, 0x85, 0x0c, 0x3c, 0x75, 0x16, 0x05,
+  0xc5, 0x2d, 0x4f, 0xd8, 0xee, 0x78, 0x99, 0x37, 0x0e, 0xe1, 0xa8, 0x4e,
+  0x36, 0xcc, 0x66, 0x33, 0xa8, 0x3a, 0x57, 0x6d, 0x90, 0x80, 0x98, 0x75,
+  0x84, 0xd9, 0x33, 0xf8, 0x2a, 0xfd, 0x51, 0x2e, 0xd6, 0x83, 0x90, 0xa9,
+  0x6c, 0x46, 0xca, 0x97, 0x5c, 0x05, 0xfc, 0xc2, 0x00, 0x4f, 0xca, 0x69,
+  0x81, 0x2a, 0x77, 0x27, 0x85, 0x7c, 0x29, 0x96, 0xcf, 0xef, 0x3c, 0x18,
+  0x3d, 0x1b, 0x5a, 0xd9, 0x9c, 0xae, 0xe9, 0xa6, 0x1c, 0x59, 0xef, 0x96,
+  0x61, 0xbd, 0xf6, 0x2a, 0xc8, 0xaa, 0x75, 0xae, 0xa0, 0x7d, 0x08, 0x4a,
+  0x20, 0xb0, 0x69, 0x76, 0x9a, 0x69, 0x9d, 0xc6, 0x56, 0x75, 0xee, 0xf5,
+  0x5a, 0x0c, 0x33, 0xcb, 0xea, 0x81, 0xfa, 0x48, 0x92, 0x94, 0x03, 0x2f,
+  0x27, 0x29, 0xac, 0xb7, 0x69, 0x95, 0x29, 0x9c, 0x57, 0x71, 0x6f, 0x0f,
+  0xb7, 0x2d, 0xbf, 0x2e, 0x49, 0x8e, 0x94, 0x55, 0x1d, 0x83, 0x16, 0xd0,
+  0x92, 0x9a, 0xec, 0x08, 0xd5, 0x12, 0xdc, 0x69, 0xe3, 0xd2, 0x4c, 0x5d,
+  0x3a, 0x06, 0x00, 0xcb, 0x88, 0x35, 0xf0, 0x12, 0x84, 0x15, 0xd1, 0xa8,
+  0xea, 0x99, 0x5a, 0x64, 0x2f, 0x33, 0xb6, 0x2c, 0x72, 0xfd, 0x30, 0x45,
+  0x50, 0x09, 0xc3, 0x97, 0x88, 0xf3, 0x60, 0x3f, 0x99, 0x09, 0x49, 0xd2,
+  0x83, 0xab, 0x02, 0xaa, 0x56, 0x05, 0x98, 0xaf, 0xb9, 0x2c, 0x1b, 0x70,
+  0x80, 0x65, 0x6b, 0x83, 0xe0, 0x76, 0xda, 0x69, 0xde, 0xe3, 0x64, 0xc3,
+  0x0b, 0xaf, 0x03, 0x85, 0x7a, 0xba, 0xb6, 0x2d, 0xdb, 0x57, 0x72, 0xb0,
+  0x18, 0x61, 0x1b, 0x87, 0x9a, 0x1f, 0x4a, 0x58, 0x61, 0xb7, 0xac, 0x0d,
+  0x2d, 0xbb, 0x6b, 0x50, 0x6f, 0x13, 0x23, 0xd7, 0x1b, 0x69, 0x74, 0xf4,
+  0x3f, 0x0f, 0x3f, 0x61, 0xb2, 0xf4, 0x99, 0x87, 0x73, 0x40, 0xaf, 0x45,
+  0x0b, 0xa5, 0x30, 0xa0, 0x86, 0x77, 0x5c, 0x9d, 0x02, 0xee, 0x6d, 0x21,
+  0xc8, 0x0b, 0xd8, 0x21, 0x16, 0x8b, 0x3d, 0x5c, 0xc3, 0x74, 0xbe, 0x88,
+  0xa0, 0x76, 0xf4, 0x15, 0x04, 0x42, 0x01, 0xd9, 0xc9, 0xc8, 0x61, 0x23,
+  0x10, 0x25, 0x69, 0x29, 0x14, 0x46, 0x3c, 0x38, 0x11, 0xa6, 0x09, 0x2a,
+  0x3f, 0x0f, 0xa4, 0x0a, 0x5a, 0x00, 0xea, 0xcb, 0xb7, 0xd2, 0xd3, 0x55,
+  0x6c, 0x94, 0x52, 0x3c, 0x1e, 0xc5, 0xfb, 0x61, 0x78, 0x3f, 0x3f, 0xcb,
+  0xdf, 0xca, 0x43, 0x3c, 0xbf, 0x59, 0xa6, 0x48, 0x64, 0xf0, 0x01, 0xfa,
+  0x75, 0x16, 0x23, 0x99, 0x82, 0xb5, 0xb9, 0xf1, 0x2b, 0x4e, 0xc5, 0xe7,
+  0xae, 0x01, 0x1a, 0xcc, 0x1a, 0x04, 0x03, 0x10, 0xd7, 0x0e, 0x55, 0x1e,
+  0xf1, 0x27, 0x5a, 0xc1, 0x99, 0x1f, 0xef, 0xda, 0x09, 0x81, 0xa8, 0x05,
+  0xeb, 0x02, 0xc1, 0x2e, 0xb9, 0x4c, 0xab, 0x3a, 0x2c, 0xea, 0x96, 0x5d,
+  0x4e, 0x7d, 0xac, 0xda, 0xf6, 0x2a, 0xdc, 0xda, 0x30, 0x68, 0x41, 0xdf,
+  0x14, 0x9f, 0x8e, 0x8d, 0xd1, 0x4b, 0x67, 0x62, 0xb6, 0x20, 0xd0, 0x55,
+  0xf8, 0x3b, 0x2c, 0x5e, 0x04, 0x8c, 0x68, 0x45, 0xc8, 0xcb, 0x28, 0x49,
+  0xdd, 0x2b, 0x70, 0x0a, 0x58, 0x08, 0xa4, 0x2d, 0xe3, 0xfc, 0xe9, 0xc1,
+  0x95, 0xf4, 0x48, 0xb1, 0x4d, 0x92, 0x85, 0x9f, 0x03, 0x71, 0xba, 0x47,
+  0xc3, 0xf4, 0xdb, 0xd0, 0xd2, 0xf5, 0xcd, 0x4a, 0xdc, 0x06, 0x85, 0x84,
+  0x5b, 0x9e, 0x7f, 0x0f, 0x7e, 0x66, 0x90, 0x06, 0x0e, 0x9e, 0x96, 0xf9,
+  0x8a, 0x2d, 0x98, 0xed, 0x30, 0x45, 0xf1, 0x03, 0x20, 0x12, 0x8b, 0xca,
+  0x34, 0x83, 0x1b, 0x03, 0x3d, 0x22, 0x66, 0xaa, 0x9d, 0x66, 0xa9, 0x22,
+  0x5f, 0x99, 0x4d, 0x35, 0xe4, 0x1a, 0x40, 0xe0, 0x24, 0xb7, 0x59, 0x95,
+  0x39, 0x18, 0x78, 0xc4, 0xe8, 0x9a, 0xd3, 0x37, 0x4c, 0x46, 0xa5, 0x79,
+  0x3e, 0x52, 0xe8, 0x51, 0x33, 0x0f, 0x5b, 0xd8, 0xd0, 0x18, 0x8e, 0xad,
+  0x3d, 0x87, 0xf8, 0x30, 0xb6, 0x00, 0xb7, 0xe7, 0x1b, 0x81, 0x93, 0x24,
+  0x4b, 0xed, 0x38, 0xb3, 0xbb, 0x6a, 0x61, 0x54, 0x39, 0x96, 0xb9, 0x37,
+  0x30, 0x74, 0x36, 0xe8, 0x09, 0x0a, 0x04, 0x21, 0x5d, 0x7a, 0xcd, 0x3d,
+  0x94, 0x52, 0xbd, 0xf3, 0xa2, 0x1d, 0xe9, 0x44, 0xb5, 0x46, 0x67, 0x46,
+  0x58, 0x7c, 0x49, 0xfe, 0x47, 0xb8, 0x1f, 0xf7, 0x56, 0x64, 0xdf, 0x9e,
+  0xaa, 0x53, 0x2b, 0x25, 0x5b, 0xb2, 0xe1, 0xa1, 0x73, 0x2f, 0x1f, 0xf3,
+  0x82, 0xe5, 0x41, 0x3b, 0x51, 0x64, 0x3f, 0xda, 0x8c, 0xd2, 0x45, 0x9a,
+  0x07, 0x59, 0x64, 0x0e, 0x67, 0xdb, 0xa5, 0xca, 0x81, 0x3b, 0xa8, 0xdb,
+  0xc3, 0x06, 0xe0, 0x6f, 0xd4, 0x9b, 0x9a, 0x82, 0xbb, 0x5a, 0x70, 0xb7,
+  0x23, 0x61, 0x14, 0x57, 0xa9, 0x8f, 0x03, 0x73, 0x83, 0xad, 0xb6, 0x5c,
+  0x68, 0x66, 0x94, 0x4c, 0x7a, 0xea, 0x95, 0x78, 0x0a, 0xc0, 0xe7, 0xc4,
+  0x89, 0x72, 0x40, 0x21, 0xf5, 0x04, 0x08, 0x90, 0x03, 0x46, 0xa1, 0x64,
+  0xa0, 0x80, 0xad, 0xac, 0x99, 0x6c, 0x31, 0xa6, 0x63, 0x02, 0x0a, 0x2f,
+  0x52, 0x4e, 0x0e, 0x56, 0xf5, 0xa0, 0x9b, 0xd0, 0x57, 0x74, 0x6c, 0xe3,
+  0xe4, 0xe1, 0x61, 0xfe, 0xe1, 0xbb, 0x6b, 0x5d, 0x2e, 0xad, 0x07, 0x82,
+  0x12, 0xb1, 0xd0, 0x6a, 0x0a, 0x9b, 0x5d, 0x6e, 0xeb, 0xea, 0x54, 0xd8,
+  0xc4, 0x76, 0x39, 0x3c, 0x7a, 0x81, 0x91, 0xa2, 0x39, 0x17, 0x30, 0x56,
+  0xa6, 0xb4, 0xc8, 0xbc, 0x6b, 0xc7, 0xc6, 0x18, 0xb7, 0x11, 0xeb, 0x2c,
+  0x7a, 0xaf, 0x2c, 0x9b, 0x8c, 0x23, 0x88, 0x79, 0x9d, 0xcb, 0x20, 0x38,
+  0x5e, 0x58, 0xf1, 0x91, 0x00, 0x0f, 0xf7, 0xf1, 0x11, 0xa5, 0x0e, 0x14,
+  0x86, 0x61, 0x05, 0x12, 0xfe, 0x88, 0x5b, 0x16, 0xfb, 0x68, 0xb8, 0x71,
+  0xb2, 0xb5, 0x0f, 0xc7, 0x7f, 0xee, 0x0c, 0x9f, 0xb4, 0xcf, 0x00, 0xe9,
+  0x84, 0xb1, 0x2a, 0x4f, 0x47, 0x5c, 0x07, 0x10, 0xdc, 0x90, 0x4b, 0x53,
+  0x71, 0x64, 0x24, 0x12, 0x42, 0xc9, 0xca, 0x90, 0x49, 0x50, 0x15, 0x3b,
+  0x19, 0xb1, 0x66, 0xb4, 0x4e, 0x5c, 0x0f, 0x2b, 0x08, 0x12, 0x72, 0xee,
+  0x23, 0x45, 0xfc, 0xe1, 0xae, 0x71, 0x1d, 0x3b, 0x95, 0x88, 0x67, 0x2d,
+  0xa6, 0x63, 0xe2, 0x64, 0x88, 0xcb, 0x5a, 0x2e, 0x86, 0x61, 0x0d, 0xaa,
+  0xc6, 0x95, 0xb5, 0x96, 0xf7, 0x4d, 0xf7, 0xdb, 0x7e, 0xf2, 0x3a, 0x44,
+  0x3b, 0xc9, 0x61, 0xa8, 0xbd, 0x12, 0xb2, 0xe1, 0xbe, 0x09, 0x27, 0x25,
+  0x07, 0x96, 0x9d, 0x2f, 0x4f, 0x97, 0x13, 0x48, 0x19, 0xd0, 0x73, 0xcf,
+  0x2c, 0x88, 0x54, 0x18, 0xed, 0x73, 0x0e, 0x39, 0x44, 0xb2, 0xa7, 0x77,
+  0x77, 0xe1, 0x4e, 0xb0, 0xb8, 0x0b, 0x88, 0x66, 0x04, 0xc8, 0xf2, 0x15,
+  0xf4, 0xec, 0xee, 0xae, 0xfd, 0x65, 0x1c, 0x4b, 0x5a, 0x02, 0x5e, 0xc8,
+  0x28, 0xc7, 0x55, 0x30, 0x4b, 0x59, 0xad, 0x34, 0xb2, 0x8e, 0xac, 0x29,
+  0xdd, 0xa6, 0x08, 0xdb, 0x0f, 0x9d, 0x41, 0x50, 0xff, 0x24, 0x40, 0xc1,
+  0xdd, 0x11, 0x84, 0x41, 0x79, 0x65, 0x4e, 0x24, 0xd7, 0xc9, 0x12, 0x8a,
+  0x97, 0x06, 0xcd, 0xba, 0x2d, 0x35, 0x2b, 0x39, 0xc0, 0x02, 0xcb, 0x65,
+  0xd9, 0xa9, 0x46, 0xcd, 0xb2, 0x68, 0x72, 0xe4, 0x40, 0xa2, 0x2c, 0xb0,
+  0x69, 0x61, 0xc7, 0x2c, 0x7f, 0x5e, 0x2c, 0x9b, 0x4c, 0xf1, 0x5e, 0xd1,
+  0xa7, 0x9e, 0xc7, 0xd8, 0xb2, 0xcf, 0x60, 0xe5, 0xd7, 0x50, 0x0a, 0xd4,
+  0x7f, 0xf6, 0x00, 0xd1, 0x30, 0x2e, 0x41, 0x1f, 0xb6, 0x29, 0xcb, 0x58,
+  0x89, 0x01, 0x5e, 0x8d, 0x1d, 0x66, 0x7b, 0x09, 0x49, 0xe6, 0x44, 0x76,
+  0x67, 0x56, 0x9b, 0x43, 0xcc, 0x13, 0x60, 0x0e, 0x18, 0xc5, 0x94, 0x38,
+  0xd7, 0x65, 0x59, 0x99, 0x4d, 0x9d, 0x0f, 0x3d, 0x50, 0xbb, 0x20, 0x4e,
+  0x83, 0xbb, 0xb2, 0xe5, 0x82, 0xcd, 0x36, 0x70, 0x99, 0x30, 0x48, 0x86,
+  0x65, 0x23, 0x42, 0xaa, 0x2d, 0x71, 0x26, 0x77, 0x81, 0x8e, 0xfb, 0xa1,
+  0xab, 0x68, 0xd7, 0x3f, 0x86, 0xbf, 0x7f, 0xea, 0xad, 0xb7, 0x46, 0x0f,
+  0x14, 0x39, 0x76, 0x49, 0xf4, 0xf5, 0x2c, 0xcb, 0x16, 0xba, 0x62, 0xe9,
+  0x9c, 0x6a, 0xc7, 0xeb, 0x69, 0xd4, 0xc3, 0x08, 0x29, 0x80, 0xa9, 0x10,
+  0xc7, 0x7e, 0xd5, 0x01, 0xc7, 0xed, 0x4d, 0x8e, 0x27, 0x45, 0x70, 0x89,
+  0x72, 0x11, 0x14, 0x5b, 0xb1, 0xc2, 0xcc, 0xea, 0x13, 0xe9, 0xb6, 0x0c,
+  0x63, 0xb1, 0xdb, 0x66, 0x89, 0x46, 0x16, 0x7b, 0xb3, 0x9b, 0x81, 0xb5,
+  0x16, 0xc9, 0xb3, 0x80, 0x38, 0x08, 0x43, 0xe1, 0x25, 0xe4, 0x1e, 0xe1,
+  0x7e, 0xc0, 0x08, 0xe0, 0xea, 0xf2, 0x08, 0x1d, 0xf0, 0x4a, 0x8b, 0xf3,
+  0x0a, 0x86, 0xac, 0x16, 0x09, 0x47, 0x2d, 0x60, 0x1f, 0x87, 0x96, 0xe1,
+  0x4b, 0x66, 0xfe, 0xe0, 0xfd, 0xa0, 0xa8, 0xa0, 0x04, 0xf3, 0xbf, 0x86,
+  0x20, 0x1e, 0x2d, 0x7c, 0x7d, 0x2e, 0xc7, 0x8e, 0xaf, 0x1f, 0x61, 0xf6,
+  0x28, 0x81, 0xa7, 0x2c, 0xd9, 0x07, 0x28, 0xb5, 0x5b, 0xae, 0x0a, 0x54,
+  0x60, 0x07, 0x13, 0xce, 0xa2, 0xa3, 0x02, 0x50, 0x5b, 0x4a, 0xd3, 0x20,
+  0x20, 0xa5, 0x8d, 0x1a, 0xf1, 0xe0, 0xe8, 0x6f, 0x93, 0x3e, 0x9e, 0x95,
+  0x14, 0x84, 0x5c, 0x5b, 0xc5, 0xab, 0x0a, 0x90, 0xcf, 0x50, 0xd0, 0x87,
+  0xb9, 0xcd, 0xd4, 0x2f, 0xe4, 0x29, 0x75, 0x3c, 0xdf, 0x95, 0x84, 0x42,
+  0x62, 0xab, 0x74, 0xd9, 0x76, 0xe4, 0xcd, 0x80, 0x4b, 0x73, 0x3b, 0x5e,
+  0x01, 0xc0, 0x7e, 0x1b, 0x30, 0x4b, 0x86, 0x0d, 0x78, 0x19, 0xb8, 0x72,
+  0xaf, 0xa4, 0xe0, 0x06, 0x5d, 0x71, 0x91, 0xb2, 0xdc, 0x60, 0xca, 0xe4,
+  0xb8, 0x44, 0xd4, 0x03, 0x4d, 0x27, 0x52, 0x74, 0x14, 0x1b, 0x60, 0xda,
+  0xc8, 0xcb, 0x29, 0xe2, 0x25, 0xa4, 0xf2, 0x60, 0x90, 0xa8, 0x28, 0x40,
+  0x97, 0x32, 0x98, 0x75, 0xc0, 0xdc, 0x70, 0xd1, 0x45, 0x34, 0xd1, 0x17,
+  0x14, 0xdc, 0x56, 0x45, 0xf3, 0x61, 0x62, 0xeb, 0x12, 0xc6, 0x61, 0xfb,
+  0x0d, 0x0b, 0x03, 0xed, 0x36, 0x6c, 0xf5, 0xd0, 0x7a, 0xd9, 0x96, 0xd5,
+  0xfe, 0x0b, 0x99, 0x54, 0x4d, 0x03, 0xaf, 0xf3, 0x59, 0x98, 0xe9, 0x35,
+  0xca, 0x67, 0xa2, 0x8b, 0xfd, 0x7d, 0x99, 0x53, 0xb1, 0x49, 0xc0, 0xce,
+  0xbc, 0x2e, 0x69, 0xf3, 0x6b, 0x49, 0x13, 0xb8, 0x84, 0x14, 0xc6, 0x21,
+  0x44, 0xd0, 0x04, 0x84, 0xaf, 0x98, 0xee, 0x03, 0x15, 0x96, 0xa0, 0xfe,
+  0x87, 0x89, 0xad, 0xbe, 0x85, 0xca, 0x2b, 0x73, 0x73, 0x4b, 0x0d, 0x6d,
+  0x01, 0x11, 0xc3, 0x13, 0x22, 0xb5, 0x75, 0x60, 0xdd, 0xa9, 0xaf, 0x43,
+  0x09, 0xb4, 0xdf, 0x4a, 0x5b, 0x82, 0xd7, 0x5e, 0xfc, 0x10, 0x0d, 0x65,
+  0xc2, 0x19, 0xcd, 0x6f, 0x8b, 0x71, 0x46, 0xcd, 0x15, 0x49, 0x15, 0x1f,
+  0xd1, 0x92, 0xc6, 0xcb, 0x77, 0xc9, 0xa6, 0x15, 0x42, 0x5a, 0xa7, 0xf5,
+  0x6c, 0x90, 0x77, 0x09, 0x9f, 0x41, 0xb4, 0x5d, 0x84, 0x8e, 0x57, 0x54,
+  0x8d, 0x72, 0x5f, 0x47, 0xfb, 0x84, 0x82, 0x1f, 0x40, 0x6b, 0x3f, 0xc0,
+  0x6e, 0x9e, 0xec, 0xb4, 0x55, 0xa1, 0x5f, 0x17, 0xb3, 0xaa, 0xf0, 0x85,
+  0xad, 0xc8, 0xbf, 0x87, 0xc2, 0x55, 0x57, 0xd4, 0xcd, 0xf0, 0xa2, 0x52,
+  0x5b, 0x11, 0xc7, 0xc1, 0x88, 0x34, 0xe2, 0x34, 0x11, 0xb8, 0x73, 0x31,
+  0x3d, 0xc5, 0xa2, 0x52, 0xb7, 0xd8, 0xae, 0xf7, 0x31, 0x61, 0xa8, 0x23,
+  0x10, 0xa0, 0xa1, 0xa7, 0x01, 0x68, 0x67, 0xa5, 0xd1, 0x48, 0x03, 0x90,
+  0x06, 0x94, 0x26, 0xdb, 0x24, 0xbe, 0x84, 0x09, 0x6a, 0xd4, 0x8c, 0x31,
+  0x2d, 0x2b, 0xc1, 0x38, 0xa0, 0x91, 0x6a, 0x73, 0xad, 0x48, 0xf6, 0xba,
+  0x9e, 0x71, 0x8c, 0x98, 0xc2, 0x33, 0x32, 0x54, 0x23, 0x83, 0x34, 0x9e,
+  0x57, 0xf7, 0x1a, 0x0b, 0x4a, 0x38, 0x1e, 0xe7, 0xc7, 0x23, 0xcd, 0x6c,
+  0x83, 0x22, 0xa5, 0x46, 0x93, 0x90, 0xdf, 0x52, 0x8e, 0x37, 0x6b, 0x0d,
+  0xb0, 0xdd, 0x22, 0x9d, 0x24, 0xf3, 0xde, 0x50, 0xb6, 0x28, 0x06, 0x6a,
+  0xad, 0x91, 0x26, 0xf6, 0xc3, 0xee, 0x39, 0xe4, 0xae, 0x7d, 0xcb, 0x0c,
+  0x63, 0xd2, 0x98, 0xb1, 0x0f, 0x14, 0x2c, 0x87, 0xf8, 0x22, 0x66, 0x63,
+  0x18, 0xf9, 0xdf, 0xd9, 0x60, 0x20, 0x8a, 0xcf, 0x20, 0xb0, 0xfd, 0x34,
+  0x09, 0x41, 0xa8, 0xcf, 0xe0, 0xc9, 0xcf, 0x8a, 0x49, 0x75, 0xdf, 0xaa,
+  0xfa, 0x32, 0xfd, 0x88, 0xd2, 0xc2, 0xed, 0x50, 0x1e, 0x42, 0x83, 0x27,
+  0x56, 0x4c, 0x05, 0x50, 0xa4, 0xe2, 0xb4, 0xf9, 0xc4, 0x8e, 0xb1, 0xcd,
+  0xcd, 0x76, 0xb0, 0xfb, 0xdd, 0xe6, 0xd2, 0xa6, 0x55, 0x4a, 0x81, 0xd4,
+  0x30, 0x66, 0x06, 0xaa, 0x8c, 0x01, 0x13, 0x9f, 0x6f, 0xfa, 0x71, 0x26,
+  0xd9, 0xb7, 0x8c, 0x38, 0x17, 0xf2, 0xec, 0x8b, 0x25, 0x6c, 0xc5, 0x92,
+  0xab, 0xde, 0xd9, 0x6d, 0xac, 0x4f, 0x24, 0x46, 0xd0, 0x30, 0x72, 0x26,
+  0x00, 0xa1, 0x00, 0x21, 0x01, 0xb3, 0x99, 0x92, 0x9c, 0xee, 0x53, 0x80,
+  0x64, 0xc3, 0xaf, 0xd8, 0xff, 0x73, 0xe6, 0x3e, 0x8d, 0xd8, 0x87, 0x3e,
+  0x76, 0xdb, 0xed, 0x46, 0x7f, 0x74, 0x0d, 0xf4, 0x95, 0xbb, 0xe1, 0xb6,
+  0x43, 0xf6, 0x03, 0x61, 0x5e, 0x8e, 0x6a, 0x40, 0x23, 0x1b, 0xe9, 0x4a,
+  0x31, 0xe8, 0xd9, 0xf0, 0xd9, 0xe6, 0xf0, 0x63, 0xb7, 0x45, 0x2f, 0x16,
+  0xdd, 0x94, 0xb0, 0x46, 0x43, 0xfa, 0xc8, 0x96, 0x80, 0x85, 0x11, 0x74,
+  0x6a, 0x90, 0x4d, 0xc2, 0x66, 0xd4, 0x16, 0xbf, 0x6b, 0x5a, 0x59, 0x38,
+  0x74, 0x7d, 0xa2, 0x2a, 0x5c, 0x8a, 0xfc, 0x1e, 0x00, 0x4d, 0x4a, 0xee,
+  0xd6, 0xc5, 0x2c, 0xbd, 0x0d, 0xc7, 0x42, 0xeb, 0x6f, 0x1a, 0x65, 0x8c,
+  0x0e, 0xb3, 0xda, 0x7e, 0x9c, 0x76, 0xed, 0xa8, 0xf7, 0xab, 0xc3, 0xfd,
+  0xd1, 0xf9, 0xb0, 0x7b, 0xd1, 0x06, 0xc9, 0xa3, 0xb4, 0x7d, 0xce, 0xa4,
+  0xad, 0x95, 0x50, 0x8c, 0xb4, 0x4a, 0x61, 0x2d, 0x82, 0x35, 0x4b, 0xc3,
+  0xe3, 0xd1, 0x69, 0xfb, 0xc4, 0xa7, 0x23, 0x80, 0x7f, 0x10, 0x8c, 0xe1,
+  0xe7, 0x1d, 0xe7, 0x33, 0x9a, 0x81, 0x19, 0x97, 0xb9, 0x70, 0xe6, 0x92,
+  0x87, 0x53, 0x53, 0x7d, 0xc9, 0x72, 0x46, 0xa6, 0x20, 0xee, 0xa6, 0x53,
+  0x39, 0x25, 0x28, 0x4c, 0xbe, 0x7f, 0xf6, 0xee, 0xe8, 0xdd, 0xd7, 0x7b,
+  0x2d, 0x49, 0x61, 0x46, 0x40, 0xc1, 0x12, 0x9a, 0xc0, 0x65, 0x66, 0x78,
+  0xb5, 0xd8, 0x6a, 0x3e, 0xbe, 0xf7, 0x0a, 0x28, 0x75, 0x4f, 0xd5, 0x2c,
+  0xbd, 0xd4, 0xbb, 0x98, 0x0d, 0x92, 0x52, 0xc9, 0x0e, 0x80, 0x3b, 0x1d,
+  0x32, 0xed, 0x64, 0x33, 0xd2, 0x26, 0xc3, 0x42, 0x78, 0x53, 0x5e, 0x07,
+  0x21, 0xb0, 0xdf, 0xe7, 0x05, 0x76, 0x79, 0xf5, 0x26, 0x5b, 0x5d, 0x72,
+  0x62, 0xf8, 0x2a, 0xa7, 0xa9, 0x83, 0xdc, 0x6e, 0x56, 0x61, 0x37, 0xa0,
+  0xda, 0x28, 0x09, 0x1b, 0xbf, 0x7e, 0x0d, 0xc2, 0x92, 0x43, 0x5e, 0x49,
+  0xa9, 0x5f, 0xb3, 0x06, 0x4f, 0x3b, 0xe5, 0xbc, 0xe9, 0x5e, 0xac, 0x9f,
+  0xb2, 0x99, 0xf3, 0x81, 0x34, 0x0b, 0xcf, 0xaa, 0x46, 0x51, 0x70, 0x27,
+  0x07, 0xdf, 0x8e, 0x9e, 0x3e, 0x9a, 0x5f, 0xc1, 0x6f, 0x84, 0xc0, 0x0c,
+  0x8f, 0x64, 0x58, 0xb4, 0x39, 0xf3, 0x33, 0xdf, 0x1a, 0x1e, 0x65, 0x2d,
+  0xae, 0x6a, 0x1c, 0xd9, 0xc1, 0xc8, 0xc4, 0x99, 0x97, 0x4b, 0x5b, 0xb5,
+  0xc8, 0x83, 0xb8, 0xec, 0x6b, 0x09, 0xb9, 0x48, 0x4d, 0x68, 0x2d, 0x28,
+  0xe7, 0x95, 0x90, 0x0b, 0x02, 0x23, 0x25, 0x73, 0x72, 0x77, 0x67, 0xf8,
+  0x59, 0xbf, 0x2b, 0xe8, 0x1a, 0x6e, 0x69, 0x24, 0xff, 0xd9, 0x92, 0x7a,
+  0xe6, 0x14, 0x4b, 0x35, 0xde, 0xda, 0x40, 0xdd, 0x88, 0x44, 0x52, 0x3f,
+  0xb5, 0xa9, 0x1b, 0x84, 0xe9, 0xe6, 0x86, 0x2a, 0xdb, 0x9b, 0xca, 0x53,
+  0x7b, 0x5b, 0x5b, 0xce, 0x96, 0xc9, 0x61, 0xa5, 0xc3, 0x4f, 0xa7, 0x0f,
+  0x72, 0x9f, 0xe9, 0x6f, 0x22, 0x8a, 0xf4, 0xe3, 0xa8, 0x62, 0x85, 0x73,
+  0xf7, 0xa3, 0xa9, 0xe2, 0xf3, 0x55, 0x17, 0x8e, 0x4c, 0xff, 0x57, 0xd0,
+  0x04, 0x2e, 0xa1, 0xff, 0xcd, 0xa8, 0x22, 0xfd, 0x38, 0xb2, 0x48, 0x5b,
+  0x74, 0xb1, 0x02, 0x05, 0xe5, 0x53, 0xe2, 0x50, 0x63, 0x18, 0xcf, 0x06,
+  0xb6, 0x20, 0xd1, 0xcb, 0x5f, 0x9b, 0xad, 0x05, 0xa2, 0x79, 0x26, 0xb3,
+  0xdd, 0x80, 0x07, 0x20, 0xf3, 0x81, 0x56, 0xd5, 0x0d, 0x13, 0xaf, 0x8a,
+  0x84, 0xfb, 0x7f, 0xf3, 0x51, 0x0e, 0x64, 0x69, 0x8b, 0xbd, 0xae, 0x4c,
+  0x5d, 0x41, 0x24, 0xfb, 0xaf, 0xa7, 0xb5, 0xff, 0x4f, 0x70, 0xa0, 0x67,
+  0xae, 0x9c, 0xd4, 0xc7, 0xd0, 0xdc, 0xb3, 0x2b, 0x4b, 0x73, 0xb1, 0x12,
+  0xeb, 0xca, 0x9b, 0x3e, 0x71, 0xaa, 0x56, 0x44, 0xb6, 0xd4, 0x55, 0x47,
+  0x11, 0xdb, 0xaa, 0x2c, 0x2e, 0xe9, 0x17, 0xaf, 0x64, 0x91, 0x4d, 0x00,
+  0x0a, 0xd1, 0xf9, 0x85, 0x8e, 0x2d, 0x7a, 0x88, 0xe7, 0x64, 0x62, 0x90,
+  0x4a, 0x33, 0x82, 0xe0, 0xce, 0x7c, 0xf6, 0x5b, 0xd8, 0xa3, 0x52, 0x3a,
+  0x21, 0xf8, 0x40, 0x77, 0x50, 0xfa, 0x76, 0x38, 0x0d, 0x49, 0x0c, 0x1c,
+  0x15, 0x61, 0x00, 0x54, 0x02, 0x45, 0xd3, 0x3a, 0x1e, 0xa7, 0xf5, 0x16,
+  0x1f, 0x8d, 0x24, 0x95, 0xac, 0xca, 0x66, 0xfc, 0xff, 0x0a, 0x0f, 0x7d,
+  0xf6, 0x71, 0xe4, 0xfc, 0xaf, 0xb8, 0x59, 0xff, 0x37, 0x22, 0xde, 0xc8,
+  0x36, 0x6f, 0x08, 0x42, 0x29, 0x6b, 0xc7, 0x7c, 0xb1, 0x6c, 0x3a, 0xa8,
+  0x12, 0xa8, 0x31, 0x58, 0xc4, 0xa3, 0xd3, 0xef, 0x9e, 0xf7, 0xe1, 0xd6,
+  0x1a, 0x85, 0xd5, 0x8c, 0x8e, 0x5f, 0xef, 0x9f, 0x46, 0x6e, 0x86, 0xcb,
+  0xba, 0x4e, 0x17, 0xb9, 0x1a, 0x6c, 0x1e, 0xb1, 0x1e, 0x39, 0xd3, 0x78,
+  0x60, 0x24, 0x92, 0xed, 0x52, 0x1d, 0x95, 0x4c, 0xcf, 0x93, 0xb9, 0xb5,
+  0xe7, 0x5c, 0xfc, 0x7d, 0x1a, 0xaa, 0xbb, 0x8f, 0x19, 0xa3, 0xf2, 0xe6,
+  0xe1, 0x4c, 0x68, 0xa1, 0xa2, 0x56, 0xfe, 0xf3, 0xaa, 0x79, 0x89, 0x7d,
+  0xa9, 0xeb, 0x10, 0x63, 0x73, 0x54, 0x2c, 0x09, 0xda, 0xb5, 0x1f, 0xf9,
+  0x4c, 0x5b, 0x8f, 0xe4, 0x6e, 0x51, 0x67, 0xdc, 0x16, 0x01, 0xef, 0xca,
+  0xa8, 0xbc, 0x7e, 0xc2, 0x2f, 0x61, 0x73, 0x21, 0xb4, 0xa1, 0x3a, 0x28,
+  0xfc, 0x96, 0xa9, 0xcd, 0xde, 0x1b, 0x83, 0xdd, 0x77, 0x2e, 0x13, 0x28,
+  0xc9, 0xab, 0xc5, 0x24, 0x5f, 0xa4, 0xb3, 0xa4, 0x65, 0x37, 0x8b, 0x96,
+  0xab, 0xec, 0x56, 0xfb, 0x6b, 0x4f, 0xa8, 0xc8, 0xba, 0x29, 0x9b, 0xfb,
+  0x75, 0xab, 0xc8, 0x80, 0x16, 0xf1, 0xf5, 0xd2, 0xd5, 0x05, 0x00, 0x4e,
+  0x4c, 0x15, 0xc8, 0xda, 0xa0, 0xe3, 0xc3, 0x4f, 0x84, 0xf9, 0x68, 0x28,
+  0x07, 0x09, 0x84, 0xc1, 0x9d, 0x17, 0xcf, 0x77, 0x92, 0x3a, 0xbd, 0x07,
+  0x22, 0x58, 0x2d, 0xef, 0x3f, 0x1d, 0x3e, 0xd9, 0x22, 0xe4, 0xc3, 0xbc,
+  0xf1, 0x82, 0x0a, 0xa4, 0x7d, 0x0f, 0x28, 0xc5, 0xe2, 0x40, 0xf1, 0x79,
+  0x7a, 0x77, 0x78, 0x90, 0x70, 0xe5, 0x1c, 0xa4, 0x77, 0x77, 0x54, 0xdc,
+  0x84, 0x17, 0x8d, 0x56, 0x6d, 0xa8, 0x31, 0xff, 0x51, 0xc5, 0x3c, 0xb2,
+  0x1c, 0x36, 0xb5, 0x1f, 0x89, 0x1b, 0x85, 0x1d, 0x09, 0x31, 0x4b, 0x26,
+  0x53, 0x59, 0x99, 0x18, 0xe8, 0x95, 0xbf, 0x26, 0x7e, 0x82, 0xff, 0xc3,
+  0x05, 0x18, 0xeb, 0xc6, 0xe8, 0xea, 0x55, 0x3c, 0x3e, 0xec, 0x4c, 0x01,
+  0x69, 0xc8, 0x0d, 0x4c, 0xa5, 0x76, 0xd8, 0x6f, 0x2f, 0xaf, 0x88, 0x19,
+  0xbb, 0x9d, 0x4d, 0xa3, 0xa1, 0x4f, 0xb8, 0x9b, 0xd6, 0x56, 0xe4, 0x20,
+  0x71, 0xb5, 0x4a, 0x94, 0x94, 0x98, 0x11, 0x82, 0xe2, 0xfa, 0x60, 0x5d,
+  0x2f, 0x29, 0x8d, 0x9c, 0x92, 0xc2, 0x3e, 0xb1, 0x32, 0x5c, 0xbf, 0xbb,
+  0xdc, 0xda, 0xd0, 0x6d, 0x60, 0x94, 0xf9, 0x22, 0x6b, 0xa4, 0xc2, 0x77,
+  0xf2, 0xf2, 0xe4, 0xf4, 0xfc, 0xd5, 0x4d, 0x1a, 0x80, 0x5b, 0x11, 0x40,
+  0xb2, 0xad, 0x87, 0x6e, 0xed, 0xf8, 0xf4, 0xa6, 0x97, 0x16, 0x37, 0xb2,
+  0xf9, 0x61, 0x5e, 0xe5, 0xf4, 0x20, 0x0d, 0xec, 0xfc, 0xfc, 0xc7, 0xd3,
+  0xc3, 0x57, 0x2f, 0xc9, 0x0b, 0xf0, 0x05, 0x79, 0x62, 0xea, 0x96, 0x53,
+  0x20, 0x69, 0xee, 0x17, 0xe1, 0xcd, 0xf8, 0xc3, 0xeb, 0xa3, 0xd1, 0xe9,
+  0xf1, 0xc9, 0xc1, 0xab, 0x97, 0x3f, 0x90, 0xbd, 0xc1, 0xac, 0xde, 0xbd,
+  0xf7, 0xae, 0xfd, 0xcc, 0xa6, 0xba, 0x84, 0xf5, 0x86, 0x0f, 0xbf, 0xff,
+  0x70, 0xf8, 0xee, 0xbb, 0x57, 0x2f, 0x6f, 0xd2, 0xaa, 0x4f, 0xf3, 0xe3,
+  0xb7, 0xc9, 0x2c, 0x5d, 0xdc, 0xe4, 0xe6, 0xaa, 0x21, 0x32, 0xb6, 0xf5,
+  0xe7, 0xbc, 0x35, 0x3a, 0xa7, 0x35, 0x5a, 0x2e, 0x28, 0x8e, 0xf4, 0x81,
+  0x80, 0x42, 0xbe, 0xcb, 0x5c, 0x85, 0xdf, 0xae, 0x80, 0xef, 0xc5, 0x2f,
+  0xb6, 0x73, 0x99, 0xdf, 0x9f, 0x1d, 0x0f, 0xa3, 0x04, 0x63, 0xab, 0x38,
+  0xb9, 0x1a, 0x68, 0x62, 0x1f, 0x73, 0xad, 0xa2, 0xca, 0xd6, 0x81, 0xc3,
+  0x57, 0x62, 0x24, 0xf1, 0x07, 0xa3, 0x27, 0x99, 0x75, 0xb9, 0xc0, 0x6c,
+  0x1b, 0x37, 0xc6, 0xe5, 0x66, 0xcd, 0x0c, 0x72, 0xe0, 0x7a, 0x6c, 0x69,
+  0xa8, 0xea, 0x2c, 0x34, 0xfb, 0xb9, 0xb4, 0x07, 0xc4, 0x5c, 0x08, 0xf2,
+  0x64, 0xc9, 0x15, 0x97, 0x31, 0x1c, 0x2d, 0x13, 0xd1, 0x9e, 0x04, 0x33,
+  0xe2, 0x32, 0x9a, 0x78, 0x8c, 0x09, 0x50, 0x01, 0x94, 0x6b, 0x3b, 0xae,
+  0x8a, 0xe9, 0xb7, 0x9d, 0xf7, 0xa2, 0x69, 0x89, 0x5e, 0x48, 0x69, 0x24,
+  0x33, 0x52, 0xfc, 0x02, 0x62, 0x24, 0xe5, 0x40, 0x56, 0x92, 0x29, 0x29,
+  0x6b, 0x93, 0x90, 0xaf, 0x6d, 0x0c, 0x3a, 0x6f, 0xac, 0x2b, 0xa9, 0x11,
+  0x7a, 0xb1, 0xc9, 0x27, 0x31, 0xb4, 0x67, 0x4e, 0x0f, 0x5b, 0x69, 0x4b,
+  0x89, 0x6c, 0x8c, 0x36, 0x6d, 0xa2, 0x2b, 0xb5, 0x78, 0xfa, 0xde, 0xc1,
+  0xca, 0x47, 0x80, 0x28, 0x82, 0x43, 0xd8, 0x11, 0x94, 0xdd, 0x42, 0xf5,
+  0x06, 0x3d, 0x2a, 0xe6, 0x27, 0x2e, 0x4e, 0x94, 0xf2, 0x53, 0x77, 0x87,
+  0x61, 0x0c, 0x79, 0xe1, 0xc3, 0x56, 0x04, 0xa2, 0x9f, 0x20, 0x33, 0x71,
+  0x9a, 0x1f, 0xa1, 0x77, 0x71, 0x0c, 0x9a, 0x99, 0x7c, 0xbf, 0xcb, 0x8e,
+  0x7a, 0x43, 0xbf, 0x1f, 0xf6, 0xb9, 0x6e, 0x06, 0xf9, 0x9c, 0xf7, 0xdd,
+  0x24, 0x0d, 0xdb, 0x37, 0x8d, 0xd3, 0x62, 0xa8, 0xf2, 0xc8, 0x60, 0xf7,
+  0x27, 0xd7, 0xca, 0xd8, 0x50, 0xde, 0x75, 0x08, 0x31, 0x03, 0x4e, 0xcd,
+  0xc5, 0x52, 0x00, 0x09, 0x06, 0x64, 0x02, 0x44, 0xae, 0xd8, 0xf4, 0x11,
+  0xf6, 0x32, 0x8a, 0x33, 0xd9, 0x36, 0x5b, 0x47, 0x61, 0x0a, 0x79, 0x13,
+  0x23, 0x8b, 0xfa, 0x63, 0x47, 0x40, 0x26, 0x56, 0x38, 0x38, 0x77, 0xf1,
+  0x9a, 0x14, 0x6e, 0x19, 0x81, 0x56, 0x90, 0x8a, 0xc6, 0x83, 0xf3, 0x00,
+  0x01, 0x95, 0x51, 0xd4, 0xf3, 0xca, 0x4b, 0x90, 0x40, 0x6c, 0x30, 0xed,
+  0x0b, 0x53, 0x92, 0xa4, 0x5b, 0x41, 0xa8, 0x18, 0x4a, 0xe0, 0x34, 0xf9,
+  0x84, 0x56, 0xa4, 0xb4, 0xd7, 0x49, 0xef, 0x72, 0x56, 0x8e, 0xc7, 0x66,
+  0x52, 0x3d, 0xbd, 0xe2, 0xcc, 0x08, 0xd3, 0xea, 0x12, 0x22, 0x6f, 0x5f,
+  0x31, 0x72, 0xdd, 0x61, 0x45, 0xdd, 0x50, 0xf4, 0xb5, 0x32, 0x2d, 0x9b,
+  0xf6, 0x56, 0x8b, 0xd1, 0xe8, 0xbe, 0xa2, 0xa8, 0xe7, 0xbd, 0x57, 0x70,
+  0x1c, 0x51, 0x78, 0xf4, 0xa9, 0xf6, 0x1f, 0x04, 0x70, 0x53, 0x1a, 0xb1,
+  0xcb, 0xf8, 0x15, 0xe6, 0x03, 0x96, 0x23, 0xb5, 0x1c, 0xf3, 0x48, 0x8a,
+  0x2f, 0x4d, 0xd8, 0x4c, 0xa0, 0xf7, 0x9f, 0x34, 0x88, 0x9d, 0x3e, 0xfd,
+  0xbb, 0xfb, 0xcf, 0x9e, 0x96, 0xec, 0xa4, 0x22, 0xc9, 0x3c, 0xf8, 0x86,
+  0x4a, 0x03, 0xd6, 0x5a, 0x27, 0x34, 0x52, 0x16, 0x94, 0x1c, 0xc6, 0x2b,
+  0x5b, 0xcf, 0xe7, 0x97, 0x3f, 0xed, 0x0c, 0x76, 0xb6, 0xb7, 0xb7, 0x7f,
+  0x19, 0x2e, 0x68, 0xe9, 0x2e, 0xd0, 0x3c, 0x21, 0x1b, 0x2e, 0xf2, 0x09,
+  0x39, 0x33, 0xcc, 0x66, 0xe6, 0x29, 0x35, 0xbd, 0xc5, 0xfd, 0x6d, 0x79,
+  0x37, 0x7f, 0x33, 0x59, 0x0c, 0x8a, 0x32, 0x16, 0x1c, 0x75, 0xbe, 0xac,
+  0x0a, 0xaf, 0xde, 0xfd, 0x87, 0x77, 0x27, 0xaf, 0x0f, 0x8f, 0xf7, 0x7f,
+  0xb4, 0x75, 0xfd, 0x14, 0x32, 0x83, 0x06, 0xf2, 0x21, 0x4b, 0xeb, 0xfb,
+  0x0f, 0x75, 0xd6, 0x98, 0x2f, 0x37, 0x9e, 0x6c, 0x22, 0xfc, 0xb0, 0xbb,
+  0xc3, 0xe4, 0xe8, 0xf4, 0xc0, 0x05, 0x35, 0x52, 0xcd, 0x2f, 0x15, 0xd8,
+  0x71, 0xbf, 0xb5, 0x42, 0x9e, 0x1b, 0xf2, 0x08, 0x8d, 0x67, 0xd7, 0x75,
+  0xfe, 0x0f, 0x73, 0xef, 0x10, 0x9a, 0x70, 0x18, 0xc9, 0x7e, 0x0e, 0xf0,
+  0x0c, 0x0a, 0x68, 0xa0, 0xdf, 0x92, 0xaf, 0x8e, 0xbf, 0xa5, 0x3c, 0x02,
+  0xab, 0xd4, 0xcc, 0x19, 0xad, 0x21, 0xf9, 0xe2, 0xd9, 0xce, 0xee, 0xa6,
+  0x2d, 0x42, 0xc6, 0x79, 0x48, 0x74, 0x38, 0x83, 0x80, 0x8a, 0x7f, 0x64,
+  0x5e, 0x35, 0x28, 0xe6, 0xca, 0xce, 0xcf, 0x8a, 0xa0, 0x26, 0xbd, 0xe5,
+  0x80, 0x73, 0x8b, 0x18, 0x80, 0x06, 0xc0, 0xc2, 0x94, 0xd1, 0x14, 0x00,
+  0x7a, 0x9d, 0x3b, 0x20, 0x80, 0xa1, 0x8f, 0x0a, 0x68, 0x86, 0x23, 0x89,
+  0x50, 0x71, 0xd9, 0xe4, 0xf7, 0x96, 0x75, 0x56, 0x7a, 0xeb, 0xda, 0x8b,
+  0x5d, 0x94, 0x22, 0x08, 0xd5, 0xf1, 0x75, 0xf6, 0x40, 0xe6, 0xa4, 0xa6,
+  0x01, 0xa0, 0x1d, 0x30, 0x4b, 0x95, 0x79, 0x34, 0x2e, 0xf9, 0x91, 0x4a,
+  0x59, 0x46, 0x78, 0xae, 0x90, 0x81, 0xa8, 0x9e, 0x25, 0xcf, 0x8f, 0x34,
+  0xcb, 0x2e, 0xd3, 0xc9, 0xbd, 0x4d, 0xbf, 0xc1, 0x86, 0x4c, 0xcb, 0x00,
+  0x43, 0x9c, 0xa2, 0xda, 0xc9, 0x67, 0x35, 0xcb, 0xa6, 0x97, 0x08, 0xa1,
+  0xe4, 0x9a, 0x67, 0x14, 0xc5, 0xa5, 0x92, 0x39, 0x0f, 0xcd, 0xd6, 0xfb,
+  0x53, 0x97, 0xfd, 0xea, 0xe0, 0x17, 0x5d, 0xe2, 0x0e, 0xf5, 0x11, 0xd9,
+  0x10, 0xb6, 0xf1, 0x23, 0x6b, 0xfa, 0xf4, 0xf3, 0xb6, 0x5b, 0xa5, 0x99,
+  0xd5, 0x14, 0x72, 0x41, 0x32, 0x5d, 0xf2, 0x52, 0x7f, 0xfb, 0x22, 0x8c,
+  0x53, 0x4d, 0xc8, 0xd9, 0x17, 0x22, 0xe0, 0x41, 0x16, 0x44, 0x30, 0x0a,
+  0x45, 0x08, 0xdb, 0xcb, 0xab, 0x95, 0xcf, 0x13, 0x06, 0x53, 0xdb, 0x89,
+  0xf4, 0x46, 0x67, 0xa7, 0xbd, 0xbe, 0xe8, 0x7e, 0xa6, 0x83, 0x81, 0xf9,
+  0xdb, 0x8c, 0x17, 0x6a, 0xd1, 0xb3, 0xed, 0x67, 0x4f, 0x37, 0xc5, 0x90,
+  0x84, 0x71, 0x72, 0x52, 0x78, 0xe8, 0x63, 0xc2, 0x97, 0x94, 0xc1, 0x70,
+  0x5b, 0x56, 0x02, 0xc8, 0xed, 0xe5, 0xad, 0x9a, 0xe3, 0xdc, 0x9e, 0x25,
+  0x1b, 0xa1, 0xfa, 0x1c, 0xd5, 0xb9, 0x7a, 0x99, 0xe5, 0x1c, 0x40, 0x96,
+  0xc6, 0x30, 0x87, 0x41, 0x0c, 0xf2, 0xd3, 0xce, 0x42, 0xda, 0x31, 0xbc,
+  0xd4, 0xdf, 0x62, 0x0b, 0x69, 0x9f, 0xba, 0x90, 0xda, 0xca, 0x16, 0xcf,
+  0x8d, 0x56, 0x78, 0x15, 0xc4, 0xe0, 0x4a, 0x0f, 0x95, 0x8d, 0xeb, 0xf0,
+  0x27, 0x39, 0xb4, 0x8e, 0x77, 0xa1, 0x4d, 0xb7, 0x80, 0x9a, 0x52, 0x56,
+  0x47, 0xca, 0xfa, 0x3e, 0x3c, 0x3d, 0xbc, 0xfe, 0x92, 0xfe, 0x8d, 0x4d,
+  0x8b, 0x3e, 0xb7, 0x56, 0x90, 0x7f, 0xc1, 0xb4, 0xbc, 0x79, 0xd9, 0x15,
+  0x95, 0xb9, 0x05, 0xe6, 0x88, 0xe6, 0xf1, 0xbd, 0xbb, 0xd9, 0x19, 0x6e,
+  0x47, 0x9d, 0xe7, 0x6f, 0xa8, 0x12, 0x73, 0x1b, 0xb6, 0x92, 0x26, 0xa4,
+  0x48, 0xfe, 0xe4, 0xff, 0x06, 0xd3, 0xb5, 0x7a, 0xad, 0x42, 0x12, 0xae,
+  0x00, 0x98, 0xa4, 0x97, 0x2d, 0x70, 0x48, 0xab, 0x56, 0xde, 0xd3, 0xe0,
+  0x64, 0x9a, 0x41, 0xed, 0xfc, 0xb6, 0x41, 0xed, 0x7c, 0xd2, 0x41, 0xed,
+  0xfe, 0xb6, 0x41, 0xed, 0x7e, 0xaa, 0x41, 0x55, 0x03, 0xcd, 0x72, 0x8a,
+  0xd7, 0x98, 0x38, 0xd3, 0xba, 0x79, 0x24, 0x45, 0x12, 0x1a, 0x2f, 0xf1,
+  0xcf, 0x73, 0xb9, 0x25, 0x07, 0x87, 0xf2, 0xae, 0x8b, 0x47, 0x63, 0x21,
+  0x2c, 0x8c, 0x43, 0xd7, 0xb2, 0x4e, 0x1a, 0xbf, 0xab, 0xf1, 0x53, 0xcc,
+  0xe7, 0x6a, 0x0e, 0x02, 0x58, 0x16, 0xda, 0x89, 0xe0, 0x26, 0xd0, 0x05,
+  0xcc, 0x72, 0x72, 0x58, 0x76, 0x21, 0xcb, 0x05, 0x04, 0xff, 0xb1, 0x7c,
+  0x87, 0xe7, 0xed, 0x09, 0x13, 0x12, 0x55, 0x54, 0xcf, 0x3d, 0xb4, 0x50,
+  0xb7, 0x14, 0xc8, 0x43, 0xf1, 0x3e, 0xfc, 0x70, 0x32, 0x5d, 0x72, 0xba,
+  0x1f, 0x67, 0x94, 0x49, 0xd0, 0x3c, 0x8d, 0xd7, 0x08, 0x3c, 0x97, 0xa5,
+  0x4a, 0x0a, 0xfd, 0xc0, 0x58, 0xa6, 0xa0, 0xb8, 0xd3, 0x8c, 0x41, 0xd2,
+  0x29, 0x4b, 0x26, 0x2f, 0xb8, 0xc0, 0xac, 0xd9, 0xd6, 0xbe, 0x85, 0x6b,
+  0x81, 0x42, 0x23, 0x6a, 0x01, 0xab, 0x35, 0xef, 0x83, 0x10, 0x0d, 0x52,
+  0x45, 0x28, 0xda, 0x89, 0x42, 0x23, 0x45, 0x0b, 0xa4, 0x94, 0x55, 0xbf,
+  0xd0, 0xb9, 0x56, 0xb3, 0x5c, 0x61, 0x5b, 0x89, 0xdb, 0xfd, 0x7d, 0x9b,
+  0x3f, 0xe2, 0xb2, 0x06, 0x37, 0x64, 0x15, 0x30, 0xdf, 0x8f, 0x09, 0xca,
+  0xb7, 0xac, 0x74, 0xd1, 0x02, 0x3b, 0x5c, 0x3d, 0xc9, 0xf3, 0x4f, 0xe9,
+  0x78, 0xe4, 0x5e, 0xd1, 0xcd, 0xc3, 0x1b, 0x96, 0xf2, 0x76, 0xf1, 0x6e,
+  0xf9, 0x9b, 0xe5, 0x76, 0x8b, 0x53, 0xa3, 0xec, 0x7e, 0xfd, 0x1f, 0xb4,
+  0x61, 0xe6, 0x7f, 0x66, 0xe9, 0xee, 0x29, 0xab, 0x37, 0x9f, 0xa5, 0x5c,
+  0xd6, 0x9b, 0x97, 0x86, 0x6b, 0x12, 0xcc, 0xb2, 0x94, 0x04, 0x2d, 0x75,
+  0x0b, 0x5c, 0x65, 0x77, 0x6c, 0x50, 0x09, 0x2f, 0x7b, 0xae, 0x9b, 0x4b,
+  0x11, 0x8b, 0x62, 0xc3, 0xd9, 0x1f, 0x1d, 0x1c, 0x1d, 0xb5, 0x6c, 0xb3,
+  0xb4, 0x78, 0x08, 0x8a, 0xe5, 0x10, 0xc7, 0x9a, 0x52, 0xc6, 0x28, 0x2f,
+  0x07, 0xc3, 0x8d, 0xe1, 0x01, 0x32, 0x20, 0xf2, 0x98, 0xb2, 0x03, 0xea,
+  0x5c, 0x13, 0xde, 0x53, 0xb9, 0xa0, 0x0b, 0xb2, 0xb8, 0x50, 0x9a, 0xd0,
+  0xd5, 0xd2, 0xe8, 0x0f, 0xf5, 0xef, 0x4d, 0x90, 0xc3, 0x4f, 0x4d, 0x7a,
+  0x91, 0x4c, 0xe2, 0xd3, 0x4a, 0x92, 0x9d, 0x39, 0x11, 0x48, 0x52, 0x81,
+  0x09, 0x90, 0x8a, 0xb4, 0x6a, 0xa6, 0x40, 0x33, 0x42, 0x1d, 0x2c, 0x54,
+  0x6e, 0x4d, 0x07, 0x8e, 0x40, 0x1d, 0x8b, 0x69, 0xaf, 0xee, 0x70, 0xe9,
+  0x9d, 0x0e, 0x97, 0x5e, 0x16, 0xf9, 0x1d, 0xec, 0xca, 0x19, 0x41, 0xf4,
+  0xa7, 0xcd, 0xd5, 0x8a, 0x3a, 0xd0, 0x07, 0x5a, 0xb3, 0xd2, 0xc2, 0x86,
+  0x9a, 0x45, 0x40, 0x21, 0x48, 0xae, 0xb2, 0x98, 0x70, 0x1b, 0x7d, 0xdf,
+  0xc4, 0x01, 0x86, 0x1d, 0xb1, 0xe9, 0x16, 0x59, 0x43, 0x6e, 0xa1, 0xb6,
+  0x12, 0xf7, 0xb4, 0x15, 0x04, 0x38, 0x58, 0xf6, 0xb5, 0xe6, 0x36, 0x64,
+  0x9b, 0xbd, 0x95, 0xb2, 0x9b, 0x97, 0x8c, 0xec, 0x55, 0xdb, 0xa6, 0x14,
+  0x49, 0x95, 0x3f, 0xe4, 0xd6, 0x63, 0xc0, 0x70, 0xd8, 0x49, 0x9c, 0xdc,
+  0x13, 0x0b, 0xb4, 0x1a, 0x26, 0x27, 0x96, 0x62, 0x06, 0x45, 0x1f, 0xe1,
+  0xc3, 0x4d, 0x35, 0x91, 0x68, 0x54, 0xfc, 0x3e, 0xd0, 0xec, 0xf6, 0x18,
+  0x93, 0xe2, 0x5c, 0x21, 0xa4, 0xca, 0xdf, 0x3b, 0x08, 0x55, 0x0f, 0x42,
+  0x89, 0xcb, 0xbf, 0x3b, 0x4d, 0xd1, 0xa8, 0x1f, 0x94, 0x21, 0x0e, 0x47,
+  0x55, 0xa0, 0x0a, 0xf3, 0x24, 0xa2, 0xb8, 0xb1, 0xf1, 0xf9, 0x0a, 0x6e,
+  0xe3, 0x62, 0x96, 0x37, 0x28, 0x2a, 0x6f, 0x93, 0x24, 0x25, 0xb3, 0x62,
+  0x52, 0xce, 0x0c, 0xbf, 0x09, 0xbc, 0x39, 0x94, 0x52, 0xa5, 0xe9, 0xc7,
+  0x64, 0x5a, 0x9f, 0x2f, 0xca, 0xba, 0xce, 0xa5, 0xa2, 0x06, 0x5b, 0x39,
+  0xf1, 0xa6, 0x5a, 0x34, 0xbc, 0x02, 0xeb, 0x21, 0x22, 0x75, 0x4b, 0x55,
+  0x47, 0x3a, 0xa6, 0x6e, 0xc6, 0x24, 0x35, 0x2b, 0x8a, 0x70, 0xcb, 0x78,
+  0x7a, 0x1a, 0x5f, 0xf2, 0xdf, 0x1a, 0x22, 0x37, 0xba, 0x5d, 0x9d, 0x7c,
+  0xf7, 0x4c, 0xf1, 0x2d, 0xbe, 0xcf, 0x8b, 0x29, 0xb1, 0x17, 0x29, 0x4e,
+  0xa0, 0x16, 0xaf, 0x7b, 0x87, 0xcb, 0x10, 0xe5, 0xb9, 0xea, 0x1b, 0xd7,
+  0xd7, 0x85, 0x5a, 0xd9, 0x26, 0xda, 0x99, 0x09, 0xea, 0x6b, 0x98, 0x41,
+  0x12, 0x02, 0x57, 0x59, 0x45, 0x08, 0xd7, 0x41, 0x6f, 0x38, 0x9c, 0x49,
+  0x2a, 0x40, 0x32, 0xe6, 0x3a, 0x51, 0xe6, 0x72, 0xb7, 0x03, 0x4f, 0xce,
+  0x73, 0x3a, 0x0f, 0x43, 0x4b, 0x11, 0xdd, 0xe3, 0x89, 0x8c, 0x03, 0xd1,
+  0x76, 0x32, 0x1b, 0x7d, 0xdf, 0x91, 0xc8, 0xa9, 0x72, 0x61, 0x7d, 0x45,
+  0x09, 0x1f, 0x64, 0x4a, 0x84, 0x4d, 0x75, 0x6d, 0x45, 0x2c, 0x39, 0xee,
+  0x1e, 0x82, 0x95, 0xee, 0x27, 0x9d, 0xfd, 0x09, 0xa0, 0x62, 0x84, 0x34,
+  0xd3, 0x58, 0xb6, 0xa2, 0xb7, 0x18, 0xbe, 0x4b, 0x98, 0x97, 0xad, 0x2f,
+  0xb1, 0xbe, 0x95, 0x78, 0x63, 0x34, 0x8f, 0x44, 0x16, 0x35, 0x72, 0x31,
+  0x50, 0x62, 0x4f, 0x0d, 0x13, 0x3c, 0x2c, 0xd3, 0x5c, 0x22, 0xf7, 0xc2,
+  0x95, 0xcd, 0x09, 0xe9, 0xba, 0xec, 0x1c, 0x19, 0x7f, 0xc3, 0x88, 0x0c,
+  0x39, 0x5d, 0x32, 0x79, 0x5d, 0xde, 0x16, 0x83, 0x63, 0x8a, 0xf8, 0x4e,
+  0x8e, 0xcb, 0x4b, 0xb3, 0x54, 0xef, 0xb8, 0xba, 0x53, 0xd7, 0x3e, 0x7c,
+  0xfa, 0x2e, 0xd9, 0x78, 0x4f, 0x73, 0x3a, 0xb5, 0x6e, 0x48, 0x7a, 0x72,
+  0x33, 0xe1, 0xab, 0xd7, 0xb0, 0x47, 0xaf, 0x88, 0x4f, 0x3f, 0x39, 0xfc,
+  0x61, 0xff, 0xed, 0xe9, 0xf1, 0xe1, 0xcf, 0xac, 0x94, 0x05, 0xd3, 0xa1,
+  0x8f, 0xbf, 0xd4, 0xa1, 0x9b, 0xfb, 0x5f, 0x2b, 0xa3, 0x99, 0x4b, 0x7b,
+  0x76, 0xbf, 0x9a, 0x17, 0xf0, 0xf1, 0x51, 0x12, 0x1c, 0x8d, 0x4e, 0x8f,
+  0x06, 0x82, 0xf9, 0xc1, 0x5c, 0x40, 0x80, 0x12, 0x71, 0x8a, 0x25, 0xc7,
+  0xf5, 0xdb, 0x30, 0xc6, 0x5d, 0x4f, 0x44, 0xdf, 0xc1, 0xa2, 0xf7, 0x19,
+  0x48, 0xdc, 0xcc, 0x20, 0x8e, 0x44, 0xdf, 0x28, 0x90, 0x08, 0x11, 0x41,
+  0xe0, 0xff, 0x6b, 0x55, 0xca, 0xac, 0xb3, 0x59, 0x26, 0x80, 0xc4, 0x2b,
+  0xf8, 0x28, 0xa0, 0x77, 0xb0, 0x8d, 0xe4, 0xfb, 0x09, 0xaa, 0x95, 0x89,
+  0x2f, 0x68, 0x6c, 0xb1, 0x45, 0x25, 0x4e, 0x82, 0x69, 0x84, 0x79, 0x47,
+  0xb7, 0xe2, 0xe5, 0x9e, 0x11, 0x65, 0x96, 0xc9, 0x5e, 0xef, 0x13, 0xca,
+  0x7a, 0xef, 0x6d, 0xe8, 0xc6, 0xef, 0x7f, 0x9d, 0x48, 0x34, 0xce, 0x23,
+  0xd7, 0xc9, 0x83, 0x64, 0x41, 0x4c, 0x43, 0x09, 0xe3, 0x61, 0xca, 0x98,
+  0x96, 0x42, 0xfb, 0x5d, 0x17, 0x9d, 0xcd, 0x6d, 0x31, 0x23, 0x8a, 0x41,
+  0xd7, 0x4b, 0xc5, 0x6c, 0x25, 0x83, 0xee, 0xce, 0x07, 0x7a, 0xf9, 0xaf,
+  0xa3, 0x83, 0xce, 0xbe, 0x87, 0x91, 0x99, 0x1f, 0x4b, 0x07, 0xef, 0x3f,
+  0x2d, 0x1d, 0xa0, 0x62, 0xcd, 0xcb, 0xf7, 0x67, 0xc7, 0xab, 0xb6, 0x3c,
+  0x85, 0x59, 0x9f, 0x60, 0x4c, 0xb2, 0x66, 0x72, 0x15, 0x54, 0xdd, 0x83,
+  0x27, 0x8c, 0x2e, 0x74, 0xe2, 0xc9, 0xf7, 0x5a, 0x0a, 0x23, 0x64, 0xec,
+  0x9a, 0xd4, 0xaf, 0x4c, 0xcc, 0x34, 0x4a, 0x48, 0x0b, 0x48, 0x18, 0xf0,
+  0xb0, 0x9f, 0xa3, 0x54, 0xe1, 0x14, 0x00, 0x1a, 0x0a, 0x95, 0xfa, 0x8b,
+  0x15, 0x3d, 0x4a, 0x36, 0xb8, 0x68, 0x60, 0x9d, 0xf4, 0xc4, 0x3f, 0xd0,
+  0x0b, 0x19, 0x5f, 0xef, 0x42, 0xbe, 0x31, 0x93, 0xd9, 0x64, 0x0a, 0x70,
+  0x02, 0x47, 0xab, 0xdc, 0x0f, 0x5f, 0xa8, 0x62, 0xbd, 0xe7, 0x7a, 0x0a,
+  0x71, 0x57, 0x3c, 0xc9, 0xea, 0x59, 0x05, 0x87, 0x20, 0x55, 0x52, 0x1b,
+  0x28, 0xd7, 0x67, 0xff, 0x24, 0x02, 0x3e, 0x8c, 0xf0, 0xf0, 0xfa, 0xe8,
+  0xe0, 0xbc, 0xcf, 0xf0, 0xae, 0x9c, 0x73, 0x42, 0xa1, 0x3d, 0x5d, 0x71,
+  0x83, 0x92, 0x52, 0x80, 0x45, 0xfd, 0x96, 0xd0, 0x9f, 0xf9, 0x12, 0x4c,
+  0x9d, 0x4b, 0xdc, 0xcb, 0x89, 0x91, 0x34, 0x04, 0x87, 0x36, 0x01, 0xef,
+  0x61, 0x50, 0x7b, 0xc1, 0xdb, 0x72, 0x1b, 0x0e, 0x46, 0xd5, 0x87, 0x78,
+  0x8e, 0xb4, 0x84, 0x72, 0x0b, 0xda, 0xfa, 0x31, 0x44, 0xaf, 0x92, 0x8e,
+  0x9b, 0xae, 0xc8, 0x0f, 0x76, 0x85, 0xf1, 0x6a, 0x57, 0x5d, 0xc8, 0x96,
+  0x90, 0x8a, 0x56, 0x3f, 0x8a, 0xa8, 0x1f, 0xe2, 0x04, 0xe4, 0xf0, 0xab,
+  0x16, 0xda, 0xb2, 0xe0, 0x00, 0xe3, 0xce, 0xd3, 0x94, 0x27, 0x76, 0x81,
+  0xc5, 0xc4, 0x29, 0xd0, 0x04, 0x11, 0x85, 0x84, 0x3a, 0xf4, 0x6d, 0x46,
+  0xf0, 0xa0, 0x24, 0x1e, 0x27, 0x8a, 0x9f, 0x24, 0xf2, 0xb4, 0x80, 0x57,
+  0x62, 0xae, 0x5e, 0x35, 0x6d, 0xdb, 0x03, 0xe2, 0xab, 0x42, 0x9d, 0x17,
+  0xbe, 0xca, 0xb8, 0xfc, 0xa1, 0x2a, 0x1f, 0x5b, 0x4d, 0x3a, 0xbb, 0x16,
+  0x68, 0x8e, 0xe9, 0xb2, 0x72, 0x60, 0x09, 0xd6, 0x21, 0x3c, 0x84, 0x6b,
+  0x96, 0x60, 0xb8, 0xa3, 0xc8, 0xe8, 0xe3, 0xe5, 0xe5, 0xa5, 0xd3, 0x9d,
+  0xcd, 0xea, 0x72, 0x89, 0x1c, 0x43, 0x03, 0xeb, 0x75, 0xc2, 0x7a, 0xb4,
+  0x59, 0xb9, 0xde, 0xb2, 0x98, 0x66, 0x95, 0xd0, 0x65, 0x39, 0xed, 0x0d,
+  0x93, 0x7d, 0x68, 0x3d, 0x21, 0x66, 0x52, 0xe5, 0xcc, 0x56, 0xeb, 0x5f,
+  0xac, 0x0b, 0xb0, 0x42, 0xef, 0xca, 0xe8, 0x21, 0x94, 0x91, 0x64, 0x14,
+  0xf2, 0x1e, 0x2b, 0xc4, 0x04, 0xd9, 0x48, 0xc7, 0xc0, 0x50, 0xd4, 0xfa,
+  0xcb, 0xf5, 0x38, 0x6c, 0x87, 0xbe, 0x26, 0xef, 0x89, 0x3d, 0x88, 0x29,
+  0x66, 0x62, 0xbd, 0xf4, 0x66, 0x1f, 0xae, 0x72, 0xa3, 0xbd, 0x40, 0x1e,
+  0x66, 0x04, 0x14, 0x0e, 0x93, 0xea, 0x92, 0x7a, 0x8a, 0xfc, 0x1d, 0x28,
+  0x6b, 0x9d, 0x81, 0xfe, 0x59, 0x07, 0xaa, 0x75, 0x20, 0x01, 0x8f, 0x7a,
+  0xe1, 0x0a, 0x1d, 0x00, 0x63, 0x32, 0xe2, 0xcb, 0x0b, 0xa3, 0x34, 0x00,
+  0x28, 0x2c, 0xc8, 0x50, 0x7a, 0xbb, 0xb0, 0x4e, 0x0e, 0x76, 0xc4, 0x00,
+  0x11, 0x3c, 0x2f, 0x5b, 0xe1, 0x90, 0xe9, 0xc5, 0x6c, 0x7a, 0x1e, 0x16,
+  0x91, 0x50, 0xd9, 0xd9, 0xea, 0xe0, 0xae, 0x04, 0x1c, 0xb0, 0xc6, 0x2a,
+  0xca, 0x40, 0x2e, 0x01, 0xe5, 0x79, 0x11, 0x29, 0x67, 0x77, 0xc4, 0xf8,
+  0x26, 0x1a, 0x97, 0xe0, 0x15, 0xb8, 0x46, 0x9e, 0x95, 0xa6, 0x88, 0x11,
+  0xab, 0xc3, 0x83, 0x59, 0xc1, 0x35, 0x1c, 0xe5, 0x38, 0xf5, 0x43, 0x60,
+  0x7e, 0x06, 0x8b, 0x61, 0x29, 0x57, 0x2d, 0x6d, 0x9e, 0xfd, 0x88, 0x2d,
+  0x39, 0x1a, 0x4a, 0xf4, 0x5b, 0x8d, 0x01, 0xad, 0xc6, 0x7c, 0x63, 0x40,
+  0x24, 0xe8, 0xc0, 0x4f, 0x31, 0x6e, 0x23, 0x6e, 0x23, 0xaf, 0xd8, 0xbb,
+  0x78, 0x6e, 0xe9, 0x41, 0x04, 0x43, 0xd1, 0x11, 0x4d, 0x5e, 0xb2, 0xe0,
+  0x19, 0x45, 0x4c, 0x60, 0x64, 0x11, 0x89, 0xc9, 0xf1, 0xac, 0x43, 0x09,
+  0x96, 0x0e, 0x49, 0xbf, 0x0a, 0x74, 0x4f, 0xd6, 0xcc, 0x59, 0x46, 0x1e,
+  0x66, 0xf8, 0x15, 0x03, 0x63, 0x3d, 0x99, 0x67, 0x49, 0xf1, 0xe2, 0x36,
+  0x44, 0x5c, 0x6f, 0x2a, 0xeb, 0x13, 0x27, 0xae, 0x24, 0x50, 0x5d, 0x89,
+  0x44, 0x55, 0x19, 0xb9, 0xe0, 0x8e, 0x52, 0x50, 0xa9, 0xf2, 0x69, 0xac,
+  0xb8, 0x0d, 0xb8, 0x97, 0xc7, 0xbe, 0x34, 0xea, 0xa7, 0x6e, 0xf5, 0x14,
+  0x68, 0x1b, 0xe6, 0x9e, 0x4a, 0x83, 0xf2, 0x11, 0x0d, 0xae, 0xef, 0x1e,
+  0x8f, 0xa8, 0x07, 0x30, 0x76, 0xf5, 0xd2, 0xc3, 0x92, 0x25, 0x48, 0x45,
+  0xe9, 0x54, 0x54, 0x57, 0x6e, 0x9b, 0x45, 0x8f, 0x30, 0x35, 0x12, 0xc1,
+  0x0e, 0x3c, 0xc6, 0xde, 0x97, 0x6a, 0x15, 0xeb, 0x69, 0x50, 0x01, 0xc4,
+  0x1d, 0x57, 0xca, 0x58, 0xda, 0x94, 0x26, 0x23, 0xde, 0x57, 0x8e, 0x9a,
+  0x00, 0x40, 0x0f, 0xed, 0x9a, 0x69, 0x72, 0xd0, 0x8b, 0xea, 0xdf, 0x76,
+  0x01, 0x12, 0xa9, 0x25, 0xd7, 0x3e, 0x5a, 0xda, 0x85, 0xbb, 0xcc, 0xa8,
+  0xfe, 0x68, 0x93, 0x37, 0xcb, 0xd0, 0xf9, 0x66, 0x31, 0xb4, 0xe1, 0xad,
+  0x06, 0x13, 0xa7, 0xcd, 0x70, 0x2e, 0x65, 0x9c, 0x25, 0x32, 0xf9, 0x35,
+  0x48, 0x02, 0x60, 0x33, 0xe2, 0x58, 0x81, 0xe9, 0xbb, 0xf6, 0xaa, 0x7d,
+  0xd3, 0xa3, 0x1b, 0x5d, 0xdb, 0xf7, 0x66, 0xde, 0xfe, 0xd3, 0x7f, 0xea,
+  0x97, 0x40, 0x02, 0xfe, 0xa7, 0xae, 0x94, 0x86, 0x8f, 0xa4, 0x81, 0xcb,
+  0x14, 0xfc, 0x2d, 0xf9, 0x13, 0x56, 0x05, 0x95, 0x0c, 0x78, 0x69, 0x80,
+  0x53, 0x46, 0x0d, 0xfe, 0x69, 0x68, 0xa3, 0x46, 0xa4, 0x91, 0x34, 0x29,
+  0xb2, 0x5b, 0xb0, 0xbd, 0x80, 0x87, 0xf1, 0x31, 0xfe, 0xd9, 0xdc, 0x60,
+  0x86, 0x8e, 0x53, 0x73, 0x1c, 0xc9, 0xdf, 0xcf, 0xc0, 0x3f, 0xbc, 0x8b,
+  0x3f, 0x57, 0xc2, 0x36, 0x9b, 0x74, 0xcc, 0x48, 0xec, 0xf2, 0x79, 0x68,
+  0xc8, 0xa4, 0x90, 0xac, 0x3d, 0xec, 0xc6, 0x9f, 0x06, 0x0c, 0xf3, 0x2c,
+  0xb4, 0x2e, 0xa8, 0xed, 0xfa, 0x19, 0x6f, 0xcc, 0x6d, 0x5e, 0x3c, 0xd9,
+  0x1d, 0x78, 0x62, 0x6b, 0x3f, 0x1e, 0xd5, 0x0a, 0x0b, 0x6f, 0x39, 0x99,
+  0xc0, 0x81, 0x4a, 0xee, 0x13, 0x44, 0x0b, 0xfd, 0x29, 0x11, 0xac, 0x30,
+  0xc0, 0x4d, 0x2c, 0x21, 0x46, 0x78, 0xc5, 0x97, 0x57, 0x7a, 0x2d, 0x1f,
+  0x21, 0x1e, 0x87, 0xe3, 0x17, 0x0b, 0xfb, 0xa3, 0x43, 0x6a, 0x06, 0xfa,
+  0x01, 0x5e, 0x52, 0x7e, 0xf5, 0x80, 0x3f, 0x1a, 0x9c, 0xd3, 0x47, 0x62,
+  0x5e, 0x55, 0xf7, 0x39, 0x5d, 0x1a, 0x1a, 0xf9, 0xdd, 0x4f, 0x42, 0x48,
+  0xb5, 0x24, 0x16, 0x31, 0x47, 0x41, 0xe4, 0xe6, 0x70, 0x07, 0xe3, 0xd4,
+  0xa3, 0xf4, 0x81, 0xab, 0x8c, 0xe6, 0x37, 0xd9, 0xc3, 0xad, 0x21, 0x76,
+  0x95, 0xe2, 0x69, 0xe6, 0xc8, 0x65, 0xb4, 0xf6, 0x69, 0x3f, 0x34, 0x82,
+  0xa3, 0x42, 0x19, 0x79, 0x68, 0xf8, 0x58, 0x73, 0x5e, 0x71, 0x0b, 0xaf,
+  0xea, 0xb5, 0xb9, 0xe2, 0xb8, 0x72, 0x00, 0xb9, 0x81, 0x67, 0xa0, 0x5c,
+  0x6e, 0xf7, 0x91, 0xb9, 0x96, 0xec, 0x7f, 0xf1, 0xb8, 0x05, 0x56, 0xae,
+  0x8d, 0x4f, 0x07, 0xbe, 0x1f, 0xb5, 0x4a, 0x27, 0xd1, 0xbd, 0x4d, 0x8e,
+  0x48, 0x66, 0x81, 0x54, 0xbc, 0x64, 0x89, 0x27, 0x07, 0x38, 0xfb, 0x58,
+  0x21, 0xa3, 0x6d, 0x4f, 0x0f, 0x37, 0x67, 0x47, 0xc1, 0xd7, 0xf4, 0xc0,
+  0x13, 0xd2, 0x86, 0xdd, 0x34, 0xd4, 0x9d, 0x20, 0x22, 0xdf, 0x48, 0xfb,
+  0x1f, 0x80, 0xc1, 0xfc, 0x01, 0x88, 0x8c, 0xe7, 0x9e, 0x49, 0x09, 0x1f,
+  0x60, 0xbd, 0x18, 0x3b, 0x73, 0xb9, 0xe0, 0x32, 0xb2, 0x04, 0x6d, 0x52,
+  0xb2, 0x18, 0x16, 0x84, 0x1a, 0x87, 0x2b, 0xd7, 0xa9, 0x23, 0xa3, 0x1e,
+  0xc0, 0x4e, 0xae, 0xe5, 0xd3, 0x60, 0x60, 0xa4, 0xa1, 0x7c, 0x00, 0x54,
+  0x95, 0xa5, 0x10, 0x73, 0x83, 0x64, 0x15, 0x95, 0xf3, 0xe8, 0x60, 0x59,
+  0x31, 0xf4, 0x29, 0xd2, 0xee, 0x97, 0x85, 0x46, 0x4e, 0x3d, 0x3c, 0x30,
+  0x28, 0x7d, 0x5a, 0x49, 0x5c, 0xcb, 0x77, 0x51, 0x68, 0x21, 0x60, 0x3b,
+  0xcc, 0x40, 0x49, 0xf5, 0xd2, 0xc0, 0x1b, 0xb3, 0x55, 0x8f, 0xcc, 0x13,
+  0xd9, 0x5a, 0xbb, 0xe2, 0x4d, 0xcc, 0x53, 0x87, 0x2d, 0xcb, 0x33, 0xc0,
+  0x31, 0xc1, 0x7c, 0x01, 0x47, 0x79, 0x55, 0xde, 0x3e, 0x7a, 0xb8, 0x38,
+  0x5e, 0x8c, 0xae, 0xf2, 0xe1, 0x8a, 0x95, 0x61, 0xb3, 0xba, 0x9c, 0x1d,
+  0xb7, 0x34, 0xbc, 0x24, 0x22, 0xd3, 0x75, 0x17, 0x25, 0x16, 0x5d, 0x9a,
+  0xac, 0x80, 0x09, 0x4b, 0x36, 0xe4, 0xd2, 0x94, 0x54, 0x84, 0x4d, 0x7b,
+  0x10, 0xd8, 0x00, 0xa0, 0x05, 0xc1, 0x1e, 0x6b, 0x0e, 0xdc, 0x25, 0x00,
+  0x71, 0x09, 0x37, 0x1c, 0x41, 0xb3, 0x1f, 0xf2, 0x85, 0xcf, 0x12, 0x8e,
+  0x4e, 0x3d, 0x24, 0xc1, 0xf2, 0x42, 0x51, 0x71, 0x18, 0xe4, 0x9a, 0x02,
+  0x81, 0x84, 0x89, 0xd1, 0x29, 0x7a, 0x6c, 0x1c, 0x13, 0x44, 0xb4, 0x30,
+  0xdc, 0x8f, 0x07, 0x42, 0x30, 0x50, 0xc1, 0x43, 0xec, 0x83, 0x47, 0xa7,
+  0x37, 0x4f, 0x23, 0x41, 0xb3, 0x9d, 0xff, 0xcc, 0x53, 0xcf, 0xdb, 0x87,
+  0xeb, 0x45, 0x24, 0x5b, 0x8f, 0xa7, 0xc4, 0x45, 0xa0, 0x75, 0x4a, 0x32,
+  0x78, 0x3f, 0x8f, 0xca, 0x9b, 0x44, 0x7b, 0x9c, 0x0f, 0x8f, 0xc1, 0x9b,
+  0xc4, 0xa3, 0x23, 0x31, 0x3d, 0x29, 0xc9, 0xd4, 0x74, 0xf9, 0xd9, 0x8e,
+  0xcd, 0x5d, 0x9b, 0xd8, 0x2f, 0x80, 0x29, 0xa4, 0x88, 0xc9, 0x18, 0x48,
+  0x12, 0x97, 0x12, 0x93, 0x88, 0xd0, 0xf8, 0x28, 0x4a, 0x0f, 0x8d, 0x41,
+  0xf1, 0x66, 0x6a, 0x3b, 0x06, 0x6c, 0xab, 0xf7, 0xb1, 0x10, 0x6e, 0x86,
+  0xea, 0x40, 0x02, 0x61, 0xf6, 0x31, 0x27, 0x7a, 0x15, 0xa1, 0x85, 0xe3,
+  0xd0, 0xce, 0x3e, 0x30, 0x19, 0xc3, 0x0e, 0xae, 0x58, 0x78, 0x16, 0x65,
+  0x29, 0x95, 0xd5, 0x50, 0x5b, 0xf6, 0x00, 0x16, 0x1e, 0x1a, 0xd2, 0x23,
+  0x6b, 0x41, 0xf1, 0xb5, 0x76, 0x3a, 0x92, 0x54, 0xa6, 0x57, 0xb6, 0xe0,
+  0xfa, 0x10, 0x3e, 0x0b, 0x58, 0xc5, 0x84, 0x32, 0xd4, 0x1e, 0x6e, 0x0e,
+  0x08, 0xa5, 0x5e, 0xc1, 0x5e, 0xc9, 0xb9, 0x01, 0x96, 0x93, 0x96, 0x65,
+  0x74, 0x9e, 0xba, 0x10, 0xbe, 0x22, 0xca, 0xa8, 0x22, 0x4b, 0x42, 0x0c,
+  0xda, 0x1e, 0xbe, 0xf3, 0xab, 0xcc, 0x86, 0x6d, 0xd0, 0x19, 0xd4, 0x23,
+  0xf8, 0xdf, 0x27, 0xd4, 0xe8, 0x69, 0x2b, 0xab, 0xce, 0x79, 0x7a, 0x6c,
+  0x0e, 0x51, 0x12, 0x97, 0x39, 0xe8, 0x69, 0xf3, 0xe7, 0xf0, 0x2f, 0x3e,
+  0x6c, 0x14, 0xc0, 0xf7, 0x41, 0xc1, 0xb0, 0x79, 0x24, 0x0c, 0xcc, 0xe7,
+  0x40, 0xec, 0x38, 0x14, 0x93, 0x2f, 0x2e, 0x22, 0x75, 0x7d, 0x3a, 0x12,
+  0xee, 0x87, 0xd6, 0xd4, 0xb4, 0xf0, 0x50, 0x6b, 0xea, 0x2f, 0xb7, 0x4d,
+  0x41, 0x71, 0x7f, 0x84, 0x5c, 0xa9, 0x0a, 0x51, 0xb4, 0x47, 0x3d, 0x09,
+  0xb2, 0x92, 0xdc, 0xe5, 0x03, 0x33, 0xf0, 0xd4, 0x98, 0x87, 0x7b, 0xf4,
+  0xcf, 0x59, 0xbc, 0x6b, 0x09, 0xed, 0x4e, 0x3e, 0x6e, 0xe9, 0x56, 0x46,
+  0xa3, 0x1b, 0x49, 0x3e, 0x9b, 0xba, 0x7d, 0xa0, 0xb6, 0x52, 0xb2, 0xfe,
+  0x5e, 0xba, 0x35, 0xe2, 0x67, 0x3c, 0x29, 0xd3, 0x08, 0x8b, 0xf5, 0xb2,
+  0x62, 0x8c, 0xe1, 0xc7, 0xef, 0x68, 0xd5, 0xa5, 0x6d, 0x7b, 0x14, 0x72,
+  0x4b, 0xa3, 0x5b, 0x64, 0x95, 0xa0, 0x5c, 0xae, 0x18, 0x95, 0x9d, 0x22,
+  0x16, 0x57, 0x87, 0xa5, 0x41, 0xed, 0xbf, 0xd3, 0xa8, 0xb8, 0xb5, 0x8f,
+  0x19, 0x53, 0x3d, 0xfb, 0x60, 0x86, 0x90, 0x5f, 0xdc, 0x9b, 0x6d, 0xaf,
+  0x8d, 0x1c, 0xfe, 0xb8, 0xb4, 0xce, 0xcf, 0x29, 0xcd, 0x11, 0x6e, 0x88,
+  0x19, 0x73, 0xd5, 0x86, 0x24, 0x41, 0x93, 0xf9, 0xca, 0x1a, 0x37, 0x2d,
+  0x8c, 0x12, 0x2b, 0xc3, 0x59, 0x75, 0x64, 0x48, 0xb8, 0xa9, 0x30, 0x73,
+  0x51, 0x0f, 0xda, 0x56, 0x24, 0xbd, 0x2d, 0xe9, 0xda, 0xd1, 0x6b, 0xcf,
+  0xcb, 0x3a, 0x7c, 0x00, 0x6d, 0xd9, 0xf6, 0x6f, 0x14, 0x95, 0x74, 0xb1,
+  0x90, 0x23, 0xfe, 0xf8, 0xdc, 0x19, 0xe9, 0x8e, 0xb3, 0xfb, 0x4a, 0x94,
+  0xab, 0x43, 0x92, 0x7f, 0x53, 0x96, 0xd7, 0x6a, 0x69, 0xe0, 0x74, 0x24,
+  0x32, 0xdb, 0x3d, 0xdc, 0x1c, 0xa3, 0x95, 0x5a, 0xb0, 0x9c, 0xad, 0xd1,
+  0xe8, 0x1b, 0xc2, 0x32, 0xb6, 0xfc, 0x66, 0xcb, 0x39, 0x72, 0x59, 0x96,
+  0x7e, 0xec, 0x12, 0xb4, 0xc5, 0x8d, 0xb1, 0x0e, 0xd6, 0xd8, 0xf3, 0xb1,
+  0xcb, 0xd0, 0x16, 0x2b, 0x3f, 0xd1, 0x44, 0xcf, 0x0f, 0x4e, 0xed, 0x04,
+  0x13, 0x5b, 0x1b, 0xc9, 0x1f, 0xfb, 0xc6, 0x63, 0x74, 0x2e, 0x12, 0x69,
+  0x7b, 0x8e, 0xd1, 0x19, 0x91, 0x3a, 0x44, 0x26, 0xc7, 0x55, 0x05, 0xc6,
+  0x3e, 0xe9, 0xc6, 0x22, 0x68, 0x85, 0x04, 0x79, 0xce, 0xb7, 0x87, 0x09,
+  0xf7, 0xf1, 0x21, 0x53, 0x4d, 0xbb, 0x78, 0x91, 0xc7, 0x98, 0xda, 0x2c,
+  0xb8, 0x8b, 0x64, 0x87, 0x8b, 0x0c, 0xdb, 0x96, 0x82, 0xfd, 0x55, 0x63,
+  0xe6, 0xc4, 0x39, 0x45, 0xd2, 0xa4, 0x21, 0xc3, 0x76, 0x63, 0x81, 0x7f,
+  0xcd, 0x0d, 0x6e, 0xf4, 0xbf, 0x8f, 0xd2, 0xc2, 0xd9, 0x20, 0xcc, 0xd0,
+  0xf7, 0x04, 0x14, 0x62, 0x5b, 0x75, 0xd5, 0x42, 0x8d, 0x1c, 0x4f, 0x41,
+  0xa4, 0x8f, 0xb2, 0x89, 0x54, 0xb2, 0x21, 0x51, 0x9d, 0xb8, 0xf2, 0xe0,
+  0xb6, 0x45, 0xcd, 0x44, 0x31, 0x9d, 0xc9, 0x92, 0x22, 0xd2, 0x22, 0x69,
+  0xab, 0x81, 0x6a, 0x3a, 0x29, 0x67, 0xec, 0x60, 0xbb, 0x01, 0xf8, 0x78,
+  0x7c, 0x2f, 0x9c, 0xe4, 0x15, 0x27, 0x10, 0x02, 0xde, 0xc5, 0x3a, 0x0b,
+  0x86, 0xb1, 0x3e, 0xff, 0x28, 0x9b, 0x32, 0x2c, 0x6e, 0x61, 0x97, 0x87,
+  0x89, 0x84, 0xc9, 0xb4, 0x6f, 0xcf, 0x06, 0x17, 0xf2, 0xfc, 0x38, 0x52,
+  0x80, 0x3f, 0xc4, 0x61, 0x9f, 0x76, 0x90, 0x51, 0x91, 0xe7, 0x49, 0x5f,
+  0x0a, 0x2a, 0xff, 0x6d, 0x90, 0xce, 0x9f, 0x44, 0x5c, 0x23, 0xc4, 0x36,
+  0xda, 0x8b, 0xc0, 0x81, 0x7a, 0xad, 0x4b, 0x26, 0xc9, 0xee, 0xb2, 0xb0,
+  0x76, 0x51, 0x8c, 0xc5, 0x0b, 0x2e, 0x31, 0x92, 0x03, 0x6c, 0xf2, 0x94,
+  0xb7, 0x5e, 0x3e, 0xd2, 0xe7, 0xa3, 0x52, 0x6c, 0x4c, 0xb0, 0xc7, 0x58,
+  0x31, 0xf2, 0x8f, 0x3f, 0x3e, 0x9f, 0x86, 0xc5, 0x71, 0xc4, 0x14, 0x4a,
+  0xf7, 0x84, 0x87, 0x67, 0x9c, 0x7d, 0xac, 0x52, 0x05, 0xf8, 0xc1, 0xf6,
+  0x31, 0xea, 0x32, 0x08, 0xd9, 0xf9, 0x08, 0x52, 0x74, 0x44, 0x32, 0x90,
+  0x1d, 0xf0, 0xaa, 0x5d, 0x32, 0xce, 0xbc, 0x16, 0xca, 0x30, 0x9a, 0x29,
+  0x1d, 0x9f, 0x26, 0xfb, 0x98, 0x9b, 0x86, 0xee, 0xff, 0xf8, 0x99, 0x11,
+  0x59, 0xb1, 0x25, 0xbf, 0x85, 0xeb, 0xac, 0x39, 0xab, 0x12, 0xd7, 0x0c,
+  0x0f, 0xe0, 0xc7, 0x90, 0x11, 0x99, 0x30, 0x32, 0x29, 0x17, 0x88, 0xf9,
+  0x58, 0x20, 0x5f, 0xf6, 0x7f, 0x28, 0xc4, 0xf3, 0x3c, 0x7f, 0x54, 0x55,
+  0xcb, 0x05, 0x89, 0x1c, 0xdc, 0x79, 0x19, 0xb5, 0xb8, 0x22, 0xf1, 0x4c,
+  0x8d, 0x98, 0x3c, 0x21, 0x78, 0xfb, 0xad, 0xc9, 0x89, 0x7c, 0xfe, 0x19,
+  0x17, 0x84, 0x72, 0xe9, 0x5e, 0xd0, 0x2e, 0x48, 0x78, 0x79, 0x64, 0x04,
+  0x62, 0x97, 0x54, 0xdf, 0xdb, 0x3a, 0x10, 0x59, 0xc8, 0x32, 0xa9, 0x5e,
+  0x07, 0x56, 0x81, 0x6d, 0x9a, 0xf5, 0xde, 0xc3, 0xcd, 0x89, 0xa3, 0xee,
+  0x13, 0x06, 0x43, 0x78, 0x78, 0x26, 0x2f, 0x7f, 0x52, 0x37, 0xf7, 0xde,
+  0xd6, 0xd6, 0x2f, 0x3f, 0xb5, 0xa2, 0x63, 0xbe, 0xfc, 0x05, 0xcf, 0xfc,
+  0x2a, 0xa0, 0x1a, 0xc6, 0xef, 0x8a, 0x59, 0xbc, 0xb9, 0x3f, 0x71, 0x42,
+  0x05, 0x6e, 0x22, 0x09, 0xf3, 0xf3, 0x06, 0xe3, 0xd5, 0x3f, 0x2e, 0x57,
+  0xd4, 0xa5, 0x6f, 0x55, 0x89, 0xe0, 0xf6, 0x2d, 0xec, 0x21, 0x02, 0xa7,
+  0x1d, 0x00, 0x5a, 0xdf, 0x03, 0xbd, 0xea, 0x47, 0x11, 0x5f, 0xa8, 0x4b,
+  0x8a, 0x11, 0x75, 0x38, 0x45, 0xf0, 0x17, 0xb1, 0xfe, 0xd4, 0xaa, 0x0b,
+  0x01, 0x30, 0x1e, 0x9b, 0x42, 0x11, 0xab, 0x72, 0x21, 0xa1, 0x08, 0xc9,
+  0xbb, 0xd2, 0x05, 0x35, 0x78, 0x00, 0x3b, 0x12, 0xb7, 0xc1, 0x5e, 0x0e,
+  0x42, 0x07, 0x26, 0x2d, 0xda, 0xe6, 0xf4, 0x05, 0xe8, 0xe7, 0x54, 0xf0,
+  0x11, 0x8e, 0x1b, 0x28, 0x5d, 0x34, 0x4f, 0x06, 0x54, 0x96, 0x55, 0x95,
+  0xe6, 0x05, 0x70, 0xd3, 0x59, 0x29, 0xf3, 0x22, 0x16, 0x18, 0xcc, 0x38,
+  0x39, 0x9b, 0xab, 0xe2, 0x4f, 0x1e, 0x84, 0x06, 0x52, 0xab, 0x92, 0xbf,
+  0x95, 0x82, 0xc4, 0x10, 0x84, 0xf0, 0x33, 0x78, 0x10, 0x33, 0xca, 0x5f,
+  0x01, 0x16, 0x94, 0xdd, 0xe5, 0x8c, 0xa2, 0xee, 0x07, 0x17, 0x79, 0xde,
+  0x12, 0xb1, 0x2c, 0xd5, 0x59, 0x13, 0x0b, 0x51, 0x91, 0x88, 0x2c, 0xcd,
+  0x63, 0x3f, 0x92, 0x70, 0xc5, 0xf5, 0x95, 0x90, 0x05, 0x2b, 0x83, 0x40,
+  0x04, 0x9a, 0xc8, 0x82, 0x05, 0x31, 0x62, 0xc3, 0x1d, 0x72, 0x3a, 0x7b,
+  0x48, 0xdd, 0xd6, 0x31, 0xc7, 0xf2, 0x44, 0xc8, 0x01, 0x67, 0x83, 0x21,
+  0x3c, 0x59, 0x47, 0xc2, 0xfb, 0x28, 0xe0, 0x06, 0x81, 0xc8, 0x85, 0xdb,
+  0xd2, 0x7b, 0x4d, 0x1b, 0x8d, 0xdc, 0x29, 0x46, 0x24, 0x62, 0x0b, 0x07,
+  0x68, 0xcb, 0x30, 0x3b, 0xc2, 0xe2, 0x15, 0x76, 0x4f, 0x0d, 0x70, 0x60,
+  0xbd, 0x68, 0x59, 0xa4, 0x6e, 0x9a, 0xaf, 0xc9, 0xa5, 0xab, 0xc4, 0x11,
+  0x3d, 0x3e, 0x86, 0x90, 0xbd, 0x21, 0xb2, 0xab, 0x5f, 0x4a, 0xde, 0x5b,
+  0x97, 0x94, 0xe3, 0x85, 0xc8, 0xdb, 0x24, 0x89, 0x21, 0x0d, 0x21, 0x3e,
+  0x2f, 0xec, 0x32, 0x35, 0x4b, 0x23, 0xf2, 0xcc, 0xbc, 0x28, 0xf1, 0x2c,
+  0x71, 0xc8, 0x65, 0xcc, 0x90, 0x24, 0xff, 0x6c, 0xb0, 0x50, 0x1e, 0xd4,
+  0x9d, 0xec, 0xbd, 0x34, 0xb2, 0xc2, 0x79, 0xf6, 0x5e, 0x42, 0x33, 0xbd,
+  0x88, 0xbc, 0x56, 0xba, 0x80, 0x2b, 0x25, 0x19, 0xd2, 0x2a, 0xed, 0xc1,
+  0x5a, 0x68, 0x99, 0xe3, 0xf2, 0x4d, 0x2e, 0xc4, 0x43, 0x66, 0xdd, 0xc6,
+  0xfd, 0xa1, 0xee, 0x70, 0xf3, 0x79, 0xf5, 0xa0, 0xa3, 0x55, 0xeb, 0xa0,
+  0xb7, 0x22, 0x3e, 0xeb, 0x4b, 0x97, 0x3b, 0xfe, 0xa7, 0xa7, 0xdb, 0xc8,
+  0x34, 0x95, 0x46, 0x52, 0x3f, 0x10, 0xee, 0x4f, 0x4f, 0xd2, 0x07, 0x18,
+  0x26, 0x34, 0xa9, 0x80, 0x5d, 0x72, 0x39, 0xb4, 0x74, 0x22, 0xf5, 0xbc,
+  0x6e, 0x53, 0x8d, 0xe7, 0x15, 0xca, 0x0d, 0xf0, 0x91, 0x63, 0x87, 0xa9,
+  0xef, 0x67, 0xa6, 0x34, 0x3e, 0x33, 0x11, 0xce, 0xbb, 0x21, 0x8c, 0x6a,
+  0x33, 0x12, 0xd4, 0x82, 0x11, 0x50, 0xad, 0x6c, 0x38, 0x95, 0x68, 0x53,
+  0xfe, 0xb2, 0x3a, 0x5c, 0xfd, 0xf7, 0xbb, 0xba, 0x7e, 0xe0, 0xb8, 0x26,
+  0xe6, 0xca, 0x2f, 0x45, 0xfb, 0x58, 0x91, 0xb4, 0x30, 0xb2, 0x70, 0x03,
+  0xa9, 0xd6, 0x56, 0xd2, 0x37, 0x25, 0xd5, 0xd1, 0x4f, 0xd0, 0xa6, 0xb6,
+  0x96, 0x05, 0x19, 0x27, 0x22, 0xf0, 0xfb, 0x89, 0xa3, 0x5c, 0x9c, 0x58,
+  0x9b, 0x02, 0x77, 0xde, 0xba, 0xfd, 0x3a, 0xcd, 0xc7, 0x19, 0x3a, 0xa6,
+  0xee, 0xe5, 0x49, 0xc0, 0x90, 0xc9, 0x2f, 0x78, 0x71, 0x6e, 0x0c, 0x0f,
+  0x2e, 0x95, 0x65, 0x5c, 0xe2, 0x6b, 0x78, 0xdd, 0x7c, 0x7d, 0x78, 0xbe,
+  0x89, 0x1c, 0xcc, 0x54, 0xea, 0x0d, 0x60, 0x80, 0xa8, 0x43, 0x28, 0xe7,
+  0x3c, 0xb5, 0x35, 0xbc, 0x6c, 0x46, 0x7d, 0x41, 0x18, 0x41, 0x46, 0xce,
+  0x2a, 0xa2, 0x31, 0xab, 0x35, 0x55, 0x68, 0x9a, 0xcf, 0x09, 0xae, 0xc3,
+  0xc5, 0x26, 0xf9, 0x16, 0x3f, 0xa7, 0xf2, 0x10, 0x70, 0x07, 0x0b, 0xaf,
+  0xaf, 0x0f, 0x8f, 0x0f, 0xcf, 0x0f, 0x63, 0x20, 0x48, 0x55, 0x36, 0xc3,
+  0x0d, 0xd6, 0x64, 0x93, 0xab, 0xc2, 0xd0, 0xfd, 0x25, 0x6d, 0x09, 0xd0,
+  0x10, 0xbe, 0xcf, 0xc6, 0xaf, 0xf7, 0xbf, 0xa3, 0x82, 0x9e, 0x74, 0x6e,
+  0x4e, 0xcf, 0x4e, 0x4e, 0xdf, 0x1c, 0xbd, 0x7b, 0xdd, 0x4f, 0x0e, 0x4e,
+  0x4e, 0x7f, 0xec, 0x27, 0x6f, 0x4f, 0xbe, 0x3b, 0x8c, 0x50, 0x1e, 0xc5,
+  0xa2, 0x45, 0x62, 0xa0, 0xa4, 0x0a, 0x15, 0x1d, 0x57, 0x8e, 0xae, 0x2f,
+  0x32, 0xad, 0xe4, 0xa0, 0x7e, 0x54, 0x62, 0xcb, 0xa8, 0x36, 0x25, 0x7e,
+  0x28, 0xb3, 0x74, 0xe6, 0x0c, 0x7c, 0x73, 0xb8, 0xff, 0x3a, 0x8c, 0x50,
+  0x1c, 0x9d, 0xa3, 0x33, 0x9a, 0x9f, 0x9d, 0x34, 0xb1, 0x70, 0xc3, 0x30,
+  0xc9, 0xe4, 0x4d, 0xfa, 0xe6, 0x75, 0xe6, 0xa1, 0x0b, 0x9b, 0x63, 0x00,
+  0x83, 0xd9, 0x74, 0x55, 0x65, 0x77, 0x0e, 0x02, 0xb3, 0x71, 0x77, 0x0f,
+  0xdd, 0x86, 0xe4, 0xf0, 0xf6, 0x0b, 0x98, 0x24, 0xe2, 0x64, 0x20, 0xc7,
+  0x41, 0x35, 0x55, 0xda, 0xc8, 0x35, 0xb3, 0x23, 0x12, 0x12, 0x29, 0x43,
+  0x66, 0x3d, 0xc8, 0xa2, 0x72, 0x41, 0x5c, 0xe2, 0x48, 0x88, 0x54, 0xa2,
+  0xd9, 0xc6, 0x19, 0x05, 0xdc, 0xd4, 0x28, 0xc0, 0xe6, 0x05, 0xe6, 0xc7,
+  0x59, 0xbc, 0x06, 0xb7, 0x4a, 0x00, 0x29, 0xe7, 0xcd, 0x63, 0xfd, 0x5c,
+  0x87, 0x5a, 0x4c, 0xe7, 0x07, 0x5e, 0xd8, 0x24, 0x06, 0xe7, 0x02, 0xa1,
+  0x62, 0x79, 0x61, 0x48, 0x33, 0xe3, 0xc0, 0x11, 0xde, 0xaa, 0xd2, 0x85,
+  0x34, 0x1e, 0xd1, 0x31, 0xbf, 0xc2, 0x01, 0x59, 0x1d, 0x43, 0x21, 0x87,
+  0x46, 0x78, 0x3b, 0x0d, 0x90, 0xae, 0x69, 0x86, 0xec, 0xfb, 0xa1, 0x5d,
+  0xab, 0xcb, 0x29, 0xf6, 0xbc, 0x95, 0xf1, 0x04, 0x18, 0x99, 0xa6, 0xb7,
+  0x0e, 0x5c, 0x08, 0xe3, 0x98, 0x46, 0x63, 0xeb, 0x81, 0x23, 0x76, 0x0a,
+  0x58, 0x38, 0x86, 0x5d, 0x14, 0x5c, 0x92, 0x32, 0x52, 0xda, 0x70, 0xc0,
+  0x0a, 0x47, 0xad, 0xb1, 0xc2, 0x52, 0x37, 0x8a, 0x63, 0xdf, 0x04, 0x9e,
+  0xab, 0xc3, 0x2f, 0xd2, 0xc9, 0xc4, 0xec, 0x6f, 0x24, 0x6b, 0xaa, 0x74,
+  0x07, 0xfb, 0xc9, 0x76, 0xa7, 0xce, 0x53, 0x9d, 0x0c, 0xb8, 0xfe, 0x39,
+  0xa7, 0xf1, 0x85, 0x39, 0xab, 0x6f, 0x56, 0xf0, 0x42, 0xbf, 0x8a, 0xa6,
+  0xac, 0xbd, 0xc7, 0x95, 0x8e, 0x8f, 0xcc, 0x09, 0xa0, 0x91, 0x07, 0x99,
+  0x2b, 0x08, 0xfb, 0x43, 0x85, 0xf4, 0x9c, 0x0e, 0x05, 0xd6, 0xdb, 0xb4,
+  0x15, 0x76, 0x4c, 0x61, 0xbe, 0xd1, 0x9e, 0x11, 0xff, 0xfb, 0x48, 0xd7,
+  0x81, 0xed, 0xf0, 0xec, 0xf0, 0xfc, 0xac, 0x13, 0x0a, 0xf1, 0x3c, 0x62,
+  0x00, 0xdd, 0xa0, 0xb0, 0xe3, 0x68, 0xaf, 0xf4, 0xc5, 0xaa, 0x5e, 0xc1,
+  0x0e, 0xa8, 0xdf, 0x87, 0xd2, 0xef, 0x9f, 0xc4, 0x80, 0xea, 0x37, 0x18,
+  0x53, 0x3f, 0xd2, 0x1f, 0xa2, 0x9b, 0x57, 0xcf, 0xf2, 0x9b, 0xc3, 0xe3,
+  0xd3, 0x70, 0x96, 0xdf, 0x9d, 0xbd, 0xf9, 0x71, 0xf8, 0x40, 0x62, 0xf5,
+  0xef, 0x1f, 0x18, 0x7f, 0x97, 0x36, 0x4d, 0xb4, 0x42, 0x45, 0x9d, 0xc2,
+  0xd4, 0xa9, 0xa5, 0x4b, 0xa8, 0xf0, 0x03, 0xd7, 0x22, 0x6d, 0x02, 0x50,
+  0x73, 0x97, 0x47, 0x42, 0x65, 0x60, 0x03, 0x21, 0x4b, 0xe5, 0x51, 0x09,
+  0xbe, 0x31, 0xd4, 0x9e, 0x72, 0x02, 0xb6, 0xf9, 0xcc, 0x16, 0x75, 0xc5,
+  0x77, 0x34, 0x96, 0x7c, 0x4c, 0x65, 0xbe, 0x86, 0x1e, 0x7e, 0x45, 0x44,
+  0xd4, 0x97, 0x08, 0x79, 0xf4, 0x66, 0x65, 0xbd, 0xbb, 0xe9, 0xe5, 0xb0,
+  0xac, 0x72, 0x32, 0x6a, 0x4a, 0xed, 0x55, 0x6e, 0x2c, 0x41, 0x91, 0x71,
+  0x3a, 0xd6, 0x74, 0x84, 0x62, 0xcd, 0x69, 0x9c, 0x15, 0x83, 0x67, 0x24,
+  0x61, 0xd3, 0x73, 0x98, 0x44, 0xe8, 0x3b, 0xdb, 0xaa, 0xea, 0x17, 0xb1,
+  0x70, 0xc4, 0xfa, 0xde, 0xec, 0xf3, 0xdc, 0x71, 0x5e, 0xd5, 0xce, 0xec,
+  0x6c, 0xdd, 0x44, 0x29, 0x0c, 0xce, 0x70, 0xd6, 0x0a, 0x80, 0x45, 0xa1,
+  0x26, 0x95, 0x1b, 0x4d, 0xaa, 0xb5, 0x61, 0xf7, 0x88, 0x3c, 0x25, 0xdf,
+  0x92, 0x14, 0x5c, 0xa2, 0x7f, 0x23, 0x25, 0xf6, 0x52, 0xe7, 0x1f, 0xa3,
+  0xd9, 0x90, 0x0f, 0x5e, 0x2a, 0x06, 0xf1, 0xcb, 0x5c, 0x1c, 0x68, 0xdc,
+  0xf1, 0x2a, 0x49, 0x40, 0x77, 0x80, 0x48, 0xe3, 0x75, 0xc8, 0x60, 0x57,
+  0xfd, 0x96, 0x9b, 0x92, 0xea, 0xcb, 0x02, 0xa8, 0x87, 0xed, 0x8d, 0xa6,
+  0x7b, 0xef, 0x85, 0x60, 0x4e, 0x1c, 0xd5, 0xef, 0x57, 0xb3, 0xf2, 0x87,
+  0xa4, 0x84, 0xba, 0xa3, 0x25, 0x6e, 0x1c, 0x57, 0xff, 0xf1, 0x11, 0x74,
+  0x18, 0x09, 0xa3, 0x6f, 0x83, 0xca, 0xb1, 0xb4, 0xba, 0x14, 0xfd, 0x1a,
+  0xf7, 0x20, 0x38, 0x33, 0xd6, 0x64, 0x2d, 0xea, 0x20, 0xae, 0x29, 0x6f,
+  0xa2, 0x85, 0x5f, 0x86, 0xec, 0x0d, 0x43, 0xc7, 0x2c, 0x47, 0x99, 0x5b,
+  0xa2, 0x0f, 0x84, 0x1f, 0x0d, 0x21, 0x93, 0xf7, 0x06, 0x11, 0x43, 0x1a,
+  0xd9, 0x0b, 0x57, 0x5c, 0x62, 0xbf, 0xdf, 0x29, 0xfe, 0xd1, 0x11, 0x05,
+  0x2f, 0xe2, 0x4b, 0xfc, 0xf1, 0xab, 0xc8, 0xc2, 0x2b, 0x24, 0xc5, 0xae,
+  0xcb, 0x0d, 0x43, 0xfb, 0x2d, 0xfa, 0x18, 0x04, 0x79, 0xdf, 0xd3, 0x4d,
+  0x4e, 0xac, 0x75, 0x9b, 0x2d, 0x96, 0x41, 0x92, 0x3b, 0xda, 0x34, 0xe1,
+  0x3d, 0x83, 0x84, 0x9a, 0x50, 0x85, 0xe7, 0x3d, 0xe6, 0x74, 0x27, 0xf3,
+  0xc4, 0x93, 0x6d, 0xba, 0x90, 0x71, 0x7a, 0xb2, 0x4f, 0x89, 0xe7, 0xf8,
+  0x0f, 0xe0, 0x39, 0x52, 0x35, 0x66, 0x1c, 0x80, 0x97, 0x53, 0x32, 0x9d,
+  0x1a, 0xe9, 0x98, 0x82, 0x25, 0x4c, 0xd3, 0x5f, 0xfc, 0x57, 0xbc, 0x18,
+  0x32, 0xca, 0x7d, 0xbf, 0xb1, 0xf5, 0x54, 0x18, 0xca, 0x82, 0x5d, 0x2e,
+  0xa4, 0x90, 0xda, 0x4a, 0xb3, 0xf3, 0x72, 0x2a, 0x68, 0x86, 0x69, 0xe3,
+  0x96, 0x3a, 0x8b, 0x42, 0xcf, 0x71, 0x25, 0x3a, 0x3a, 0x85, 0xc8, 0xee,
+  0x33, 0x2b, 0x4b, 0xe3, 0x5e, 0xd1, 0x9e, 0xe7, 0x1e, 0x08, 0x30, 0x9a,
+  0xa5, 0x62, 0x17, 0x49, 0x49, 0xc1, 0x7c, 0x54, 0x9b, 0x24, 0x79, 0x88,
+  0x85, 0x61, 0x73, 0x1b, 0xe1, 0x21, 0x96, 0xa4, 0xea, 0xf0, 0x56, 0x42,
+  0xd9, 0x21, 0x2b, 0xbc, 0x30, 0xb8, 0x2b, 0x85, 0x83, 0xdb, 0x2a, 0xc8,
+  0x66, 0x98, 0xb5, 0x62, 0x72, 0x52, 0x54, 0x0b, 0xea, 0x8d, 0xa4, 0x36,
+  0x04, 0x74, 0x2d, 0xea, 0xe6, 0xc8, 0x15, 0x6f, 0x0d, 0xc5, 0xcd, 0x71,
+  0x92, 0x78, 0x72, 0x9a, 0xb9, 0x86, 0x41, 0x6d, 0xcc, 0x69, 0x32, 0x9b,
+  0x6c, 0xc6, 0x8f, 0x6e, 0x85, 0xc5, 0x10, 0x6d, 0x01, 0x8d, 0x99, 0x46,
+  0xe9, 0x7d, 0x02, 0x19, 0x33, 0x37, 0x30, 0x50, 0xc5, 0x6a, 0xa9, 0x21,
+  0x94, 0xb2, 0xc7, 0x43, 0x57, 0x24, 0xc8, 0x4f, 0x89, 0x67, 0xf5, 0x8c,
+  0xc8, 0x79, 0xa0, 0x25, 0xbc, 0xfc, 0x15, 0x55, 0xe3, 0x25, 0xa1, 0x0d,
+  0x26, 0x1b, 0x83, 0x4d, 0x2b, 0x22, 0xa3, 0x7e, 0x25, 0x93, 0x46, 0xe8,
+  0xf3, 0x4f, 0x6d, 0xa0, 0xae, 0x4d, 0x29, 0xe1, 0x42, 0x28, 0x4a, 0x21,
+  0x42, 0x13, 0xd4, 0xd9, 0x16, 0x1b, 0xde, 0x95, 0x5b, 0x02, 0x88, 0x3e,
+  0x90, 0xcb, 0x3a, 0x8d, 0x15, 0xd9, 0xad, 0xdf, 0x98, 0x53, 0x52, 0x6d,
+  0x83, 0x9f, 0xf0, 0x4c, 0x5d, 0xb1, 0xfc, 0x3e, 0x5b, 0x04, 0xd6, 0x1b,
+  0x44, 0x48, 0xd0, 0x37, 0x43, 0x61, 0xde, 0x2c, 0x45, 0xa6, 0x1c, 0xa4,
+  0x8f, 0x92, 0xb6, 0x3e, 0xaa, 0xa0, 0xc5, 0x07, 0x8b, 0x82, 0xd2, 0xd4,
+  0x57, 0x74, 0xa9, 0x5a, 0x50, 0x8d, 0x56, 0x15, 0x9e, 0xb7, 0x5c, 0xbd,
+  0xae, 0x08, 0x83, 0xb3, 0xde, 0xe2, 0xc3, 0x61, 0xf2, 0x5a, 0x52, 0x2d,
+  0x90, 0x61, 0xb4, 0xbc, 0xcc, 0x30, 0x2c, 0x44, 0xde, 0x7b, 0xcd, 0x7c,
+  0x27, 0x79, 0x51, 0x11, 0x42, 0x91, 0xf7, 0xeb, 0x56, 0xae, 0x06, 0x3b,
+  0x88, 0x18, 0xc2, 0x50, 0xcc, 0x24, 0xb3, 0x7c, 0x8c, 0xbf, 0xd5, 0x62,
+  0x9c, 0x23, 0x56, 0xb8, 0x1e, 0x46, 0x54, 0x1a, 0x76, 0x39, 0x61, 0xe2,
+  0xce, 0x59, 0xa4, 0xde, 0x15, 0x7d, 0x9f, 0x64, 0x55, 0x49, 0x63, 0xd2,
+  0xa6, 0x63, 0xa0, 0x1c, 0xd0, 0x53, 0x9f, 0x54, 0x53, 0x78, 0x54, 0xef,
+  0xe9, 0xd1, 0x2a, 0xad, 0x58, 0xf5, 0x2e, 0xae, 0xd5, 0xe4, 0xce, 0x86,
+  0xa4, 0x6c, 0xb2, 0x6c, 0xda, 0x08, 0xae, 0xbe, 0x6f, 0x5a, 0x24, 0x03,
+  0x1e, 0xd6, 0x06, 0x7c, 0x68, 0xb2, 0x1f, 0xbd, 0x53, 0x35, 0xb7, 0xef,
+  0xf5, 0x36, 0xc5, 0xaf, 0xc8, 0x2e, 0x62, 0xf9, 0x38, 0x86, 0xec, 0xa1,
+  0x63, 0xae, 0x32, 0xc6, 0x72, 0x44, 0x3e, 0x3d, 0xc4, 0xa3, 0x68, 0xf7,
+  0x86, 0x22, 0xab, 0x69, 0xac, 0xef, 0x37, 0x59, 0x4a, 0x98, 0x85, 0x5e,
+  0xd7, 0xd6, 0xb0, 0x79, 0x21, 0x5f, 0x05, 0x89, 0x27, 0x41, 0xcf, 0x30,
+  0x3d, 0x0c, 0x93, 0x7d, 0x1b, 0x84, 0xaf, 0xaf, 0xea, 0xfa, 0x07, 0x11,
+  0xf9, 0x08, 0x72, 0x73, 0x28, 0x99, 0x24, 0xd5, 0xe3, 0x23, 0x9b, 0xd4,
+  0x1a, 0xcc, 0xe2, 0xba, 0x1a, 0x3f, 0x35, 0x3f, 0xbe, 0xa5, 0x1f, 0xc4,
+  0x80, 0x48, 0xf1, 0x62, 0x68, 0x7a, 0x46, 0x62, 0x0b, 0x39, 0x0d, 0x55,
+  0x42, 0x92, 0x1f, 0xb2, 0xe9, 0xb5, 0xa6, 0xdc, 0x50, 0xca, 0x92, 0xab,
+  0xed, 0x04, 0x07, 0xba, 0xb6, 0xd3, 0x57, 0xcb, 0xe3, 0xda, 0xca, 0x90,
+  0xad, 0x11, 0x72, 0x33, 0x47, 0x5c, 0x18, 0x6e, 0xc4, 0x7a, 0xa3, 0x59,
+  0x84, 0x50, 0x34, 0x31, 0x4b, 0xf5, 0x0f, 0x32, 0x64, 0x2f, 0x8d, 0x26,
+  0x63, 0x08, 0x7b, 0x02, 0x1b, 0xe9, 0xdc, 0x72, 0x3c, 0xd4, 0xb9, 0xb7,
+  0xa8, 0x4d, 0x0c, 0x9d, 0x09, 0x93, 0x36, 0x74, 0xd4, 0x50, 0xe2, 0xd3,
+  0xf3, 0xba, 0x72, 0xca, 0xc8, 0x5c, 0x4e, 0xa2, 0x09, 0xcc, 0x0f, 0x2e,
+  0xd5, 0x6b, 0x4a, 0x26, 0x54, 0x31, 0xd0, 0x56, 0x4a, 0xad, 0x91, 0x73,
+  0xc7, 0x9b, 0x3d, 0x5e, 0xe6, 0x5a, 0x94, 0x1e, 0x0f, 0x8b, 0x75, 0x97,
+  0xf3, 0xac, 0x57, 0x8c, 0x13, 0xe9, 0x8e, 0xa8, 0xbc, 0x87, 0x1c, 0xb0,
+  0x6b, 0x85, 0x65, 0x9a, 0x67, 0x73, 0x82, 0xd4, 0x75, 0x19, 0x8c, 0x10,
+  0x13, 0x81, 0x21, 0x80, 0xce, 0x57, 0x38, 0x0a, 0xa7, 0x04, 0x54, 0x40,
+  0xb6, 0x12, 0x4e, 0x66, 0xf8, 0x43, 0xe0, 0x2e, 0xa8, 0xef, 0x8b, 0xc9,
+  0xd5, 0xeb, 0x77, 0xa3, 0xb5, 0xd5, 0x21, 0x18, 0xad, 0xc9, 0xe1, 0xf9,
+  0xaa, 0x2c, 0x88, 0x18, 0xbc, 0xc8, 0x14, 0xd2, 0x9a, 0xf6, 0xbd, 0xef,
+  0xe2, 0xcd, 0xb5, 0x5e, 0xb0, 0x89, 0xb1, 0xc4, 0xcc, 0xd9, 0x76, 0x23,
+  0x41, 0x9d, 0xb8, 0x48, 0x07, 0x29, 0x1d, 0x05, 0xa9, 0x0f, 0xb8, 0xb6,
+  0xc2, 0x25, 0x4d, 0x49, 0x55, 0xd9, 0x54, 0x9b, 0xac, 0x50, 0x9a, 0x96,
+  0xa0, 0x6c, 0x42, 0xba, 0x46, 0xb1, 0x46, 0xfd, 0xf1, 0x6b, 0xb6, 0xf9,
+  0x38, 0xad, 0x2e, 0xb3, 0x08, 0x6c, 0xb1, 0xbf, 0x42, 0x2d, 0xd8, 0x2f,
+  0x4f, 0x01, 0x30, 0xb4, 0x3a, 0xa3, 0xd7, 0x99, 0x4c, 0xfb, 0x42, 0xad,
+  0xf8, 0xa8, 0x5a, 0x35, 0x25, 0xb3, 0x28, 0xbb, 0x5f, 0x7f, 0x15, 0x5e,
+  0x90, 0xaf, 0xdf, 0xad, 0xe8, 0x8e, 0xbe, 0x19, 0xa8, 0x3c, 0x24, 0x16,
+  0x53, 0x0f, 0xbb, 0x22, 0x5c, 0x0b, 0x01, 0xab, 0x8f, 0x0f, 0x40, 0x91,
+  0xec, 0x1f, 0xe1, 0x12, 0xe6, 0x09, 0xf9, 0xf1, 0xe0, 0x83, 0x82, 0xe1,
+  0x18, 0xef, 0x8a, 0xc0, 0x1d, 0x37, 0x46, 0x5c, 0xcc, 0xf1, 0x8c, 0x83,
+  0xb7, 0x4e, 0xc5, 0x8c, 0xbf, 0x19, 0xd9, 0xa2, 0x95, 0xf8, 0x91, 0x0e,
+  0xf1, 0x23, 0x41, 0xbd, 0xbf, 0xb5, 0x90, 0xf9, 0xec, 0xf2, 0x8f, 0xad,
+  0x5d, 0xab, 0x0e, 0x5b, 0xa1, 0x16, 0x87, 0x74, 0x90, 0x87, 0x7c, 0xe8,
+  0xad, 0x11, 0xc6, 0xe8, 0xbe, 0x7a, 0xfc, 0x64, 0xd8, 0xad, 0xb0, 0xef,
+  0x24, 0x1b, 0x63, 0x73, 0x09, 0xda, 0x6b, 0x93, 0xcb, 0xe3, 0x3d, 0x05,
+  0x92, 0x65, 0xbc, 0xb9, 0x67, 0x9f, 0x3f, 0x7b, 0xba, 0xb9, 0xd9, 0x17,
+  0x6b, 0xa0, 0x26, 0xd9, 0x91, 0x73, 0x8c, 0x58, 0x01, 0x9b, 0xcd, 0x69,
+  0xcc, 0x57, 0x5c, 0xf4, 0x95, 0xfb, 0x8d, 0xd8, 0x37, 0x9d, 0x9a, 0x6b,
+  0x5f, 0xa5, 0x75, 0x21, 0x00, 0x17, 0x30, 0x49, 0x0b, 0xa3, 0x92, 0x2a,
+  0x9b, 0xa9, 0x5d, 0x56, 0xff, 0xca, 0x83, 0x06, 0xdd, 0xc2, 0xa1, 0x18,
+  0xb1, 0xaf, 0x0e, 0x9c, 0x49, 0x2f, 0x2f, 0x42, 0xea, 0x7f, 0x73, 0x74,
+  0x7c, 0x68, 0xf9, 0xc8, 0xff, 0xda, 0x1a, 0xd2, 0x20, 0xab, 0x49, 0xc0,
+  0x35, 0x59, 0x90, 0xf4, 0x10, 0x09, 0x24, 0xcb, 0xfd, 0xdb, 0x3e, 0x6b,
+  0xb3, 0xf8, 0xb8, 0x95, 0xe2, 0x7e, 0xf8, 0xee, 0xbb, 0xa3, 0xb3, 0x93,
+  0x77, 0x6f, 0x0f, 0xdf, 0xd9, 0x64, 0x11, 0xba, 0x9e, 0x63, 0x5e, 0xd5,
+  0x3a, 0x74, 0x58, 0xe5, 0x94, 0x6e, 0x44, 0x02, 0x29, 0x39, 0x10, 0x69,
+  0x16, 0x66, 0xb7, 0xe4, 0xaf, 0xa1, 0xdf, 0x9c, 0xf7, 0x90, 0xee, 0x1b,
+  0x11, 0xc9, 0x82, 0x82, 0xbc, 0xa7, 0x94, 0x8c, 0x37, 0xe4, 0xcc, 0x19,
+  0x76, 0x8e, 0xe5, 0xec, 0xd8, 0xbd, 0x9b, 0x64, 0x52, 0xaa, 0xa3, 0xf6,
+  0xca, 0xa3, 0x6a, 0xea, 0x98, 0x4b, 0xb0, 0x6b, 0x0d, 0xc2, 0x91, 0xda,
+  0x7b, 0x06, 0x59, 0x58, 0xe1, 0x21, 0x06, 0x38, 0x8a, 0x5f, 0x55, 0xea,
+  0x4a, 0x3c, 0x6d, 0xf0, 0xbc, 0x25, 0x6c, 0xe5, 0x4d, 0xbc, 0x5b, 0xd7,
+  0xa1, 0x45, 0x6b, 0x90, 0x45, 0x57, 0xfd, 0xf7, 0x66, 0xd0, 0x0a, 0xbf,
+  0x40, 0x4d, 0xa0, 0x2f, 0x24, 0xd6, 0x22, 0x84, 0xf3, 0xac, 0x7d, 0x87,
+  0xa6, 0xc5, 0x22, 0x52, 0x34, 0x12, 0x38, 0x82, 0xd7, 0xfc, 0xbb, 0xfe,
+  0xc3, 0xe9, 0xd9, 0xc9, 0x0f, 0x3f, 0xfe, 0xce, 0x5d, 0x78, 0x47, 0xfb,
+  0x27, 0xba, 0xf1, 0xb4, 0xf1, 0x5f, 0x7e, 0x53, 0x6f, 0x0f, 0x76, 0xd7,
+  0x6e, 0xbf, 0x2f, 0xd9, 0x99, 0xab, 0xea, 0x59, 0xc0, 0x71, 0xc9, 0x55,
+  0x22, 0xd4, 0x8d, 0xe9, 0x62, 0xaf, 0x2d, 0x73, 0xe0, 0x38, 0xab, 0xba,
+  0x55, 0x46, 0x2c, 0x56, 0x6f, 0x15, 0x15, 0x06, 0x00, 0x63, 0xe1, 0xe4,
+  0x25, 0xbf, 0x90, 0x2e, 0x03, 0x5b, 0xe0, 0xfe, 0xb7, 0xeb, 0xb1, 0x7f,
+  0x7c, 0xfc, 0xdb, 0x17, 0x41, 0x63, 0x17, 0xda, 0xcb, 0x00, 0x03, 0x88,
+  0x9d, 0xd0, 0xc0, 0x0a, 0xb8, 0x4a, 0xfe, 0x11, 0x54, 0x55, 0x3b, 0x9c,
+  0x77, 0x27, 0x32, 0x1a, 0x76, 0x93, 0x0e, 0xea, 0xcc, 0x28, 0x02, 0xf0,
+  0x50, 0x91, 0xca, 0x45, 0xd7, 0x22, 0x0d, 0x2c, 0x28, 0xd4, 0xee, 0x7f,
+  0xc9, 0x77, 0x17, 0xaf, 0x23, 0xa3, 0x6c, 0x21, 0x71, 0xbf, 0xb4, 0x1e,
+  0x7e, 0xae, 0xed, 0x84, 0x92, 0x7d, 0x08, 0x21, 0x89, 0xc4, 0x65, 0x90,
+  0xdd, 0x98, 0x82, 0xbd, 0xaa, 0xbc, 0xbe, 0x06, 0xea, 0x01, 0x1d, 0x4a,
+  0x29, 0x67, 0xce, 0x98, 0x21, 0xa4, 0x31, 0x60, 0x28, 0x66, 0xec, 0x3c,
+  0x62, 0xf3, 0xef, 0xf9, 0xc9, 0xc1, 0xc9, 0xb1, 0xf9, 0xe5, 0xf0, 0xcd,
+  0xd1, 0x0f, 0x8e, 0xa1, 0x31, 0xb8, 0x87, 0x70, 0x5e, 0x65, 0x10, 0xb6,
+  0xf6, 0x53, 0xe8, 0xf0, 0x0f, 0x20, 0xf8, 0xdb, 0x6a, 0xa4, 0x1f, 0x6e,
+  0x24, 0x3e, 0x6f, 0x0f, 0xbb, 0xe5, 0xa1, 0xe8, 0x22, 0xbb, 0xca, 0x47,
+  0xad, 0x1d, 0xc2, 0x45, 0xec, 0x33, 0xbd, 0xf6, 0xde, 0xf2, 0xa0, 0x20,
+  0x4f, 0xe5, 0x17, 0x36, 0x26, 0xd1, 0x37, 0xb8, 0xaa, 0x8d, 0x45, 0x8c,
+  0x2c, 0x64, 0x1b, 0x76, 0x68, 0xf2, 0xa4, 0x71, 0xf7, 0xbd, 0x49, 0xaa,
+  0xf2, 0xed, 0x85, 0x08, 0x49, 0x48, 0xc9, 0x9a, 0x1f, 0xc6, 0xe2, 0x06,
+  0x0b, 0x6f, 0xb5, 0x6d, 0xae, 0x3d, 0x27, 0x59, 0x00, 0x49, 0x18, 0x47,
+  0xca, 0x21, 0x02, 0x20, 0x9c, 0x02, 0x64, 0x83, 0xa9, 0x22, 0xe0, 0x05,
+  0x30, 0xf8, 0x41, 0x99, 0xfc, 0xfb, 0x32, 0xbf, 0x49, 0xb9, 0xca, 0xfa,
+  0x85, 0x2d, 0x09, 0xd5, 0x69, 0x23, 0xfd, 0x4d, 0x8d, 0xa4, 0xed, 0x56,
+  0x9e, 0xfd, 0x96, 0x46, 0x9e, 0x75, 0xda, 0xb8, 0xfa, 0x4d, 0x8d, 0xd8,
+  0x9a, 0x85, 0xe6, 0x5a, 0xfc, 0xe1, 0xe8, 0x3c, 0x39, 0x38, 0x79, 0xed,
+  0x68, 0xf4, 0xdc, 0x5e, 0xed, 0xa9, 0x91, 0x6b, 0x8c, 0x30, 0x0e, 0xfb,
+  0x1a, 0xea, 0x56, 0xc3, 0xc3, 0x20, 0xe5, 0xe4, 0xd9, 0x77, 0x27, 0xb6,
+  0xb0, 0xab, 0x2c, 0xc7, 0x47, 0x15, 0xbb, 0xf6, 0x7c, 0x1f, 0xa0, 0xab,
+  0x3e, 0x8f, 0x6a, 0xf3, 0x1a, 0x01, 0x45, 0x94, 0x4d, 0xa5, 0x4b, 0xd2,
+  0x4a, 0x31, 0x58, 0xc6, 0x29, 0xf9, 0x9e, 0x0b, 0x76, 0xd8, 0x93, 0x26,
+  0xc0, 0x33, 0x80, 0x4d, 0xb1, 0xb4, 0x89, 0xe0, 0x30, 0xf0, 0x50, 0xba,
+  0x34, 0x62, 0xb7, 0x58, 0xfd, 0xcf, 0x1b, 0x19, 0x4d, 0x2b, 0x03, 0x7d,
+  0x47, 0x38, 0x61, 0xd1, 0xa2, 0x18, 0x29, 0x5a, 0x03, 0xc9, 0x8b, 0xa4,
+  0x36, 0xf8, 0xb2, 0x70, 0x1e, 0xe9, 0x5e, 0x2c, 0xac, 0x2e, 0x2f, 0x35,
+  0xa5, 0x03, 0x16, 0x65, 0x9b, 0xb0, 0xfd, 0xec, 0xf2, 0x8f, 0x37, 0xe6,
+  0x96, 0x66, 0x2f, 0xb0, 0xa4, 0x2e, 0xe7, 0xff, 0xf0, 0xee, 0xe8, 0x27,
+  0x2e, 0x5c, 0x67, 0x9e, 0xce, 0x38, 0x88, 0x8a, 0xa3, 0x47, 0x8d, 0xbe,
+  0xd3, 0xa4, 0x77, 0x88, 0x7b, 0x23, 0x91, 0x08, 0x6b, 0x38, 0xf1, 0xd8,
+  0xe0, 0x53, 0x61, 0xce, 0x89, 0xaa, 0xf6, 0x7c, 0xfe, 0xd4, 0x65, 0xe0,
+  0x52, 0x6c, 0x35, 0x88, 0x96, 0x82, 0x7d, 0x04, 0x86, 0x8d, 0x5d, 0x14,
+  0x35, 0x55, 0x10, 0x8f, 0x3b, 0xd8, 0x6d, 0xb7, 0x0a, 0xdb, 0x55, 0x72,
+  0xa0, 0x3d, 0xa2, 0x2b, 0xf2, 0x49, 0x8e, 0xa0, 0x2d, 0x0b, 0x3a, 0x44,
+  0x75, 0x22, 0x79, 0xd1, 0x06, 0x2b, 0xec, 0xb5, 0x25, 0x83, 0x30, 0x0a,
+  0x87, 0x53, 0xf9, 0x63, 0x5a, 0x62, 0x25, 0x39, 0x1c, 0x8d, 0x0a, 0x28,
+  0x9b, 0x2f, 0xee, 0xd9, 0x69, 0x9e, 0x16, 0x65, 0x04, 0x14, 0xcc, 0x6e,
+  0x8c, 0x28, 0xc1, 0x4e, 0xe3, 0x7c, 0xc6, 0x3f, 0x0e, 0x94, 0x97, 0x6b,
+  0x09, 0x41, 0x65, 0xe2, 0x30, 0xf8, 0x48, 0x1d, 0x14, 0xe1, 0x5a, 0x5c,
+  0x57, 0x70, 0xc2, 0x29, 0x8b, 0x34, 0xd7, 0x30, 0xa4, 0x45, 0x5a, 0xf1,
+  0x54, 0x8f, 0xe7, 0x2b, 0xfa, 0x61, 0x84, 0xa9, 0x73, 0x6b, 0xdd, 0xec,
+  0xe6, 0xba, 0x50, 0xfb, 0x61, 0x6b, 0x9f, 0x75, 0x49, 0x44, 0xf3, 0x4e,
+  0x08, 0xfa, 0xb6, 0xf4, 0x33, 0xd0, 0x3e, 0x97, 0x27, 0xc9, 0x0a, 0x71,
+  0x9b, 0x91, 0xe5, 0xc8, 0xc6, 0x48, 0x57, 0xd9, 0x62, 0x66, 0xa7, 0xa8,
+  0x1f, 0x22, 0xe1, 0x0d, 0xce, 0x48, 0xac, 0xf8, 0x44, 0xc6, 0x1b, 0x06,
+  0xe0, 0xf9, 0x02, 0xe3, 0x0b, 0xd7, 0x49, 0x8a, 0x14, 0x25, 0x43, 0x24,
+  0x45, 0x6e, 0x09, 0x52, 0x2a, 0xa1, 0xe3, 0x23, 0x4a, 0xb2, 0x07, 0xac,
+  0xa4, 0xfe, 0xad, 0x6f, 0x84, 0x81, 0x3c, 0x7c, 0x53, 0xb8, 0xec, 0x07,
+  0xac, 0xc3, 0xb2, 0x62, 0xa8, 0x1b, 0x57, 0xcf, 0x47, 0x03, 0x31, 0x78,
+  0x21, 0x2a, 0x82, 0x87, 0x1d, 0x26, 0x6f, 0xc3, 0xd4, 0xe9, 0xf2, 0xa2,
+  0x11, 0xf4, 0x3f, 0xb2, 0xb4, 0x4f, 0xbd, 0xda, 0x75, 0xb8, 0x92, 0xbd,
+  0x72, 0x44, 0x5c, 0x27, 0x41, 0xee, 0x1d, 0x04, 0x60, 0x26, 0x21, 0x26,
+  0x80, 0x03, 0xc0, 0x74, 0xeb, 0xb0, 0xb3, 0xd3, 0x5d, 0xec, 0xd3, 0xfd,
+  0xd1, 0x48, 0x17, 0xfa, 0xc0, 0x5f, 0x50, 0x5e, 0x42, 0x49, 0x11, 0x22,
+  0xf8, 0x49, 0x45, 0x28, 0x0e, 0xd5, 0x1d, 0x69, 0xa3, 0x93, 0x5a, 0xb8,
+  0xf3, 0xc4, 0xf6, 0x65, 0xbb, 0xfa, 0x8e, 0xdb, 0xea, 0x7f, 0x64, 0x57,
+  0xf1, 0xbe, 0xbe, 0x8b, 0xf4, 0xf5, 0x34, 0x20, 0xa2, 0xdd, 0xdd, 0xcf,
+  0x14, 0x87, 0x86, 0x4b, 0x2b, 0xcc, 0x12, 0xd7, 0xa1, 0xd7, 0xa3, 0x79,
+  0x6e, 0x00, 0x5b, 0x65, 0xd8, 0x97, 0xd0, 0x05, 0x8d, 0xc6, 0xeb, 0xea,
+  0x99, 0xed, 0xca, 0xe8, 0x4c, 0xeb, 0x70, 0x9a, 0xc9, 0x21, 0x09, 0xce,
+  0x8e, 0x22, 0xb4, 0x51, 0x32, 0xef, 0xad, 0x39, 0x40, 0x74, 0x14, 0x45,
+  0xc4, 0xe8, 0x74, 0xa5, 0xa3, 0xf0, 0xfa, 0xf9, 0xcc, 0x4d, 0xc9, 0x8d,
+  0x9b, 0x14, 0x1b, 0x01, 0x19, 0x1c, 0x7a, 0x87, 0xd5, 0x12, 0x8a, 0xa6,
+  0x27, 0xd8, 0x70, 0xb9, 0x2e, 0x9f, 0xe1, 0x57, 0x5d, 0x2f, 0x7c, 0xfc,
+  0x4e, 0x89, 0x88, 0xa5, 0x76, 0xd6, 0x30, 0x39, 0x81, 0x12, 0xd6, 0x42,
+  0x83, 0x86, 0x2a, 0x4b, 0xc7, 0xdd, 0x56, 0x45, 0xf1, 0x4f, 0xfb, 0xce,
+  0x0b, 0xb7, 0x26, 0x3a, 0x24, 0x75, 0x5a, 0x6e, 0xc9, 0xf1, 0x71, 0xfe,
+  0x11, 0x8d, 0x49, 0xc8, 0x10, 0x21, 0x42, 0x49, 0x67, 0x40, 0xdf, 0x0d,
+  0x10, 0x2a, 0xcd, 0x91, 0xda, 0xb4, 0xae, 0x85, 0x0b, 0x70, 0x12, 0xef,
+  0x0e, 0x72, 0x94, 0xfc, 0xf7, 0x25, 0x31, 0x24, 0xdc, 0xba, 0x84, 0x38,
+  0xc6, 0x7f, 0xea, 0x7b, 0x0c, 0x53, 0x43, 0x15, 0xf6, 0x70, 0x2b, 0xbb,
+  0xbc, 0x2c, 0x39, 0x19, 0x76, 0xfd, 0x5d, 0x92, 0x2c, 0xd7, 0xb3, 0x61,
+  0xc6, 0x69, 0xa1, 0x2a, 0x86, 0x36, 0xb5, 0x59, 0x61, 0x5b, 0x80, 0x8e,
+  0x22, 0x0c, 0x90, 0xc1, 0x1e, 0x02, 0x8f, 0x91, 0xed, 0x5c, 0x98, 0xbe,
+  0x0c, 0xa2, 0x1d, 0x99, 0xe8, 0x49, 0x17, 0x89, 0xd8, 0x07, 0x92, 0xa7,
+  0xdb, 0xdb, 0x11, 0x30, 0x84, 0x74, 0x5c, 0xde, 0x68, 0x84, 0xaf, 0xc0,
+  0xef, 0xe0, 0x2d, 0x56, 0x9a, 0x21, 0x5a, 0xd4, 0x24, 0xa6, 0x0e, 0x2e,
+  0xc8, 0x26, 0x40, 0x2b, 0xa6, 0x1e, 0x21, 0x6f, 0xdd, 0xf8, 0x54, 0x7e,
+  0x0f, 0x38, 0x20, 0x5d, 0xb4, 0xce, 0x71, 0x64, 0xac, 0x20, 0x2d, 0x79,
+  0x93, 0x7a, 0x75, 0xd5, 0x24, 0x4a, 0x22, 0x18, 0x59, 0x10, 0xca, 0xb4,
+  0xfb, 0x2c, 0xa4, 0x88, 0xd1, 0xf9, 0xc9, 0x99, 0x50, 0x58, 0xc8, 0x75,
+  0x25, 0x17, 0x93, 0x1e, 0x71, 0x51, 0xce, 0xfd, 0x58, 0x20, 0xa6, 0x1a,
+  0xe4, 0x39, 0xcd, 0xd6, 0x2c, 0x97, 0xd7, 0x2b, 0x5f, 0x62, 0x88, 0xac,
+  0x94, 0xa9, 0x7d, 0x27, 0x16, 0x78, 0x2d, 0xbd, 0x45, 0x97, 0xf1, 0x2c,
+  0x9b, 0x7b, 0xfa, 0xc0, 0x2e, 0x1f, 0xb4, 0x93, 0x25, 0x88, 0x9d, 0x0d,
+  0xc6, 0x44, 0x47, 0x62, 0x3a, 0xa6, 0xa0, 0x62, 0xb1, 0xa6, 0x59, 0xd7,
+  0x60, 0x97, 0x16, 0xf9, 0x10, 0x9d, 0xd8, 0xea, 0x6a, 0x1a, 0x46, 0x60,
+  0xef, 0x2e, 0xa7, 0xba, 0xc2, 0x6d, 0x4d, 0x0e, 0x27, 0x0e, 0xca, 0x90,
+  0xdc, 0xdb, 0x94, 0x92, 0x59, 0xba, 0xbb, 0xad, 0xb1, 0x65, 0x1a, 0x4d,
+  0xe6, 0x89, 0x8a, 0x4e, 0xca, 0xda, 0xb6, 0xeb, 0x7c, 0x7a, 0x72, 0x76,
+  0xae, 0x43, 0x43, 0xb7, 0xf8, 0xa0, 0x73, 0x7e, 0x08, 0x7a, 0x4e, 0xe0,
+  0x92, 0xc0, 0x59, 0xa4, 0xf4, 0xce, 0x5a, 0xd4, 0xea, 0x2f, 0x9b, 0x82,
+  0x76, 0xb4, 0x21, 0xd2, 0xd9, 0xaa, 0x7b, 0x8d, 0x2a, 0x23, 0x6d, 0xc7,
+  0xf2, 0x1c, 0x36, 0xa3, 0x10, 0x83, 0x8e, 0xbb, 0x7b, 0x9d, 0x4c, 0xf3,
+  0x64, 0x27, 0xa4, 0x0e, 0x52, 0x9e, 0xcf, 0x0e, 0x47, 0xe7, 0x3c, 0x76,
+  0xfa, 0x2d, 0x18, 0x3b, 0x5b, 0x71, 0xe5, 0xc3, 0x78, 0x90, 0x0a, 0xa8,
+  0x83, 0x92, 0xa4, 0x28, 0x64, 0x9f, 0xda, 0xb7, 0x56, 0x65, 0x6f, 0xcd,
+  0x9e, 0x78, 0x09, 0xf1, 0x60, 0x9b, 0x42, 0x2b, 0x48, 0xb0, 0xc6, 0x07,
+  0x3d, 0xe9, 0xa5, 0x67, 0x6e, 0x5d, 0x3e, 0x12, 0x84, 0x7f, 0xee, 0x5a,
+  0x78, 0xea, 0x5a, 0x58, 0x10, 0x7f, 0x97, 0x06, 0x8e, 0xd4, 0xbb, 0x4e,
+  0x1f, 0xda, 0xa0, 0xe7, 0xcb, 0xac, 0x50, 0xc2, 0xe0, 0xe7, 0x5c, 0x3b,
+  0xcf, 0xac, 0xf7, 0x48, 0xe5, 0x23, 0x6f, 0x28, 0xf4, 0xb1, 0xe6, 0x21,
+  0x23, 0x84, 0xaf, 0x43, 0x76, 0x4f, 0x9e, 0xbb, 0x1b, 0x82, 0x54, 0x09,
+  0x17, 0x27, 0x22, 0x2b, 0xe0, 0xdd, 0x48, 0x14, 0x67, 0x93, 0x17, 0xcb,
+  0x0c, 0x46, 0xb3, 0xb4, 0x9a, 0x11, 0x40, 0xbf, 0x04, 0x7a, 0x04, 0x6e,
+  0x69, 0xc9, 0xa9, 0x77, 0xfd, 0xc8, 0x4d, 0x74, 0x74, 0x7c, 0xe8, 0xb6,
+  0x8b, 0xa1, 0xfd, 0x71, 0x98, 0x9d, 0x90, 0x67, 0x0e, 0x6e, 0x61, 0xaf,
+  0x8b, 0x61, 0x72, 0x4a, 0xb5, 0x2e, 0xe1, 0x7e, 0xaa, 0xff, 0xdd, 0xb5,
+  0xc6, 0x87, 0x05, 0xc6, 0x18, 0x73, 0x81, 0xc2, 0x28, 0x9a, 0x17, 0x66,
+  0x77, 0xf1, 0x09, 0xfd, 0xea, 0x95, 0x29, 0x0c, 0xa6, 0xfc, 0xc2, 0xbd,
+  0x5c, 0x9b, 0x79, 0x18, 0x55, 0xad, 0xfb, 0xc8, 0x53, 0xa1, 0x2d, 0xa3,
+  0xc7, 0xa1, 0x09, 0xcb, 0x9e, 0xe9, 0x4c, 0x57, 0x5c, 0xf7, 0x66, 0xca,
+  0x2d, 0x5c, 0xe8, 0x33, 0x2d, 0x36, 0xee, 0x35, 0xc5, 0x97, 0xc2, 0x3e,
+  0xaf, 0x13, 0x92, 0x0d, 0xcc, 0xc9, 0x21, 0x67, 0x89, 0x69, 0xab, 0x20,
+  0x8e, 0x3b, 0xb3, 0xc0, 0xcd, 0x7e, 0xf6, 0x18, 0x16, 0x56, 0x20, 0x18,
+  0x43, 0x58, 0xe8, 0x4e, 0xe1, 0xce, 0xa7, 0x4c, 0x8d, 0x96, 0x74, 0xec,
+  0x3d, 0xd6, 0x1a, 0x1d, 0x75, 0xec, 0x92, 0xae, 0x68, 0xb7, 0xc9, 0x34,
+  0x64, 0x6e, 0x79, 0x5f, 0xba, 0x7b, 0xfa, 0xcc, 0x35, 0x75, 0x81, 0x72,
+  0x25, 0xca, 0xdf, 0xf7, 0x5b, 0x3c, 0xc8, 0xd6, 0xbe, 0xc8, 0xed, 0x93,
+  0xac, 0x2c, 0xb0, 0x85, 0x3a, 0x72, 0xac, 0xbc, 0x3e, 0x98, 0x18, 0xce,
+  0x4b, 0x8a, 0x98, 0x28, 0xee, 0x1d, 0xe6, 0xca, 0x90, 0x63, 0x10, 0xd9,
+  0x06, 0xc1, 0x75, 0x60, 0x2c, 0x1a, 0x0b, 0x6b, 0x9b, 0xa2, 0xa0, 0xcf,
+  0xd3, 0xbb, 0xe0, 0xaa, 0x9f, 0x2f, 0xe7, 0x02, 0x35, 0xe1, 0xf5, 0xf4,
+  0xb9, 0x68, 0xb3, 0x54, 0xfa, 0xab, 0x70, 0xfa, 0x9f, 0xcf, 0x4c, 0x4b,
+  0xeb, 0x22, 0xb6, 0x09, 0x9b, 0x1c, 0xd4, 0x5d, 0xdb, 0x4a, 0x82, 0x11,
+  0x80, 0x7e, 0xba, 0x90, 0x45, 0x4c, 0xd4, 0xa0, 0xc8, 0xd2, 0x83, 0x0a,
+  0xa5, 0xf5, 0x96, 0xc7, 0xf8, 0xab, 0x07, 0x7c, 0xf6, 0x55, 0xf6, 0x37,
+  0x14, 0xf0, 0x1d, 0xf2, 0xa5, 0xc3, 0x58, 0x5d, 0x3c, 0x4b, 0x0a, 0x59,
+  0x70, 0x2c, 0xef, 0xe9, 0x0b, 0x31, 0x55, 0x88, 0x2a, 0xac, 0x55, 0x65,
+  0xbb, 0x96, 0xe6, 0x67, 0x3b, 0x2e, 0x9d, 0x24, 0xcb, 0xaa, 0xf5, 0x9a,
+  0xb9, 0x83, 0x87, 0xef, 0x40, 0x30, 0xbc, 0xa3, 0x6f, 0x92, 0xb7, 0xaf,
+  0x9f, 0x51, 0x86, 0xf1, 0x65, 0x56, 0x51, 0xc1, 0x66, 0xa7, 0x8b, 0x9d,
+  0x7c, 0xeb, 0x35, 0xb6, 0xeb, 0xc7, 0x04, 0xb0, 0xfe, 0x24, 0x0c, 0x4d,
+  0x24, 0x6d, 0xb3, 0x85, 0x84, 0x54, 0x78, 0xa9, 0x2e, 0x14, 0xc5, 0x8a,
+  0x57, 0x08, 0x4f, 0xc8, 0x2e, 0xdd, 0xdc, 0x94, 0x36, 0x13, 0x7b, 0xf6,
+  0xc4, 0x31, 0xb1, 0xea, 0x7e, 0x41, 0x05, 0x30, 0x8a, 0x4b, 0x12, 0xa8,
+  0x23, 0x27, 0xea, 0x19, 0x33, 0xce, 0x03, 0x3e, 0xf7, 0x24, 0xcc, 0x86,
+  0xaf, 0x01, 0x2d, 0x11, 0xde, 0x0e, 0xef, 0xbd, 0x67, 0xbe, 0x3a, 0x49,
+  0xb5, 0xe8, 0x88, 0xc2, 0xa4, 0x2e, 0x05, 0x24, 0x15, 0xef, 0xd9, 0xe7,
+  0xf6, 0x59, 0xb2, 0x1d, 0xe4, 0x85, 0x57, 0x21, 0x68, 0xc5, 0x1b, 0x22,
+  0x04, 0xb3, 0x68, 0xe0, 0xc4, 0x33, 0x96, 0x7b, 0xbc, 0xb5, 0xf7, 0x5e,
+  0x79, 0xd1, 0xd6, 0x96, 0x51, 0xae, 0xd4, 0x12, 0x26, 0x26, 0x95, 0x2f,
+  0xae, 0xfc, 0xc3, 0xf9, 0x9c, 0x6f, 0xea, 0xd3, 0x2e, 0x5c, 0x87, 0xf2,
+  0xc0, 0xcc, 0xf7, 0xdd, 0xe9, 0x51, 0x67, 0xd2, 0x3f, 0xd8, 0x4f, 0xf4,
+  0x95, 0xee, 0xc1, 0x01, 0xad, 0x7b, 0x9d, 0xec, 0xc8, 0x99, 0x31, 0x53,
+  0x2e, 0x2f, 0x8b, 0xfc, 0x1f, 0x8a, 0x37, 0x4a, 0xf7, 0xb3, 0x56, 0x77,
+  0xf2, 0x1e, 0xdf, 0x15, 0x86, 0x71, 0x93, 0xce, 0x72, 0x61, 0x8a, 0x64,
+  0x47, 0x77, 0x0f, 0x3c, 0x11, 0xaa, 0xbd, 0xcb, 0xe9, 0x88, 0x72, 0xa4,
+  0x2c, 0xd5, 0xc9, 0x23, 0x0f, 0x4e, 0xd6, 0x42, 0x7f, 0x79, 0xfe, 0x54,
+  0x64, 0x2f, 0x95, 0x8f, 0xe9, 0x5e, 0xa2, 0x85, 0x98, 0x01, 0xf4, 0xbf,
+  0xcb, 0xa6, 0x9f, 0xcb, 0xd5, 0x27, 0x5b, 0x29, 0x41, 0x5a, 0xa9, 0x72,
+  0xe8, 0x1a, 0xe8, 0x4b, 0xb7, 0x79, 0x21, 0xd9, 0x62, 0xc1, 0xeb, 0xcf,
+  0x57, 0x98, 0xa0, 0x6a, 0xbe, 0x37, 0x0f, 0x41, 0x4b, 0xde, 0xf3, 0x9f,
+  0xb9, 0x93, 0xc0, 0x15, 0xf0, 0xb8, 0x66, 0x82, 0xcd, 0x80, 0x42, 0xec,
+  0x9e, 0x16, 0xd6, 0xd1, 0xb3, 0x44, 0xaa, 0xcb, 0x02, 0x76, 0xda, 0x62,
+  0x1a, 0x4b, 0xcd, 0xbc, 0xb0, 0xdd, 0xcf, 0x4a, 0xe2, 0xa6, 0x5e, 0x7f,
+  0x4c, 0x52, 0x6f, 0x50, 0x7e, 0xd6, 0x29, 0x08, 0x45, 0xab, 0x50, 0xa4,
+  0x7b, 0xfa, 0x85, 0xd0, 0x86, 0xde, 0x97, 0x2a, 0xa6, 0xae, 0x7c, 0xe3,
+  0xb3, 0x6d, 0x5f, 0x68, 0x9d, 0x92, 0xa5, 0x9e, 0x71, 0x37, 0x57, 0xbe,
+  0xc0, 0x94, 0x71, 0x34, 0xa3, 0x9a, 0x8b, 0x33, 0xad, 0xe4, 0xa8, 0xe8,
+  0xcf, 0xee, 0xb1, 0xdd, 0x16, 0xd3, 0x3d, 0xf7, 0x45, 0xa8, 0xe4, 0xe8,
+  0xb5, 0xf7, 0xe0, 0x13, 0x37, 0xc1, 0x74, 0x46, 0xd2, 0xc0, 0x3d, 0x5b,
+  0x22, 0x6a, 0xa9, 0x21, 0xe9, 0x3d, 0xfa, 0x54, 0x12, 0x7e, 0x38, 0xda,
+  0x05, 0xcb, 0x1f, 0x3c, 0xc3, 0xe4, 0x70, 0x80, 0x1c, 0xbd, 0x06, 0x30,
+  0x15, 0x85, 0x7a, 0x0b, 0xba, 0x7b, 0xff, 0xd9, 0xf3, 0x07, 0x9e, 0x95,
+  0x4b, 0xb3, 0xb6, 0x57, 0xbd, 0xf7, 0xde, 0x67, 0xe1, 0x31, 0x57, 0xb5,
+  0x40, 0xd1, 0x74, 0xcc, 0x51, 0xa3, 0x93, 0x96, 0x6c, 0x10, 0x0a, 0xe3,
+  0xbf, 0xab, 0xe9, 0xa7, 0xa2, 0x5c, 0xc5, 0xfa, 0xdf, 0xfd, 0xf1, 0x7e,
+  0xee, 0x43, 0xf2, 0xb0, 0xd1, 0xc7, 0x56, 0x8c, 0xf7, 0xab, 0xc8, 0xba,
+  0x88, 0x72, 0xac, 0x8e, 0xd7, 0x02, 0xef, 0xb9, 0x91, 0x23, 0x96, 0x85,
+  0xe3, 0x1c, 0xac, 0x0c, 0x0a, 0x92, 0xa9, 0xc6, 0x76, 0xcb, 0xe8, 0xbe,
+  0x31, 0x9b, 0x0a, 0xea, 0xf0, 0x8c, 0x67, 0xdb, 0x9d, 0x63, 0x50, 0x5f,
+  0x2d, 0x59, 0xf5, 0xb6, 0x33, 0x72, 0x08, 0x5a, 0xde, 0x6b, 0xbb, 0x8e,
+  0x7b, 0x61, 0x6c, 0x90, 0x1a, 0x0f, 0xcc, 0x68, 0x59, 0x37, 0xb7, 0x38,
+  0xf6, 0x30, 0xbc, 0xde, 0x56, 0x25, 0xfd, 0xaa, 0x98, 0xbe, 0x1b, 0xe9,
+  0x0a, 0xcc, 0x33, 0x01, 0xb8, 0xf1, 0xba, 0x11, 0xd1, 0x86, 0x02, 0xe2,
+  0xcd, 0x2e, 0x5d, 0x65, 0x93, 0x6b, 0x3d, 0x32, 0x1b, 0x69, 0x07, 0x16,
+  0xc7, 0x7b, 0xeb, 0xa9, 0x5d, 0x5a, 0xa8, 0x35, 0x67, 0x87, 0x5d, 0x4d,
+  0xc0, 0x3d, 0xca, 0x54, 0x73, 0x76, 0x3e, 0x3a, 0xdd, 0xa3, 0x31, 0xb3,
+  0x0b, 0xc6, 0x1c, 0x88, 0x83, 0x51, 0xf6, 0x77, 0xc9, 0x89, 0xae, 0xdd,
+  0xd3, 0xcf, 0x57, 0x3c, 0x3d, 0x92, 0x18, 0xa9, 0xa3, 0x29, 0xb1, 0x5f,
+  0xb3, 0x0f, 0xfe, 0x4b, 0x9f, 0x09, 0xc8, 0x84, 0x9a, 0x76, 0xd9, 0x72,
+  0x44, 0x23, 0xb3, 0x29, 0x35, 0xee, 0xe1, 0xcf, 0x9d, 0x5e, 0x73, 0xb5,
+  0x2c, 0xae, 0xad, 0xbc, 0x28, 0x01, 0x6c, 0xba, 0xc1, 0xee, 0x85, 0x17,
+  0x7a, 0x34, 0x3c, 0xa0, 0x33, 0xeb, 0xfe, 0xee, 0x8b, 0xa5, 0x42, 0x63,
+  0x56, 0xd9, 0x77, 0x64, 0xf8, 0xeb, 0xd2, 0x5b, 0x83, 0x17, 0xdb, 0xf6,
+  0xfa, 0x5d, 0x2c, 0xc7, 0x46, 0x20, 0x4d, 0xae, 0xb3, 0x7b, 0x47, 0x75,
+  0xec, 0xb2, 0x33, 0xe2, 0x62, 0x5e, 0x90, 0x21, 0xc2, 0x3d, 0x62, 0x1b,
+  0xf8, 0xe1, 0x07, 0xe6, 0xf1, 0x36, 0x82, 0x4a, 0x5c, 0x0b, 0xb6, 0xd6,
+  0xba, 0x61, 0x88, 0x2c, 0x16, 0xd0, 0xf1, 0x82, 0x3d, 0xbe, 0xca, 0x66,
+  0x19, 0x61, 0xa7, 0xb3, 0x9e, 0x02, 0xc2, 0x8e, 0xa5, 0x60, 0x52, 0x8c,
+  0x31, 0xdc, 0x2a, 0x94, 0xe9, 0x0c, 0x83, 0x5e, 0x41, 0x81, 0xa9, 0x62,
+  0xac, 0x32, 0x3b, 0xbe, 0xff, 0xfe, 0xfc, 0x9b, 0x93, 0xb3, 0x51, 0xb2,
+  0x45, 0xa0, 0x96, 0xe7, 0x67, 0x47, 0x5f, 0xbd, 0x37, 0xfa, 0xbf, 0x75,
+  0xcb, 0xbc, 0x4e, 0x8b, 0xdc, 0xdc, 0x1c, 0xa3, 0x26, 0x2b, 0xcc, 0x3e,
+  0x5e, 0x6a, 0x3d, 0x5f, 0x84, 0xe8, 0xd0, 0x5d, 0x59, 0x56, 0x5c, 0xf6,
+  0x0c, 0xe9, 0x71, 0x57, 0xa5, 0x6c, 0x06, 0x07, 0x5b, 0x52, 0x5a, 0x01,
+  0x65, 0x6b, 0x94, 0x4e, 0xb7, 0xcd, 0x3b, 0x98, 0x9c, 0xea, 0x5d, 0x4d,
+  0xce, 0xbf, 0xd9, 0x7f, 0xf7, 0xed, 0x48, 0xab, 0x3c, 0x7c, 0xff, 0xfd,
+  0xf7, 0xbe, 0xd7, 0xbf, 0xde, 0xdb, 0xda, 0x82, 0x7c, 0x79, 0x95, 0xde,
+  0xdd, 0x0d, 0xeb, 0x6c, 0x6d, 0xed, 0x8d, 0x73, 0xd6, 0xb9, 0x72, 0xcc,
+  0xf5, 0xd2, 0x88, 0x16, 0xe6, 0xeb, 0x2d, 0xb3, 0xc0, 0x54, 0xfe, 0x79,
+  0x6b, 0xd9, 0xe4, 0x33, 0x73, 0x23, 0x65, 0x35, 0xde, 0xde, 0x5a, 0x5b,
+  0x1b, 0x1d, 0x1e, 0x26, 0xfb, 0xc7, 0xa3, 0x13, 0xef, 0xdd, 0x8d, 0x1d,
+  0x0a, 0x5d, 0xb9, 0xcc, 0x9a, 0x0d, 0x02, 0x88, 0x3d, 0xde, 0x3f, 0x27,
+  0xa5, 0xf7, 0xbb, 0xc3, 0xb3, 0xd1, 0xd1, 0xc9, 0x3b, 0xda, 0x1e, 0x8a,
+  0x58, 0x4c, 0x67, 0xb7, 0x14, 0xb0, 0x7a, 0x91, 0x03, 0xad, 0xe7, 0x56,
+  0x6b, 0x2b, 0x77, 0xa1, 0xf7, 0xcd, 0x85, 0x75, 0x4b, 0xb0, 0xd9, 0x12,
+  0xe9, 0x40, 0x91, 0xeb, 0x66, 0x29, 0x34, 0x14, 0x71, 0x2d, 0x71, 0x86,
+  0x2f, 0x46, 0xf5, 0xcd, 0xc6, 0x1c, 0x5f, 0xdd, 0x67, 0x8c, 0x0b, 0xe4,
+  0xb7, 0x78, 0x81, 0x93, 0xf1, 0x99, 0x8f, 0x8e, 0xa8, 0xd6, 0x4e, 0xf2,
+  0x7e, 0xb4, 0xff, 0xf5, 0x21, 0x3d, 0xfb, 0x75, 0xd6, 0xb8, 0x1d, 0xe1,
+  0x22, 0xd0, 0xd4, 0xcb, 0xbb, 0xac, 0xa9, 0x27, 0xe9, 0x82, 0x92, 0xf8,
+  0x4d, 0x3f, 0x03, 0xbe, 0x89, 0xbc, 0xc6, 0x59, 0x1b, 0x70, 0x95, 0xb2,
+  0x0b, 0x79, 0x1e, 0x65, 0xac, 0xfd, 0x76, 0xcf, 0x0e, 0xf7, 0x5f, 0xbf,
+  0x3d, 0xd4, 0x10, 0x7d, 0xae, 0x6f, 0x62, 0x1a, 0xbd, 0xa2, 0xd2, 0xc1,
+  0xce, 0x1a, 0x4e, 0xd2, 0x01, 0xad, 0xbe, 0xf9, 0x86, 0x2a, 0xf9, 0xc6,
+  0xbb, 0x73, 0x3b, 0x85, 0x67, 0x87, 0x17, 0xf9, 0x16, 0xb7, 0xae, 0xfd,
+  0xa5, 0x76, 0x4d, 0x78, 0x12, 0xa9, 0x0a, 0xcc, 0x6c, 0xd5, 0x80, 0x39,
+  0xe4, 0xf3, 0xed, 0xed, 0xed, 0x07, 0xe6, 0x01, 0x8d, 0x42, 0xee, 0x5d,
+  0x33, 0x95, 0x3d, 0x7a, 0x7c, 0xcb, 0xb5, 0xef, 0x46, 0x3c, 0x13, 0xc4,
+  0x04, 0x2a, 0x4d, 0x58, 0x30, 0x3c, 0x6f, 0xde, 0x64, 0xf1, 0x21, 0x4f,
+  0xca, 0xd2, 0xee, 0x40, 0x6b, 0x71, 0x8c, 0x8c, 0x0c, 0x99, 0x47, 0x62,
+  0x3b, 0xf1, 0x06, 0x0f, 0xdc, 0x68, 0x40, 0x88, 0x67, 0xab, 0xee, 0xbb,
+  0x4d, 0xd2, 0x37, 0xa6, 0x4d, 0xfa, 0x31, 0x2c, 0xab, 0xcb, 0xad, 0xf9,
+  0x1e, 0x84, 0x1a, 0xf3, 0xd0, 0x1b, 0xc2, 0x53, 0x49, 0x8c, 0x70, 0x6c,
+  0xc3, 0xd2, 0x6b, 0x5a, 0x58, 0xca, 0xa0, 0xf9, 0x88, 0x71, 0xfd, 0x8a,
+  0x55, 0xe0, 0x98, 0xa8, 0x0b, 0x9d, 0xb9, 0xd6, 0x26, 0x8d, 0x74, 0x42,
+  0xf4, 0x07, 0x9b, 0xe3, 0xd0, 0xb0, 0x10, 0xd3, 0x0b, 0x05, 0xbc, 0x81,
+  0x44, 0xcc, 0xaf, 0x95, 0x21, 0x99, 0x61, 0x73, 0x07, 0xce, 0x2b, 0x85,
+  0x72, 0x19, 0x5d, 0x92, 0x7c, 0xb8, 0x0b, 0x4a, 0x73, 0xad, 0x50, 0x61,
+  0x07, 0x3d, 0x50, 0xea, 0xac, 0xe1, 0x3d, 0x97, 0xb2, 0x70, 0x88, 0x02,
+  0xa2, 0x86, 0xbb, 0x7d, 0x0e, 0x06, 0xa0, 0x9f, 0xda, 0x52, 0xcb, 0x47,
+  0x74, 0xee, 0x4d, 0x8a, 0x57, 0xbf, 0x90, 0x8b, 0xda, 0xa3, 0x9d, 0x91,
+  0x19, 0x45, 0xd0, 0xd7, 0xd2, 0x95, 0xfa, 0xad, 0xb9, 0x3b, 0xaf, 0x4c,
+  0x15, 0x61, 0xd1, 0x6d, 0x21, 0x8f, 0xec, 0xa3, 0xfb, 0x38, 0x38, 0x95,
+  0xdf, 0x28, 0x9a, 0x26, 0xbf, 0xa1, 0xc9, 0x13, 0x93, 0x37, 0xd7, 0x35,
+  0xdd, 0x02, 0x2a, 0xe5, 0x22, 0x38, 0x07, 0x0a, 0x2b, 0x72, 0x1e, 0x7c,
+  0x8d, 0xe3, 0x81, 0x11, 0xee, 0x99, 0xa5, 0xa1, 0x4b, 0xe5, 0x7f, 0x6d,
+  0x0d, 0xeb, 0xfa, 0x6a, 0x2b, 0x9f, 0x7e, 0xa8, 0xea, 0x34, 0xf9, 0xb9,
+  0xcd, 0xf1, 0xeb, 0x49, 0x77, 0x12, 0xff, 0x0b, 0x2b, 0xf8, 0xab, 0x56,
+  0x6a, 0xf5, 0x2c, 0x3e, 0xc5, 0x0c, 0x06, 0x03, 0xc0, 0x3b, 0x48, 0x4f,
+  0x1f, 0xcc, 0x03, 0x1f, 0x2c, 0x46, 0xc5, 0x6f, 0x98, 0x5d, 0x84, 0x15,
+  0x9a, 0x49, 0x72, 0xa8, 0xb9, 0xe1, 0x2d, 0x71, 0x42, 0xd7, 0x92, 0x40,
+  0x3f, 0xed, 0x6e, 0x6f, 0xef, 0xec, 0xed, 0x7c, 0xfe, 0x62, 0x7b, 0x6f,
+  0x67, 0x67, 0x67, 0x77, 0x6f, 0x67, 0x6f, 0x6f, 0x77, 0xfb, 0x97, 0xad,
+  0xde, 0xaa, 0xa5, 0x7b, 0xfb, 0xd5, 0x8a, 0x06, 0xcd, 0xac, 0x7b, 0x1c,
+  0xc7, 0xfa, 0xb3, 0x9d, 0x3d, 0x66, 0x35, 0xed, 0x25, 0xf5, 0x7c, 0x6c,
+  0xba, 0x92, 0xc3, 0xe9, 0x4f, 0xa6, 0x36, 0xb2, 0x74, 0xe6, 0x4d, 0xe8,
+  0xf5, 0xc9, 0xf7, 0xef, 0x8e, 0x4f, 0xf6, 0x5f, 0x27, 0xe7, 0x27, 0xc9,
+  0x3e, 0x2c, 0x7f, 0x11, 0x3e, 0x89, 0x58, 0x74, 0xca, 0xb9, 0x64, 0x80,
+  0x0c, 0xe7, 0x25, 0x50, 0x33, 0x95, 0x0d, 0x7e, 0xc2, 0x20, 0xba, 0xe3,
+  0x2c, 0xa1, 0xd9, 0x51, 0x4b, 0xc3, 0xab, 0x66, 0xfe, 0xf8, 0x8d, 0xf0,
+  0x31, 0x3d, 0xf7, 0xd9, 0x19, 0xef, 0x94, 0x77, 0x0c, 0x47, 0x4f, 0xbe,
+  0x24, 0x36, 0x89, 0x4b, 0x4b, 0x1c, 0xd9, 0x36, 0x0d, 0x67, 0x83, 0x43,
+  0xb7, 0xf0, 0x06, 0xce, 0x25, 0xfc, 0x5f, 0xdd, 0xf0, 0x20, 0x11, 0xeb,
+  0xfb, 0x1a, 0x29, 0x01, 0x29, 0x89, 0xc4, 0xd2, 0xcd, 0x60, 0x82, 0x27,
+  0x2b, 0xa7, 0x64, 0x2e, 0xf3, 0xec, 0x0e, 0xb3, 0x6e, 0xf3, 0x5e, 0x0e,
+  0x74, 0x76, 0xb3, 0x43, 0xb9, 0x06, 0x35, 0x47, 0xe4, 0x95, 0x0e, 0x19,
+  0x31, 0x5e, 0x91, 0xee, 0xa8, 0x1f, 0x65, 0xc9, 0xae, 0x0b, 0xfa, 0xc6,
+  0xbf, 0xc7, 0xb7, 0xac, 0x85, 0x97, 0x07, 0xf0, 0x7e, 0x74, 0xf4, 0xee,
+  0x6b, 0xf8, 0x70, 0xbf, 0x3f, 0x39, 0x7b, 0x3d, 0x32, 0xcd, 0x92, 0x84,
+  0xb3, 0x06, 0x23, 0x1f, 0x71, 0x42, 0x19, 0x15, 0x9f, 0x4b, 0xea, 0xfa,
+  0x2f, 0x4c, 0x4e, 0x7d, 0x0b, 0x29, 0x81, 0x61, 0x7a, 0x2a, 0x0f, 0x21,
+  0x45, 0xc4, 0x6f, 0x0d, 0x8f, 0x1a, 0xbf, 0x9c, 0xa7, 0x93, 0x2b, 0xd2,
+  0xd1, 0x99, 0x58, 0x11, 0x6c, 0xb7, 0x45, 0x59, 0x33, 0x5b, 0xa4, 0x7a,
+  0x6d, 0x35, 0x25, 0xc8, 0x11, 0xad, 0x70, 0xbe, 0xa2, 0xd6, 0x79, 0xf3,
+  0x0c, 0x34, 0x86, 0xd6, 0x2f, 0x66, 0xe9, 0x25, 0x3a, 0x0c, 0x8f, 0x81,
+  0xd7, 0x99, 0x74, 0xff, 0xb1, 0x5d, 0xd2, 0xb5, 0x81, 0xf6, 0x8e, 0x40,
+  0x00, 0xc0, 0x91, 0x03, 0xfc, 0x85, 0xf8, 0x9e, 0x58, 0xee, 0x24, 0x4f,
+  0x3d, 0x82, 0x7a, 0xa8, 0x5e, 0x7a, 0xb7, 0x8c, 0x18, 0x6a, 0x58, 0x33,
+  0xf2, 0x8e, 0x11, 0xcd, 0x07, 0x1e, 0x82, 0x0f, 0xab, 0xa7, 0xd4, 0x92,
+  0x67, 0x06, 0xaa, 0x5d, 0x60, 0x22, 0x8a, 0x03, 0xc1, 0xe8, 0xc1, 0x4b,
+  0x4e, 0x83, 0x01, 0xf6, 0x54, 0xad, 0x11, 0x6f, 0x22, 0x08, 0xf7, 0xa8,
+  0x2c, 0x24, 0x85, 0xac, 0xf4, 0x14, 0x4e, 0xc6, 0x55, 0x19, 0x71, 0x88,
+  0xc0, 0x75, 0x63, 0x86, 0x92, 0x52, 0x99, 0x51, 0x14, 0xcf, 0x56, 0x90,
+  0x71, 0xa3, 0x50, 0x71, 0x5e, 0x73, 0x4f, 0x03, 0x5f, 0xb8, 0x95, 0xbc,
+  0xe6, 0xcc, 0x02, 0x0b, 0x93, 0x41, 0x97, 0x17, 0x23, 0x5f, 0xad, 0x49,
+  0x50, 0x81, 0xbb, 0x27, 0x9d, 0xf1, 0x92, 0xee, 0x38, 0x23, 0xc6, 0x1b,
+  0x06, 0xce, 0x94, 0x23, 0x49, 0xb8, 0x5e, 0xa5, 0xe2, 0xd6, 0xb2, 0x69,
+  0x1e, 0x0e, 0x37, 0x47, 0x9c, 0xd9, 0x19, 0x62, 0xed, 0x0a, 0xae, 0x21,
+  0xf8, 0xc8, 0xde, 0x02, 0x91, 0x8c, 0xfc, 0xd4, 0x01, 0xd8, 0x78, 0xcb,
+  0xc6, 0xe1, 0x76, 0xee, 0x3d, 0xb3, 0x47, 0xd4, 0x54, 0xde, 0xd4, 0xd9,
+  0xec, 0x42, 0x10, 0x87, 0xf8, 0x0a, 0xa1, 0x59, 0xa6, 0x1d, 0x5c, 0x22,
+  0xf2, 0x98, 0x16, 0x16, 0x00, 0xa5, 0x14, 0x5e, 0x72, 0x09, 0xb6, 0xce,
+  0xcf, 0x81, 0x24, 0x5b, 0x3c, 0x84, 0xdd, 0xa2, 0x7f, 0xe5, 0x50, 0x2d,
+  0xdb, 0x5c, 0x8b, 0x75, 0xb4, 0x62, 0x8c, 0xe9, 0xd6, 0xd1, 0xb5, 0xa3,
+  0xd5, 0xba, 0x5f, 0x50, 0x0d, 0x01, 0x8a, 0x8b, 0x70, 0x35, 0xdf, 0x52,
+  0x4d, 0xe4, 0x01, 0x48, 0x4a, 0x76, 0x47, 0x69, 0x2d, 0x32, 0x37, 0xa7,
+  0xe6, 0x59, 0xa9, 0x5e, 0xe6, 0x4b, 0xad, 0xe1, 0x73, 0xf0, 0x42, 0x5a,
+  0x6d, 0xc2, 0x14, 0x23, 0x55, 0x4d, 0x62, 0x71, 0x2d, 0xa6, 0x05, 0x94,
+  0x43, 0x5b, 0x84, 0x5a, 0x80, 0x41, 0x38, 0xe3, 0xec, 0x5e, 0xfd, 0x7f,
+  0x70, 0xbf, 0xa6, 0xac, 0x42, 0x42, 0x08, 0xf6, 0x3a, 0x26, 0x52, 0x42,
+  0x71, 0x95, 0x56, 0xb0, 0x66, 0x6b, 0x96, 0xcb, 0xb1, 0xdb, 0x58, 0xa2,
+  0x11, 0x84, 0x39, 0x52, 0x93, 0xf0, 0x36, 0xe3, 0xd4, 0xd8, 0x28, 0xdf,
+  0x65, 0x00, 0x12, 0x95, 0x0b, 0xd4, 0x96, 0x61, 0x28, 0x48, 0x61, 0x5c,
+  0xd6, 0x96, 0x72, 0xcc, 0x6a, 0x5d, 0xcb, 0x85, 0xb8, 0x86, 0xf8, 0xd7,
+  0x90, 0xdd, 0x08, 0xe7, 0x5d, 0xcd, 0x6f, 0x1e, 0x67, 0x35, 0xe1, 0x90,
+  0x54, 0x63, 0x9c, 0xdd, 0x33, 0x37, 0xc8, 0x8b, 0x87, 0x99, 0x8e, 0x0c,
+  0xe2, 0xa3, 0x3a, 0xc6, 0x5c, 0x05, 0x56, 0x07, 0x8e, 0x15, 0x17, 0x7f,
+  0xc8, 0xb1, 0x1c, 0x48, 0x8b, 0xe9, 0xa4, 0x77, 0xa8, 0x59, 0xd2, 0xae,
+  0x23, 0x0e, 0x3c, 0x27, 0x7f, 0xee, 0x25, 0x5f, 0xa5, 0x75, 0x3e, 0xe9,
+  0x4b, 0xa5, 0x51, 0xa9, 0x3c, 0x4a, 0x6f, 0xb8, 0x02, 0x94, 0x1b, 0x9c,
+  0xd8, 0xb3, 0x39, 0x4c, 0xbe, 0xd7, 0xda, 0xb1, 0x46, 0x89, 0x04, 0x5c,
+  0x2e, 0x79, 0x03, 0xa8, 0xb5, 0x16, 0xee, 0x92, 0xd0, 0xa7, 0xc5, 0x36,
+  0x32, 0x9f, 0xa2, 0x13, 0x57, 0x4c, 0x08, 0xbb, 0x9a, 0xd6, 0xd7, 0xd6,
+  0x17, 0x86, 0xbd, 0x12, 0x56, 0x04, 0x78, 0x46, 0x96, 0xa5, 0xd9, 0x36,
+  0x50, 0x2e, 0x6d, 0x80, 0x09, 0xfe, 0xb6, 0xc7, 0x57, 0xeb, 0x3e, 0xc3,
+  0xfe, 0x5a, 0x4b, 0x64, 0xa2, 0x57, 0x6b, 0x11, 0x94, 0x69, 0x59, 0xd4,
+  0x60, 0x60, 0x16, 0x8c, 0x96, 0x46, 0x18, 0xe8, 0xc9, 0xf9, 0xe1, 0x1f,
+  0x92, 0xfd, 0xae, 0xfb, 0x9c, 0x6e, 0xa6, 0x16, 0xc0, 0x52, 0xdf, 0x11,
+  0x18, 0xc6, 0xce, 0xc1, 0x88, 0x5c, 0x62, 0x2b, 0xc5, 0xf6, 0xaf, 0x49,
+  0xea, 0xb3, 0x33, 0x12, 0xd7, 0xa5, 0xc4, 0x56, 0x37, 0xf7, 0x5a, 0x57,
+  0x80, 0x5e, 0x83, 0x53, 0xc1, 0x2b, 0x2d, 0xc4, 0xd9, 0xa3, 0x79, 0xca,
+  0xb1, 0xed, 0x04, 0xa7, 0x66, 0x36, 0xa5, 0x60, 0x06, 0x8a, 0x30, 0x6c,
+  0x8e, 0x16, 0x64, 0xbc, 0xb2, 0xbc, 0x81, 0xaa, 0xc5, 0x39, 0x5c, 0x5c,
+  0x62, 0xd0, 0x2b, 0xad, 0x9c, 0xfa, 0xc8, 0x76, 0x1f, 0xe8, 0xc8, 0x7d,
+  0xd0, 0x8b, 0x45, 0xae, 0x40, 0x1e, 0xcb, 0x05, 0xeb, 0x41, 0x6d, 0x92,
+  0xd5, 0x63, 0xc7, 0xb7, 0xd9, 0xa9, 0x06, 0x22, 0x62, 0x23, 0x26, 0x00,
+  0x8c, 0x9a, 0xdd, 0xb3, 0xdf, 0x1c, 0x77, 0xaa, 0x72, 0x4d, 0xff, 0x62,
+  0x02, 0x12, 0x1c, 0xa0, 0xa7, 0x50, 0xbf, 0x5d, 0xca, 0x57, 0x71, 0xd8,
+  0xb7, 0x69, 0xb5, 0x1d, 0xac, 0x8f, 0xf4, 0x1d, 0xac, 0x2a, 0x8d, 0x82,
+  0x61, 0x17, 0xfd, 0x64, 0x81, 0x9a, 0xab, 0x14, 0x27, 0x5a, 0x8e, 0xbb,
+  0x43, 0xd0, 0x86, 0x1b, 0x1e, 0x35, 0x1d, 0xf6, 0x64, 0x0b, 0x43, 0x79,
+  0x51, 0xaa, 0x6f, 0x2c, 0x04, 0x9f, 0x34, 0x4b, 0xd5, 0x4a, 0x27, 0x99,
+  0x97, 0xa3, 0x53, 0x94, 0x6b, 0xde, 0xcd, 0xc7, 0xf4, 0x53, 0xd6, 0xca,
+  0x13, 0x19, 0x9f, 0x8d, 0x8b, 0xdb, 0x8d, 0x33, 0xae, 0x38, 0x61, 0xa8,
+  0x84, 0x77, 0x11, 0x20, 0xa6, 0x74, 0x02, 0x99, 0x32, 0xe7, 0x20, 0xee,
+  0x35, 0x47, 0xdd, 0x74, 0x07, 0xad, 0x9a, 0x27, 0x25, 0xeb, 0x12, 0xb9,
+  0xa9, 0xc5, 0x9c, 0x45, 0x27, 0xd2, 0x53, 0x0a, 0xa9, 0xc3, 0x0a, 0xeb,
+  0x91, 0x8c, 0x9a, 0x76, 0x07, 0x92, 0x6d, 0x61, 0xe5, 0x2c, 0xdd, 0xf4,
+  0x16, 0xce, 0x20, 0xf1, 0x94, 0x69, 0x32, 0xbf, 0x97, 0xe4, 0x14, 0x91,
+  0x0d, 0x08, 0xe5, 0x01, 0x56, 0x89, 0xcf, 0x3f, 0x0f, 0x64, 0xc1, 0x3b,
+  0xfb, 0xf4, 0x9e, 0xf9, 0xda, 0xb3, 0x7e, 0xcc, 0x28, 0xd4, 0x84, 0xac,
+  0x0d, 0x90, 0x43, 0xad, 0x09, 0x24, 0xa2, 0x61, 0x78, 0xa8, 0x69, 0xdc,
+  0xa3, 0xf5, 0xcc, 0x04, 0x54, 0xd6, 0x77, 0x7c, 0x7f, 0x8d, 0xd5, 0x6b,
+  0x1e, 0x68, 0x5a, 0x73, 0xc8, 0xd2, 0x0a, 0xc5, 0x4c, 0xd9, 0x64, 0x77,
+  0xb4, 0x9e, 0xd4, 0x6c, 0x24, 0xf7, 0x21, 0x5d, 0xaa, 0xa4, 0x04, 0x8c,
+  0x4a, 0x69, 0x98, 0x16, 0x59, 0x06, 0x63, 0xa9, 0xa3, 0x43, 0x47, 0xb6,
+  0x48, 0xac, 0xe3, 0x11, 0xef, 0x57, 0x0f, 0xe7, 0xfd, 0x6f, 0x19, 0xce,
+  0x7e, 0xf2, 0x60, 0x92, 0x86, 0x94, 0x00, 0x26, 0x8e, 0x5f, 0x6b, 0x7a,
+  0x5a, 0x09, 0xaa, 0x56, 0xb9, 0x87, 0xd7, 0x08, 0x75, 0x9e, 0x3b, 0xf5,
+  0xf7, 0x42, 0xc3, 0x44, 0x51, 0xf2, 0xd3, 0x50, 0x6a, 0xa8, 0xfd, 0xbe,
+  0x0e, 0xe5, 0x63, 0x87, 0xcb, 0xc8, 0x37, 0x36, 0x0d, 0xa5, 0x9b, 0x60,
+  0x21, 0x89, 0x4f, 0x3b, 0xc3, 0x6d, 0x5f, 0xbe, 0xb2, 0xe9, 0x50, 0x15,
+  0x20, 0x68, 0x1b, 0x80, 0x4b, 0x39, 0x11, 0x85, 0x66, 0x82, 0xfc, 0xc0,
+  0xce, 0x6b, 0xf2, 0xd9, 0x0e, 0x83, 0x78, 0x99, 0x93, 0x24, 0x25, 0x8b,
+  0x08, 0x43, 0x27, 0x9b, 0x2f, 0x90, 0x36, 0xa2, 0x1c, 0xd0, 0x17, 0x02,
+  0x70, 0x8e, 0x9e, 0xba, 0x23, 0xf5, 0xcc, 0x6e, 0xb7, 0x8c, 0x91, 0xb3,
+  0x0a, 0xf0, 0x80, 0x06, 0xf6, 0x43, 0xf8, 0xcc, 0x32, 0x6e, 0xa9, 0x59,
+  0x99, 0xde, 0x76, 0xd0, 0x4e, 0x35, 0x25, 0x7a, 0xc6, 0x65, 0x9b, 0x5c,
+  0x2c, 0x2b, 0x30, 0x5e, 0x01, 0x61, 0x14, 0x3c, 0x1a, 0x6a, 0x95, 0x22,
+  0x74, 0x23, 0x9c, 0x06, 0x09, 0xdc, 0xe6, 0xb8, 0x2c, 0x17, 0x38, 0xd7,
+  0x6c, 0x1f, 0x07, 0x76, 0x86, 0x54, 0xdd, 0x73, 0xde, 0x37, 0x2b, 0x9e,
+  0x99, 0x76, 0x67, 0xb9, 0x19, 0xd0, 0x3a, 0x80, 0x59, 0xb4, 0x02, 0xb9,
+  0xf0, 0x42, 0x8b, 0x4f, 0xa9, 0xc0, 0xec, 0xed, 0xe2, 0xde, 0x61, 0x11,
+  0xaf, 0x2e, 0xd3, 0xe5, 0x6b, 0xa0, 0x9f, 0x0c, 0xfe, 0x87, 0xac, 0x0c,
+  0x89, 0xe7, 0x14, 0x3d, 0x86, 0xca, 0x1d, 0x0b, 0x0f, 0xd1, 0x54, 0x92,
+  0xfc, 0xc0, 0xf0, 0x29, 0x34, 0x54, 0xe7, 0x61, 0x33, 0x6f, 0x35, 0x4b,
+  0x08, 0xfc, 0xef, 0x8d, 0x8f, 0x5d, 0xdb, 0xaa, 0xba, 0x2e, 0xac, 0x82,
+  0x9b, 0x5b, 0xb3, 0xa5, 0x40, 0x38, 0x5a, 0x30, 0x18, 0xb0, 0xbd, 0xc8,
+  0xbe, 0xa2, 0x52, 0x89, 0x07, 0x65, 0xea, 0x2f, 0xab, 0xea, 0x72, 0x6b,
+  0x3a, 0x52, 0x26, 0x7e, 0x6b, 0xca, 0xe0, 0x0c, 0xd7, 0x81, 0x79, 0x61,
+  0xf0, 0x5e, 0xcc, 0x19, 0x5f, 0x72, 0x0f, 0x43, 0xd8, 0xdd, 0xb9, 0x87,
+  0x53, 0xd4, 0x0b, 0xd7, 0x07, 0xf6, 0xe4, 0x25, 0x4a, 0x8b, 0xed, 0x89,
+  0x25, 0xa7, 0xbd, 0x2a, 0xfc, 0xbc, 0xa6, 0xcd, 0x52, 0xb1, 0x69, 0x4c,
+  0x61, 0xc0, 0x2e, 0x1d, 0x3a, 0x64, 0xfc, 0x2b, 0xbf, 0x2b, 0xca, 0xe3,
+  0x3d, 0x35, 0x31, 0xe4, 0xb8, 0x7b, 0xb1, 0xbd, 0xec, 0xee, 0x6c, 0xf1,
+  0x60, 0xb6, 0xb8, 0x01, 0x96, 0xeb, 0x84, 0x24, 0x5d, 0x18, 0x88, 0x42,
+  0x10, 0xf9, 0x37, 0x17, 0x65, 0x09, 0x50, 0xf8, 0xce, 0x5c, 0x62, 0x8f,
+  0xe1, 0x5f, 0xa3, 0xab, 0xc9, 0xdc, 0xb5, 0x00, 0x34, 0x92, 0x34, 0x46,
+  0x2a, 0xa0, 0x60, 0x37, 0xa8, 0x6f, 0x45, 0x3e, 0x43, 0x4a, 0x83, 0x1b,
+  0x5f, 0x6b, 0xca, 0x04, 0x5f, 0xd4, 0x5c, 0xe8, 0xb7, 0x36, 0x8b, 0x8e,
+  0x0e, 0x3a, 0x7b, 0xd8, 0x0d, 0x45, 0x9f, 0xed, 0xbf, 0xfb, 0xfa, 0x10,
+  0x92, 0x80, 0x05, 0x9c, 0xcc, 0x89, 0xda, 0xa7, 0xcb, 0x09, 0x54, 0x21,
+  0xb3, 0x62, 0x88, 0x7e, 0x03, 0x12, 0xb3, 0x16, 0x48, 0x44, 0xcd, 0x47,
+  0x10, 0x2f, 0xb6, 0x5b, 0x62, 0xda, 0xd6, 0x12, 0xb5, 0xa8, 0x42, 0x82,
+  0x20, 0x85, 0xd1, 0xcc, 0x10, 0xe6, 0xd7, 0x7a, 0x39, 0x5e, 0xa4, 0x82,
+  0x51, 0x93, 0xfa, 0x20, 0x26, 0x62, 0x67, 0x19, 0xb6, 0xcf, 0xe2, 0x9a,
+  0x26, 0xb8, 0x58, 0x9d, 0xbe, 0x82, 0x4e, 0x3f, 0xf4, 0xad, 0x6a, 0x0c,
+  0xb2, 0xb1, 0xb3, 0xbd, 0xed, 0x4a, 0xee, 0x38, 0x30, 0x96, 0x80, 0x5b,
+  0x56, 0xc9, 0xf6, 0xe0, 0xc5, 0x8b, 0x55, 0x8c, 0xd0, 0x36, 0x0a, 0x44,
+  0x94, 0x67, 0x1f, 0xdd, 0xe6, 0x80, 0x1e, 0x5d, 0xd5, 0x66, 0x44, 0xa3,
+  0xa9, 0x73, 0xc0, 0x11, 0xf2, 0x8a, 0x5a, 0xa9, 0x45, 0x2c, 0x3c, 0xec,
+  0xad, 0x81, 0xfb, 0xac, 0xb0, 0x6a, 0x0d, 0x2d, 0xe5, 0x9a, 0xc3, 0xca,
+  0x06, 0x74, 0x86, 0x1a, 0x83, 0x16, 0x14, 0x52, 0x98, 0x5b, 0x2f, 0xee,
+  0x47, 0x2d, 0x8c, 0xa7, 0xc0, 0xaf, 0x58, 0xa2, 0x8b, 0x70, 0x36, 0x2a,
+  0x12, 0xbc, 0x3f, 0x25, 0xfb, 0xdf, 0xd1, 0xbb, 0xaf, 0xd9, 0x1c, 0x62,
+  0x74, 0x7b, 0xd8, 0xd2, 0xb7, 0x3a, 0x9a, 0xfe, 0x7b, 0xae, 0x9c, 0x43,
+  0x01, 0xa5, 0x08, 0xdf, 0xe0, 0xc2, 0xb7, 0x79, 0xc1, 0xac, 0xc0, 0xed,
+  0xfe, 0x0a, 0x5b, 0xe5, 0x79, 0x32, 0xf0, 0x84, 0x13, 0x29, 0x9c, 0x43,
+  0x92, 0xc9, 0xfc, 0x5e, 0x35, 0x23, 0xe9, 0x01, 0xad, 0xab, 0x67, 0xc6,
+  0x36, 0xcb, 0x7a, 0x2e, 0xab, 0xe7, 0xa0, 0xa0, 0x40, 0x36, 0x89, 0x74,
+  0xc9, 0xdd, 0xe0, 0x7c, 0x77, 0x24, 0x91, 0x8f, 0x1b, 0x4a, 0xcb, 0xd4,
+  0xd9, 0x2e, 0xb5, 0x48, 0x92, 0x55, 0x5f, 0x6d, 0x3f, 0x5d, 0x33, 0x24,
+  0x8c, 0x8a, 0xa9, 0xcf, 0xd5, 0x69, 0xb7, 0x51, 0x96, 0xb5, 0x2c, 0xff,
+  0xfb, 0xe3, 0x7c, 0x60, 0x84, 0x74, 0x50, 0xe9, 0xa6, 0x2a, 0xa6, 0xce,
+  0xa6, 0x21, 0x23, 0x8e, 0x3a, 0x42, 0xce, 0xf9, 0x7d, 0xee, 0x3a, 0x8d,
+  0x77, 0xc7, 0xef, 0xeb, 0xd2, 0x44, 0x0e, 0x00, 0x89, 0xb4, 0x52, 0x58,
+  0xc9, 0x26, 0x9f, 0xaa, 0x2e, 0x43, 0x52, 0x38, 0x38, 0x47, 0xde, 0x16,
+  0x4b, 0xd6, 0x12, 0xc9, 0x70, 0x47, 0xd9, 0x25, 0xa2, 0x21, 0xe0, 0xf0,
+  0xe3, 0xf2, 0xba, 0xce, 0xa5, 0xf0, 0x20, 0xd0, 0xa6, 0x89, 0xa5, 0x91,
+  0x50, 0x23, 0x28, 0x57, 0x0e, 0xf8, 0xbb, 0x5a, 0x16, 0xc2, 0xfb, 0x48,
+  0xdf, 0x32, 0x83, 0x4f, 0xeb, 0x2b, 0x94, 0xb2, 0xb6, 0xa6, 0xa8, 0x50,
+  0xbc, 0x42, 0xf7, 0x82, 0x62, 0x6d, 0xe4, 0x29, 0x16, 0xa6, 0x20, 0x5c,
+  0xb7, 0x96, 0xa2, 0xbd, 0x02, 0x6b, 0x6b, 0x64, 0x84, 0xdf, 0x22, 0x53,
+  0xfc, 0x28, 0x5c, 0x40, 0xb5, 0xa5, 0x3f, 0x68, 0x8f, 0x77, 0x3e, 0x86,
+  0x47, 0x2c, 0xf3, 0x9e, 0xf5, 0xe4, 0x63, 0x4f, 0x1c, 0xcb, 0xef, 0x11,
+  0xbf, 0x22, 0x0e, 0x9d, 0xc7, 0xc8, 0xa2, 0xa4, 0xde, 0xb6, 0xa6, 0xf9,
+  0xba, 0x00, 0x8c, 0x3e, 0xd0, 0xcc, 0x80, 0x03, 0xd1, 0xd9, 0x2e, 0x28,
+  0xec, 0xc0, 0xe0, 0x65, 0xac, 0x33, 0x65, 0xef, 0x3e, 0x68, 0x89, 0xab,
+  0x12, 0x35, 0xe3, 0x4c, 0x14, 0x92, 0x2d, 0x58, 0xfd, 0x85, 0xaf, 0x9b,
+  0xf3, 0xe7, 0xd0, 0x27, 0x66, 0xc8, 0x03, 0x64, 0xb8, 0x83, 0x06, 0x71,
+  0xed, 0xa3, 0x73, 0x32, 0x23, 0xe0, 0xea, 0x53, 0x7d, 0xf4, 0xbb, 0xc3,
+  0xb3, 0xaf, 0x4e, 0x46, 0x87, 0x66, 0x3f, 0x5e, 0x1f, 0x7e, 0xf5, 0x9e,
+  0xb8, 0x16, 0x51, 0x07, 0x9b, 0x9e, 0x81, 0xa0, 0xcc, 0xf6, 0x2f, 0x00,
+  0x9e, 0x51, 0xc0, 0x1e, 0xc8, 0x94, 0xe5, 0xa0, 0xbe, 0x52, 0xa1, 0x8a,
+  0x78, 0x8c, 0x46, 0x3c, 0xcb, 0xd8, 0x56, 0x99, 0x23, 0x0d, 0xc1, 0x61,
+  0xa6, 0x53, 0xb4, 0x1f, 0xd5, 0xb9, 0x87, 0x7a, 0x29, 0x47, 0x89, 0xd1,
+  0x5d, 0xeb, 0x3d, 0x67, 0xd4, 0xbc, 0x61, 0xcb, 0xb4, 0x1c, 0x3e, 0xd3,
+  0xec, 0xb8, 0x84, 0xd2, 0x8e, 0xc2, 0x15, 0x20, 0xde, 0x03, 0x2b, 0x47,
+  0x0b, 0x60, 0xe7, 0xac, 0xe4, 0x5b, 0x13, 0x35, 0xe5, 0xa9, 0x6d, 0xdc,
+  0xe3, 0x79, 0x83, 0x2b, 0x9c, 0x15, 0x0a, 0xa9, 0x6d, 0x5f, 0x33, 0x71,
+  0x1b, 0xf6, 0xc6, 0x89, 0xe7, 0x33, 0xb9, 0x0e, 0xc0, 0xfd, 0xea, 0x8c,
+  0x91, 0xe2, 0xf8, 0xd6, 0x16, 0x7f, 0x38, 0x87, 0xfa, 0x4a, 0x19, 0x9a,
+  0x0d, 0x51, 0x82, 0x6f, 0x31, 0x4f, 0xa9, 0x8b, 0xca, 0x05, 0xe0, 0xb5,
+  0x3a, 0x22, 0x56, 0xde, 0x0b, 0xca, 0x11, 0xd2, 0xb9, 0x59, 0xcd, 0x7a,
+  0xce, 0x79, 0xa6, 0x64, 0xe7, 0x60, 0x41, 0xc0, 0x87, 0xae, 0xee, 0xd4,
+  0x46, 0x77, 0x02, 0x0a, 0x9f, 0x5d, 0xca, 0x28, 0xf0, 0x54, 0xc8, 0xd5,
+  0x15, 0xe3, 0xdb, 0xd8, 0x62, 0x5e, 0x3e, 0x11, 0x33, 0x57, 0x09, 0xc4,
+  0xa3, 0x2d, 0x85, 0x4b, 0x80, 0x89, 0x2f, 0x3c, 0xef, 0xdc, 0x3a, 0x17,
+  0x8b, 0xa7, 0x33, 0xea, 0x39, 0x4e, 0xd6, 0xd6, 0xd6, 0x5e, 0x1f, 0x9e,
+  0xef, 0x1f, 0x1d, 0x1f, 0xbe, 0x4e, 0x8e, 0xde, 0xbd, 0x39, 0x39, 0x7b,
+  0xbb, 0x7f, 0x2e, 0xe1, 0x18, 0xaf, 0xad, 0x45, 0xce, 0xc1, 0x39, 0x09,
+  0x78, 0xbd, 0x67, 0xad, 0x03, 0x09, 0x9b, 0x5d, 0xbc, 0x94, 0x3a, 0x05,
+  0xbc, 0x0c, 0x59, 0x6b, 0x0d, 0xd6, 0x12, 0x09, 0xe3, 0x70, 0xf8, 0x57,
+  0x24, 0x17, 0x6c, 0x59, 0xdf, 0xfb, 0x50, 0x97, 0x53, 0xcd, 0x68, 0x28,
+  0x5e, 0xf9, 0x60, 0x53, 0x29, 0xd9, 0x40, 0x2e, 0x67, 0x99, 0xdc, 0x89,
+  0x00, 0x57, 0x06, 0x00, 0x00, 0x23, 0x22, 0x1f, 0x6d, 0xb5, 0xe1, 0x99,
+  0x61, 0x68, 0x51, 0x38, 0xb4, 0x14, 0x80, 0x28, 0x3e, 0xec, 0xc6, 0x45,
+  0x89, 0xa8, 0x12, 0xbf, 0x4d, 0x0b, 0x28, 0x81, 0x1d, 0x25, 0xfc, 0x60,
+  0x44, 0xff, 0xe0, 0x13, 0x7f, 0x7f, 0x73, 0xae, 0x1f, 0x3f, 0xa3, 0xe0,
+  0x23, 0xc4, 0x14, 0x11, 0x82, 0x6a, 0x6d, 0x76, 0xca, 0x9e, 0x75, 0x60,
+  0xba, 0x5a, 0x86, 0xad, 0xde, 0x39, 0xa9, 0xb5, 0xe8, 0x37, 0xb5, 0x61,
+  0xfd, 0xf5, 0x46, 0x62, 0x1a, 0x1c, 0x49, 0x15, 0x4e, 0x5a, 0x0b, 0x02,
+  0xb8, 0xa7, 0x9f, 0x85, 0x62, 0x2a, 0xda, 0x00, 0x52, 0xa7, 0xf1, 0xe7,
+  0x66, 0xca, 0xe2, 0xa2, 0x92, 0xd3, 0xe6, 0xce, 0xad, 0xa2, 0xb6, 0x0c,
+  0x5e, 0x9b, 0x87, 0xa6, 0xcb, 0xf9, 0x42, 0xca, 0x38, 0xab, 0x44, 0x0d,
+  0x5b, 0x9e, 0x6e, 0x21, 0x0b, 0x6d, 0x10, 0x3e, 0x60, 0xf8, 0x79, 0x23,
+  0x6b, 0xc0, 0xf3, 0x00, 0x7d, 0x37, 0xea, 0x0a, 0x6c, 0x00, 0xc4, 0xab,
+  0xde, 0x3b, 0x2d, 0x0d, 0x63, 0x63, 0x8e, 0x5a, 0x92, 0x0b, 0x16, 0x64,
+  0x64, 0x9f, 0xc5, 0x4a, 0x7a, 0x2f, 0xa4, 0x2e, 0x44, 0x09, 0xeb, 0xbf,
+  0xa1, 0x75, 0x66, 0x88, 0x64, 0xa5, 0x41, 0xb9, 0x2a, 0x42, 0xe7, 0x63,
+  0x6b, 0x52, 0xfe, 0x8b, 0xed, 0x90, 0x1e, 0x9f, 0xd3, 0x6b, 0xd7, 0x0e,
+  0x47, 0xb7, 0x3b, 0x02, 0xe1, 0xe2, 0x86, 0x9f, 0xdc, 0x6b, 0xf1, 0x6c,
+  0xaa, 0x93, 0xc1, 0x40, 0x99, 0x6b, 0x52, 0xe7, 0xc8, 0x87, 0x1e, 0x57,
+  0xf2, 0x5d, 0x02, 0xfa, 0xba, 0xbc, 0x26, 0x5d, 0x1e, 0xc9, 0x9d, 0xe3,
+  0x7b, 0x3f, 0x0b, 0x8f, 0x83, 0xcf, 0xa4, 0x52, 0x13, 0x98, 0x5e, 0xb1,
+  0xa6, 0x45, 0x15, 0xf5, 0x25, 0x0d, 0x61, 0x04, 0xf7, 0xe7, 0x7a, 0x01,
+  0x60, 0xf2, 0xa4, 0x54, 0x67, 0x69, 0x0d, 0x85, 0x0a, 0xb9, 0x38, 0x7c,
+  0x67, 0x58, 0x33, 0xac, 0xab, 0x88, 0xe1, 0x21, 0x66, 0x81, 0x45, 0x33,
+  0x72, 0x68, 0x4a, 0x70, 0x1a, 0x7a, 0x28, 0x38, 0xee, 0xde, 0xb6, 0xa2,
+  0x0e, 0x0e, 0xd3, 0x0c, 0x82, 0xa7, 0x25, 0x9a, 0xf4, 0xb4, 0xac, 0xf9,
+  0xbc, 0x41, 0xc2, 0xef, 0x11, 0xeb, 0xe9, 0x81, 0x0c, 0x7a, 0x8b, 0x2b,
+  0xd3, 0x47, 0x2f, 0xb9, 0x24, 0x1d, 0x69, 0x6c, 0x86, 0x1e, 0x30, 0xd0,
+  0x29, 0x3f, 0xfe, 0xea, 0x2c, 0xbd, 0x48, 0xb3, 0xd9, 0x9f, 0x76, 0xb7,
+  0x47, 0xe9, 0xe5, 0x72, 0x96, 0xfe, 0x1b, 0x5e, 0x7c, 0xf5, 0xe4, 0xc9,
+  0xee, 0xf6, 0x67, 0x9f, 0x6f, 0xf7, 0xba, 0xd1, 0x07, 0x12, 0x91, 0xa5,
+  0x11, 0x36, 0x74, 0x93, 0x81, 0xef, 0xa2, 0x9f, 0xe1, 0xe4, 0x32, 0x87,
+  0x52, 0x47, 0x82, 0x92, 0xac, 0x41, 0xca, 0xda, 0x24, 0xd8, 0x24, 0x03,
+  0x0f, 0x12, 0x2e, 0xaf, 0xa1, 0xeb, 0x3f, 0xee, 0xec, 0x31, 0x2b, 0x03,
+  0x4c, 0x34, 0xee, 0x09, 0x5a, 0x8b, 0x97, 0x79, 0x61, 0x6e, 0xa0, 0x2f,
+  0x92, 0x26, 0xbd, 0xb4, 0xb4, 0x2a, 0xf9, 0xf4, 0x9c, 0x45, 0x61, 0xfd,
+  0x9b, 0x17, 0x44, 0xe4, 0x79, 0xc1, 0xc5, 0x6c, 0xa8, 0x50, 0x0b, 0x84,
+  0xac, 0x45, 0x56, 0x01, 0x43, 0xf0, 0xb2, 0x4a, 0xe7, 0x9a, 0xab, 0x42,
+  0xef, 0x53, 0xd8, 0xda, 0x70, 0x31, 0x43, 0x1e, 0x85, 0xc6, 0x9e, 0xb1,
+  0xc4, 0xcb, 0x04, 0x37, 0x5b, 0xd4, 0x0e, 0x86, 0x8f, 0xaf, 0x1b, 0xbf,
+  0x04, 0x8c, 0x59, 0x2c, 0xd8, 0x54, 0x7a, 0x98, 0x15, 0xb3, 0x0c, 0x70,
+  0xb3, 0xa9, 0xce, 0x74, 0x88, 0xdf, 0x81, 0xff, 0x90, 0x32, 0xe6, 0x62,
+  0x6f, 0xc1, 0x99, 0xd5, 0x8c, 0xd2, 0xd1, 0xd3, 0xc4, 0x86, 0xbc, 0x35,
+  0xaf, 0xd4, 0xc5, 0x6c, 0x26, 0x2f, 0xd5, 0x4a, 0xb4, 0xf3, 0xc5, 0x2b,
+  0x10, 0xc4, 0xce, 0x17, 0xff, 0x66, 0x3f, 0xdb, 0x95, 0xcf, 0x76, 0xbf,
+  0xf8, 0xb7, 0xe1, 0x10, 0xe3, 0x23, 0x0a, 0x59, 0xd7, 0xaf, 0xd7, 0x05,
+  0x6f, 0x25, 0x95, 0x23, 0xcc, 0x7f, 0x59, 0xf8, 0x63, 0xde, 0xeb, 0x9e,
+  0xf6, 0xec, 0xaf, 0x72, 0x5f, 0x3c, 0xaa, 0x96, 0x6f, 0xe5, 0x5a, 0xe0,
+  0x0d, 0xb0, 0xd6, 0x75, 0x6c, 0xd1, 0xad, 0x1f, 0x04, 0xed, 0x48, 0xf4,
+  0x25, 0x5e, 0xfe, 0x33, 0x51, 0xea, 0x9f, 0xd7, 0x12, 0xf1, 0x6e, 0xd2,
+  0x76, 0xdc, 0xc3, 0xe1, 0xa1, 0x64, 0x6b, 0x1e, 0x4d, 0xb5, 0xe2, 0x0c,
+  0xb5, 0x4c, 0xd9, 0x1f, 0x74, 0x07, 0x72, 0xd0, 0x38, 0x06, 0xfb, 0x17,
+  0x81, 0xbf, 0xb4, 0x69, 0x33, 0xfa, 0x0c, 0x67, 0xca, 0x18, 0x19, 0xa3,
+  0xe1, 0x9a, 0x47, 0x54, 0x01, 0xe5, 0x87, 0x1f, 0x44, 0xa0, 0x32, 0xbf,
+  0xc8, 0xc8, 0xaf, 0x0c, 0x2f, 0x9a, 0x1a, 0xf6, 0x36, 0x47, 0xa1, 0x78,
+  0x42, 0x1a, 0x34, 0xf3, 0x90, 0x2b, 0xff, 0x42, 0x66, 0xca, 0x8d, 0x98,
+  0xad, 0xdd, 0x1f, 0x1d, 0x1c, 0x1d, 0x21, 0xd0, 0x14, 0x8b, 0x7a, 0xc8,
+  0x6c, 0x0c, 0xb4, 0xb9, 0x81, 0x10, 0x0f, 0x17, 0x96, 0xe8, 0x93, 0x3e,
+  0xed, 0x1d, 0xb6, 0x1d, 0xd4, 0x6f, 0x1a, 0x53, 0x05, 0x5c, 0xb6, 0x12,
+  0x34, 0xcb, 0x52, 0xce, 0xab, 0x1e, 0x3f, 0x78, 0x99, 0xf7, 0xc4, 0x89,
+  0xc5, 0x9f, 0xf4, 0x1c, 0x7c, 0x0e, 0xef, 0x07, 0x36, 0xed, 0x15, 0x8b,
+  0x4e, 0xf9, 0x3f, 0xb2, 0x57, 0x3b, 0xdb, 0xf1, 0x27, 0xe0, 0xb5, 0x25,
+  0x40, 0xf1, 0x57, 0xce, 0x21, 0xf8, 0xd0, 0xf3, 0xf9, 0x94, 0x9f, 0xbe,
+  0xca, 0xa7, 0x53, 0x73, 0x27, 0xdc, 0xa4, 0xb3, 0xa5, 0xa1, 0x85, 0x31,
+  0xdd, 0xb0, 0xf4, 0xbf, 0x15, 0xe3, 0x80, 0xc7, 0x4a, 0x9e, 0xad, 0x97,
+  0xe3, 0x79, 0xde, 0x1a, 0xf0, 0x16, 0x4d, 0xf0, 0x0b, 0x9a, 0xf0, 0xf7,
+  0x99, 0xa5, 0x8e, 0x8c, 0x44, 0x3b, 0x96, 0xfd, 0xd6, 0x2f, 0xca, 0x72,
+  0x9c, 0x56, 0xeb, 0xe2, 0xce, 0xd1, 0x71, 0xae, 0xef, 0xec, 0x3e, 0x79,
+  0xfa, 0x6c, 0x7d, 0x28, 0x72, 0x1a, 0x58, 0x44, 0xe3, 0x43, 0x54, 0x70,
+  0x13, 0x16, 0x52, 0xc1, 0x43, 0x73, 0x8d, 0x39, 0x57, 0x89, 0x8b, 0x51,
+  0x77, 0xaf, 0xb8, 0xb7, 0x7f, 0xa3, 0x7e, 0x5e, 0xa1, 0x8b, 0x7f, 0xcb,
+  0xa7, 0xaf, 0xec, 0x0c, 0xff, 0x8d, 0xe6, 0xf2, 0x4a, 0x26, 0x61, 0xf6,
+  0x55, 0x73, 0x10, 0x6b, 0xbf, 0x3a, 0xcd, 0x63, 0x9b, 0xab, 0x9b, 0xb8,
+  0x86, 0x49, 0x23, 0x82, 0x61, 0x30, 0x65, 0xef, 0x07, 0xa4, 0x55, 0x97,
+  0x83, 0xb7, 0x75, 0x37, 0x30, 0xad, 0x0c, 0xa8, 0x95, 0x81, 0x63, 0xd8,
+  0xc0, 0x81, 0x1f, 0xd0, 0x46, 0xf4, 0x25, 0x11, 0x73, 0x06, 0x2b, 0x8b,
+  0x88, 0x02, 0x65, 0x89, 0x20, 0x80, 0x83, 0xaf, 0x8f, 0xd6, 0x6b, 0xbf,
+  0x28, 0x43, 0x3f, 0x66, 0x9f, 0xb6, 0x21, 0x86, 0x93, 0x74, 0x41, 0xa7,
+  0x7f, 0x4d, 0x0b, 0x2a, 0xa6, 0x14, 0x47, 0x42, 0xfd, 0x72, 0xce, 0xb4,
+  0xe9, 0x4c, 0x6e, 0x9d, 0x19, 0x59, 0xbc, 0x2b, 0x86, 0xa8, 0xf7, 0x9a,
+  0x01, 0x66, 0x33, 0x07, 0x94, 0xc0, 0xe7, 0xb3, 0xb0, 0x09, 0x97, 0x83,
+  0x37, 0xd6, 0xe9, 0x69, 0x13, 0xfc, 0xe4, 0x51, 0xf3, 0x15, 0xf3, 0x13,
+  0x65, 0x11, 0x3d, 0x28, 0xc0, 0x8e, 0x4f, 0xf8, 0xdc, 0x03, 0x89, 0xff,
+  0xe3, 0x4c, 0xd2, 0x34, 0xd9, 0x6c, 0xc2, 0x82, 0x21, 0xf1, 0xcf, 0x97,
+  0x5f, 0x2a, 0xce, 0xf3, 0x17, 0x09, 0xea, 0xa2, 0xf2, 0x5b, 0xe2, 0x77,
+  0x14, 0x03, 0x14, 0xdb, 0x6c, 0xf1, 0x92, 0xa8, 0x07, 0xd6, 0x05, 0xe6,
+  0x45, 0xe3, 0x88, 0x60, 0x20, 0x60, 0xfc, 0x98, 0xe8, 0xf8, 0x5e, 0x8c,
+  0x0d, 0xd4, 0xc2, 0xfa, 0x5f, 0x71, 0x08, 0x5e, 0xd2, 0x36, 0xe0, 0xeb,
+  0x2f, 0xd6, 0xd7, 0x6c, 0x7d, 0x0c, 0x2b, 0xb9, 0x77, 0x1c, 0xc8, 0x4c,
+  0xa0, 0xfe, 0x7c, 0x8c, 0x40, 0xad, 0xa0, 0xc6, 0x2c, 0x8d, 0x11, 0x44,
+  0x07, 0x8a, 0x87, 0x1b, 0x69, 0x6a, 0x36, 0x15, 0x48, 0x4f, 0x6b, 0xa0,
+  0xe6, 0xc6, 0x33, 0xca, 0x6e, 0x20, 0xe9, 0x71, 0x9d, 0xa2, 0x55, 0xf1,
+  0xde, 0xba, 0xc5, 0x48, 0x86, 0xcd, 0x14, 0x0c, 0xaf, 0xca, 0x14, 0x69,
+  0x72, 0x4d, 0x20, 0xcd, 0x9d, 0x34, 0xef, 0x4f, 0xac, 0xf6, 0x84, 0x07,
+  0x97, 0xe6, 0xc8, 0x68, 0x36, 0xc1, 0x11, 0x79, 0x43, 0x39, 0xc4, 0xd2,
+  0xe9, 0x2b, 0x5a, 0xee, 0x9d, 0xe1, 0x65, 0x7e, 0xc1, 0x8b, 0x61, 0x58,
+  0xe4, 0x65, 0xb6, 0x65, 0xfe, 0xec, 0x9b, 0xcf, 0x77, 0x49, 0x2a, 0xa3,
+  0x5f, 0x9e, 0x20, 0x1e, 0xcb, 0xbf, 0xfb, 0xbd, 0xb3, 0x61, 0xcf, 0x05,
+  0xfd, 0x92, 0xdb, 0x3b, 0x5f, 0xbc, 0x3a, 0x32, 0x4a, 0x90, 0x79, 0x50,
+  0x03, 0xce, 0x0f, 0x2a, 0x21, 0x45, 0x8b, 0x54, 0xd2, 0x25, 0x65, 0xb5,
+  0xd8, 0xe0, 0x11, 0x09, 0xa4, 0x10, 0x41, 0x9d, 0xe4, 0xee, 0x5c, 0xcc,
+  0x33, 0x94, 0x05, 0x84, 0x9b, 0x35, 0xbb, 0xdd, 0xec, 0xfb, 0x91, 0xb6,
+  0x86, 0xbd, 0xdf, 0x50, 0x5e, 0x3d, 0x81, 0x75, 0xb8, 0x1a, 0x57, 0xd4,
+  0xfd, 0x06, 0x35, 0x4b, 0x42, 0x81, 0x4b, 0x34, 0xc6, 0x36, 0xe7, 0xdd,
+  0x1d, 0xf4, 0x4a, 0xc9, 0xaa, 0xb4, 0x49, 0x1e, 0xb4, 0x4d, 0xea, 0x26,
+  0x9b, 0xd5, 0xd0, 0xd5, 0x05, 0xaa, 0x51, 0x7b, 0x55, 0x38, 0x6d, 0x74,
+  0xb4, 0xee, 0x9f, 0xfd, 0x72, 0xd2, 0x64, 0x46, 0xd7, 0x25, 0x5c, 0xad,
+  0x39, 0xf3, 0xb9, 0xc3, 0x39, 0x97, 0xd4, 0x04, 0x09, 0xcf, 0x06, 0x7c,
+  0x7b, 0x8a, 0x48, 0x34, 0x78, 0x33, 0x4c, 0x8e, 0x11, 0x31, 0x5e, 0xa7,
+  0x8c, 0xcf, 0xa2, 0x37, 0xac, 0x52, 0x83, 0x21, 0x1d, 0x96, 0xc1, 0xd7,
+  0x38, 0xf1, 0x85, 0x40, 0x31, 0x94, 0xa4, 0x72, 0x05, 0x4a, 0x67, 0xe2,
+  0x62, 0xf9, 0x42, 0xe4, 0x91, 0x3e, 0x6c, 0xe1, 0xf6, 0x39, 0xd8, 0xfc,
+  0xd9, 0xee, 0x87, 0xf4, 0x2f, 0x4b, 0xb0, 0x5e, 0x23, 0x3e, 0x18, 0xb6,
+  0xcf, 0xd6, 0xed, 0x21, 0xe0, 0x90, 0xca, 0x8c, 0x8d, 0x2e, 0x84, 0xcd,
+  0x40, 0x30, 0x31, 0xf0, 0x09, 0x9b, 0xd6, 0x40, 0x65, 0x40, 0xc0, 0x36,
+  0x64, 0xd4, 0x83, 0xde, 0x38, 0xcb, 0xac, 0x72, 0xcd, 0x7b, 0x55, 0xda,
+  0x70, 0x73, 0xd8, 0x62, 0x58, 0xdc, 0x70, 0xee, 0x3a, 0x1a, 0x24, 0x8d,
+  0x2b, 0xbd, 0x31, 0xbf, 0x90, 0x70, 0x36, 0xae, 0xcc, 0xae, 0x67, 0x15,
+  0x5f, 0x0d, 0x1c, 0x23, 0x54, 0x32, 0x27, 0x61, 0x35, 0xe5, 0xed, 0x71,
+  0xa2, 0x38, 0x37, 0x17, 0x4e, 0x54, 0xd4, 0xc8, 0x4c, 0x4c, 0x51, 0x2c,
+  0x23, 0x2c, 0x0f, 0xc9, 0x53, 0x7c, 0xcb, 0xf1, 0xda, 0x52, 0xae, 0x7c,
+  0x42, 0x8b, 0xd3, 0x3a, 0xb2, 0xde, 0x13, 0xfc, 0x2a, 0xd1, 0x91, 0x21,
+  0x93, 0x75, 0x5a, 0x82, 0xf5, 0x7e, 0xb2, 0x4e, 0x43, 0xa5, 0x2f, 0xd6,
+  0xb1, 0x9e, 0xf8, 0xd8, 0x5b, 0xbe, 0xf5, 0x61, 0xe4, 0x14, 0xd2, 0x33,
+  0xaf, 0xbe, 0x6c, 0xad, 0x12, 0x3e, 0xd7, 0xa6, 0x5e, 0x71, 0x9a, 0x49,
+  0x20, 0x73, 0xeb, 0xbb, 0x5e, 0xfb, 0xaf, 0x0e, 0x4a, 0xc2, 0x28, 0x34,
+  0xcd, 0x78, 0x61, 0xae, 0x13, 0xfb, 0x59, 0x8e, 0x94, 0xd9, 0xa0, 0xa1,
+  0xc7, 0x4f, 0xf1, 0xb9, 0xb2, 0x22, 0x1b, 0x02, 0xca, 0xdc, 0x8d, 0x49,
+  0x40, 0x39, 0xaf, 0xd9, 0xcd, 0x9c, 0xf5, 0xbe, 0xdb, 0x12, 0x56, 0x06,
+  0xf0, 0x9c, 0x9d, 0x21, 0x72, 0x28, 0x5d, 0x65, 0x5f, 0xdb, 0x80, 0x55,
+  0xde, 0x7b, 0x58, 0xd0, 0x9e, 0x8d, 0xca, 0x55, 0x95, 0x5e, 0x57, 0x39,
+  0xc6, 0xbb, 0x16, 0xf9, 0x04, 0xa0, 0xda, 0xaf, 0xbe, 0x9c, 0x96, 0x97,
+  0xc4, 0xb9, 0xfa, 0xe6, 0xa0, 0xd1, 0x4f, 0x04, 0x24, 0xef, 0x4a, 0xa7,
+  0x3c, 0x60, 0x9c, 0x15, 0x96, 0xe2, 0xf5, 0xef, 0x15, 0x21, 0xaa, 0x6f,
+  0xc8, 0x14, 0x3a, 0x91, 0xb6, 0x6d, 0xd3, 0xbc, 0x1f, 0xa6, 0x7d, 0xfb,
+  0x85, 0xdf, 0x97, 0x2e, 0x4e, 0x2a, 0x2d, 0x43, 0x36, 0x32, 0x9c, 0xa2,
+  0xe1, 0xab, 0x1c, 0x1d, 0x97, 0x08, 0x74, 0x6b, 0x28, 0x15, 0x3a, 0xe3,
+  0xe2, 0x90, 0xe6, 0x10, 0x70, 0x62, 0xdf, 0xfa, 0x97, 0xeb, 0x9c, 0x23,
+  0xb0, 0xfe, 0x72, 0x1d, 0x1c, 0x8c, 0xf8, 0x92, 0x56, 0xc1, 0x93, 0xcb,
+  0x69, 0x9d, 0x6f, 0xc5, 0x01, 0xcb, 0x0e, 0x82, 0xf9, 0xe7, 0x0e, 0x08,
+  0xae, 0x65, 0xa7, 0x46, 0xfa, 0xc1, 0x93, 0x30, 0x13, 0x10, 0xe5, 0xf2,
+  0xa8, 0x08, 0xc0, 0x74, 0xdc, 0x70, 0xa0, 0x8c, 0x5c, 0xba, 0x10, 0xcb,
+  0x80, 0x97, 0x52, 0x53, 0xfc, 0x02, 0x9b, 0x39, 0x97, 0xc5, 0x82, 0xb2,
+  0xe3, 0x27, 0x0d, 0x57, 0xb4, 0xc4, 0x59, 0x1a, 0x26, 0xef, 0x0b, 0x2e,
+  0x26, 0x90, 0x91, 0xb2, 0x9c, 0x57, 0x93, 0xe5, 0x9c, 0x4c, 0x15, 0x13,
+  0x32, 0x90, 0xe1, 0xe2, 0x61, 0xf1, 0xa0, 0xe5, 0x9e, 0xf7, 0x07, 0xcc,
+  0xc6, 0x11, 0x36, 0x98, 0x4b, 0xbf, 0x08, 0x45, 0xa1, 0x00, 0x2c, 0x31,
+  0x88, 0x43, 0x2a, 0xb0, 0xb8, 0x29, 0xc2, 0x80, 0xc8, 0x33, 0x78, 0xf8,
+  0xe6, 0xf0, 0xec, 0xec, 0xf0, 0x8c, 0xd6, 0x7b, 0xbf, 0x68, 0x15, 0x8e,
+  0xb3, 0xe0, 0xa9, 0xce, 0xd5, 0xa8, 0x61, 0xbf, 0x21, 0x88, 0x3e, 0xb3,
+  0xc2, 0x74, 0x3a, 0x25, 0x98, 0x71, 0x68, 0x10, 0x8c, 0x14, 0xc4, 0xe5,
+  0xba, 0x7d, 0xf3, 0x22, 0xc2, 0xbe, 0xad, 0xdb, 0xc0, 0x2f, 0xdb, 0xe8,
+  0xc9, 0x16, 0xae, 0x85, 0x4a, 0xea, 0x92, 0x2e, 0x35, 0x29, 0xff, 0x2a,
+  0x6b, 0x89, 0xa9, 0x43, 0x89, 0xd4, 0xcd, 0xc4, 0x99, 0x3e, 0xb3, 0xf6,
+  0x09, 0x4c, 0xf9, 0x82, 0xce, 0x28, 0xe9, 0x4e, 0x58, 0x8c, 0xba, 0x59,
+  0x2e, 0xf2, 0xa9, 0xb5, 0xf6, 0x9a, 0xcf, 0x8d, 0xf8, 0x97, 0xf0, 0x29,
+  0xaf, 0x35, 0xd6, 0x05, 0x5e, 0x4d, 0x35, 0x46, 0xf8, 0xd6, 0xb6, 0x0e,
+  0x82, 0x6f, 0x82, 0x7c, 0x39, 0x0e, 0x1a, 0xd3, 0xaa, 0x49, 0xed, 0xec,
+  0x72, 0xa1, 0xfd, 0x0c, 0x56, 0x46, 0xe2, 0x16, 0x1a, 0x7e, 0xe3, 0x73,
+  0x06, 0xb2, 0x65, 0xcd, 0x5d, 0xbc, 0x3b, 0x85, 0xb0, 0xed, 0x31, 0x10,
+  0x0a, 0x92, 0x4a, 0xab, 0xbd, 0xe4, 0xa7, 0x3a, 0x9f, 0xfc, 0xe2, 0x2e,
+  0x0f, 0xa4, 0xff, 0xb8, 0x90, 0x74, 0xb6, 0xd0, 0x9b, 0xc9, 0xcb, 0x42,
+  0x89, 0x32, 0xcc, 0xc9, 0xdc, 0xef, 0x47, 0x87, 0x67, 0xc9, 0xfe, 0xd7,
+  0x84, 0x03, 0xfc, 0xdf, 0xdc, 0x60, 0x7a, 0x4e, 0x6e, 0x87, 0x35, 0x41,
+  0xe2, 0x13, 0x74, 0x93, 0x4c, 0x4d, 0xe1, 0x8c, 0xcc, 0xd5, 0xda, 0xd9,
+  0x5c, 0xeb, 0x6f, 0xbb, 0xeb, 0xbe, 0xbd, 0x87, 0x6b, 0xc9, 0xa3, 0xbb,
+  0xf8, 0x31, 0x7b, 0x48, 0x87, 0xcc, 0xdf, 0x45, 0xc6, 0x45, 0x62, 0x97,
+  0x84, 0xee, 0x8d, 0x8c, 0xbe, 0x0e, 0xd4, 0x4e, 0xde, 0xa5, 0xfd, 0x64,
+  0xfd, 0x6d, 0xf9, 0x0f, 0x23, 0x0c, 0xa4, 0x5b, 0x4f, 0x86, 0xdb, 0xc9,
+  0xc6, 0xf7, 0x79, 0xf1, 0xe2, 0xd9, 0x5f, 0x93, 0xa3, 0xcd, 0xf5, 0x56,
+  0x30, 0x3f, 0xd7, 0x60, 0x1d, 0xa7, 0xc5, 0xb5, 0xdd, 0xb2, 0x13, 0x9c,
+  0x6c, 0x0e, 0xaa, 0xd3, 0xba, 0x2c, 0x5c, 0x37, 0x7a, 0x65, 0x8b, 0x48,
+  0xfd, 0x94, 0xbc, 0x80, 0xe4, 0x3b, 0x0b, 0x7a, 0x4d, 0x5a, 0xbe, 0x79,
+  0x6a, 0x4a, 0x4b, 0xf7, 0xe2, 0x59, 0xd0, 0xc4, 0x53, 0xdb, 0xc6, 0x7b,
+  0x6e, 0xe3, 0x57, 0x36, 0xb1, 0x3b, 0xdc, 0xde, 0x4d, 0x36, 0x4e, 0x46,
+  0x5b, 0xbb, 0xb6, 0x85, 0xb0, 0x89, 0x5d, 0x34, 0x41, 0x0f, 0xb5, 0x5f,
+  0x7e, 0x4a, 0xfd, 0xff, 0x94, 0x15, 0xbf, 0x24, 0x1b, 0x3f, 0xec, 0xec,
+  0x98, 0x06, 0xfe, 0x9a, 0xec, 0x1f, 0xfd, 0x90, 0x3c, 0x1d, 0x9a, 0xc6,
+  0xde, 0xa5, 0x37, 0xd2, 0x9c, 0xc0, 0xd9, 0x8e, 0xd0, 0x88, 0xf9, 0x3e,
+  0x68, 0xe3, 0x59, 0xa7, 0x8d, 0x63, 0xa3, 0x17, 0xde, 0x99, 0x6b, 0x65,
+  0x7b, 0xf8, 0x64, 0x37, 0xc9, 0x9f, 0x7d, 0xfe, 0x5c, 0x1b, 0x92, 0x36,
+  0xf0, 0x7d, 0xdb, 0x5a, 0xc9, 0x80, 0x29, 0x46, 0xd4, 0x39, 0xbc, 0x33,
+  0x0c, 0x0d, 0x2c, 0x02, 0xb5, 0x32, 0xae, 0xd2, 0x4a, 0xab, 0x18, 0x53,
+  0xc1, 0x03, 0xb3, 0x53, 0x02, 0x24, 0x9d, 0xc1, 0x6c, 0x69, 0x2e, 0xce,
+  0xbd, 0x60, 0x38, 0xa4, 0x9b, 0xea, 0xa3, 0x7f, 0x4d, 0xde, 0x8e, 0x8e,
+  0x0e, 0xcd, 0x8c, 0xb6, 0xcd, 0xd0, 0xdc, 0x1a, 0xf2, 0x80, 0xf0, 0x15,
+  0x16, 0xf7, 0x05, 0x70, 0x49, 0xa5, 0x0d, 0xbf, 0xde, 0x2e, 0x88, 0xce,
+  0x5c, 0xdc, 0x35, 0xfa, 0xa5, 0x90, 0x94, 0xc1, 0xfe, 0x25, 0xa9, 0x10,
+  0x7c, 0xd5, 0xa2, 0xeb, 0x6f, 0xcb, 0xc2, 0x1c, 0x93, 0xaa, 0xac, 0x28,
+  0x72, 0x6a, 0xbd, 0x25, 0x2d, 0x7c, 0xfb, 0xfa, 0x90, 0x93, 0xea, 0xdf,
+  0xa6, 0x85, 0xe1, 0x91, 0x84, 0x8f, 0x55, 0x5f, 0x93, 0xff, 0x9f, 0xdd,
+  0x39, 0xfc, 0xfe, 0xf1, 0x7d, 0x71, 0x67, 0xf6, 0xf1, 0xb3, 0xe1, 0x0e,
+  0x85, 0x6c, 0x93, 0xd6, 0xfb, 0xe6, 0xad, 0xf9, 0x7b, 0xe7, 0xe9, 0x7a,
+  0x42, 0x5f, 0xb5, 0x35, 0x78, 0x3d, 0xaf, 0x6b, 0x07, 0x27, 0x27, 0xdf,
+  0x1e, 0x71, 0x00, 0xc8, 0x81, 0x98, 0x55, 0x49, 0xb8, 0xb2, 0x5a, 0x31,
+  0x73, 0x57, 0xa3, 0xbd, 0xb9, 0x6c, 0x25, 0x38, 0xe3, 0xae, 0xb3, 0x6c,
+  0x41, 0xd1, 0x08, 0x4d, 0x87, 0x23, 0x34, 0xc2, 0xa3, 0x6d, 0x6c, 0x13,
+  0x89, 0x3f, 0x2d, 0x6c, 0xaf, 0x9a, 0xc0, 0x92, 0xd5, 0x84, 0x3b, 0xbe,
+  0xb7, 0xc0, 0x1d, 0xa9, 0x2b, 0x88, 0x28, 0x95, 0x53, 0xa4, 0x29, 0x35,
+  0x41, 0x73, 0xd9, 0x11, 0xf3, 0xa2, 0xe8, 0xbe, 0xeb, 0x23, 0x23, 0xdd,
+  0xf3, 0xa0, 0xf7, 0xc4, 0x6a, 0xbb, 0xee, 0xa1, 0x4b, 0x43, 0xa2, 0x5d,
+  0x48, 0xb1, 0x1f, 0x98, 0x8e, 0x35, 0xa2, 0x5e, 0x79, 0x73, 0x0d, 0x5b,
+  0x36, 0xc2, 0xf3, 0xde, 0xed, 0xbf, 0x3d, 0x7c, 0xf5, 0xdd, 0xfe, 0xf1,
+  0xfb, 0x43, 0xf3, 0x4a, 0x0e, 0x20, 0x77, 0x1b, 0xc2, 0x87, 0x31, 0xce,
+  0x73, 0xd4, 0xfa, 0xad, 0x8d, 0x78, 0xb0, 0xbe, 0xc6, 0xe1, 0xe5, 0x49,
+  0x8f, 0xde, 0xda, 0xe1, 0xd7, 0x0c, 0x5d, 0xd0, 0x5f, 0xbb, 0xfc, 0xd7,
+  0xee, 0x5f, 0x7b, 0x9b, 0xad, 0x49, 0x07, 0x5a, 0x32, 0xd1, 0xcb, 0x2d,
+  0x57, 0x7c, 0xa2, 0xf0, 0x20, 0xce, 0xdd, 0xe0, 0x55, 0xe9, 0xa9, 0x8f,
+  0xc6, 0x2f, 0x7b, 0xb9, 0x31, 0xbe, 0xf7, 0x75, 0xf0, 0x1e, 0xbd, 0xf4,
+  0x0a, 0x02, 0x46, 0x0f, 0x50, 0xf7, 0x99, 0xae, 0x16, 0xb7, 0xa1, 0x4d,
+  0x64, 0x77, 0x0b, 0x8a, 0x88, 0xdc, 0xe8, 0xf1, 0x2f, 0xaf, 0x5e, 0xef,
+  0x9f, 0x1f, 0xd2, 0x0b, 0xda, 0xbd, 0x56, 0x37, 0xd0, 0x34, 0x0a, 0x1a,
+  0xcf, 0x86, 0xb8, 0xa6, 0x5f, 0xd1, 0x84, 0x7a, 0x9b, 0xec, 0xcb, 0x80,
+  0x53, 0xbd, 0x33, 0x2e, 0xe2, 0x69, 0x1c, 0xb8, 0xed, 0x12, 0xd5, 0x6b,
+  0x8d, 0x58, 0xd9, 0xe8, 0xf1, 0x77, 0x3d, 0x6b, 0xc1, 0x35, 0x77, 0xf9,
+  0xfa, 0x4d, 0xa6, 0xee, 0xca, 0x29, 0x92, 0x2c, 0x82, 0xcc, 0x5a, 0x0e,
+  0x49, 0x73, 0xfb, 0x23, 0xce, 0x0a, 0xb6, 0x38, 0x79, 0x78, 0xdb, 0x76,
+  0xe3, 0x25, 0x13, 0x9e, 0x6c, 0x4c, 0x65, 0xb9, 0xb3, 0xfb, 0xe4, 0xaf,
+  0x58, 0xcf, 0x57, 0xbd, 0x2d, 0x73, 0x37, 0xf4, 0xfe, 0x4a, 0x5d, 0xe7,
+  0xae, 0xaa, 0xb6, 0xdd, 0x0f, 0xd2, 0xa7, 0x84, 0xa2, 0x38, 0x5c, 0x86,
+  0x76, 0xdd, 0x03, 0xf8, 0xc1, 0x82, 0xde, 0x72, 0x96, 0x98, 0xc2, 0xe1,
+  0x68, 0xf0, 0x00, 0xf6, 0x6b, 0x9c, 0x5d, 0xe6, 0x05, 0x8a, 0xfd, 0xb1,
+  0x51, 0x17, 0xdd, 0xf9, 0xf7, 0x47, 0x9f, 0xdf, 0xe5, 0x39, 0x0a, 0x84,
+  0x10, 0xf5, 0x39, 0xbf, 0xd7, 0x44, 0xb2, 0xba, 0x56, 0x15, 0x97, 0xf7,
+  0x2c, 0x90, 0x8c, 0xc7, 0x62, 0xdb, 0x51, 0x65, 0x04, 0x32, 0x81, 0x61,
+  0x2d, 0xf7, 0x10, 0x94, 0x10, 0x6d, 0xe0, 0x07, 0x59, 0xe8, 0x9d, 0x9d,
+  0x8e, 0x29, 0xcb, 0xdc, 0xa6, 0xc6, 0x78, 0x5a, 0xb9, 0x5d, 0x7a, 0x3d,
+  0x7e, 0xb9, 0x87, 0xcd, 0x44, 0x17, 0x25, 0xaf, 0x65, 0x6d, 0x6d, 0x48,
+  0xf0, 0x36, 0xca, 0xb3, 0xed, 0x7d, 0xea, 0xe4, 0xa3, 0x61, 0x1a, 0xac,
+  0xd2, 0xb3, 0x7e, 0x6c, 0x58, 0x4d, 0x91, 0x55, 0x0f, 0x06, 0x58, 0x44,
+  0x9c, 0x51, 0x98, 0xa2, 0x17, 0xe9, 0x40, 0xef, 0x0c, 0x87, 0x43, 0x57,
+  0x99, 0x9c, 0xb6, 0x45, 0x7c, 0x50, 0xa8, 0x66, 0xe4, 0x21, 0xc8, 0x62,
+  0x8d, 0x37, 0x20, 0xcc, 0x43, 0xa0, 0xde, 0x94, 0xc0, 0x1b, 0xb1, 0x13,
+  0xd8, 0xa3, 0xe1, 0xd9, 0x38, 0xd6, 0xa5, 0xdb, 0x75, 0x85, 0x6d, 0xb8,
+  0x8e, 0x6d, 0xc2, 0x03, 0x63, 0x63, 0xdb, 0xa3, 0x94, 0xd8, 0xb4, 0x7c,
+  0xaa, 0xb4, 0x6b, 0x41, 0x14, 0x4c, 0x01, 0xe4, 0xa0, 0x13, 0xce, 0x38,
+  0xe6, 0x45, 0x93, 0xa1, 0x48, 0xb1, 0x35, 0x62, 0x72, 0xe5, 0x2d, 0x60,
+  0x10, 0xb8, 0x5c, 0xcd, 0xa2, 0x22, 0x4d, 0x8f, 0xd6, 0x58, 0x6f, 0x90,
+  0x85, 0x15, 0x9b, 0xa5, 0x1d, 0x41, 0x13, 0x26, 0x9d, 0x19, 0xb2, 0xbf,
+  0x64, 0x39, 0x0a, 0x20, 0x4d, 0xad, 0x49, 0x3c, 0x46, 0x6c, 0x2b, 0xe7,
+  0x70, 0x7b, 0xc9, 0xe4, 0x9d, 0xb9, 0x8a, 0xa2, 0xcd, 0x06, 0x0c, 0xe9,
+  0xa2, 0x89, 0x88, 0xca, 0x3d, 0x04, 0xd6, 0xe3, 0x21, 0x7f, 0xf9, 0x44,
+  0x5b, 0xb4, 0xce, 0xf2, 0xce, 0xda, 0xb8, 0x5b, 0xb9, 0xcd, 0xba, 0xcc,
+  0x8a, 0xb2, 0x75, 0x99, 0xc1, 0x33, 0x1c, 0xdf, 0x4b, 0xd2, 0x5b, 0x73,
+  0xf5, 0x14, 0x19, 0xc5, 0x67, 0x22, 0xd2, 0x01, 0x56, 0x99, 0x63, 0xcf,
+  0xce, 0x68, 0x67, 0x28, 0x54, 0x2b, 0x31, 0x4d, 0xc4, 0x77, 0xf6, 0xb4,
+  0xc8, 0x36, 0x03, 0xe6, 0xaa, 0x41, 0x2f, 0x47, 0x45, 0x70, 0x02, 0x38,
+  0x15, 0x49, 0x5d, 0xd5, 0x73, 0x1a, 0xf9, 0x26, 0xea, 0x25, 0xb3, 0x38,
+  0x8f, 0xb8, 0x44, 0xb2, 0x73, 0x70, 0x5c, 0x85, 0xae, 0x56, 0x5a, 0x4c,
+  0xbd, 0x4e, 0xac, 0x7f, 0x5a, 0xcc, 0x4f, 0x14, 0xde, 0x5b, 0x0c, 0x00,
+  0x75, 0x61, 0xcb, 0xe9, 0xb2, 0x7a, 0x75, 0x79, 0xa9, 0xb5, 0x77, 0x3a,
+  0x53, 0x8b, 0x13, 0xd9, 0x31, 0xad, 0x0a, 0x45, 0x41, 0xdf, 0xaf, 0x5a,
+  0xcd, 0x73, 0xb5, 0xf9, 0xa8, 0xd5, 0xa5, 0x45, 0xcc, 0xea, 0x93, 0xe4,
+  0x7d, 0x6b, 0x6c, 0xd2, 0x15, 0x12, 0x34, 0xda, 0x3e, 0xe4, 0x93, 0xb3,
+  0x35, 0x94, 0x4e, 0x28, 0x1c, 0x20, 0x83, 0x6e, 0x3a, 0xf0, 0xf9, 0x5c,
+  0x04, 0x8a, 0x8b, 0x44, 0xbd, 0xb5, 0xa1, 0x56, 0x5c, 0x1b, 0x70, 0x9c,
+  0x3a, 0x95, 0x6b, 0x2d, 0x69, 0x59, 0x7b, 0xa9, 0xa4, 0xca, 0x51, 0x21,
+  0x7c, 0xa8, 0xbc, 0xc9, 0x1c, 0x44, 0xa4, 0x33, 0x38, 0x3a, 0x9c, 0x5d,
+  0x39, 0xfd, 0x96, 0x99, 0x74, 0x1c, 0xbc, 0x96, 0x5f, 0x61, 0x92, 0x9d,
+  0x55, 0x19, 0x26, 0x5e, 0x93, 0x6c, 0x2a, 0x29, 0x7d, 0x16, 0xcf, 0x63,
+  0x13, 0xbf, 0xb5, 0xb6, 0xc8, 0x34, 0xc2, 0x20, 0x2f, 0x9e, 0x6a, 0xc2,
+  0x25, 0x47, 0x14, 0x2b, 0xdf, 0xc6, 0xe8, 0x39, 0xff, 0xaf, 0xce, 0xb2,
+  0x67, 0x37, 0xa9, 0xa7, 0x55, 0x09, 0x40, 0x04, 0xa0, 0x01, 0x12, 0xe8,
+  0xac, 0x0b, 0xff, 0x5c, 0xf6, 0x09, 0x94, 0x0c, 0x0b, 0x5a, 0x87, 0x91,
+  0x06, 0x67, 0xce, 0x86, 0x68, 0x20, 0x0f, 0xc5, 0x70, 0x5e, 0xc4, 0x15,
+  0x0c, 0xc6, 0x6b, 0x9c, 0x6f, 0x34, 0x98, 0xf8, 0xb5, 0xb5, 0x57, 0x03,
+  0x16, 0x8c, 0x5b, 0x07, 0xf3, 0xb1, 0x73, 0x7a, 0x7a, 0x76, 0xf2, 0xf5,
+  0xd9, 0xe1, 0x68, 0x94, 0xbc, 0x3d, 0x3c, 0x67, 0x5d, 0xff, 0x9c, 0x43,
+  0xef, 0x2e, 0x49, 0x5d, 0x4f, 0xe0, 0x6b, 0x50, 0x0c, 0x27, 0x0d, 0x39,
+  0x51, 0x43, 0x02, 0x72, 0x9e, 0x4a, 0xf2, 0xa3, 0x41, 0x7e, 0x83, 0x12,
+  0x3f, 0x93, 0x88, 0xbd, 0x2b, 0x58, 0xfb, 0x11, 0xd3, 0x04, 0x87, 0xa4,
+  0x35, 0x9e, 0x3b, 0x33, 0x2a, 0x04, 0x63, 0x8e, 0x72, 0xb2, 0x39, 0x87,
+  0xce, 0x84, 0x4e, 0x57, 0xb6, 0xf9, 0x89, 0xe9, 0xfd, 0xc9, 0xac, 0x66,
+  0x43, 0x85, 0xd3, 0xe9, 0xd7, 0x33, 0x25, 0x8a, 0x3f, 0x25, 0x3f, 0x98,
+  0x36, 0xa7, 0x46, 0x79, 0x25, 0x0b, 0xb2, 0xb9, 0x65, 0x47, 0xa8, 0x77,
+  0xea, 0xca, 0x0a, 0xa1, 0x48, 0xa9, 0xf7, 0x1f, 0x95, 0x22, 0x1e, 0xc6,
+  0xab, 0xf2, 0xb4, 0xca, 0xea, 0x30, 0x5c, 0xa6, 0xc4, 0xd4, 0xd9, 0x9e,
+  0xa5, 0x90, 0x71, 0x92, 0x1c, 0x67, 0x17, 0x0d, 0xa4, 0x10, 0xea, 0xce,
+  0x34, 0xb7, 0x4d, 0xf8, 0xcf, 0x3b, 0x54, 0xf7, 0xcc, 0xfc, 0xfa, 0xe4,
+  0xf3, 0xe7, 0xdb, 0x9f, 0xf3, 0xaf, 0xfa, 0xef, 0x8b, 0xa7, 0xdb, 0x82,
+  0xa3, 0x6e, 0xfe, 0x7a, 0xba, 0xf7, 0x74, 0x67, 0x8f, 0xe0, 0x1d, 0xb7,
+  0xf7, 0xb6, 0xcd, 0xff, 0x9e, 0xca, 0x27, 0x84, 0x61, 0xf9, 0x62, 0xf7,
+  0xf3, 0xcf, 0x10, 0x0d, 0x43, 0xf4, 0x31, 0x33, 0x9d, 0x0c, 0x9a, 0x72,
+  0x00, 0x94, 0x29, 0x48, 0x3e, 0x7f, 0x6a, 0x5b, 0x22, 0xc9, 0xbd, 0x3e,
+  0x21, 0x67, 0xea, 0x25, 0xeb, 0x34, 0xb3, 0x8c, 0x8e, 0xbd, 0x58, 0x55,
+  0x19, 0xf9, 0x46, 0x23, 0xc4, 0x39, 0x6d, 0x5b, 0xa6, 0x21, 0x6f, 0x37,
+  0xf8, 0x1b, 0xb0, 0x6d, 0xad, 0x77, 0x38, 0xd0, 0xdc, 0x43, 0x88, 0xfb,
+  0xb5, 0x5d, 0x6b, 0x22, 0xf9, 0x1a, 0x70, 0xdf, 0x64, 0xab, 0xe4, 0xbd,
+  0x89, 0xd6, 0x82, 0xb6, 0x4f, 0x91, 0x18, 0x38, 0xe7, 0x9c, 0x84, 0x0b,
+  0x0e, 0x57, 0xfe, 0xb5, 0xfd, 0xb1, 0xe5, 0x8a, 0xde, 0x12, 0x6a, 0x48,
+  0xc2, 0xde, 0x6c, 0x2e, 0x42, 0xa4, 0xaf, 0x16, 0xf1, 0xac, 0xb9, 0xed,
+  0x77, 0x2b, 0x45, 0xac, 0x4c, 0x1e, 0xb2, 0x39, 0x5c, 0x5c, 0x5a, 0x37,
+  0x32, 0xe5, 0xa0, 0x39, 0x21, 0xa3, 0x5f, 0xd1, 0x9c, 0x9b, 0x11, 0x28,
+  0xd8, 0xee, 0xdc, 0xc0, 0xdb, 0x9c, 0x9c, 0x03, 0xdb, 0x74, 0x35, 0x2c,
+  0xae, 0xa8, 0x5e, 0x73, 0xfc, 0xaa, 0x25, 0xd9, 0x01, 0xbf, 0x21, 0x32,
+  0xa7, 0xcd, 0x8b, 0x33, 0xa7, 0xf0, 0xa6, 0xc4, 0x15, 0xcf, 0xcf, 0x2b,
+  0x65, 0x07, 0x5d, 0x11, 0x35, 0x7a, 0xfd, 0x49, 0x1f, 0x38, 0x4f, 0xf6,
+  0xd0, 0x3d, 0x38, 0x35, 0x17, 0x5b, 0x6f, 0x4b, 0x0b, 0x6f, 0xd8, 0x58,
+  0xf5, 0xd8, 0x91, 0x74, 0xcf, 0x21, 0x7c, 0xdd, 0x36, 0xe7, 0xdf, 0x3e,
+  0x28, 0x2b, 0x2d, 0x85, 0x31, 0x08, 0xac, 0x94, 0xd0, 0xfd, 0x37, 0x95,
+  0x85, 0x0d, 0xfe, 0x68, 0xc3, 0xb6, 0x70, 0x99, 0x49, 0x95, 0xd0, 0x94,
+  0x29, 0x7f, 0xe6, 0xe7, 0xd2, 0x5a, 0x6e, 0x37, 0x4e, 0xab, 0x16, 0x8e,
+  0xfe, 0x1a, 0x57, 0x93, 0x30, 0xd7, 0xab, 0xb9, 0x2e, 0x90, 0xee, 0xc8,
+  0x72, 0xc4, 0x1f, 0xd6, 0xd6, 0x46, 0xa7, 0x87, 0x87, 0xaf, 0x93, 0xe3,
+  0xa3, 0xb7, 0x47, 0xe7, 0x9e, 0x14, 0x6e, 0x6f, 0x0f, 0xb5, 0xb4, 0x6a,
+  0xcd, 0xa9, 0xce, 0x72, 0x38, 0xd4, 0x66, 0xee, 0x4f, 0xef, 0xef, 0x79,
+  0x26, 0x59, 0x14, 0xb3, 0xee, 0x7b, 0xd0, 0xb7, 0x81, 0xec, 0x34, 0x4c,
+  0xbe, 0xf2, 0x02, 0x23, 0x93, 0xda, 0x48, 0x34, 0x13, 0x5b, 0x70, 0x79,
+  0xf0, 0xa3, 0xc4, 0x69, 0xb4, 0xc5, 0x25, 0x01, 0x9f, 0xb5, 0x29, 0x3d,
+  0x12, 0xdb, 0xda, 0x19, 0x15, 0xad, 0x6d, 0xc6, 0xa1, 0xd5, 0x9e, 0x59,
+  0x0e, 0x61, 0x7b, 0xb7, 0x19, 0xd0, 0x0e, 0xe6, 0x39, 0xe7, 0x5a, 0xfa,
+  0x31, 0xc5, 0xb6, 0x06, 0xed, 0x79, 0xc9, 0x7c, 0xdc, 0xef, 0xd1, 0x2f,
+  0x2e, 0xae, 0x01, 0xb5, 0xda, 0x97, 0x5f, 0xb5, 0xfa, 0xc9, 0xb6, 0x4d,
+  0x57, 0x58, 0x80, 0xe7, 0x88, 0x7c, 0x4f, 0x9d, 0xed, 0x24, 0x46, 0x08,
+  0x59, 0x92, 0x28, 0x5f, 0x2d, 0x8b, 0xe0, 0xba, 0xfb, 0x91, 0xdf, 0x35,
+  0xf3, 0x7f, 0xbe, 0x8d, 0xeb, 0xed, 0x22, 0xad, 0x06, 0x46, 0xdc, 0xba,
+  0x1f, 0xa8, 0x49, 0x95, 0x29, 0x42, 0xe2, 0x8d, 0xd9, 0xde, 0x93, 0xb9,
+  0x72, 0xb7, 0x1d, 0x11, 0xd1, 0xe5, 0x9c, 0x94, 0xf0, 0x4b, 0xce, 0xe4,
+  0x00, 0xd0, 0xd4, 0x29, 0xd3, 0x57, 0x2d, 0x9c, 0x4e, 0xc0, 0x71, 0xc0,
+  0xc4, 0xba, 0x8b, 0x8e, 0x47, 0x51, 0x06, 0x02, 0xd8, 0x2a, 0xb5, 0x9a,
+  0xd3, 0x34, 0x65, 0x2e, 0xa1, 0x3c, 0x3d, 0x4f, 0x76, 0x3e, 0xa7, 0x79,
+  0x7c, 0xdc, 0x7c, 0xde, 0x94, 0xd5, 0xc4, 0xe6, 0x14, 0x43, 0x47, 0xf0,
+  0x12, 0x4c, 0x39, 0x2d, 0x02, 0xd5, 0x9a, 0x78, 0x75, 0x35, 0x28, 0x16,
+  0x41, 0x7b, 0xa4, 0x94, 0x88, 0x3f, 0x1d, 0xe6, 0x28, 0x38, 0xb8, 0x59,
+  0x2c, 0xa2, 0xbb, 0x46, 0xd6, 0x85, 0x0c, 0xac, 0x1c, 0xb4, 0xb7, 0x5e,
+  0xd9, 0x04, 0x54, 0x5e, 0x06, 0x32, 0x89, 0x18, 0x5a, 0xbb, 0xcd, 0xa7,
+  0x10, 0xa5, 0x1d, 0x44, 0x9d, 0xd9, 0x2f, 0x26, 0x3e, 0x8e, 0x95, 0x86,
+  0xcf, 0x12, 0xce, 0x4e, 0x3b, 0x32, 0x11, 0x60, 0x68, 0x59, 0x4b, 0x58,
+  0x14, 0x36, 0x20, 0x3f, 0x50, 0x7e, 0xb3, 0xf3, 0x0b, 0x90, 0xfe, 0x44,
+  0xac, 0xb9, 0xe7, 0x7a, 0xa1, 0x5c, 0x81, 0xa6, 0x99, 0xa9, 0x31, 0xe1,
+  0xad, 0x25, 0xec, 0xf6, 0x9c, 0x09, 0xa9, 0xc5, 0x9b, 0xf6, 0xce, 0xb6,
+  0x11, 0x5a, 0x67, 0x65, 0xab, 0xf8, 0xb9, 0x21, 0xaa, 0x50, 0x13, 0xc5,
+  0xb4, 0x06, 0x58, 0x9d, 0x9d, 0xed, 0x6f, 0x57, 0xaf, 0x3a, 0xe0, 0xf7,
+  0x1f, 0x7c, 0x79, 0xf7, 0xe9, 0x03, 0x9b, 0x76, 0x52, 0x41, 0x19, 0xcf,
+  0x34, 0x06, 0x12, 0x82, 0xa0, 0xf3, 0xbc, 0x04, 0xdb, 0x66, 0x08, 0x3f,
+  0xbb, 0x4c, 0x69, 0xf8, 0x0f, 0x8d, 0x5e, 0x73, 0x42, 0x3a, 0x43, 0x79,
+  0x2b, 0x51, 0xd9, 0xfc, 0x65, 0x4d, 0x66, 0xb1, 0x05, 0x00, 0xfa, 0x9c,
+  0xee, 0x6a, 0xd3, 0xc9, 0x19, 0x9b, 0xc1, 0x7b, 0x9b, 0x39, 0x67, 0xbf,
+  0xcd, 0x24, 0x94, 0x7a, 0xaa, 0xec, 0x72, 0xc9, 0x48, 0x18, 0x25, 0xeb,
+  0xfa, 0x84, 0x67, 0x2d, 0xe7, 0xd5, 0xf0, 0x66, 0x0a, 0x1f, 0x62, 0x7a,
+  0x02, 0xe3, 0x9d, 0xa4, 0x2a, 0xb2, 0xb2, 0xc8, 0xd1, 0xbd, 0x18, 0xc8,
+  0x28, 0x3b, 0x21, 0x2f, 0x18, 0xb8, 0xc1, 0x5a, 0xd2, 0x2d, 0x9c, 0xcd,
+  0x80, 0x8d, 0x43, 0x64, 0xfa, 0x32, 0xa1, 0x58, 0x66, 0x4f, 0x69, 0x65,
+  0xe4, 0x0d, 0x6b, 0xd8, 0x2d, 0x80, 0x06, 0xfa, 0x42, 0xb5, 0x68, 0xc9,
+  0x76, 0x45, 0x1c, 0xbf, 0x56, 0xe0, 0x4c, 0x06, 0xd9, 0x27, 0x63, 0xff,
+  0xc1, 0xc9, 0xbb, 0x37, 0x47, 0x5f, 0x5b, 0x28, 0x23, 0x66, 0xe2, 0x2d,
+  0x88, 0x0d, 0x36, 0x1f, 0xfb, 0x9e, 0x6e, 0x29, 0xc5, 0x28, 0xd1, 0xb7,
+  0x86, 0x3d, 0x7d, 0xf0, 0x3f, 0x00, 0x03, 0x29, 0x9e, 0x90, 0x81, 0x9c,
+  0xf1, 0x3f, 0xea, 0x4d, 0x67, 0x6e, 0xe8, 0x40, 0xd5, 0x71, 0x96, 0x46,
+  0x5a, 0x35, 0xcb, 0x85, 0x0d, 0x22, 0xf4, 0x4a, 0x39, 0x0a, 0xfc, 0xb6,
+  0xa6, 0xa2, 0x2f, 0x17, 0xcc, 0x9a, 0x24, 0xa1, 0xb4, 0x65, 0xcd, 0xe5,
+  0x3b, 0x80, 0xcc, 0x09, 0x82, 0xa5, 0x22, 0x17, 0x40, 0x10, 0x97, 0x33,
+  0x23, 0xd0, 0x4e, 0x3f, 0x5e, 0x5e, 0xfd, 0x37, 0x53, 0x94, 0xc3, 0xf4,
+  0x4b, 0x9e, 0xcf, 0x59, 0x1d, 0xa3, 0x79, 0xa3, 0xa6, 0xb4, 0x0d, 0xc6,
+  0xb1, 0xd1, 0xbf, 0xce, 0x3f, 0x54, 0xdb, 0x22, 0xd9, 0x36, 0x3e, 0x49,
+  0xd3, 0x58, 0x53, 0xb8, 0x2a, 0xe1, 0xeb, 0xc4, 0x27, 0xaf, 0xc8, 0x2d,
+  0xb3, 0x47, 0x20, 0xf4, 0x73, 0x06, 0x94, 0xf3, 0xd3, 0x4f, 0x85, 0x4b,
+  0x3a, 0xb0, 0xf8, 0xa3, 0x0b, 0x2f, 0xa3, 0x8d, 0xe3, 0x04, 0x95, 0xe8,
+  0xd8, 0x46, 0x4c, 0x06, 0x96, 0xf5, 0x3f, 0xae, 0x0f, 0xea, 0xfb, 0xf9,
+  0xb8, 0x9c, 0x69, 0xe2, 0x85, 0x05, 0x90, 0xd0, 0x87, 0xfc, 0xd2, 0x6a,
+  0x09, 0x7b, 0x6a, 0x1b, 0xcf, 0x2c, 0xe9, 0x62, 0xa5, 0xdc, 0xf8, 0xb9,
+  0x3c, 0x11, 0xdc, 0x43, 0x3a, 0x0b, 0x60, 0xfb, 0x10, 0x8f, 0xcf, 0x8a,
+  0xc9, 0xac, 0x14, 0xaa, 0xa6, 0x04, 0x73, 0xac, 0x54, 0x7b, 0xea, 0xe4,
+  0xf1, 0x2b, 0x97, 0x64, 0xe1, 0x40, 0xe9, 0x11, 0x23, 0xee, 0xf4, 0x04,
+  0x51, 0x03, 0x13, 0xa4, 0xb7, 0xf9, 0x0b, 0x89, 0xca, 0xf7, 0xf0, 0x6d,
+  0xb8, 0x56, 0x89, 0x19, 0xea, 0xcf, 0x6c, 0x50, 0x64, 0xbf, 0xdf, 0x8f,
+  0xda, 0xb9, 0x3e, 0xda, 0x59, 0x7a, 0x43, 0x4f, 0x69, 0x75, 0x29, 0x28,
+  0x7d, 0xe2, 0x49, 0x83, 0x92, 0x68, 0x2b, 0xc8, 0x58, 0xc3, 0x24, 0x09,
+  0x25, 0x36, 0x6a, 0x06, 0xe2, 0xd3, 0x92, 0x73, 0x0a, 0x25, 0xe3, 0x8a,
+  0x4d, 0x92, 0x96, 0x10, 0x3d, 0x8e, 0xf3, 0x47, 0x1b, 0x8b, 0x92, 0xba,
+  0xbb, 0x4c, 0x0b, 0x5b, 0x38, 0xfb, 0xac, 0x5c, 0x66, 0xde, 0x6b, 0x64,
+  0xc4, 0x83, 0x26, 0x9c, 0x89, 0xe1, 0x84, 0xbb, 0x82, 0x2c, 0x41, 0xb8,
+  0x36, 0x48, 0xfe, 0xc9, 0x6a, 0xd7, 0x04, 0x7f, 0xff, 0x4a, 0x2a, 0x5a,
+  0x99, 0xf3, 0x2c, 0x48, 0x29, 0x02, 0x1f, 0xf8, 0xf9, 0xb6, 0x98, 0xdf,
+  0x1a, 0x09, 0x57, 0xad, 0x93, 0xfd, 0xb3, 0x43, 0x23, 0xd9, 0x5e, 0x16,
+  0xc0, 0xa8, 0x28, 0x1a, 0x4d, 0xaa, 0xcb, 0x0a, 0x29, 0xa1, 0x55, 0xe8,
+  0xf9, 0xa0, 0x0e, 0x6f, 0xbd, 0x37, 0x89, 0x98, 0x24, 0x30, 0x80, 0xf3,
+  0xb7, 0x1d, 0xc9, 0x4d, 0x14, 0x4e, 0x18, 0x5c, 0x87, 0x60, 0x12, 0x98,
+  0xa4, 0xc8, 0x45, 0x62, 0xba, 0x2a, 0x15, 0x4a, 0xf8, 0x34, 0x60, 0xeb,
+  0x3e, 0x86, 0xb0, 0xae, 0x35, 0x4e, 0xb5, 0x4b, 0x45, 0xf8, 0xbb, 0x02,
+  0x73, 0x4a, 0x5f, 0x2d, 0xb7, 0xa7, 0x23, 0xa7, 0x7e, 0xdc, 0x64, 0xf4,
+  0x77, 0xdc, 0x33, 0x24, 0x8b, 0x74, 0xe5, 0x82, 0xcc, 0x46, 0xd8, 0xb3,
+  0xf5, 0x7a, 0xea, 0x09, 0xbf, 0x9c, 0x02, 0x48, 0x31, 0xd6, 0x6c, 0x98,
+  0x16, 0x24, 0x20, 0xb1, 0xeb, 0xb0, 0x3a, 0x30, 0x95, 0xb3, 0x4a, 0x54,
+  0x41, 0xe1, 0xc2, 0x63, 0x42, 0x4b, 0xe2, 0xe2, 0xd9, 0x2d, 0xfe, 0x14,
+  0xb5, 0xed, 0xfe, 0xd1, 0xce, 0xd6, 0x8d, 0xc1, 0x7e, 0x49, 0x1f, 0xbd,
+  0xb2, 0xe8, 0x76, 0x34, 0x8a, 0x21, 0x75, 0x04, 0x96, 0x0a, 0x9f, 0x29,
+  0xfd, 0x82, 0x8f, 0x11, 0xf5, 0xa6, 0x70, 0xa7, 0xe0, 0x3a, 0x16, 0x42,
+  0xab, 0x14, 0x9f, 0xaa, 0x1b, 0x08, 0x3b, 0xf6, 0xc0, 0xa1, 0xc7, 0xbe,
+  0x68, 0x3c, 0xf8, 0x76, 0x4b, 0xab, 0xe0, 0x92, 0xfd, 0x86, 0x12, 0x88,
+  0xf5, 0xc0, 0xd7, 0x59, 0xab, 0x6c, 0xae, 0xcd, 0x14, 0xea, 0x0d, 0x7a,
+  0x66, 0x2d, 0xd6, 0x67, 0x33, 0xc7, 0xf0, 0xf5, 0x31, 0xda, 0x55, 0x24,
+  0xd5, 0x39, 0x81, 0x49, 0x78, 0x17, 0xd5, 0xe3, 0xb8, 0x6f, 0xa5, 0x38,
+  0x50, 0x41, 0x33, 0xca, 0x00, 0xb2, 0xc0, 0x5e, 0x48, 0x13, 0x41, 0x90,
+  0xc0, 0x4d, 0x5e, 0xab, 0xf3, 0xd1, 0xd0, 0xf6, 0x84, 0x63, 0x22, 0x1a,
+  0x06, 0x24, 0xc8, 0x9a, 0x89, 0xb7, 0x94, 0xd9, 0xe4, 0xaa, 0xe4, 0x98,
+  0x5a, 0xb3, 0x68, 0x5e, 0xa6, 0x67, 0x2f, 0xf9, 0x2f, 0xa1, 0x81, 0x6f,
+  0x5d, 0xd2, 0x1e, 0x11, 0xc2, 0x90, 0x71, 0x28, 0x87, 0x8e, 0x20, 0x0e,
+  0x7f, 0x38, 0x3f, 0xdb, 0x4f, 0xbe, 0x39, 0xdc, 0x7f, 0x7d, 0x78, 0x36,
+  0xea, 0x5c, 0xfa, 0x12, 0xfe, 0xc1, 0x12, 0x1a, 0x19, 0x81, 0x21, 0x1a,
+  0x2b, 0xf0, 0x80, 0xc4, 0xed, 0x2b, 0xd7, 0x33, 0xc4, 0x43, 0x07, 0xc9,
+  0x9c, 0x0f, 0x52, 0x88, 0xd8, 0x5b, 0x00, 0xdc, 0xe3, 0x1a, 0xcc, 0xc6,
+  0xb6, 0x31, 0x31, 0x1c, 0x8a, 0x82, 0x18, 0xd4, 0x64, 0xee, 0x67, 0xcc,
+  0x38, 0xac, 0x3e, 0x77, 0x99, 0x4c, 0x4b, 0x4d, 0x06, 0x6c, 0xef, 0xdc,
+  0x37, 0x2e, 0xdf, 0xdb, 0x63, 0x5b, 0x72, 0xc9, 0x88, 0xd5, 0xb0, 0xf7,
+  0xc3, 0xc0, 0xf4, 0x3b, 0x30, 0x8b, 0x3f, 0x20, 0x30, 0xc7, 0xfb, 0xac,
+  0xee, 0x75, 0x4c, 0x80, 0xed, 0xee, 0xd7, 0xb8, 0x88, 0x53, 0x70, 0x92,
+  0xbe, 0x89, 0xb6, 0x44, 0xa7, 0x8b, 0xea, 0x3c, 0x07, 0x1a, 0x04, 0x2e,
+  0x55, 0x4f, 0x48, 0x96, 0x13, 0x14, 0xa4, 0xb7, 0x48, 0x80, 0x92, 0x53,
+  0x33, 0x25, 0x1e, 0x0c, 0x03, 0x91, 0x29, 0x40, 0xd6, 0x31, 0x67, 0x8f,
+  0x2f, 0xf5, 0x19, 0x43, 0x34, 0xb3, 0xc5, 0xcc, 0x0c, 0x4b, 0x1e, 0xf2,
+  0xef, 0x07, 0x38, 0x40, 0x24, 0x06, 0xbf, 0x6e, 0xf9, 0x47, 0xc5, 0x18,
+  0x2a, 0xe8, 0xdd, 0xd2, 0x1c, 0x8d, 0xc1, 0xd2, 0xbc, 0x86, 0xee, 0x53,
+  0x97, 0x5a, 0x58, 0x44, 0xde, 0xe5, 0x28, 0x30, 0x52, 0xea, 0x61, 0xdf,
+  0xe4, 0x0a, 0xa5, 0x5c, 0xa6, 0x90, 0x19, 0x9b, 0x97, 0x0b, 0xe4, 0x13,
+  0x33, 0xaa, 0xa0, 0x21, 0x7a, 0xdc, 0x3e, 0x97, 0x25, 0xdf, 0x94, 0x35,
+  0xee, 0x82, 0xf0, 0x71, 0xba, 0xe4, 0x63, 0xcb, 0x8f, 0x37, 0xc4, 0xbf,
+  0x65, 0x41, 0x62, 0x01, 0xaa, 0x0c, 0xf6, 0x75, 0xba, 0x7f, 0xfe, 0x0d,
+  0xbc, 0xab, 0x20, 0xe1, 0xd7, 0x40, 0x4c, 0x51, 0x9f, 0x5a, 0x98, 0x92,
+  0x65, 0x15, 0x38, 0x96, 0x7f, 0x15, 0x98, 0x51, 0xe5, 0x49, 0x78, 0xef,
+  0x72, 0x0e, 0x44, 0x9a, 0x71, 0x55, 0x58, 0xf0, 0xe8, 0x56, 0x65, 0x3e,
+  0x84, 0xbe, 0xdb, 0x7c, 0x3b, 0x1b, 0x6f, 0xb9, 0xce, 0x89, 0xf0, 0xeb,
+  0x3c, 0x27, 0x10, 0x3d, 0x09, 0x73, 0xa4, 0xf1, 0xf8, 0xc8, 0xc3, 0xf8,
+  0x82, 0x32, 0x9d, 0xd9, 0x01, 0x35, 0x2d, 0xe3, 0xb8, 0x87, 0xde, 0x91,
+  0xfe, 0x72, 0x7e, 0x3f, 0x0c, 0x01, 0x78, 0x92, 0xaf, 0x96, 0x4d, 0x9b,
+  0xad, 0x74, 0xf0, 0x8f, 0xad, 0x64, 0x59, 0x95, 0x65, 0xe3, 0x8d, 0x01,
+  0xd2, 0x4f, 0xda, 0xc8, 0x89, 0x66, 0x80, 0x4b, 0x1e, 0x0b, 0x35, 0x55,
+  0x88, 0xdc, 0xed, 0x0b, 0x86, 0xe9, 0xb8, 0x2e, 0x67, 0xcb, 0xc6, 0x8b,
+  0xbe, 0xfe, 0x75, 0x63, 0xf6, 0x06, 0xbd, 0x71, 0x34, 0x54, 0xb0, 0xcf,
+  0x82, 0x21, 0xea, 0x8c, 0xa6, 0x6f, 0xc4, 0x4b, 0x38, 0x1b, 0xab, 0xb2,
+  0x68, 0x97, 0x8f, 0x43, 0xa0, 0xf7, 0xe6, 0xda, 0xda, 0x48, 0x37, 0x9b,
+  0xe0, 0x5e, 0xc3, 0x4d, 0xff, 0x1e, 0xd2, 0x24, 0x8d, 0x81, 0x9d, 0x05,
+  0x13, 0xf3, 0x8b, 0x82, 0xc0, 0x65, 0xbc, 0xa7, 0x60, 0xe1, 0xbc, 0xc7,
+  0x79, 0xdd, 0x9e, 0x14, 0xbe, 0xb2, 0xee, 0x0a, 0xcd, 0x2f, 0x3b, 0x2f,
+  0x15, 0xca, 0x5f, 0xdc, 0x75, 0x8e, 0x20, 0x5a, 0xd9, 0xf0, 0x51, 0x84,
+  0x69, 0xba, 0x04, 0xb4, 0xd6, 0xb0, 0x0d, 0xc7, 0xa5, 0x41, 0x6e, 0xfd,
+  0xaf, 0xad, 0xa4, 0x9f, 0x48, 0x19, 0xf8, 0x08, 0xc8, 0xd1, 0xff, 0x83,
+  0xc0, 0x2b, 0x81, 0xf7, 0xa5, 0x36, 0x87, 0x6d, 0x00, 0xd9, 0xa1, 0x51,
+  0xa1, 0xae, 0xaa, 0x89, 0xa3, 0x7e, 0x23, 0x1d, 0x64, 0xb7, 0xa4, 0xbf,
+  0xa8, 0x8e, 0x20, 0x70, 0x21, 0x5c, 0xee, 0xd7, 0x02, 0x30, 0x01, 0x6e,
+  0xe3, 0xc2, 0x5a, 0xf5, 0xa8, 0xf2, 0x26, 0x97, 0xa1, 0x64, 0xb1, 0x1e,
+  0x55, 0x98, 0xd4, 0x6d, 0xca, 0x19, 0xf5, 0x56, 0x6f, 0xaf, 0x93, 0xba,
+  0xe4, 0x9f, 0x9a, 0x74, 0x24, 0x81, 0x5d, 0x42, 0xfe, 0x5e, 0x75, 0x3f,
+  0xaf, 0x2c, 0xae, 0x46, 0x9c, 0x72, 0x34, 0x9d, 0xba, 0x23, 0x75, 0x90,
+  0x2a, 0x05, 0x90, 0xb7, 0x12, 0xb0, 0x96, 0x82, 0x3c, 0x42, 0x91, 0x64,
+  0x84, 0x61, 0xcc, 0x49, 0xdb, 0x54, 0xb7, 0x51, 0x35, 0x19, 0xbd, 0x52,
+  0x35, 0x8d, 0x63, 0xcd, 0xaf, 0xa2, 0xcd, 0xc3, 0x97, 0xbb, 0x1f, 0x49,
+  0xf8, 0xf0, 0xcc, 0xdd, 0xa6, 0x84, 0x93, 0xe6, 0x44, 0x02, 0x9d, 0x92,
+  0x54, 0x7e, 0xe5, 0xe0, 0x0d, 0x3f, 0x20, 0xc5, 0x45, 0x6c, 0x5e, 0x52,
+  0x96, 0x87, 0x98, 0xa4, 0x04, 0xcb, 0x04, 0xf6, 0xaf, 0xab, 0x5c, 0xe2,
+  0x4a, 0x79, 0xd5, 0xdb, 0x75, 0x35, 0x61, 0xe1, 0xa3, 0x90, 0x02, 0xe7,
+  0x55, 0xb5, 0x81, 0x0f, 0xc3, 0xf0, 0xc0, 0x0c, 0x2d, 0xaa, 0xaa, 0x5c,
+  0x22, 0x47, 0x7e, 0x4e, 0x39, 0x47, 0x61, 0xd8, 0x58, 0xe7, 0x8f, 0xec,
+  0xdd, 0xef, 0x92, 0x82, 0x58, 0x8b, 0x84, 0x13, 0x48, 0x04, 0x2a, 0x8e,
+  0x2e, 0x94, 0xdd, 0x1d, 0x28, 0xa6, 0x1c, 0xb3, 0x01, 0x9c, 0x52, 0x6d,
+  0x41, 0xf1, 0xd2, 0xba, 0x8b, 0xbf, 0xd9, 0x97, 0x55, 0xb2, 0x19, 0xf7,
+  0xe2, 0x62, 0x66, 0xb9, 0xd0, 0xf3, 0x3b, 0xb5, 0xea, 0xc7, 0x71, 0x16,
+  0x77, 0xdd, 0x54, 0xcb, 0x49, 0x0b, 0xa2, 0x0f, 0x14, 0xd1, 0x72, 0xcd,
+  0xdb, 0x35, 0x2e, 0x7d, 0xdd, 0xfe, 0xe8, 0x54, 0xd4, 0x7b, 0xd6, 0x3e,
+  0x68, 0x64, 0x1b, 0x69, 0x2b, 0xc9, 0xc5, 0x96, 0x16, 0xf5, 0xfb, 0xdd,
+  0xb4, 0x54, 0x36, 0x38, 0xb5, 0x19, 0xf5, 0x9d, 0x02, 0xf1, 0x94, 0x9d,
+  0xe0, 0xdd, 0xbd, 0x22, 0x88, 0x41, 0xf0, 0xa8, 0x12, 0x01, 0x5f, 0x84,
+  0x58, 0x43, 0x26, 0xcb, 0x35, 0x0b, 0x90, 0x68, 0x86, 0x34, 0x90, 0x50,
+  0x55, 0xf6, 0xfe, 0x6e, 0x99, 0x85, 0xd4, 0x02, 0x41, 0xb6, 0x32, 0x56,
+  0xed, 0x40, 0x16, 0x3b, 0x71, 0xaa, 0x80, 0x68, 0xb2, 0xf2, 0xa1, 0x80,
+  0xc5, 0xc9, 0xfa, 0x0d, 0x93, 0xd7, 0x72, 0x28, 0xa4, 0x87, 0xae, 0x38,
+  0x11, 0xde, 0x8d, 0xa7, 0x0c, 0x85, 0x12, 0xd0, 0xd1, 0x6b, 0xb5, 0xa9,
+  0x82, 0xe5, 0x60, 0x6d, 0x48, 0xb3, 0xd1, 0x4d, 0x32, 0xeb, 0xaa, 0x5d,
+  0x98, 0x21, 0xd0, 0x8c, 0xd7, 0x67, 0xd9, 0xf6, 0xba, 0x57, 0xda, 0x6b,
+  0x83, 0x83, 0xfe, 0x4b, 0x68, 0x3f, 0x16, 0xac, 0x90, 0xad, 0x17, 0x14,
+  0xdc, 0xb6, 0x19, 0x19, 0x8a, 0x69, 0xe2, 0xd7, 0x0e, 0x66, 0xe7, 0xc5,
+  0xee, 0x70, 0xe7, 0xf9, 0xe7, 0xc3, 0xed, 0xe1, 0xce, 0x36, 0xf1, 0x17,
+  0x1a, 0x8a, 0x37, 0x38, 0x5e, 0x97, 0x48, 0x57, 0xad, 0xf7, 0xc2, 0x3e,
+  0xdf, 0x1d, 0x9e, 0x7f, 0x7f, 0x72, 0xf6, 0x6d, 0x72, 0xf4, 0xee, 0xfc,
+  0xf0, 0xec, 0xcd, 0xfe, 0xc1, 0xc7, 0x02, 0xf6, 0xfb, 0x66, 0x6b, 0xaf,
+  0xba, 0x75, 0xe6, 0x16, 0x26, 0xb4, 0x0d, 0xba, 0x35, 0xcb, 0x9a, 0xab,
+  0xed, 0xbd, 0x9d, 0x07, 0x21, 0xa9, 0x23, 0xe6, 0x41, 0xf7, 0xbe, 0x4e,
+  0x6a, 0x87, 0x26, 0xb5, 0xba, 0x15, 0x0b, 0xcd, 0x38, 0xe2, 0xd8, 0x2a,
+  0x1b, 0x97, 0x0b, 0x36, 0x8f, 0xe2, 0x49, 0x40, 0x64, 0x15, 0xc6, 0x3e,
+  0x66, 0xf0, 0x5b, 0x4e, 0xaf, 0x15, 0x90, 0x19, 0x89, 0x41, 0x17, 0x9e,
+  0xbb, 0xc6, 0x95, 0xa4, 0x1b, 0x31, 0xa7, 0x30, 0x9c, 0xed, 0x14, 0x22,
+  0x9e, 0x72, 0x65, 0xc9, 0x5d, 0x23, 0x6a, 0x91, 0xe2, 0xa6, 0x0c, 0x38,
+  0x38, 0xb5, 0x79, 0x22, 0x16, 0x85, 0x00, 0xa1, 0x0f, 0x2a, 0xa7, 0x63,
+  0xac, 0xed, 0x62, 0xe0, 0x7e, 0xf8, 0x6c, 0x07, 0x7b, 0xb5, 0xd6, 0xb8,
+  0x66, 0x4c, 0xac, 0x65, 0x1a, 0x3d, 0x90, 0x81, 0xe0, 0x34, 0x78, 0xa3,
+  0xe1, 0xae, 0x20, 0x50, 0x11, 0x48, 0x1a, 0xe0, 0x21, 0x5b, 0x08, 0xc9,
+  0x7c, 0x47, 0x21, 0x77, 0x82, 0xe5, 0x3f, 0x2d, 0x6b, 0x41, 0xad, 0xd7,
+  0x2d, 0x90, 0xc2, 0x84, 0x0b, 0x5a, 0xf9, 0xaf, 0xb3, 0xa8, 0x8d, 0xe8,
+  0xcc, 0x69, 0x95, 0xde, 0xa2, 0x2a, 0x4b, 0xee, 0x20, 0x47, 0xd7, 0x92,
+  0x56, 0x55, 0x2e, 0x12, 0x9c, 0xdc, 0x9a, 0x27, 0xa7, 0x87, 0x6f, 0x07,
+  0x5a, 0x4b, 0xd8, 0xfc, 0xce, 0xc6, 0x28, 0xc5, 0x97, 0xe4, 0xdc, 0x9e,
+  0x45, 0x56, 0x68, 0x2c, 0x0d, 0x78, 0xa2, 0x04, 0xff, 0xf8, 0x13, 0xa0,
+  0x43, 0x63, 0x11, 0x28, 0x25, 0x64, 0x54, 0x63, 0x2e, 0x39, 0xb7, 0xb0,
+  0x0b, 0xcb, 0x49, 0xfb, 0x29, 0x01, 0xcb, 0xc9, 0x86, 0x0d, 0xd2, 0xa5,
+  0xfe, 0x10, 0x89, 0x8a, 0xa8, 0x01, 0x1b, 0x26, 0x50, 0x6a, 0xe6, 0xf5,
+  0xe9, 0xb7, 0x07, 0xa3, 0x3f, 0xee, 0xec, 0xca, 0x70, 0x36, 0x55, 0x2b,
+  0x20, 0x5e, 0xd5, 0x4d, 0xca, 0x07, 0xbb, 0xf6, 0xc7, 0xa8, 0x29, 0xd6,
+  0x38, 0xe0, 0xd8, 0x8c, 0x0d, 0x9b, 0x18, 0xb4, 0xd9, 0xca, 0x0c, 0x5a,
+  0xe3, 0x92, 0xf6, 0x2a, 0x62, 0xda, 0x7a, 0xbf, 0xe4, 0x12, 0x41, 0x55,
+  0x28, 0xa9, 0xcb, 0xd4, 0xd8, 0x50, 0xbf, 0xb4, 0xd0, 0x8f, 0xb8, 0x65,
+  0x69, 0x0d, 0x39, 0xe4, 0x2e, 0x9c, 0xa5, 0xbb, 0xe7, 0xb4, 0xde, 0xee,
+  0x5b, 0xc2, 0x89, 0x95, 0x9b, 0x5d, 0x01, 0x81, 0x5c, 0x37, 0x38, 0x00,
+  0x12, 0xbd, 0x3e, 0xd5, 0xca, 0x6f, 0x85, 0xab, 0x83, 0x42, 0x4f, 0x9f,
+  0x98, 0x8d, 0x32, 0x27, 0x8b, 0x71, 0x1b, 0x88, 0x29, 0x94, 0x33, 0x52,
+  0x5d, 0xec, 0x23, 0xaf, 0x2b, 0xaa, 0x38, 0xb3, 0xe0, 0x38, 0xd2, 0x77,
+  0xc3, 0xe4, 0x9b, 0xac, 0xa0, 0xc4, 0x79, 0x8a, 0xb8, 0xd3, 0xdc, 0x2b,
+  0xc4, 0x05, 0x52, 0xe9, 0x49, 0x94, 0xe2, 0x3b, 0xce, 0x52, 0xc1, 0xe4,
+  0x34, 0xbc, 0xae, 0x66, 0x0d, 0x57, 0xcb, 0x50, 0xa5, 0x14, 0x9d, 0x27,
+  0x00, 0xa2, 0x16, 0xec, 0x82, 0x41, 0xa2, 0xa9, 0x81, 0x8d, 0x36, 0xb0,
+  0x26, 0x4a, 0x22, 0xa0, 0x39, 0x39, 0xe6, 0xf0, 0x35, 0x89, 0x55, 0xf9,
+  0x0a, 0x70, 0xda, 0x64, 0x2d, 0x64, 0x8d, 0xcb, 0x31, 0x95, 0x69, 0x75,
+  0x45, 0xa6, 0x8f, 0xda, 0x5c, 0x37, 0x69, 0x31, 0xb9, 0x1f, 0x4e, 0x8d,
+  0x2c, 0x4b, 0xc6, 0xb3, 0xe1, 0xf2, 0x7a, 0xcb, 0x3b, 0xa6, 0xc4, 0xf2,
+  0xaf, 0x18, 0x23, 0xa0, 0x6d, 0xf8, 0xd6, 0x1a, 0xc7, 0x21, 0x74, 0x58,
+  0xda, 0x3a, 0x13, 0x44, 0x12, 0x9a, 0xed, 0xcf, 0xc7, 0x73, 0x25, 0xc8,
+  0xd6, 0x61, 0x62, 0x11, 0x8e, 0xa9, 0x85, 0xe1, 0x22, 0x9b, 0xef, 0xd9,
+  0x6c, 0x64, 0xe5, 0x0f, 0x52, 0x55, 0xc3, 0x2a, 0x16, 0x9e, 0x91, 0xb6,
+  0xc8, 0x2e, 0x67, 0x22, 0x50, 0xf8, 0xaa, 0x8b, 0x6d, 0x22, 0x92, 0x02,
+  0xc2, 0x0a, 0x8f, 0x14, 0x49, 0x82, 0xc4, 0x6e, 0xe8, 0xb0, 0x91, 0x90,
+  0x5a, 0x7e, 0xb8, 0x22, 0x81, 0xde, 0x35, 0x22, 0xc8, 0x21, 0x00, 0x5b,
+  0x46, 0x3d, 0x79, 0x36, 0xf1, 0x68, 0x24, 0x92, 0xb8, 0x9f, 0x08, 0x08,
+  0x16, 0x14, 0x02, 0x18, 0x77, 0x89, 0x8a, 0x86, 0xf3, 0x53, 0x4b, 0x09,
+  0xf3, 0x59, 0x31, 0x5f, 0xdf, 0x3c, 0x21, 0x8b, 0xf7, 0xf9, 0xf1, 0x48,
+  0xbd, 0x22, 0x45, 0x76, 0xeb, 0x91, 0x16, 0x97, 0x1e, 0x10, 0xfa, 0x23,
+  0x03, 0x10, 0x43, 0x2a, 0x03, 0xed, 0x00, 0x23, 0x61, 0xae, 0xe0, 0xdc,
+  0x64, 0x2e, 0xf9, 0x41, 0x17, 0x41, 0xc2, 0x88, 0x69, 0x28, 0x5a, 0xf1,
+  0x8c, 0x85, 0x21, 0x8b, 0xf4, 0x42, 0xd8, 0x7d, 0x46, 0x58, 0x7a, 0xd2,
+  0x4f, 0x06, 0xbb, 0xc0, 0xcf, 0xd9, 0x69, 0x2f, 0x62, 0xda, 0x30, 0x4c,
+  0x20, 0xb5, 0x61, 0x5a, 0xd2, 0x56, 0x84, 0x1d, 0x6c, 0x08, 0x49, 0xdf,
+  0x98, 0xf7, 0xe9, 0xc7, 0xae, 0x4c, 0xe8, 0x66, 0x07, 0x11, 0xdb, 0x8c,
+  0x5b, 0x39, 0xbb, 0x0f, 0x45, 0x86, 0xdd, 0x07, 0x77, 0x15, 0xb9, 0x11,
+  0xb7, 0xb9, 0x05, 0x90, 0xe6, 0xa2, 0x09, 0x30, 0x85, 0x0a, 0x24, 0xa8,
+  0x0e, 0xc0, 0x2c, 0xa1, 0x18, 0xb9, 0x8b, 0xe4, 0x66, 0x57, 0x7d, 0xcd,
+  0xf4, 0x8d, 0xae, 0x1b, 0x1b, 0xeb, 0x1d, 0x13, 0x09, 0xd2, 0x16, 0x29,
+  0xca, 0xcd, 0xa3, 0x5a, 0xca, 0x7a, 0x32, 0x34, 0x6b, 0xb8, 0x48, 0x8b,
+  0xcb, 0x94, 0x85, 0x98, 0x15, 0x38, 0xe5, 0x9d, 0xf1, 0xe8, 0x49, 0x81,
+  0xf7, 0xc2, 0x9c, 0x10, 0xf9, 0xed, 0x45, 0x44, 0x1e, 0x15, 0x36, 0x51,
+  0x42, 0x4c, 0xf9, 0x80, 0xe8, 0xc3, 0xf6, 0x5f, 0xe5, 0x6c, 0x98, 0x40,
+  0xac, 0x29, 0xae, 0x73, 0x73, 0xf2, 0xd7, 0x13, 0x73, 0x98, 0x96, 0xc4,
+  0xf1, 0x1b, 0x5b, 0x7e, 0x6d, 0xc4, 0xd0, 0x9e, 0xeb, 0x3e, 0x9b, 0x1b,
+  0x7c, 0x41, 0x53, 0xa9, 0xd7, 0xdd, 0xdc, 0x05, 0xe2, 0xbc, 0x3d, 0x11,
+  0xf1, 0x73, 0x68, 0xc1, 0xb1, 0xd3, 0x4a, 0xeb, 0xaa, 0xaf, 0x1f, 0xde,
+  0x91, 0x8c, 0xb3, 0x2e, 0x3d, 0xf1, 0xd7, 0x9c, 0xd3, 0x8f, 0x35, 0x3a,
+  0x3d, 0x7a, 0xc7, 0x95, 0xc2, 0xed, 0x59, 0xc8, 0x08, 0x7a, 0x71, 0x8d,
+  0x8b, 0xdc, 0x63, 0x3c, 0xa9, 0x62, 0xc0, 0xb3, 0xe1, 0x88, 0x68, 0x86,
+  0x68, 0x3c, 0x97, 0xbe, 0xce, 0x96, 0xdc, 0xfb, 0x3a, 0xdd, 0x73, 0x75,
+  0x3d, 0x5b, 0xef, 0x54, 0xbf, 0xb5, 0x7b, 0xd2, 0xb9, 0x50, 0xac, 0x45,
+  0x6a, 0x32, 0x75, 0x02, 0x3e, 0x2a, 0x7c, 0x53, 0x2b, 0x2d, 0x3e, 0xd7,
+  0xef, 0x64, 0x3a, 0xfa, 0xa6, 0xf0, 0x3f, 0x26, 0xc3, 0x2d, 0xd3, 0x61,
+  0xbd, 0xa5, 0x2f, 0x2e, 0xae, 0x27, 0xb5, 0xb9, 0xe1, 0x28, 0xad, 0xf7,
+  0x27, 0x28, 0xe4, 0xd8, 0x0e, 0x33, 0xe2, 0xe9, 0x2f, 0xc9, 0x60, 0x32,
+  0xc3, 0xfc, 0x12, 0xd4, 0xd9, 0xfe, 0xc9, 0xec, 0x3c, 0x3d, 0xf1, 0x8b,
+  0xdd, 0xc3, 0x37, 0x39, 0x9d, 0xb7, 0xbb, 0xbe, 0x4e, 0xfd, 0x84, 0x15,
+  0x06, 0xc6, 0xb7, 0x4d, 0xf6, 0xa7, 0x37, 0x94, 0x74, 0x37, 0x95, 0x3f,
+  0x69, 0x3e, 0x87, 0x05, 0x2a, 0x94, 0x62, 0xa6, 0xe9, 0x98, 0x8b, 0x92,
+  0x7f, 0x97, 0x1b, 0xa5, 0xe3, 0xa0, 0x23, 0x5f, 0x50, 0xfe, 0x1f, 0x0d,
+  0x10, 0x6f, 0x79, 0x5f, 0x6a, 0x32, 0x47, 0x5f, 0x72, 0x16, 0x5c, 0x68,
+  0x29, 0x71, 0x67, 0xda, 0xba, 0x61, 0xf2, 0x15, 0xf9, 0x38, 0xab, 0xcc,
+  0x43, 0x7f, 0x95, 0x8b, 0x8f, 0x2b, 0xf9, 0xd1, 0x66, 0xa4, 0x8c, 0x3f,
+  0x31, 0xb4, 0x33, 0x09, 0x72, 0x60, 0xec, 0x9c, 0xec, 0x37, 0xed, 0xc9,
+  0x61, 0x5c, 0x9a, 0xd2, 0x6e, 0xa6, 0xa2, 0xf9, 0x12, 0x49, 0x30, 0x15,
+  0x0f, 0x97, 0x92, 0x47, 0xc8, 0x17, 0xe6, 0x34, 0xd3, 0xc4, 0xfe, 0xd2,
+  0x47, 0x53, 0x51, 0xcb, 0x31, 0x9a, 0x52, 0x89, 0xc0, 0x92, 0x04, 0xee,
+  0x70, 0x37, 0xea, 0x83, 0x2b, 0xc3, 0x9a, 0x33, 0x3b, 0xd4, 0x11, 0x9b,
+  0xf4, 0x74, 0x88, 0x23, 0xba, 0xa3, 0x74, 0x13, 0xec, 0x97, 0x9a, 0x1d,
+  0x09, 0x29, 0x74, 0x8b, 0x79, 0x97, 0xa5, 0x5d, 0x5e, 0xdd, 0xf6, 0x14,
+  0x28, 0xa9, 0x71, 0xf4, 0xfe, 0x2d, 0x95, 0x36, 0x41, 0xe1, 0xea, 0xf3,
+  0xb3, 0xfd, 0x77, 0xa3, 0x37, 0x6c, 0x1a, 0x3f, 0x2f, 0xbd, 0x7a, 0xd8,
+  0xe2, 0x57, 0x50, 0xff, 0xb1, 0x85, 0x89, 0xbb, 0xe5, 0x7a, 0x1b, 0x1a,
+  0x4f, 0x2f, 0xc5, 0xb2, 0xfb, 0x5d, 0xbc, 0x7d, 0xae, 0xb4, 0x4d, 0xab,
+  0x41, 0x43, 0xdb, 0x18, 0x6d, 0x5a, 0x41, 0xa8, 0xf6, 0x8b, 0xb2, 0xb9,
+  0x82, 0xf5, 0x8a, 0x0c, 0x2d, 0x0f, 0xd1, 0xb2, 0x1c, 0xe8, 0x60, 0xf4,
+  0x53, 0xbe, 0x7b, 0x57, 0x82, 0x91, 0x1e, 0x18, 0x55, 0x71, 0x20, 0x95,
+  0x6a, 0xbc, 0x12, 0x74, 0xd6, 0x9c, 0xca, 0x77, 0xaf, 0x40, 0xf9, 0xd9,
+  0xc6, 0xfd, 0xbc, 0x4f, 0x6d, 0x7a, 0xe3, 0xcf, 0x3b, 0x9b, 0xf1, 0xe6,
+  0xcf, 0x7f, 0x6d, 0xf3, 0xf1, 0xb1, 0xab, 0x6e, 0xe6, 0x52, 0x8a, 0x36,
+  0xfe, 0xbc, 0xbb, 0xf9, 0xe0, 0x8c, 0xfc, 0xac, 0x48, 0xd7, 0xa7, 0x79,
+  0x83, 0x06, 0x9b, 0xbc, 0xe2, 0x63, 0x66, 0x65, 0x26, 0x1b, 0xa1, 0xe3,
+  0xe1, 0x0d, 0xb7, 0x00, 0x3b, 0x28, 0x6c, 0xdb, 0x4a, 0xea, 0xce, 0xf1,
+  0x26, 0xd9, 0x25, 0x47, 0xff, 0xf3, 0xd0, 0x87, 0x91, 0x2c, 0xd6, 0x1b,
+  0xff, 0x8a, 0x22, 0x74, 0x80, 0xba, 0x1c, 0xa2, 0xef, 0xdd, 0x07, 0xfa,
+  0x76, 0xb3, 0xf3, 0xcc, 0x12, 0xe4, 0xc5, 0xa6, 0x30, 0x38, 0x45, 0xc3,
+  0x96, 0x7e, 0xd6, 0x5c, 0xa1, 0xf5, 0xd5, 0xfd, 0x9d, 0x1f, 0xbd, 0x3d,
+  0x24, 0xd4, 0xec, 0xd7, 0x47, 0x04, 0x3e, 0x37, 0x12, 0xf8, 0x47, 0xb5,
+  0x40, 0x58, 0x44, 0x5e, 0xbf, 0x5a, 0x0a, 0xbb, 0x77, 0x6d, 0xb4, 0x99,
+  0xe5, 0x1c, 0x76, 0x27, 0xa8, 0x6b, 0x89, 0x81, 0xae, 0x35, 0xd3, 0xf2,
+  0xe8, 0x62, 0xf0, 0xb6, 0x9c, 0x42, 0x4b, 0x1e, 0x8c, 0x10, 0x2a, 0x68,
+  0xde, 0x32, 0x1f, 0xbe, 0x2f, 0xe6, 0xad, 0x8f, 0x87, 0x91, 0x4c, 0xdd,
+  0xb5, 0x55, 0x45, 0x79, 0xfe, 0xb1, 0x35, 0x18, 0xd0, 0x60, 0x06, 0x1c,
+  0xd6, 0x25, 0xce, 0x9d, 0x16, 0x3e, 0x87, 0xb2, 0x16, 0xb3, 0x40, 0xf9,
+  0xec, 0x9e, 0x03, 0x11, 0x52, 0x17, 0x3e, 0xe6, 0xb2, 0x37, 0x2f, 0x29,
+  0x83, 0xcc, 0x99, 0xf8, 0xd8, 0x88, 0xb7, 0xe6, 0x83, 0x97, 0x42, 0x91,
+  0xca, 0x6e, 0x5d, 0xfc, 0x93, 0x54, 0x6d, 0x2e, 0x17, 0xf7, 0x98, 0xe5,
+  0x6d, 0x2b, 0xb4, 0x22, 0xea, 0x5f, 0xfd, 0x07, 0xbf, 0xd3, 0x2a, 0x43,
+  0x25, 0x18, 0xd3, 0x1e, 0x05, 0xca, 0x27, 0x52, 0xb5, 0xe9, 0xa4, 0xf2,
+  0xae, 0x2b, 0x19, 0xb6, 0x56, 0xb7, 0xf3, 0x80, 0x4d, 0x3d, 0x1c, 0xd6,
+  0xf6, 0x38, 0x7d, 0x10, 0xd8, 0x92, 0x52, 0x5f, 0x5f, 0x97, 0xd6, 0x39,
+  0x66, 0xd8, 0xce, 0xa2, 0x5d, 0x17, 0x39, 0x4b, 0x34, 0xc9, 0x9b, 0x73,
+  0xf8, 0xd7, 0x07, 0xeb, 0xa8, 0xcb, 0x90, 0x17, 0x91, 0xc9, 0x0c, 0x7e,
+  0xfd, 0x6c, 0x02, 0xd7, 0x6b, 0xd2, 0xbb, 0x20, 0x20, 0x0c, 0xf2, 0x63,
+  0xf5, 0x78, 0x00, 0x8c, 0x13, 0xc3, 0xc4, 0x65, 0x2e, 0x08, 0xe2, 0x6b,
+  0xaa, 0x48, 0xb2, 0x52, 0x6d, 0x23, 0x63, 0xad, 0x91, 0x9c, 0xad, 0x92,
+  0xc4, 0x48, 0x97, 0x8b, 0x29, 0x82, 0x32, 0x38, 0x1c, 0xf5, 0x3f, 0x08,
+  0x14, 0xbb, 0xba, 0x4f, 0x76, 0x76, 0xfb, 0xc9, 0xee, 0xf6, 0xce, 0x6e,
+  0x64, 0x0e, 0xbd, 0xff, 0xa0, 0xa0, 0xa8, 0x5d, 0x7c, 0xdd, 0xfb, 0xd8,
+  0x59, 0xb8, 0x7c, 0x06, 0xdc, 0x24, 0x92, 0xf9, 0x6b, 0x98, 0x0f, 0xf9,
+  0x67, 0x01, 0xc4, 0x8c, 0x62, 0xc9, 0x80, 0xb3, 0xc3, 0xb5, 0xc5, 0x46,
+  0x42, 0xad, 0xb1, 0x69, 0x4b, 0x87, 0x4d, 0x51, 0x49, 0x87, 0xeb, 0xd5,
+  0x22, 0xf2, 0xc5, 0x5a, 0x4a, 0xd3, 0x0a, 0x15, 0x44, 0xdb, 0x7b, 0x94,
+  0x37, 0xba, 0x2d, 0x14, 0x5a, 0x43, 0x7b, 0x63, 0xe8, 0xfd, 0xf5, 0xd1,
+  0xc1, 0xb9, 0xe2, 0x1d, 0x5e, 0x90, 0xf0, 0x54, 0xdd, 0x7f, 0x5c, 0x31,
+  0xc6, 0x07, 0x9f, 0x99, 0xee, 0x5d, 0x65, 0x46, 0x8c, 0x2e, 0xc6, 0xcb,
+  0xcb, 0xbd, 0xbf, 0xa5, 0xd5, 0x65, 0x59, 0x3c, 0xf6, 0xfc, 0x14, 0x09,
+  0x65, 0x7b, 0x86, 0x43, 0xed, 0xbc, 0xd8, 0x79, 0x82, 0xfc, 0xef, 0x59,
+  0x8e, 0x82, 0x40, 0xc4, 0x20, 0xd6, 0xe7, 0xeb, 0x0c, 0xb0, 0x81, 0x34,
+  0x09, 0x8b, 0xaa, 0x51, 0x4c, 0xd7, 0xf9, 0xba, 0x4f, 0xfd, 0x67, 0xa7,
+  0xf2, 0x2c, 0xa7, 0x9e, 0xaf, 0x4b, 0xae, 0xc2, 0x3a, 0xa5, 0x69, 0x2e,
+  0x17, 0xeb, 0x6d, 0x88, 0xf8, 0x47, 0xe6, 0x4a, 0x5d, 0xd8, 0xda, 0x93,
+  0x07, 0x16, 0xf8, 0x1e, 0x19, 0x44, 0x55, 0x96, 0x5e, 0xbb, 0xea, 0xc9,
+  0x0e, 0x7d, 0x43, 0x5d, 0x1e, 0x67, 0x6f, 0x0e, 0x18, 0xc1, 0x54, 0xf3,
+  0xa5, 0xb0, 0xd4, 0x89, 0x35, 0x4d, 0x6d, 0xd2, 0x28, 0x1f, 0xe9, 0x9f,
+  0x72, 0x1b, 0xf6, 0xa6, 0xe3, 0x8f, 0x78, 0xc8, 0x9c, 0x3b, 0x06, 0x8b,
+  0xdb, 0x6f, 0x97, 0xde, 0x21, 0x45, 0x0d, 0xf5, 0x43, 0xb4, 0x54, 0xf2,
+  0x06, 0x97, 0xa2, 0x65, 0x8f, 0x03, 0x0d, 0x4d, 0x0b, 0x50, 0xab, 0x75,
+  0xc7, 0x8c, 0x9b, 0xaa, 0xbc, 0xbe, 0xde, 0x3f, 0xf5, 0x14, 0x5d, 0x28,
+  0x92, 0xce, 0xa8, 0x47, 0xcf, 0x91, 0xa2, 0x83, 0x4a, 0xec, 0x52, 0x8d,
+  0xa9, 0xef, 0x54, 0x94, 0x06, 0x7c, 0x92, 0x64, 0x23, 0x04, 0xc8, 0x97,
+  0x72, 0x9f, 0xc0, 0xfe, 0x84, 0x6a, 0x06, 0xb3, 0x69, 0x0a, 0x47, 0xa8,
+  0xdc, 0x42, 0x90, 0xb9, 0xd0, 0x56, 0x2e, 0xd1, 0x50, 0x66, 0x6f, 0xee,
+  0x12, 0x49, 0xe2, 0x90, 0x6c, 0x15, 0xa9, 0x37, 0x82, 0xc7, 0x28, 0x2b,
+  0xf9, 0x5e, 0x27, 0xc0, 0xfc, 0xd9, 0x0c, 0x3e, 0xad, 0xaf, 0x0d, 0x2b,
+  0x65, 0x07, 0xbe, 0xe9, 0x3d, 0x17, 0x17, 0x38, 0x19, 0x7d, 0x72, 0x0e,
+  0xa4, 0x21, 0xf3, 0x13, 0x70, 0x90, 0x5a, 0x1b, 0xc6, 0x57, 0x10, 0x69,
+  0x9c, 0xb3, 0x3a, 0x63, 0xd4, 0xc2, 0xe4, 0xfc, 0xb6, 0x64, 0x15, 0xa3,
+  0xd6, 0xf0, 0x5a, 0x0e, 0x45, 0xad, 0x97, 0x39, 0x4b, 0x91, 0x66, 0xf3,
+  0xc0, 0x0f, 0xbc, 0x2a, 0xb2, 0x3d, 0x6b, 0xf9, 0x7a, 0x6d, 0xfd, 0x9e,
+  0xa3, 0xd7, 0xdf, 0x26, 0x94, 0x4f, 0x4f, 0x7d, 0x1c, 0x10, 0x9e, 0x3f,
+  0x85, 0x30, 0xcc, 0xa1, 0xfd, 0x7d, 0xbd, 0xa4, 0xf3, 0x7e, 0x70, 0x95,
+  0x2e, 0x48, 0x01, 0xda, 0xd9, 0x26, 0x73, 0xc9, 0xf7, 0x9a, 0x99, 0x47,
+  0x07, 0x55, 0xeb, 0xdc, 0xd7, 0x3d, 0xcf, 0x92, 0x32, 0xa5, 0x32, 0xf5,
+  0xa4, 0x01, 0xb5, 0x8d, 0xb4, 0xe6, 0xfa, 0xac, 0xb7, 0x18, 0xc5, 0xbf,
+  0x36, 0xa4, 0x51, 0xd5, 0xd3, 0xeb, 0xad, 0x89, 0xf9, 0xe7, 0xc9, 0xf6,
+  0x16, 0x80, 0x34, 0x1b, 0xd8, 0x34, 0x89, 0x26, 0x77, 0x77, 0x9f, 0x3d,
+  0xeb, 0x27, 0x3d, 0xb2, 0x32, 0x6a, 0x07, 0x74, 0x24, 0xcc, 0xc9, 0xea,
+  0x45, 0xeb, 0xe9, 0x6e, 0x55, 0x17, 0x13, 0xfa, 0x7f, 0x7a, 0x4f, 0xcb,
+  0x48, 0x9e, 0x4b, 0xda, 0x0d, 0x16, 0xa2, 0xf0, 0xc1, 0x71, 0x98, 0xae,
+  0xe8, 0xbb, 0x23, 0x6b, 0x48, 0x22, 0xaf, 0xd1, 0x22, 0x2b, 0x17, 0xea,
+  0x1e, 0x9e, 0x4b, 0x81, 0x10, 0xf4, 0xef, 0xf9, 0xd4, 0xe0, 0xd0, 0xe7,
+  0x78, 0x38, 0x41, 0x41, 0xa8, 0x97, 0xe3, 0x81, 0xa4, 0x03, 0xb3, 0x5a,
+  0x99, 0x9b, 0xa3, 0x6b, 0xfe, 0x9c, 0xa9, 0xbd, 0x3e, 0x60, 0xc9, 0x5f,
+  0x25, 0x3d, 0x21, 0x2e, 0xfa, 0x31, 0x84, 0x77, 0x37, 0x9b, 0xd0, 0x34,
+  0xca, 0x57, 0xf2, 0xc7, 0xbf, 0xff, 0xbb, 0x69, 0xf6, 0xdf, 0xa9, 0x95,
+  0x57, 0x7f, 0xae, 0x9b, 0x2b, 0xef, 0x99, 0x9e, 0x50, 0xfc, 0x91, 0xf3,
+  0x6d, 0x23, 0x5e, 0x0d, 0x38, 0xb3, 0xc8, 0x5a, 0x7b, 0x7b, 0x2c, 0x2c,
+  0xb9, 0xef, 0xcd, 0x2f, 0x47, 0x3e, 0x21, 0x5b, 0x49, 0x6d, 0xb8, 0xc8,
+  0x57, 0xe4, 0x77, 0xce, 0x28, 0x0f, 0xdd, 0xdc, 0x24, 0x80, 0x11, 0xdc,
+  0x54, 0x19, 0xe3, 0xf0, 0xdd, 0x77, 0x47, 0x67, 0x27, 0xef, 0xde, 0x1e,
+  0xbe, 0x3b, 0x4f, 0xbe, 0xdb, 0x3f, 0x3b, 0xda, 0xff, 0xea, 0x58, 0xd2,
+  0xdd, 0x69, 0x0a, 0x14, 0xe5, 0xc3, 0xc2, 0x77, 0x07, 0x06, 0xd6, 0xcb,
+  0x44, 0x8a, 0x16, 0x0f, 0xe9, 0xd4, 0x45, 0xfe, 0x20, 0x18, 0xe6, 0x50,
+  0x45, 0x3e, 0xa0, 0x0e, 0x52, 0x9f, 0xa4, 0xcf, 0x0f, 0x5a, 0x12, 0x89,
+  0xb4, 0xa7, 0x7b, 0x2f, 0x81, 0x9a, 0x02, 0x90, 0x88, 0x4c, 0x95, 0x41,
+  0xb9, 0x62, 0x80, 0xb6, 0xba, 0xc6, 0xd7, 0x9c, 0x83, 0xaf, 0xa5, 0x46,
+  0xf4, 0x55, 0xec, 0x21, 0xdf, 0x2e, 0x6e, 0x0c, 0xfb, 0xc7, 0xc7, 0xae,
+  0xab, 0x87, 0xab, 0xd0, 0x08, 0xfe, 0x12, 0x67, 0x6f, 0xa1, 0x51, 0xf2,
+  0x0c, 0x5e, 0x96, 0x0e, 0x90, 0xbd, 0xb8, 0xf7, 0xb1, 0xd7, 0xa9, 0x33,
+  0xb3, 0x1d, 0x1b, 0x0c, 0x9c, 0x41, 0x6e, 0x62, 0x73, 0x82, 0xf2, 0xfa,
+  0xba, 0x9f, 0xac, 0xff, 0x79, 0x5d, 0x4a, 0x89, 0x03, 0x2d, 0x98, 0x6b,
+  0xdc, 0x6c, 0xba, 0x41, 0xbd, 0x3b, 0x71, 0x63, 0x12, 0xcf, 0xa7, 0x1d,
+  0x80, 0x7d, 0xd1, 0xf9, 0xad, 0x6b, 0x15, 0x68, 0x10, 0x30, 0xea, 0x1e,
+  0x97, 0x42, 0x10, 0x16, 0x0f, 0x40, 0x68, 0x94, 0x3c, 0x5b, 0xd1, 0x77,
+  0xa1, 0xb6, 0xa5, 0x13, 0x0f, 0x14, 0x1a, 0x73, 0x2d, 0xc8, 0xd6, 0x61,
+  0x8b, 0x73, 0xa9, 0x39, 0xd0, 0x2c, 0x35, 0x19, 0xf5, 0xc4, 0x9f, 0xb8,
+  0xac, 0x85, 0x85, 0x82, 0xaa, 0xee, 0xb6, 0xb4, 0xd6, 0x0d, 0x9c, 0x8c,
+  0x94, 0x10, 0x50, 0xe5, 0x53, 0x01, 0x19, 0x8c, 0x52, 0xc5, 0x10, 0xbe,
+  0xa9, 0xb3, 0x03, 0x60, 0xb2, 0x17, 0x54, 0x95, 0xd1, 0xd5, 0xd2, 0x40,
+  0xf0, 0xb0, 0x61, 0x23, 0x15, 0x65, 0xe4, 0x15, 0x22, 0x85, 0x20, 0x20,
+  0x17, 0x42, 0x7a, 0x7a, 0x59, 0xaa, 0x00, 0x9e, 0x5a, 0xaf, 0xb9, 0xad,
+  0x38, 0xe6, 0x09, 0xf5, 0x16, 0x39, 0xcc, 0xda, 0x2c, 0xe1, 0x5f, 0x57,
+  0x0f, 0x01, 0xc5, 0x97, 0xd1, 0x96, 0x6b, 0x05, 0xe9, 0xda, 0xcb, 0xcd,
+  0x76, 0xe9, 0x0b, 0xc4, 0x4b, 0x38, 0x4a, 0x5f, 0xa1, 0xbc, 0x00, 0x9f,
+  0xa6, 0xb9, 0xdc, 0x88, 0x74, 0xc4, 0xb0, 0xe8, 0x41, 0x34, 0x29, 0x41,
+  0xab, 0x68, 0x52, 0x8d, 0xd7, 0xe6, 0xf4, 0xcc, 0x28, 0x83, 0x4c, 0x39,
+  0x51, 0x9a, 0x8c, 0xf3, 0x4b, 0xc6, 0x04, 0xa0, 0x04, 0x74, 0xa2, 0x12,
+  0x40, 0xbc, 0x19, 0xcd, 0x9e, 0xb6, 0x0a, 0x00, 0x6e, 0x10, 0xde, 0xaf,
+  0xca, 0x99, 0x8f, 0x32, 0xa6, 0x33, 0xa9, 0xa5, 0x96, 0x9a, 0xda, 0x3e,
+  0xe1, 0xfb, 0x58, 0xd2, 0x3a, 0x6a, 0x38, 0x9a, 0xc0, 0x93, 0x4b, 0x70,
+  0x1e, 0x19, 0xd5, 0x81, 0x95, 0x58, 0x20, 0x15, 0x48, 0x73, 0xa9, 0xb1,
+  0x0e, 0x1a, 0xb8, 0x4c, 0xdc, 0x02, 0x86, 0x34, 0xaa, 0xf3, 0xb8, 0x61,
+  0xf1, 0xc5, 0xa9, 0x95, 0x09, 0x23, 0xb4, 0x12, 0xd1, 0xb3, 0x4b, 0xb9,
+  0x5d, 0x10, 0x48, 0x36, 0x4b, 0xb0, 0xb3, 0x0c, 0x4d, 0xd0, 0xa0, 0xcd,
+  0x4a, 0x6d, 0x78, 0x8c, 0xa7, 0x30, 0x24, 0xc2, 0x8f, 0xb1, 0x06, 0x29,
+  0x7f, 0x0d, 0x6c, 0x2d, 0x33, 0x71, 0x3c, 0x6f, 0xba, 0xc0, 0x03, 0x16,
+  0x03, 0x88, 0x5a, 0x27, 0x52, 0x4d, 0x12, 0x2e, 0x7a, 0x2a, 0x85, 0x09,
+  0x40, 0xa8, 0x96, 0xf1, 0x31, 0xd1, 0x84, 0x9b, 0xd9, 0xcc, 0x03, 0x18,
+  0x67, 0x7b, 0x44, 0x1a, 0x08, 0x1f, 0xe4, 0x1d, 0x1a, 0x32, 0x07, 0xe0,
+  0xd0, 0x1f, 0x06, 0x23, 0xf6, 0x26, 0x22, 0x41, 0xe5, 0x24, 0x9e, 0x75,
+  0x6c, 0x9a, 0x1e, 0x43, 0x53, 0xf7, 0xb8, 0x7f, 0x31, 0x49, 0x3d, 0x8d,
+  0x3c, 0x9d, 0xb3, 0xf0, 0xe8, 0xa8, 0x6f, 0x7e, 0xcf, 0x61, 0x87, 0x6b,
+  0x6b, 0x07, 0xef, 0x47, 0xe7, 0x27, 0x6f, 0x93, 0x93, 0xf7, 0xe7, 0xa7,
+  0xef, 0xcf, 0xe5, 0xe6, 0x1a, 0x73, 0xd0, 0x36, 0x87, 0x2e, 0xb0, 0x14,
+  0xa0, 0x9b, 0x39, 0x17, 0x07, 0x3f, 0x62, 0x4c, 0x4a, 0xc0, 0x0a, 0x7a,
+  0x88, 0x42, 0x36, 0x29, 0x0b, 0x58, 0x5b, 0x8c, 0x57, 0x8c, 0x25, 0xbf,
+  0x35, 0x4b, 0x8e, 0x84, 0x5a, 0x58, 0xf2, 0x34, 0xc7, 0x0b, 0x7a, 0x8f,
+  0x9e, 0xb5, 0x76, 0xad, 0x9a, 0xfb, 0xb6, 0x1e, 0x03, 0xef, 0x7c, 0x1b,
+  0xc1, 0xc9, 0x2f, 0x99, 0xc9, 0xc6, 0x1d, 0x67, 0xfb, 0xf1, 0x63, 0x3a,
+  0xa5, 0xe0, 0xa6, 0x5a, 0xa0, 0x35, 0xac, 0x16, 0xb1, 0x46, 0xed, 0xcc,
+  0x42, 0x3f, 0xc1, 0xb1, 0x29, 0xcd, 0x0c, 0xaf, 0x6c, 0x48, 0x3c, 0x85,
+  0x11, 0x21, 0x14, 0x90, 0x23, 0x28, 0x28, 0xe6, 0x8e, 0x55, 0x06, 0xa3,
+  0x08, 0x92, 0xcf, 0x22, 0xb8, 0x65, 0x6f, 0x93, 0xf5, 0xef, 0x33, 0xbf,
+  0xc1, 0x3f, 0xfd, 0x27, 0xe5, 0x6d, 0x7e, 0xd0, 0x4f, 0xfe, 0xc9, 0x5d,
+  0xfe, 0x5c, 0xac, 0x23, 0x82, 0xae, 0xed, 0x2a, 0xff, 0xf6, 0xf0, 0xec,
+  0xab, 0xc3, 0xb3, 0x93, 0x11, 0xf8, 0x81, 0xda, 0xbb, 0x42, 0x5a, 0xbf,
+  0xce, 0xaa, 0x71, 0x56, 0x95, 0x52, 0x47, 0x4b, 0xff, 0x7a, 0xb6, 0xf5,
+  0xf5, 0x68, 0xb4, 0x7f, 0x7a, 0x64, 0x2b, 0xd5, 0xd8, 0x0c, 0x32, 0xd6,
+  0x91, 0x0a, 0xce, 0x71, 0xa4, 0xf9, 0xeb, 0x2b, 0x86, 0x2e, 0x26, 0xd7,
+  0x1c, 0x59, 0x1c, 0x38, 0xa5, 0xd5, 0xb0, 0x4e, 0xde, 0x68, 0x49, 0x2c,
+  0xa4, 0x86, 0x15, 0x09, 0xca, 0x47, 0x9b, 0x67, 0x58, 0x78, 0x72, 0x06,
+  0xf4, 0x6d, 0x08, 0xde, 0x75, 0x35, 0x1e, 0x18, 0x6a, 0xbf, 0xd6, 0xc2,
+  0xcd, 0x9c, 0x08, 0x61, 0x58, 0x25, 0x47, 0x48, 0x3b, 0x63, 0x83, 0x11,
+  0xea, 0xf2, 0x66, 0xeb, 0x9a, 0xce, 0x07, 0x55, 0x51, 0x99, 0x0d, 0x99,
+  0xbb, 0xf3, 0x81, 0xd2, 0xb0, 0x57, 0x62, 0xb1, 0x0f, 0xa1, 0x53, 0x98,
+  0xde, 0x6c, 0xe9, 0x43, 0x36, 0x78, 0x99, 0x4f, 0x9e, 0x5a, 0x98, 0x2e,
+  0xbf, 0x8e, 0xf8, 0x85, 0x91, 0xc0, 0x17, 0xb7, 0x53, 0xb9, 0x44, 0x80,
+  0x52, 0x5d, 0xb0, 0x7f, 0x82, 0x79, 0x78, 0xd7, 0x43, 0x45, 0xe5, 0x19,
+  0x91, 0xb1, 0x21, 0xf1, 0xe8, 0xc9, 0x78, 0x96, 0x16, 0xd7, 0xb8, 0xcd,
+  0x70, 0x3f, 0x91, 0xce, 0xa9, 0xe0, 0x53, 0x54, 0x36, 0x13, 0x0e, 0x49,
+  0xc1, 0x83, 0x80, 0x10, 0x38, 0x23, 0xe6, 0x76, 0xcf, 0xc6, 0x7c, 0x8b,
+  0xb1, 0xe5, 0xb9, 0xde, 0x70, 0x9c, 0xdc, 0x22, 0x90, 0xed, 0xe8, 0xf0,
+  0xd8, 0x5c, 0x4c, 0x36, 0xcb, 0x04, 0x3a, 0x7a, 0x36, 0x23, 0x5b, 0xb0,
+  0x86, 0x04, 0x71, 0x62, 0x65, 0x0e, 0x46, 0xc6, 0xdc, 0x43, 0x01, 0xd4,
+  0xe1, 0x40, 0x02, 0xb9, 0x20, 0x7f, 0xb4, 0xb6, 0x65, 0x46, 0x84, 0x73,
+  0x33, 0x13, 0x03, 0x3a, 0xa8, 0xab, 0x3a, 0xe2, 0xd7, 0xbf, 0x91, 0x78,
+  0xbb, 0x03, 0x17, 0x10, 0x64, 0x0b, 0x82, 0xf1, 0x20, 0x9c, 0x58, 0x6a,
+  0x5d, 0x8c, 0xad, 0xf4, 0x96, 0x95, 0xdb, 0xc4, 0xaf, 0xc7, 0xac, 0x00,
+  0x0c, 0x6a, 0x36, 0x15, 0x87, 0x87, 0xc5, 0x03, 0xd2, 0x98, 0xe5, 0x76,
+  0x9c, 0xb0, 0x0e, 0x9c, 0xc3, 0x01, 0xc8, 0x7a, 0x3b, 0x6b, 0xd4, 0x6b,
+  0x88, 0x18, 0x57, 0xb9, 0x81, 0x9b, 0x29, 0x58, 0x4e, 0xd5, 0x82, 0xaa,
+  0xf5, 0xc3, 0x73, 0x19, 0xb2, 0x02, 0xc6, 0x41, 0x4e, 0xd8, 0x80, 0x1a,
+  0x63, 0xe5, 0xdb, 0xc1, 0x3b, 0xba, 0x2e, 0xca, 0xc1, 0x78, 0x09, 0xc5,
+  0xcc, 0x2b, 0xd4, 0xc5, 0x49, 0x9c, 0x46, 0x5f, 0x63, 0x34, 0x35, 0x7c,
+  0x4f, 0x0e, 0x29, 0xa4, 0xc7, 0xb3, 0x8f, 0x0a, 0xf9, 0x92, 0x6d, 0xa4,
+  0x1d, 0x8b, 0xaf, 0xc2, 0x49, 0x08, 0xae, 0x82, 0xb0, 0x9d, 0xa0, 0x6c,
+  0xb2, 0x0d, 0x17, 0x2c, 0xa4, 0xcc, 0x2b, 0x5c, 0x2b, 0xed, 0x90, 0xeb,
+  0xc6, 0x02, 0xde, 0x9f, 0x43, 0x4c, 0xc8, 0x04, 0x06, 0x5e, 0x63, 0xa9,
+  0x35, 0x73, 0xe3, 0xa6, 0xa1, 0xd2, 0x52, 0x0c, 0x0d, 0x91, 0xce, 0xb8,
+  0x4e, 0xc7, 0xca, 0xab, 0x84, 0x0f, 0x53, 0x73, 0x7e, 0xfe, 0xe3, 0xe9,
+  0xe1, 0x2b, 0x7d, 0xf3, 0xa1, 0x3d, 0x63, 0xc4, 0x34, 0x04, 0xcd, 0x64,
+  0x82, 0x50, 0xea, 0x15, 0xc7, 0x36, 0x44, 0x36, 0x68, 0xd4, 0x99, 0xcf,
+  0xdd, 0x0c, 0x92, 0x1f, 0x5e, 0x1f, 0x8d, 0x4e, 0x8f, 0x4f, 0x0e, 0x5e,
+  0xbd, 0xfc, 0x41, 0x59, 0xf2, 0x17, 0xe4, 0x23, 0x60, 0x39, 0xcd, 0x7e,
+  0xe6, 0x10, 0x1d, 0xe4, 0xbd, 0x77, 0x87, 0xdf, 0x7f, 0x30, 0xda, 0xc1,
+  0x2b, 0xc2, 0x75, 0xef, 0xdf, 0xa4, 0x33, 0x79, 0x89, 0x54, 0xac, 0x88,
+  0x6c, 0x37, 0x6c, 0x43, 0xf0, 0x75, 0x17, 0xd6, 0xd6, 0x27, 0x75, 0x89,
+  0x0a, 0xf7, 0x1a, 0x47, 0xe7, 0x95, 0xa2, 0x4a, 0x5b, 0x79, 0xb5, 0x91,
+  0x6a, 0xc2, 0xee, 0xfa, 0x5f, 0x6f, 0x38, 0xa8, 0x92, 0x62, 0x08, 0x7c,
+  0xd7, 0x3c, 0x02, 0x57, 0xe5, 0x1b, 0x17, 0xd0, 0x2b, 0xf8, 0xc9, 0x15,
+  0x45, 0xb0, 0x58, 0x00, 0x4a, 0x29, 0x51, 0x0d, 0xa7, 0xb7, 0xa0, 0x54,
+  0x0a, 0xf4, 0x12, 0xc5, 0xd0, 0x6a, 0x38, 0xbd, 0xf2, 0x31, 0x11, 0x61,
+  0xec, 0x58, 0x52, 0x2d, 0x96, 0x8b, 0x8a, 0x3c, 0xa7, 0x87, 0x67, 0xa3,
+  0xa3, 0xd1, 0x39, 0xa9, 0x51, 0x52, 0xb9, 0x51, 0x8c, 0xd0, 0x5a, 0x56,
+  0x13, 0xa0, 0x0d, 0x6d, 0xc0, 0x51, 0xbf, 0x5a, 0x48, 0xeb, 0x44, 0x5b,
+  0x36, 0xd7, 0xce, 0xe2, 0xa4, 0x1b, 0x80, 0x53, 0x43, 0x49, 0x10, 0x65,
+  0xd8, 0xdc, 0xf4, 0x42, 0x0f, 0x70, 0x29, 0xa4, 0xd1, 0x29, 0x9a, 0x81,
+  0x82, 0x37, 0xd8, 0x9d, 0x59, 0x3e, 0xf6, 0x4a, 0x65, 0xb7, 0x7d, 0xc8,
+  0x14, 0x9e, 0x20, 0x10, 0x1d, 0xfe, 0x11, 0x52, 0x83, 0xb8, 0x4b, 0x8d,
+  0x96, 0x62, 0xbe, 0x72, 0xad, 0x49, 0x5a, 0xa3, 0x9f, 0xc0, 0x6a, 0x15,
+  0x55, 0x28, 0x27, 0x7e, 0xd1, 0x72, 0x7c, 0xea, 0x45, 0xa1, 0x0a, 0xea,
+  0x13, 0x00, 0x6b, 0x85, 0x65, 0x13, 0x53, 0xce, 0x39, 0x15, 0x8d, 0x2c,
+  0x2d, 0x46, 0x6a, 0x41, 0x6a, 0x3d, 0x02, 0x85, 0x64, 0x66, 0x81, 0x08,
+  0x22, 0xa2, 0xe3, 0x25, 0xe5, 0xb0, 0x01, 0x5a, 0x6b, 0x4a, 0xf2, 0x16,
+  0x4c, 0x70, 0x7e, 0x67, 0x7a, 0x9d, 0xd2, 0x0a, 0x8e, 0x97, 0x7e, 0x29,
+  0x38, 0x3b, 0x7a, 0xae, 0x4a, 0x82, 0x85, 0x47, 0x88, 0x64, 0x5a, 0x01,
+  0xbb, 0xb2, 0x11, 0xa8, 0x78, 0x55, 0x7c, 0x24, 0xde, 0x71, 0xd8, 0x46,
+  0xf1, 0x51, 0xba, 0xd4, 0x72, 0xa5, 0x0f, 0xad, 0xa8, 0x57, 0x3b, 0x92,
+  0xc8, 0xb7, 0xca, 0x34, 0x70, 0x89, 0xcd, 0x0c, 0x35, 0x79, 0x1c, 0x8a,
+  0x89, 0xbd, 0x8c, 0x29, 0xeb, 0x88, 0x1c, 0x8c, 0x95, 0x20, 0x24, 0x19,
+  0xf6, 0x47, 0xa6, 0x65, 0x14, 0x9c, 0x44, 0x25, 0x66, 0x72, 0xbb, 0x29,
+  0x7a, 0x9e, 0x8b, 0xe3, 0xe6, 0xe5, 0xf6, 0xc8, 0x8a, 0xed, 0xeb, 0xf7,
+  0xd2, 0xa1, 0xcd, 0x90, 0xd7, 0xcd, 0xea, 0x73, 0xc2, 0x55, 0x8a, 0xfc,
+  0x1e, 0x35, 0xec, 0x7a, 0x79, 0xa2, 0xb5, 0x64, 0xdf, 0x5a, 0xff, 0x34,
+  0x18, 0x5e, 0xab, 0xea, 0x2e, 0xcd, 0xae, 0xe5, 0x1b, 0x34, 0xf2, 0xe5,
+  0x02, 0x25, 0x94, 0x26, 0x82, 0x21, 0x8f, 0xa8, 0x5d, 0xdb, 0xa0, 0x5e,
+  0x22, 0x6e, 0xb1, 0xcc, 0xaa, 0xbe, 0x7d, 0x7f, 0x7c, 0x7e, 0x74, 0xea,
+  0xfb, 0x1f, 0x93, 0xef, 0x8f, 0xce, 0xbf, 0x31, 0x52, 0xfb, 0xe8, 0xe8,
+  0xdd, 0xd7, 0xc7, 0xe4, 0xe4, 0x79, 0xfb, 0x76, 0xff, 0x1d, 0xc1, 0x0b,
+  0xbc, 0x43, 0x68, 0xe3, 0x3e, 0x14, 0x07, 0x62, 0x47, 0x66, 0x89, 0x89,
+  0x76, 0x28, 0xf1, 0xbc, 0x1f, 0xfa, 0x1a, 0x3a, 0xc7, 0x8f, 0xab, 0x2a,
+  0x17, 0xed, 0x45, 0x5a, 0x43, 0x8d, 0x6c, 0x68, 0x06, 0xf7, 0x64, 0xd8,
+  0xc1, 0xb1, 0x25, 0x65, 0x8b, 0x16, 0xba, 0x0b, 0x1e, 0x8f, 0x24, 0x47,
+  0x96, 0xd0, 0xe1, 0x47, 0xe7, 0xbb, 0xdb, 0xf9, 0x2f, 0xb0, 0xa3, 0x16,
+  0x7a, 0x16, 0x7a, 0x8c, 0x91, 0x99, 0x0a, 0xd1, 0x6b, 0xf8, 0xbe, 0x6c,
+  0x27, 0x1d, 0x98, 0x1e, 0x31, 0x24, 0x04, 0x12, 0x94, 0xce, 0x24, 0x48,
+  0x1a, 0x27, 0x29, 0xcd, 0x67, 0xc7, 0xfe, 0x85, 0x3a, 0x6c, 0xd5, 0x1c,
+  0xd3, 0xf8, 0xc0, 0xcb, 0x32, 0x73, 0x27, 0x77, 0x70, 0xa2, 0xcd, 0xa8,
+  0xfd, 0x17, 0x6a, 0x18, 0x5f, 0x2e, 0x03, 0xe2, 0x6b, 0x03, 0xb3, 0x25,
+  0x9b, 0xb6, 0xce, 0x90, 0x98, 0xcf, 0xf6, 0x58, 0xac, 0xb4, 0xe0, 0xca,
+  0x5a, 0x9e, 0xcf, 0x34, 0xa7, 0x2d, 0x4b, 0x2c, 0x0a, 0x02, 0xb2, 0x25,
+  0xaf, 0x49, 0xe6, 0x0c, 0x6e, 0xa9, 0x8f, 0xb5, 0xd2, 0xb2, 0xf9, 0xbe,
+  0x3b, 0x51, 0xfb, 0xa1, 0xe6, 0xb5, 0xd9, 0xc2, 0x6f, 0xce, 0x75, 0x8a,
+  0xd2, 0x6a, 0x65, 0x39, 0xcc, 0xee, 0x32, 0xf2, 0x72, 0xd2, 0xaf, 0x7f,
+  0x5b, 0x5c, 0xfa, 0x29, 0x6f, 0x5c, 0x58, 0x7a, 0x11, 0xdb, 0x59, 0x41,
+  0x72, 0x66, 0xb1, 0x48, 0x8a, 0xd9, 0xb5, 0x46, 0x20, 0x15, 0xea, 0x76,
+  0x56, 0x75, 0x28, 0xdf, 0xef, 0x86, 0xdf, 0xef, 0xb2, 0xd9, 0xf1, 0xe8,
+  0xf4, 0xe6, 0xb9, 0x45, 0x40, 0xe5, 0x44, 0x6e, 0x5f, 0x7c, 0x53, 0xa1,
+  0x80, 0x28, 0x8c, 0x1e, 0xe5, 0x3b, 0x27, 0x65, 0x9e, 0xc8, 0xc6, 0x7f,
+  0x0a, 0x21, 0x5b, 0x56, 0x48, 0x50, 0xc5, 0x23, 0xb0, 0x13, 0x73, 0xdc,
+  0x2f, 0xa2, 0xec, 0xc0, 0xa7, 0xe8, 0xba, 0x32, 0x0d, 0x9a, 0xef, 0x9f,
+  0xda, 0x60, 0x7c, 0xc7, 0xd3, 0x50, 0xa4, 0x4d, 0xd2, 0xa1, 0x06, 0xf9,
+  0xe2, 0x46, 0xab, 0xfc, 0x9a, 0x5f, 0x9f, 0xdb, 0x02, 0x3d, 0x75, 0xcb,
+  0x49, 0xd5, 0x42, 0x1b, 0x56, 0xe6, 0x8f, 0xc1, 0x21, 0x2e, 0x92, 0x38,
+  0x83, 0x53, 0x32, 0x3a, 0xe3, 0xca, 0xda, 0x11, 0xd9, 0x5e, 0x99, 0x52,
+  0x58, 0x98, 0x67, 0x48, 0x8d, 0x05, 0x3f, 0xf2, 0x98, 0x8b, 0x8f, 0xf4,
+  0x2f, 0xbb, 0xfe, 0xd3, 0xee, 0xf6, 0xf6, 0xce, 0xde, 0xce, 0xe7, 0x2f,
+  0xb6, 0xf7, 0x76, 0x76, 0x76, 0x76, 0xf7, 0x76, 0xf6, 0xf6, 0x76, 0xb7,
+  0x7f, 0xd9, 0x22, 0xfb, 0xd1, 0x4d, 0x9e, 0xdd, 0xaa, 0x67, 0x8a, 0x93,
+  0xf1, 0x40, 0xd6, 0x5c, 0xad, 0x5d, 0x34, 0x78, 0xd1, 0x73, 0x55, 0xf2,
+  0xb1, 0xb0, 0x12, 0x1c, 0x33, 0xcf, 0x10, 0x72, 0x0b, 0x97, 0x6a, 0x8a,
+  0x33, 0xe8, 0xc1, 0x5c, 0x63, 0x54, 0x7f, 0x5f, 0xd2, 0x4c, 0xc7, 0x24,
+  0x0e, 0x40, 0xa6, 0xa9, 0x6d, 0x62, 0xdf, 0xe5, 0xac, 0x1c, 0x8f, 0x91,
+  0xba, 0x60, 0x73, 0x5b, 0x87, 0x09, 0x61, 0xa9, 0x5e, 0x33, 0x49, 0x88,
+  0xeb, 0x00, 0x51, 0x85, 0x7c, 0xd0, 0xdd, 0xea, 0xb0, 0xe0, 0x25, 0x91,
+  0xd4, 0x93, 0x92, 0xea, 0x0a, 0x4c, 0x89, 0x29, 0x99, 0x45, 0xaa, 0x6c,
+  0xce, 0x4b, 0x72, 0x91, 0x7d, 0xbe, 0xbd, 0xb7, 0x47, 0xa5, 0x3f, 0xfe,
+  0xb4, 0xd3, 0x97, 0x80, 0x50, 0x3f, 0xca, 0xbd, 0x6f, 0xaf, 0x27, 0x6e,
+  0x83, 0xd4, 0x0f, 0x7f, 0x9e, 0xc5, 0x72, 0x9e, 0x55, 0x46, 0x11, 0xa1,
+  0xe2, 0xb1, 0x88, 0x88, 0x84, 0xd1, 0x9b, 0x31, 0xd6, 0x80, 0xc8, 0xd2,
+  0x89, 0xc6, 0xa7, 0x1b, 0x81, 0xb1, 0x62, 0x6d, 0x16, 0x3a, 0xe3, 0x05,
+  0xb9, 0x29, 0xda, 0xb6, 0x51, 0xfe, 0x06, 0x86, 0x7c, 0xce, 0x65, 0xe1,
+  0x2c, 0x1e, 0xbe, 0x6f, 0x85, 0x33, 0xe0, 0x70, 0x15, 0x5c, 0xd2, 0x94,
+  0x1e, 0x67, 0x19, 0x1e, 0x16, 0x13, 0x4f, 0xb8, 0x95, 0x04, 0x9e, 0x9f,
+  0xbc, 0xc9, 0xee, 0x3e, 0xdb, 0xf9, 0x85, 0xe3, 0x15, 0xe9, 0x40, 0xb8,
+  0x55, 0x93, 0x72, 0x70, 0x53, 0x3f, 0x45, 0x43, 0x09, 0x69, 0x23, 0x1b,
+  0x5e, 0x0e, 0x55, 0xaa, 0x10, 0x6b, 0x63, 0xdf, 0x8f, 0x1a, 0x67, 0x9c,
+  0x72, 0x2e, 0x54, 0x0c, 0x3d, 0x4d, 0x0d, 0x4a, 0x6a, 0x10, 0x66, 0x63,
+  0x66, 0xab, 0xae, 0x8f, 0xb9, 0x61, 0x0e, 0xcf, 0xf7, 0xcd, 0xe5, 0xf1,
+  0x6d, 0xa8, 0xe8, 0xbf, 0xcd, 0x8c, 0x56, 0x4e, 0x9b, 0xbd, 0x81, 0xf3,
+  0x70, 0x63, 0xd1, 0x81, 0x69, 0xed, 0x9e, 0x26, 0x1b, 0xe4, 0xb4, 0x78,
+  0xf6, 0xf9, 0xb3, 0xa7, 0x9b, 0x5c, 0x8a, 0x81, 0x5f, 0xcb, 0x28, 0x41,
+  0x04, 0x56, 0x49, 0x41, 0xa7, 0x21, 0x73, 0xb2, 0x65, 0x49, 0xef, 0xcf,
+  0x8e, 0xf8, 0x48, 0x5f, 0x31, 0x88, 0x00, 0x2b, 0xbd, 0x5d, 0x34, 0x39,
+  0xdc, 0xb7, 0x9e, 0x90, 0x31, 0xcf, 0x09, 0xe9, 0x10, 0xc9, 0xd7, 0x74,
+  0x31, 0xda, 0xe4, 0x7f, 0xdc, 0xb0, 0xe6, 0x80, 0x96, 0x28, 0x50, 0x28,
+  0x75, 0x9f, 0x30, 0x18, 0x40, 0x23, 0x12, 0x32, 0xab, 0xd0, 0x99, 0xd5,
+  0xc0, 0x48, 0x0f, 0x62, 0x7e, 0xc4, 0xdc, 0xbf, 0x83, 0xc6, 0xbd, 0xc9,
+  0x2e, 0x7f, 0x08, 0x85, 0x44, 0x86, 0xe6, 0x41, 0x8d, 0x1d, 0xa5, 0x11,
+  0xb7, 0xd2, 0xd1, 0x9c, 0xb4, 0xe9, 0x81, 0x3a, 0x29, 0x9e, 0x8b, 0xb0,
+  0x22, 0xbb, 0x84, 0xec, 0xcf, 0x6e, 0x60, 0x59, 0xcc, 0x5b, 0x26, 0x1f,
+  0x49, 0xa6, 0x47, 0x52, 0x3b, 0x62, 0x8e, 0xe7, 0xe6, 0x3a, 0xaa, 0xee,
+  0x45, 0xc2, 0x86, 0x9a, 0x60, 0xeb, 0xa9, 0x75, 0x22, 0x02, 0x18, 0x36,
+  0xc2, 0x0f, 0xa5, 0xb7, 0xa8, 0x29, 0xaa, 0x34, 0xb7, 0x06, 0xd0, 0x62,
+  0xfb, 0x83, 0xb9, 0x7e, 0xe5, 0x05, 0xcc, 0xf8, 0xf9, 0x65, 0xfa, 0xbb,
+  0x3e, 0xe7, 0xc5, 0x52, 0xa6, 0xdd, 0x89, 0xad, 0x18, 0x1a, 0x23, 0x6a,
+  0x22, 0x7e, 0xca, 0x6a, 0x3f, 0x1b, 0x18, 0xc9, 0xd6, 0xd6, 0xe6, 0x8a,
+  0xd1, 0xc8, 0xd7, 0xb1, 0xde, 0x4f, 0x01, 0x4a, 0xe2, 0xa5, 0x74, 0x9a,
+  0x3d, 0x6f, 0x37, 0x4e, 0x4b, 0x9b, 0xd7, 0xb4, 0x93, 0x53, 0x09, 0x8c,
+  0x65, 0x33, 0xaa, 0xaa, 0x57, 0x3c, 0x78, 0x65, 0x5e, 0xed, 0x49, 0x48,
+  0x2c, 0x8e, 0x82, 0x44, 0x71, 0x55, 0x69, 0xf6, 0x6f, 0x0e, 0x93, 0x7d,
+  0xa2, 0x86, 0x56, 0xc7, 0xde, 0x90, 0xd5, 0x9e, 0xab, 0xb8, 0xe7, 0x2a,
+  0xc4, 0x5a, 0x73, 0x5e, 0xdf, 0xfb, 0x52, 0xc5, 0x3c, 0xc5, 0x04, 0xb0,
+  0xc6, 0xde, 0x71, 0xc6, 0xf8, 0x27, 0x96, 0x73, 0x7a, 0x78, 0xc6, 0x79,
+  0xd1, 0x2a, 0x14, 0x2a, 0x8d, 0xc0, 0xd3, 0x6d, 0x27, 0x01, 0xa8, 0xc4,
+  0x4a, 0x21, 0x78, 0xfd, 0xe2, 0x81, 0x80, 0x20, 0x90, 0xa8, 0x76, 0x16,
+  0xac, 0x2d, 0x11, 0xb3, 0xbb, 0x75, 0xcc, 0xe4, 0xd5, 0x5a, 0x8f, 0x3e,
+  0x53, 0x3c, 0x47, 0x31, 0x70, 0xc0, 0xad, 0x39, 0x24, 0xc4, 0x30, 0xf6,
+  0x8f, 0x8e, 0x29, 0x2c, 0xee, 0xd8, 0xa8, 0x78, 0x23, 0x15, 0x95, 0x10,
+  0x26, 0x8a, 0x80, 0xbd, 0x22, 0x27, 0x71, 0xbd, 0x6f, 0x0b, 0x8e, 0x68,
+  0xb6, 0x14, 0xf4, 0x16, 0x72, 0xee, 0xb1, 0xea, 0x2f, 0x20, 0x81, 0x66,
+  0xb7, 0x8c, 0xbc, 0x54, 0xb3, 0xd1, 0x16, 0x00, 0xbc, 0x04, 0x4d, 0x0f,
+  0x4f, 0x2a, 0x54, 0x6a, 0x66, 0xd3, 0xa8, 0x77, 0x54, 0x65, 0xb3, 0xec,
+  0x46, 0xac, 0xab, 0x0c, 0x67, 0xfa, 0xb5, 0xf8, 0x30, 0xb9, 0xe0, 0x69,
+  0x23, 0xbe, 0xd8, 0xc0, 0x4f, 0x4a, 0x9d, 0x6e, 0x31, 0x2a, 0x8c, 0x03,
+  0xfb, 0xa0, 0xfe, 0x1d, 0x08, 0xbf, 0x3a, 0x8d, 0xe9, 0xbd, 0x01, 0x29,
+  0xb9, 0x12, 0xdc, 0xfa, 0xbe, 0x16, 0x3c, 0x87, 0x6e, 0xb4, 0x38, 0x1b,
+  0x0b, 0xb5, 0x66, 0x1e, 0x5b, 0xdf, 0xfb, 0x0a, 0x93, 0xcc, 0x2e, 0x03,
+  0xba, 0x79, 0xfa, 0x64, 0xa9, 0xe5, 0x1a, 0xf0, 0x46, 0x23, 0xa3, 0x82,
+  0x18, 0x7d, 0x4e, 0x1d, 0x05, 0x71, 0x94, 0x33, 0xf3, 0x27, 0x02, 0xaa,
+  0x38, 0xc4, 0xd2, 0x3c, 0x4b, 0x30, 0xaf, 0x5e, 0x4c, 0xab, 0xf9, 0x93,
+  0xd3, 0x21, 0xe4, 0x2f, 0x34, 0x55, 0x2d, 0x81, 0x26, 0xdc, 0xe7, 0xdb,
+  0x90, 0xbc, 0x8e, 0xcd, 0x64, 0x68, 0x47, 0x2f, 0x5e, 0x7f, 0x1e, 0xff,
+  0x6b, 0x75, 0x4a, 0xab, 0x1c, 0x52, 0x56, 0xba, 0xbc, 0xbc, 0x0d, 0x63,
+  0x2e, 0x71, 0xf8, 0xd5, 0x92, 0xbc, 0x61, 0xb6, 0x80, 0x0f, 0x8d, 0x62,
+  0x4e, 0x77, 0x51, 0xc6, 0xd5, 0x44, 0x6d, 0xe3, 0xa4, 0xd2, 0x2d, 0xcd,
+  0xf6, 0x72, 0xeb, 0xc7, 0xe5, 0x2d, 0x95, 0x42, 0xbd, 0xb8, 0xc8, 0x27,
+  0x54, 0xdf, 0xc6, 0xa1, 0x06, 0x13, 0x8f, 0xe7, 0x07, 0xe7, 0x5a, 0x7d,
+  0xc9, 0xcc, 0x2d, 0x59, 0x2c, 0xc7, 0x33, 0x73, 0x59, 0x6b, 0x3c, 0xbb,
+  0x39, 0x55, 0x58, 0x25, 0xa3, 0x6d, 0xa1, 0x39, 0xf6, 0xe6, 0x43, 0xe1,
+  0xec, 0xc4, 0x50, 0x4b, 0x7d, 0x78, 0x12, 0xc1, 0xe7, 0xa8, 0x09, 0x4b,
+  0x81, 0xc6, 0xf3, 0xb2, 0xd0, 0x74, 0x98, 0x65, 0xcd, 0x70, 0x92, 0x5a,
+  0x4c, 0x7e, 0x8d, 0x5d, 0x13, 0xf9, 0x4c, 0x40, 0xdb, 0x45, 0x35, 0xc7,
+  0x1b, 0xfe, 0x64, 0xa6, 0x83, 0xc5, 0xd5, 0x42, 0x77, 0x5a, 0x05, 0x22,
+  0x96, 0x96, 0x24, 0x01, 0x03, 0x47, 0xef, 0xf4, 0x9b, 0xd3, 0x61, 0x72,
+  0x48, 0x2d, 0xf1, 0x98, 0x44, 0xd0, 0x85, 0x8d, 0xc6, 0x7c, 0x67, 0x26,
+  0x7b, 0x49, 0x17, 0xd8, 0x49, 0x45, 0x7f, 0xa1, 0x35, 0xf9, 0x92, 0xcd,
+  0xb2, 0xf8, 0xb6, 0xdd, 0xab, 0x69, 0x48, 0xc3, 0xac, 0x4f, 0xf1, 0xbb,
+  0x39, 0x2b, 0x46, 0xfc, 0xb2, 0xdb, 0xe4, 0x7a, 0x28, 0xab, 0x16, 0xf8,
+  0x0e, 0xbf, 0x99, 0x18, 0xa9, 0x0c, 0xb2, 0xd5, 0xe2, 0x1e, 0xfb, 0xe7,
+  0x31, 0x47, 0x96, 0x3f, 0xb9, 0x01, 0x8f, 0xb4, 0x84, 0xfc, 0x6c, 0x00,
+  0x1f, 0x1f, 0xac, 0x8a, 0x61, 0x67, 0xaa, 0x4c, 0xc2, 0x1d, 0x4b, 0x71,
+  0x93, 0xb2, 0x45, 0xa3, 0xce, 0x3a, 0xe7, 0xd5, 0xd3, 0xdf, 0xf4, 0x0b,
+  0x52, 0xbb, 0x69, 0x2c, 0x46, 0x6a, 0x31, 0x5b, 0x30, 0x5c, 0xfb, 0x7f,
+  0x01, 0x08, 0x0f, 0x15, 0x5a, 0x89, 0x99, 0x02, 0x00,
 };
 #define BUF_SIZE 0x10000
 static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
index 442579e..16520b6 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index a8ffb8f..5db8548 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 5c149d9..298df80 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 9a5ceba..7e742ff 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 9a7972f..c97c360 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3573b05..9a6465e 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #  include <fcntl.h>
 #endif
 
-#ifdef USE_SSLEAY
-#  ifdef USE_OPENSSL
-#    include <openssl/md5.h>
-#    include <openssl/sha.h>
-#  else
-#    include <md5.h>
-#    include <sha.h>
-#  endif
+#ifdef USE_OPENSSL
+#  include <openssl/md5.h>
+#  include <openssl/sha.h>
 #elif defined(USE_GNUTLS_NETTLE)
 #  include <nettle/md5.h>
 #  include <nettle/sha.h>
@@ -381,7 +376,7 @@ static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
   sha256_finish(ctx, digest);
 }
 
-#elif defined(_WIN32) && !defined(USE_SSLEAY)
+#elif defined(_WIN32) && !defined(USE_OPENSSL)
 
 static void win32_crypto_final(struct win32_crypto_hash *ctx,
                                unsigned char *digest,
@@ -626,6 +621,10 @@ static int check_hash(const char *filename,
   }
 
   result = malloc(digest_def->dparams->digest_resultlen);
+  if(!result) {
+    close(fd);
+    return -1;
+  }
   while(1) {
     unsigned char buf[4096];
     ssize_t len = read(fd, buf, sizeof(buf));
@@ -681,12 +680,17 @@ static metalink_checksum *new_metalink_checksum_from_hex_digest
   size_t i;
   size_t len = strlen(hex_digest);
   digest = malloc(len/2);
+  if(!digest)
+    return 0;
+
   for(i = 0; i < len; i += 2) {
     digest[i/2] = hex_to_uint(hex_digest+i);
   }
   chksum = malloc(sizeof(metalink_checksum));
-  chksum->digest_def = digest_def;
-  chksum->digest = digest;
+  if(chksum) {
+    chksum->digest_def = digest_def;
+    chksum->digest = digest;
+  }
   return chksum;
 }
 
@@ -694,8 +698,14 @@ static metalink_resource *new_metalink_resource(const char *url)
 {
   metalink_resource *res;
   res = malloc(sizeof(metalink_resource));
-  res->next = NULL;
-  res->url = strdup(url);
+  if(res) {
+    res->next = NULL;
+    res->url = strdup(url);
+    if(!res->url) {
+      free(res);
+      return NULL;
+    }
+  }
   return res;
 }
 
@@ -720,8 +730,15 @@ static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
 {
   metalinkfile *f;
   f = (metalinkfile*)malloc(sizeof(metalinkfile));
+  if(!f)
+    return NULL;
+
   f->next = NULL;
   f->filename = strdup(fileinfo->name);
+  if(!f->filename) {
+    free(f);
+    return NULL;
+  }
   f->checksum = NULL;
   f->resource = NULL;
   if(fileinfo->checksums) {
@@ -822,8 +839,10 @@ int parse_metalink(struct OperationConfig *config, struct OutStruct *outs,
       url = new_getout(config);
 
     if(url) {
-      metalinkfile *mlfile;
-      mlfile = new_metalinkfile(*files);
+      metalinkfile *mlfile = new_metalinkfile(*files);
+      if(!mlfile)
+        break;
+
       if(!mlfile->checksum) {
         warnings = TRUE;
         fprintf(config->global->errors,
index 3685906..7ee2736 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3eda45f..d862d41 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 1ea6f4a..827f400 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3311b55..1454903 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "memdebug.h" /* keep this as LAST include */
 
 #define WARN_PREFIX "Warning: "
-#define WARN_TEXTWIDTH (79 - (int)strlen(WARN_PREFIX))
+#define NOTE_PREFIX "Note: "
 
-/*
- * Emit warning formatted message on configured 'errors' stream unless
- * mute (--silent) was selected.
- */
-
-void warnf(struct OperationConfig *config, const char *fmt, ...)
+static void voutf(struct GlobalConfig *config,
+                  const char *prefix,
+                  const char *fmt,
+                  va_list ap)
 {
-  if(!config->global->mute) {
-    va_list ap;
-    int len;
+  size_t width = (79 - (int)strlen(prefix));
+  if(!config->mute) {
+    size_t len;
     char *ptr;
     char print_buffer[256];
 
-    va_start(ap, fmt);
     len = vsnprintf(print_buffer, sizeof(print_buffer), fmt, ap);
-    va_end(ap);
 
     ptr = print_buffer;
     while(len > 0) {
-      fputs(WARN_PREFIX, config->global->errors);
+      fputs(prefix, config->errors);
 
-      if(len > (int)WARN_TEXTWIDTH) {
-        int cut = WARN_TEXTWIDTH-1;
+      if(len > width) {
+        size_t cut = width-1;
 
         while(!ISSPACE(ptr[cut]) && cut) {
           cut--;
@@ -63,15 +59,15 @@ void warnf(struct OperationConfig *config, const char *fmt, ...)
         if(0 == cut)
           /* not a single cutting position was found, just cut it at the
              max text width then! */
-          cut = WARN_TEXTWIDTH-1;
+          cut = width-1;
 
-        (void)fwrite(ptr, cut + 1, 1, config->global->errors);
-        fputs("\n", config->global->errors);
+        (void)fwrite(ptr, cut + 1, 1, config->errors);
+        fputs("\n", config->errors);
         ptr += cut+1; /* skip the space too */
         len -= cut;
       }
       else {
-        fputs(ptr, config->global->errors);
+        fputs(ptr, config->errors);
         len = 0;
       }
     }
@@ -79,6 +75,31 @@ void warnf(struct OperationConfig *config, const char *fmt, ...)
 }
 
 /*
+ * Emit 'note' formatted message on configured 'errors' stream, if verbose was
+ * selected.
+ */
+void notef(struct GlobalConfig *config, const char *fmt, ...)
+{
+  va_list ap;
+  va_start(ap, fmt);
+  if(config->tracetype)
+    voutf(config, NOTE_PREFIX, fmt, ap);
+  va_end(ap);
+}
+
+/*
+ * Emit warning formatted message on configured 'errors' stream unless
+ * mute (--silent) was selected.
+ */
+
+void warnf(struct GlobalConfig *config, const char *fmt, ...)
+{
+  va_list ap;
+  va_start(ap, fmt);
+  voutf(config, WARN_PREFIX, fmt, ap);
+  va_end(ap);
+}
+/*
  * Emit help formatted message on given stream.
  */
 
index 1575469..e84c1b2 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -23,7 +23,8 @@
  ***************************************************************************/
 #include "tool_setup.h"
 
-void warnf(struct OperationConfig *config, const char *fmt, ...);
+void warnf(struct GlobalConfig *config, const char *fmt, ...);
+void notef(struct GlobalConfig *config, const char *fmt, ...);
 
 void helpf(FILE *errors, const char *fmt, ...);
 
index a21bbca..29e0df8 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -98,7 +98,7 @@ CURLcode curl_easy_perform_ev(CURL *easy);
 #endif
 
 #define CURL_CA_CERT_ERRORMSG1                                              \
-  "More details here: http://curl.haxx.se/docs/sslcerts.html\n\n"           \
+  "More details here: https://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" \
@@ -151,7 +151,7 @@ static curl_off_t vms_realfilesize(const char * name,
   int ret_stat;
   FILE * file;
 
-  file = fopen(name, "r");
+  file = fopen(name, "r"); /* VMS */
   if(file == NULL) {
     return 0;
   }
@@ -320,7 +320,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
     if(!curlx_strequal(config->headerfile, "-")) {
       FILE *newfile = fopen(config->headerfile, "wb");
       if(!newfile) {
-        warnf(config, "Failed to open %s\n", config->headerfile);
+        warnf(config->global, "Failed to open %s\n", config->headerfile);
         result = CURLE_WRITE_ERROR;
         goto quit_curl;
       }
@@ -548,15 +548,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
               result = CURLE_WRITE_ERROR;
               goto quit_urls;
             }
-#if defined(MSDOS) || defined(WIN32)
-            /* For DOS and WIN32, we do some major replacing of
-               bad characters in the file name before using it */
-            outfile = sanitize_dos_name(outfile);
-            if(!outfile) {
-              result = CURLE_OUT_OF_MEMORY;
-              goto show_error;
-            }
-#endif /* MSDOS || WIN32 */
           }
           else if(urls) {
             /* fill '#1' ... '#9' terms from URL pattern */
@@ -565,7 +556,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
             Curl_safefree(storefile);
             if(result) {
               /* bad globbing */
-              warnf(config, "bad output glob!\n");
+              warnf(config->global, "bad output glob!\n");
               goto quit_urls;
             }
           }
@@ -710,7 +701,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
            * we should warn him/her.
            */
           if(config->proxyanyauth || (authbits>1)) {
-            warnf(config,
+            warnf(config->global,
                   "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");
@@ -722,7 +713,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
           set_binmode(stdin);
           if(curlx_strequal(uploadfile, ".")) {
             if(curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
-              warnf(config,
+              warnf(config->global,
                     "fcntl failed on fd=%d: %s\n", infd, strerror(errno));
           }
         }
@@ -851,8 +842,8 @@ static CURLcode operate_do(struct GlobalConfig *global,
         else if(!config->use_metalink)
           my_setopt(curl, CURLOPT_HEADER, config->include_headers?1L:0L);
 
-        if(config->xoauth2_bearer)
-          my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->xoauth2_bearer);
+        if(config->oauth_bearer)
+          my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->oauth_bearer);
 
 #if !defined(CURL_DISABLE_PROXY)
         {
@@ -892,7 +883,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
                               (long)CURLAUTH_BASIC);
 
           /* new in libcurl 7.19.4 */
-          my_setopt(curl, CURLOPT_NOPROXY, config->noproxy);
+          my_setopt_str(curl, CURLOPT_NOPROXY, config->noproxy);
         }
 #endif
 
@@ -909,7 +900,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_IGNORED);
 
         if(config->netrc_file)
-          my_setopt(curl, CURLOPT_NETRC_FILE, config->netrc_file);
+          my_setopt_str(curl, CURLOPT_NETRC_FILE, config->netrc_file);
 
         my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii?1L:0L);
         if(config->login_options)
@@ -935,7 +926,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
             my_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,
                       config->postfieldsize);
             break;
-          case HTTPREQ_POST:
+          case HTTPREQ_FORMPOST:
             my_setopt_httppost(curl, CURLOPT_HTTPPOST, config->httppost);
             break;
           default:
@@ -956,9 +947,11 @@ static CURLcode operate_do(struct GlobalConfig *global,
           /* new in libcurl 7.5 */
           my_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs);
 
-          /* new in libcurl 7.9.1 */
           if(config->httpversion)
             my_setopt_enum(curl, CURLOPT_HTTP_VERSION, config->httpversion);
+          else if(curlinfo->features & CURL_VERSION_HTTP2) {
+            my_setopt_enum(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
+          }
 
           /* new in libcurl 7.10.6 (default is Basic) */
           if(config->authtype)
@@ -998,10 +991,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
         else
           my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, CURL_OFF_T_C(0));
 
-        my_setopt_str(curl, CURLOPT_SSLCERT, config->cert);
-        my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type);
-        my_setopt_str(curl, CURLOPT_SSLKEY, config->key);
-        my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type);
         my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd);
 
         if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) {
@@ -1029,6 +1018,11 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt_str(curl, CURLOPT_PINNEDPUBLICKEY, config->pinnedpubkey);
 
         if(curlinfo->features & CURL_VERSION_SSL) {
+          my_setopt_str(curl, CURLOPT_SSLCERT, config->cert);
+          my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type);
+          my_setopt_str(curl, CURLOPT_SSLKEY, config->key);
+          my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type);
+
           if(config->insecure_ok) {
             my_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
             my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
@@ -1038,7 +1032,17 @@ static CURLcode operate_do(struct GlobalConfig *global,
             /* libcurl default is strict verifyhost -> 2L   */
             /* my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L); */
           }
+
+          if(config->verifystatus)
+            my_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 1L);
+
+          if(config->falsestart)
+            my_setopt(curl, CURLOPT_SSL_FALSESTART, 1L);
+
+          my_setopt_enum(curl, CURLOPT_SSLVERSION, config->ssl_version);
         }
+        if(config->path_as_is)
+          my_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
 
         if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) {
           if(!config->insecure_ok) {
@@ -1088,16 +1092,16 @@ static CURLcode operate_do(struct GlobalConfig *global,
         my_setopt(curl, CURLOPT_COOKIESESSION, config->cookiesession?1L:0L);
 #else
         if(config->cookie || config->cookiefile || config->cookiejar) {
-          warnf(config, "cookie option(s) used even though cookie support "
-                "is disabled!\n");
+          warnf(config->global, "cookie option(s) used even though cookie "
+                "support is disabled!\n");
           return CURLE_NOT_BUILT_IN;
         }
 #endif
 
-        my_setopt_enum(curl, CURLOPT_SSLVERSION, config->ssl_version);
         my_setopt_enum(curl, CURLOPT_TIMECONDITION, (long)config->timecond);
         my_setopt(curl, CURLOPT_TIMEVALUE, (long)config->condtime);
         my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest);
+        customrequest_helper(config, config->httpreq, config->customrequest);
         my_setopt(curl, CURLOPT_STDERR, global->errors);
 
         /* three new ones in libcurl 7.3: */
@@ -1194,21 +1198,26 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt_enum(curl, CURLOPT_FTP_SSL_CCC,
                          (long)config->ftp_ssl_ccc_mode);
 
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
-        {
-          /* TODO: Make this a run-time check instead of compile-time one. */
+        /* new in curl 7.19.4 */
+        if(config->socks5_gssapi_service)
+          my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE,
+                        config->socks5_gssapi_service);
 
-          /* new in curl 7.19.4 */
-          if(config->socks5_gssapi_service)
-            my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE,
-                          config->socks5_gssapi_service);
+        /* new in curl 7.19.4 */
+        if(config->socks5_gssapi_nec)
+          my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_NEC,
+                        config->socks5_gssapi_nec);
+
+        /* new in curl 7.43.0 */
+        if(config->proxy_service_name)
+          my_setopt_str(curl, CURLOPT_PROXY_SERVICE_NAME,
+                        config->proxy_service_name);
+
+        /* new in curl 7.43.0 */
+        if(config->service_name)
+          my_setopt_str(curl, CURLOPT_SERVICE_NAME,
+                        config->service_name);
 
-          /* new in curl 7.19.4 */
-          if(config->socks5_gssapi_nec)
-            my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_NEC,
-                          config->socks5_gssapi_nec);
-        }
-#endif
         /* curl 7.13.0 */
         my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account);
 
@@ -1246,10 +1255,6 @@ static CURLcode operate_do(struct GlobalConfig *global,
         if(!config->nokeepalive) {
           my_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
           if(config->alivetime != 0) {
-#if !defined(TCP_KEEPIDLE) || !defined(TCP_KEEPINTVL)
-            warnf(config, "Keep-alive functionality somewhat crippled due to "
-                "missing support in your operating system!\n");
-#endif
             my_setopt(curl, CURLOPT_TCP_KEEPIDLE, config->alivetime);
             my_setopt(curl, CURLOPT_TCP_KEEPINTVL, config->alivetime);
           }
@@ -1312,9 +1317,13 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt_str(curl, CURLOPT_GSSAPI_DELEGATION,
                         config->gssapi_delegation);
 
-        /* new in 7.25.0 */
-        if(config->ssl_allow_beast)
-          my_setopt(curl, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST);
+        /* new in 7.25.0 and 7.44.0 */
+        {
+          long mask = (config->ssl_allow_beast ? CURLSSLOPT_ALLOW_BEAST : 0) |
+                      (config->ssl_no_revoke ? CURLSSLOPT_NO_REVOKE : 0);
+          if(mask)
+            my_setopt_bitmask(curl, CURLOPT_SSL_OPTIONS, mask);
+        }
 
         if(config->mail_auth)
           my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth);
@@ -1336,6 +1345,19 @@ static CURLcode operate_do(struct GlobalConfig *global,
           my_setopt_str(curl, CURLOPT_UNIX_SOCKET_PATH,
                         config->unix_socket_path);
 
+        /* new in 7.45.0 */
+        if(config->proto_default)
+          my_setopt_str(curl, CURLOPT_DEFAULT_PROTOCOL, config->proto_default);
+
+        /* new in 7.47.0 */
+        if(config->expect100timeout > 0)
+          my_setopt_str(curl, CURLOPT_EXPECT_100_TIMEOUT_MS,
+                        (long)(config->expect100timeout*1000));
+
+        /* new in 7.48.0 */
+        if(config->tftp_no_options)
+          my_setopt(curl, CURLOPT_TFTP_NO_OPTIONS, 1L);
+
         /* initialize retry vars for loop below */
         retry_sleep_default = (config->retry_delay) ?
           config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */
@@ -1345,9 +1367,10 @@ static CURLcode operate_do(struct GlobalConfig *global,
         retrystart = tvnow();
 
 #ifndef CURL_DISABLE_LIBCURL_OPTION
-        result = easysrc_perform();
-        if(result) {
-          goto show_error;
+        if(global->libcurl) {
+          result = easysrc_perform();
+          if(result)
+            goto show_error;
         }
 #endif
 
@@ -1378,6 +1401,18 @@ static CURLcode operate_do(struct GlobalConfig *global,
 #endif
           result = curl_easy_perform(curl);
 
+          if(!result && !outs.stream && !outs.bytes) {
+            /* we have received no data despite the transfer was successful
+               ==> force cration of an empty output file (if an output file
+               was specified) */
+            long cond_unmet = 0L;
+            /* do not create (or even overwrite) the file in case we get no
+               data because of unmet condition */
+            curl_easy_getinfo(curl, CURLINFO_CONDITION_UNMET, &cond_unmet);
+            if(!cond_unmet && !tool_create_output_file(&outs))
+              result = CURLE_WRITE_ERROR;
+          }
+
           if(outs.is_cd_filename && outs.stream && !global->mute &&
              outs.filename)
             printf("curl: Saved to filename '%s'\n", outs.filename);
@@ -1451,7 +1486,8 @@ static CURLcode operate_do(struct GlobalConfig *global,
               static const char * const m[]={
                 NULL, "timeout", "HTTP error", "FTP error"
               };
-              warnf(config, "Transient problem: %s "
+
+              warnf(config->global, "Transient problem: %s "
                     "Will retry in %ld seconds. "
                     "%ld retries left.\n",
                     m[retry], retry_sleep/1000L, retry_numretries);
@@ -1463,7 +1499,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
                 if(retry_sleep > RETRY_SLEEP_MAX)
                   retry_sleep = RETRY_SLEEP_MAX;
               }
-              if(outs.bytes && outs.filename) {
+              if(outs.bytes && outs.filename && outs.stream) {
                 /* We have written data to a output file, we truncate file
                  */
                 if(!global->mute)
@@ -1594,7 +1630,7 @@ static CURLcode operate_do(struct GlobalConfig *global,
         if(!result && config->xattr && outs.fopened && outs.stream) {
           int rc = fwrite_xattr(curl, fileno(outs.stream));
           if(rc)
-            warnf(config, "Error setting extended attributes: %s\n",
+            warnf(config->global, "Error setting extended attributes: %s\n",
                   strerror(errno));
         }
 
@@ -1818,13 +1854,17 @@ CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[])
       /* Check if we were asked to list the SSL engines */
       else if(res == PARAM_ENGINES_REQUESTED)
         tool_list_engines(config->easy);
+      else if(res == PARAM_LIBCURL_UNSUPPORTED_PROTOCOL)
+        result = CURLE_UNSUPPORTED_PROTOCOL;
       else
         result = CURLE_FAILED_INIT;
     }
     else {
 #ifndef CURL_DISABLE_LIBCURL_OPTION
-      /* Initialise the libcurl source output */
-      result = easysrc_init();
+      if(config->libcurl) {
+        /* Initialise the libcurl source output */
+        result = easysrc_init();
+      }
 #endif
 
       /* Perform the main operations */
@@ -1850,14 +1890,13 @@ CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[])
         }
 
 #ifndef CURL_DISABLE_LIBCURL_OPTION
-        /* Cleanup the libcurl source output */
-        easysrc_cleanup();
-
-        /* set current back to first so that isn't NULL */
-        config->current = config->first;
+        if(config->libcurl) {
+          /* Cleanup the libcurl source output */
+          easysrc_cleanup();
 
-        /* Dump the libcurl code if previously enabled */
-        dumpeasysrc(config);
+          /* Dump the libcurl code if previously enabled */
+          dumpeasysrc(config);
+        }
 #endif
       }
       else
index 1d5c1a9..c54fe3f 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index abf9496..b43dc95 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -29,6 +29,7 @@
 
 #include "tool_cfgable.h"
 #include "tool_convert.h"
+#include "tool_doswin.h"
 #include "tool_operhlp.h"
 #include "tool_metalink.h"
 
@@ -128,7 +129,7 @@ char *add_file_name_to_url(CURL *curl, char *url, const char *filename)
  */
 CURLcode get_url_file_name(char **filename, const char *url)
 {
-  const char *pc;
+  const char *pc, *pc2;
 
   *filename = NULL;
 
@@ -138,7 +139,11 @@ CURLcode get_url_file_name(char **filename, const char *url)
     pc += 3;
   else
     pc = url;
+
+  pc2 = strrchr(pc, '\\');
   pc = strrchr(pc, '/');
+  if(pc2 && (!pc || pc < pc2))
+    pc = pc2;
 
   if(pc)
     /* duplicate the string beyond the slash */
@@ -151,6 +156,17 @@ CURLcode get_url_file_name(char **filename, const char *url)
   if(!*filename)
     return CURLE_OUT_OF_MEMORY;
 
+#if defined(MSDOS) || defined(WIN32)
+  {
+    char *sanitized;
+    SANITIZEcode sc = sanitize_file_name(&sanitized, *filename, 0);
+    Curl_safefree(*filename);
+    if(sc)
+      return CURLE_URL_MALFORMAT;
+    *filename = sanitized;
+  }
+#endif /* MSDOS || WIN32 */
+
   /* in case we built debug enabled, we allow an environment variable
    * named CURL_TESTDIR to prefix the given file name to put it into a
    * specific directory
index 8fcaad6..446c560 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index d8718e3..14e1e05 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 50b15d2..9d64418 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 0e05184..f2e68da 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -331,7 +331,7 @@ long proto2num(struct OperationConfig *config, long *val, const char *str)
          if no protocols are allowed */
       if(action == set)
         *val = 0;
-      warnf(config, "unrecognized protocol '%s'\n", token);
+      warnf(config->global, "unrecognized protocol '%s'\n", token);
     }
   }
   Curl_safefree(buffer);
@@ -339,6 +339,27 @@ long proto2num(struct OperationConfig *config, long *val, const char *str)
 }
 
 /**
+ * Check if the given string is a protocol supported by libcurl
+ *
+ * @param str  the protocol name
+ * @return PARAM_OK  protocol supported
+ * @return PARAM_LIBCURL_UNSUPPORTED_PROTOCOL  protocol not supported
+ * @return PARAM_REQUIRES_PARAMETER   missing parameter
+ */
+int check_protocol(const char *str)
+{
+  const char * const *pp;
+  const curl_version_info_data *curlinfo = curl_version_info(CURLVERSION_NOW);
+  if(!str)
+    return PARAM_REQUIRES_PARAMETER;
+  for(pp = curlinfo->protocols; *pp; pp++) {
+    if(curlx_raw_equal(*pp, str))
+      return PARAM_OK;
+  }
+  return PARAM_LIBCURL_UNSUPPORTED_PROTOCOL;
+}
+
+/**
  * Parses the given string looking for an offset (which may be a
  * larger-than-integer value). The offset CANNOT be negative!
  *
@@ -405,7 +426,7 @@ static CURLcode checkpasswd(const char *kind, /* for what purpose */
       curlx_msnprintf(prompt, sizeof(prompt),
                       "Enter %s password for user '%s' on URL #%"
                       CURL_FORMAT_CURL_OFF_TU ":",
-                      kind, *userpwd, i + 1);
+                      kind, *userpwd, (curl_off_t) (i + 1));
 
     /* get password */
     getpass_r(prompt, passwd, sizeof(passwd));
@@ -449,7 +470,10 @@ int ftpfilemethod(struct OperationConfig *config, const char *str)
     return CURLFTPMETHOD_NOCWD;
   if(curlx_raw_equal("multicwd", str))
     return CURLFTPMETHOD_MULTICWD;
-  warnf(config, "unrecognized ftp file method '%s', using default\n", str);
+
+  warnf(config->global, "unrecognized ftp file method '%s', using default\n",
+        str);
+
   return CURLFTPMETHOD_MULTICWD;
 }
 
@@ -459,7 +483,10 @@ int ftpcccmethod(struct OperationConfig *config, const char *str)
     return CURLFTPSSL_CCC_PASSIVE;
   if(curlx_raw_equal("active", str))
     return CURLFTPSSL_CCC_ACTIVE;
-  warnf(config, "unrecognized ftp CCC method '%s', using default\n", str);
+
+  warnf(config->global, "unrecognized ftp CCC method '%s', using default\n",
+        str);
+
   return CURLFTPSSL_CCC_PASSIVE;
 }
 
@@ -471,7 +498,10 @@ long delegation(struct OperationConfig *config, char *str)
     return CURLGSSAPI_DELEGATION_POLICY_FLAG;
   if(curlx_raw_equal("always", str))
     return CURLGSSAPI_DELEGATION_FLAG;
-  warnf(config, "unrecognized delegation method '%s', using none\n", str);
+
+  warnf(config->global, "unrecognized delegation method '%s', using none\n",
+        str);
+
   return CURLGSSAPI_DELEGATION_NONE;
 }
 
@@ -489,7 +519,7 @@ CURLcode get_args(struct OperationConfig *config, const size_t i)
   bool last = (config->next ? FALSE : TRUE);
 
   /* Check we have a password for the given host user */
-  if(config->userpwd && !config->xoauth2_bearer) {
+  if(config->userpwd && !config->oauth_bearer) {
     result = checkpasswd("host", i, last, &config->userpwd);
     if(result)
       return result;
index 69d7fd4..89a99b2 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -38,6 +38,8 @@ ParameterError str2udouble(double *val, const char *str);
 
 long proto2num(struct OperationConfig *config, long *val, const char *str);
 
+int check_protocol(const char *str);
+
 ParameterError str2offset(curl_off_t *val, const char *str);
 
 CURLcode get_args(struct OperationConfig *config, const size_t i);
@@ -51,4 +53,3 @@ int ftpcccmethod(struct OperationConfig *config, const char *str);
 long delegation(struct OperationConfig *config, char *str);
 
 #endif /* HEADER_CURL_TOOL_PARAMHLP_H */
-
index c5d390b..d9454c2 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -69,7 +69,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
         /* Check if the file exists - if not, try CURLRC in the same
          * directory as our executable
          */
-        file = fopen(filebuffer, "r");
+        file = fopen(filebuffer, FOPEN_READTEXT);
         if(file != NULL) {
           fclose(file);
           filename = filebuffer;
@@ -114,8 +114,8 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
 #endif
   }
 
-  if(strcmp(filename,"-"))
-    file = fopen(filename, "r");
+  if(strcmp(filename, "-"))
+    file = fopen(filename, FOPEN_READTEXT);
   else
     file = stdin;
 
@@ -187,24 +187,27 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
         param = line; /* parameter starts here */
         while(*line && !ISSPACE(*line))
           line++;
-        *line = '\0'; /* zero terminate */
 
-        /* to detect mistakes better, see if there's data following */
-        line++;
-        /* pass all spaces */
-        while(*line && ISSPACE(*line))
-          line++;
+        if(*line) {
+          *line = '\0'; /* zero terminate */
 
-        switch(*line) {
-        case '\0':
-        case '\r':
-        case '\n':
-        case '#': /* comment */
-          break;
-        default:
-          warnf(operation, "%s:%d: warning: '%s' uses unquoted white space in"
-                " the line that may cause side-effects!\n",
-                filename, lineno, option);
+          /* to detect mistakes better, see if there's data following */
+          line++;
+          /* pass all spaces */
+          while(*line && ISSPACE(*line))
+            line++;
+
+          switch(*line) {
+          case '\0':
+          case '\r':
+          case '\n':
+          case '#': /* comment */
+            break;
+          default:
+            warnf(operation->global, "%s:%d: warning: '%s' uses unquoted "
+                  "white space in the line that may cause side-effects!\n",
+                  filename, lineno, option);
+          }
         }
       }
 
@@ -261,7 +264,7 @@ int parseconfig(const char *filename, struct GlobalConfig *global)
            res != PARAM_VERSION_INFO_REQUESTED &&
            res != PARAM_ENGINES_REQUESTED) {
           const char *reason = param2text(res);
-          warnf(operation, "%s:%d: warning: '%s' %s\n",
+          warnf(operation->global, "%s:%d: warning: '%s' %s\n",
                 filename, lineno, option, reason);
         }
       }
index c3b19d5..b676ec3 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index e74020f..a56390e 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -135,10 +135,8 @@ typedef enum {
   HTTPREQ_UNSPEC,  /* first in list */
   HTTPREQ_GET,
   HTTPREQ_HEAD,
-  HTTPREQ_POST,
-  HTTPREQ_SIMPLEPOST,
-  HTTPREQ_CUSTOM,
-  HTTPREQ_LAST     /* last in list */
+  HTTPREQ_FORMPOST,
+  HTTPREQ_SIMPLEPOST
 } HttpReq;
 
 
index a53fdc8..690ce14 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -70,6 +70,8 @@ const NameValue setopt_nv_CURL_HTTP_VERSION[] = {
   NV(CURL_HTTP_VERSION_NONE),
   NV(CURL_HTTP_VERSION_1_0),
   NV(CURL_HTTP_VERSION_1_1),
+  NV(CURL_HTTP_VERSION_2_0),
+  NV(CURL_HTTP_VERSION_2TLS),
   NVEND,
 };
 
@@ -107,6 +109,12 @@ const NameValue setopt_nv_CURLUSESSL[] = {
   NVEND,
 };
 
+const NameValueUnsigned setopt_nv_CURLSSLOPT[] = {
+  NV(CURLSSLOPT_ALLOW_BEAST),
+  NV(CURLSSLOPT_NO_REVOKE),
+  NVEND,
+};
+
 const NameValue setopt_nv_CURL_NETRC[] = {
   NV(CURL_NETRC_IGNORED),
   NV(CURL_NETRC_OPTIONAL),
@@ -221,7 +229,7 @@ static char *c_escape(const char *str)
       e += 2;
     }
     else if(! isprint(c)) {
-      snprintf(e, 4, "\\%03o", c);
+      snprintf(e, 5, "\\%03o", (unsigned)c);
       e += 4;
     }
     else
@@ -386,11 +394,11 @@ CURLcode tool_setopt_httppost(CURL *curl, struct GlobalConfig *config,
           ret = CURLE_OUT_OF_MEMORY;
           goto nomem;
         }
-        if(pp->flags & HTTPPOST_FILENAME) {
+        if(pp->flags & CURL_HTTPPOST_FILENAME) {
           /* file upload as for -F @filename */
           DATA1("             CURLFORM_FILE, \"%s\",", escaped);
         }
-        else if(pp->flags & HTTPPOST_READFILE) {
+        else if(pp->flags & CURL_HTTPPOST_READFILE) {
           /* content from file as for -F <filename */
           DATA1("             CURLFORM_FILECONTENT, \"%s\",", escaped);
         }
index fcba94c..7cd3875 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -52,6 +52,7 @@ extern const NameValue setopt_nv_CURL_SSLVERSION[];
 extern const NameValue setopt_nv_CURL_TIMECOND[];
 extern const NameValue setopt_nv_CURLFTPSSL_CCC[];
 extern const NameValue setopt_nv_CURLUSESSL[];
+extern const NameValueUnsigned setopt_nv_CURLSSLOPT[];
 extern const NameValue setopt_nv_CURL_NETRC[];
 extern const NameValue setopt_nv_CURLPROTO[];
 extern const NameValueUnsigned setopt_nv_CURLAUTH[];
@@ -63,6 +64,7 @@ extern const NameValueUnsigned setopt_nv_CURLAUTH[];
 #define setopt_nv_CURLOPT_TIMECONDITION setopt_nv_CURL_TIMECOND
 #define setopt_nv_CURLOPT_FTP_SSL_CCC setopt_nv_CURLFTPSSL_CCC
 #define setopt_nv_CURLOPT_USE_SSL setopt_nv_CURLUSESSL
+#define setopt_nv_CURLOPT_SSL_OPTIONS setopt_nv_CURLSSLOPT
 #define setopt_nv_CURLOPT_NETRC setopt_nv_CURL_NETRC
 #define setopt_nv_CURLOPT_PROTOCOLS setopt_nv_CURLPROTO
 #define setopt_nv_CURLOPT_REDIR_PROTOCOLS setopt_nv_CURLPROTO
index 3d7c158..90b01d7 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index d023b32..d878512 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 115a4e4..6c51a93 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 965675c..cb4a1c5 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -39,7 +39,7 @@ char *strdup(const char *str)
   if(!newstr)
     return (char *)NULL;
 
-  memcpy(newstr,str,(len+1)*sizeof(char));
+  memcpy(newstr, str, (len+1)*sizeof(char));
 
   return newstr;
 
index 83c8102..f84b202 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index b6d5591..70d17fe 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
  ***************************************************************************/
 #include "tool_setup.h"
 
-#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
-#include <curl/mprintf.h>
-
+#define ENABLE_CURLX_PRINTF
+/* use our own printf() functions */
+#include "curlx.h"
+#include "tool_cfgable.h"
+#include "tool_doswin.h"
 #include "tool_urlglob.h"
 #include "tool_vms.h"
 
@@ -196,7 +198,7 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
       char *endp;
       unsigned long lstep;
       errno = 0;
-      lstep = strtoul(&pattern[3], &endp, 10);
+      lstep = strtoul(&pattern[4], &endp, 10);
       if(errno || (*endp != ']'))
         step = -1;
       else {
@@ -212,7 +214,7 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
     *posp += (pattern - *patternp);
 
     if((rc != 2) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a')) ||
-       (step < 0) )
+       (step <= 0) )
       /* the pattern is not well-formed */
       return GLOBERROR("bad range", *posp, CURLE_URL_MALFORMAT);
 
@@ -222,7 +224,8 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
     pat->content.CharRange.max_c = max_c;
 
     if(multiply(amount, (pat->content.CharRange.max_c -
-                         pat->content.CharRange.min_c + 1)))
+                          pat->content.CharRange.min_c) /
+                         pat->content.CharRange.step + 1) )
       return GLOBERROR("range overflow", *posp, CURLE_URL_MALFORMAT);
   }
   else if(ISDIGIT(*pattern)) {
@@ -276,7 +279,7 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
 
     *posp += (pattern - *patternp);
 
-    if(!endp || (min_n > max_n) || (step_n > (max_n - min_n)))
+    if(!endp || (min_n > max_n) || (step_n > (max_n - min_n)) || !step_n)
       /* the pattern is not well-formed */
       return GLOBERROR("bad range", *posp, CURLE_URL_MALFORMAT);
 
@@ -287,7 +290,8 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
     pat->content.NumRange.step = step_n;
 
     if(multiply(amount, (pat->content.NumRange.max_n -
-                         pat->content.NumRange.min_n + 1)))
+                         pat->content.NumRange.min_n) /
+                        pat->content.NumRange.step + 1) )
       return GLOBERROR("range overflow", *posp, CURLE_URL_MALFORMAT);
   }
   else
@@ -663,7 +667,20 @@ CURLcode glob_match_url(char **result, char *filename, URLGlob *glob)
     stringlen += appendlen;
   }
   target[stringlen]= '\0';
+
+#if defined(MSDOS) || defined(WIN32)
+  {
+    char *sanitized;
+    SANITIZEcode sc = sanitize_file_name(&sanitized, target,
+                                         (SANITIZE_ALLOW_PATH |
+                                          SANITIZE_ALLOW_RESERVED));
+    Curl_safefree(target);
+    if(sc)
+      return CURLE_URL_MALFORMAT;
+    target = sanitized;
+  }
+#endif /* MSDOS || WIN32 */
+
   *result = target;
   return CURLE_OK;
 }
-
index 7a9ec59..c3be948 100644 (file)
@@ -7,11 +7,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -51,7 +51,7 @@ typedef struct {
       int padlength;
       unsigned long ptr_n;
       unsigned long step;
-    } NumRange ;
+    } NumRange;
   } content;
 } URLPattern;
 
index 6c26414..8af15ff 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index d8bb036..8f72d62 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3627edc..39501f8 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -25,7 +25,7 @@
 
 #define CURL_NAME "curl"
 #define CURL_COPYRIGHT LIBCURL_COPYRIGHT
-#define CURL_VERSION "7.40.0"
+#define CURL_VERSION "7.48.0"
 #define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
 #define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
 #define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
index 4a6a6f5..de08627 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 1afd75e..6656a59 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index a9462d0..c1bfcbe 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #  include <kernel.h>
 #endif
 
-#define _MPRINTF_REPLACE /* use our functions only */
 #include <curl/mprintf.h>
-
 #include "tool_writeenv.h"
-
 #include "memdebug.h" /* keep this as LAST include */
 
 static const struct
index c0a952f..55daf48 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index f29d1ac..414fcbe 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
  *
  ***************************************************************************/
 #include "tool_setup.h"
-
-#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
-#include <curl/mprintf.h>
-
+#define ENABLE_CURLX_PRINTF
+/* use our own printf() functions */
+#include "curlx.h"
 #include "tool_cfgable.h"
 #include "tool_writeout.h"
 
index 4dd3a75..8d3f645 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index da0cad6..f49fd57 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 3f8f585..56bd9e4 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
diff --git a/test-driver b/test-driver
new file mode 100755 (executable)
index 0000000..8e575b0
--- /dev/null
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2014 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, see <http://www.gnu.org/licenses/>.
+
+# 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>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='\e[0;31m' # Red.
+  grn='\e[0;32m' # Green.
+  lgn='\e[1;32m' # Light green.
+  blu='\e[1;34m' # Blue.
+  mgn='\e[0;35m' # Magenta.
+  std='\e[m'     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# 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-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
index c234c22..a8e74b3 100644 (file)
@@ -122,7 +122,7 @@ 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
+   when a file is transferred
 RETRNOSIZE
  - Make sure the RETR response doesn't contain the size of the file
 NOSAVE
@@ -211,26 +211,28 @@ crypto
 debug
 getrlimit
 GnuTLS
+GSS-API
+http2
 idn
 ipv6
+Kerberos
 large_file
 libz
 Metalink
 NSS
 NTLM
 OpenSSL
+PSL
 socks
+SPNEGO
 SSL
 SSLpinning
+SSPI
 TLS-SRP
 TrackMemory
 unittest
-http2
-SSPI
-GSS-API
-Kerberos
-SPNEGO
 unix-sockets
+WinSSL
 
 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
@@ -290,7 +292,7 @@ If there's no test number found above, the HTTP test server will use the
 number following the last dot in the given hostname (made so that a CONNECT
 can still pass on test number) so that "foo.bar.123" gets treated as test case
 123. Alternatively, if an IPv6 address is provided to CONNECT, the last
-hexadecimal group in the address will be used as the test numer! For example
+hexadecimal group in the address will be used as the test number! For example
 the address "[1234::ff]" would be treated as test case 255.
 
 Set type="perl" to write the test case as a perl script. It implies that
@@ -340,7 +342,7 @@ Available substitute variables include:
 %HTTPTLSPORT  - Port number of the HTTP TLS server
 %IMAP6PORT - IPv6 port number of the IMAP server
 %IMAPPORT  - Port number of the IMAP server
-%POP36PORT - IPv6 ort number of the POP3 server
+%POP36PORT - IPv6 port number of the POP3 server
 %POP3PORT  - Port number of the POP3 server
 %PROXYPORT - Port number of the HTTP proxy
 %PWD       - Current directory
index ca69709..942ab8f 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -27,7 +27,7 @@ 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) \
  serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl \
- CMakeLists.txt mem-include-scan.pl valgrind.supp http_pipe.py
+ CMakeLists.txt mem-include-scan.pl valgrind.supp http_pipe.py extern-scan.pl
 
 DISTCLEANFILES = configurehelp.pm
 
index c97f116..f4dbfdf 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -25,7 +25,7 @@
 #
 # 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.
+# are also available at https://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
 #
 ###########################################################################
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -100,8 +110,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = tests
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs README
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -122,7 +130,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -181,6 +190,7 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -264,7 +274,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -284,6 +294,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -317,6 +328,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -328,17 +340,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -384,6 +397,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -399,7 +413,7 @@ 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) \
  serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl \
- CMakeLists.txt mem-include-scan.pl valgrind.supp http_pipe.py
+ CMakeLists.txt mem-include-scan.pl valgrind.supp http_pipe.py extern-scan.pl
 
 DISTCLEANFILES = configurehelp.pm
 @BUILD_UNITTESTS_FALSE@BUILD_UNIT = 
@@ -437,7 +451,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -734,6 +747,8 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 curl:
        @cd $(top_builddir) && $(MAKE)
index a8b8adc..ae8ff25 100644 (file)
@@ -100,7 +100,9 @@ The cURL Test Suite
   (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).
+  numbers found in the files data/DISABLED or data/DISABLED.local (one per
+  line). The latter is meant for local temporary disables and will be ignored
+  by git.
 
   When -s is not present, each successful test will display on one line the
   test number and description and on the next line a set of flags, the test
@@ -203,25 +205,26 @@ The cURL Test Suite
  2.1 Test case numbering
 
      1   -  99   HTTP
-     100 - 199   FTP*
-     200 - 299   FILE*
+     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 - 1299 miscellaneous*
-     1300 - 1399 unit tests*
-     1400 - 1499 miscellaneous*
+     800 - 849   IMAP
+     850 - 899   POP3
+     900 - 999   SMTP
+     1000 - 1299 miscellaneous
+     1300 - 1399 unit tests
+     1400 - 1499 miscellaneous
      1500 - 1599 libcurl source code tests, not using the curl command tool
                  (same as 5xx)
-     2000 - x    multiple sequential protocols per test case*
+     1600 - 1699 unit tests
+     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.
+  There's nothing in the system that *requires* us to keep within these number
+  series.
 
 3. Write tests
 
index 8bcbc18..d3ec4d3 100644 (file)
@@ -1,42 +1,41 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:94:f5:ab:a6
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311616 (0xcfa60bc5140)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:36:46 2010 GMT
-            Not After : Oct 30 21:36:46 2026 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Aug 24 15:07:11 2031 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern 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
+                    00:e1:4c:d9:74:1a:a4:a3:42:57:a4:7a:2e:74:02:
+                    08:49:6a:6a:1d:db:de:c3:43:d6:48:60:12:30:ed:
+                    d6:6e:74:16:81:16:4e:50:b9:6c:b9:36:0d:19:a4:
+                    f7:85:99:40:46:26:46:33:86:ce:0c:27:71:e4:8f:
+                    0f:b4:3a:99:6d:af:78:48:b7:cb:c4:d3:60:7d:d0:
+                    17:6f:23:bc:89:c0:bc:16:b8:94:f0:b2:10:8d:c8:
+                    e0:35:97:ed:8f:c6:db:9b:cd:aa:f6:8c:45:dc:0f:
+                    ee:a0:78:12:be:f6:7d:f4:f7:b6:8c:4e:e5:7d:32:
+                    e8:f7:f7:1e:04:46:9e:08:cd:cb:ec:e2:9a:c3:35:
+                    3f:ce:a1:01:e3:10:0a:ec:d9:ab:13:09:eb:e6:39:
+                    6b:92:30:c7:08:bd:8a:32:ef:0b:b2:61:6f:11:43:
+                    95:cf:31:ea:19:01:cc:1a:6d:d2:d5:57:35:da:c0:
+                    ae:46:39:d3:33:ed:f8:c0:1e:ad:3d:68:6f:a8:53:
+                    24:ac:d6:f9:dd:2b:51:50:77:e4:b7:5d:ad:48:80:
+                    5d:65:57:e5:eb:07:82:7d:cb:72:4f:06:6a:34:d4:
+                    38:c8:6b:ed:8a:3a:68:5e:35:e3:78:14:da:5d:86:
+                    9f:e5:d4:1c:dd:90:c2:7c:a2:00:d4:95:65:04:85:
+                    ff:83
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -44,42 +43,42 @@ Certificate:
             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
+                12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
     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
+         d4:d0:22:19:78:2e:2e:1d:83:c6:79:89:c1:a8:23:43:4e:86:
+         76:16:31:bd:b7:c0:44:2c:b9:2c:79:99:2f:02:48:33:1e:a7:
+         d7:0e:d9:f1:cb:ed:39:1a:34:b3:50:af:c9:8d:64:bf:ff:72:
+         1b:1d:e0:5d:40:3b:b5:00:7c:d1:78:ff:45:ee:d9:05:3f:32:
+         f6:cd:f4:d3:79:58:d8:44:94:65:f5:c3:a9:5d:d8:13:d9:57:
+         e7:13:18:fa:f3:72:0b:cf:a3:4a:f4:6e:5e:74:30:3c:cb:76:
+         28:f9:44:9a:ba:3e:b7:3e:01:79:3e:cb:5c:df:5a:d4:6c:34:
+         aa:bd:c0:6d:25:85:e5:28:f6:15:e1:9d:af:a7:f7:a7:6c:2a:
+         1d:1d:93:1e:89:71:66:c7:0b:e4:ce:36:c1:21:c4:73:5d:2b:
+         24:a9:3d:26:df:1c:e8:60:69:e3:82:98:c3:5b:91:9e:da:bd:
+         27:ee:e0:fd:64:ea:7d:35:91:fd:5e:1e:33:82:24:39:7b:49:
+         af:23:05:fc:6e:53:7e:07:69:f4:e7:e3:1f:f0:1c:59:87:4c:
+         b6:74:c9:60:ed:f5:ab:a0:31:8a:05:d4:64:9f:1e:16:b6:9f:
+         f8:7e:0d:ac:b7:d9:16:b9:b3:bc:0b:03:6b:24:e9:46:81:dc:
+         d8:52:63:75
 -----BEGIN CERTIFICATE-----
-MIIDkDCCAnigAwIBAgIGC5iU9aumMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDkjCCAnqgAwIBAgIGDPpgvFFAMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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==
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0zMTA4MjQxNTA3MTFaMGgxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOFM2XQapKNCV6R6LnQCCElqah3b3sND
+1khgEjDt1m50FoEWTlC5bLk2DRmk94WZQEYmRjOGzgwnceSPD7Q6mW2veEi3y8TT
+YH3QF28jvInAvBa4lPCyEI3I4DWX7Y/G25vNqvaMRdwP7qB4Er72ffT3toxO5X0y
+6Pf3HgRGngjNy+zimsM1P86hAeMQCuzZqxMJ6+Y5a5Iwxwi9ijLvC7JhbxFDlc8x
+6hkBzBpt0tVXNdrArkY50zPt+MAerT1ob6hTJKzW+d0rUVB35LddrUiAXWVX5esH
+gn3Lck8GajTUOMhr7Yo6aF4143gU2l2Gn+XUHN2QwnyiANSVZQSF/4MCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLK
+uktGBKd1iizoDlSUvBJlpnvOMA0GCSqGSIb3DQEBBQUAA4IBAQDU0CIZeC4uHYPG
+eYnBqCNDToZ2FjG9t8BELLkseZkvAkgzHqfXDtnxy+05GjSzUK/JjWS//3IbHeBd
+QDu1AHzReP9F7tkFPzL2zfTTeVjYRJRl9cOpXdgT2VfnExj683ILz6NK9G5edDA8
+y3Yo+USauj63PgF5Pstc31rUbDSqvcBtJYXlKPYV4Z2vp/enbCodHZMeiXFmxwvk
+zjbBIcRzXSskqT0m3xzoYGnjgpjDW5Ge2r0n7uD9ZOp9NZH9Xh4zgiQ5e0mvIwX8
+blN+B2n05+Mf8BxZh0y2dMlg7fWroDGKBdRknx4Wtp/4fg2st9kWubO8CwNrJOlG
+gdzYUmN1
 -----END CERTIFICATE-----
index 8bcbc18..d3ec4d3 100644 (file)
@@ -1,42 +1,41 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:94:f5:ab:a6
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311616 (0xcfa60bc5140)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:36:46 2010 GMT
-            Not After : Oct 30 21:36:46 2026 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Aug 24 15:07:11 2031 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern 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
+                    00:e1:4c:d9:74:1a:a4:a3:42:57:a4:7a:2e:74:02:
+                    08:49:6a:6a:1d:db:de:c3:43:d6:48:60:12:30:ed:
+                    d6:6e:74:16:81:16:4e:50:b9:6c:b9:36:0d:19:a4:
+                    f7:85:99:40:46:26:46:33:86:ce:0c:27:71:e4:8f:
+                    0f:b4:3a:99:6d:af:78:48:b7:cb:c4:d3:60:7d:d0:
+                    17:6f:23:bc:89:c0:bc:16:b8:94:f0:b2:10:8d:c8:
+                    e0:35:97:ed:8f:c6:db:9b:cd:aa:f6:8c:45:dc:0f:
+                    ee:a0:78:12:be:f6:7d:f4:f7:b6:8c:4e:e5:7d:32:
+                    e8:f7:f7:1e:04:46:9e:08:cd:cb:ec:e2:9a:c3:35:
+                    3f:ce:a1:01:e3:10:0a:ec:d9:ab:13:09:eb:e6:39:
+                    6b:92:30:c7:08:bd:8a:32:ef:0b:b2:61:6f:11:43:
+                    95:cf:31:ea:19:01:cc:1a:6d:d2:d5:57:35:da:c0:
+                    ae:46:39:d3:33:ed:f8:c0:1e:ad:3d:68:6f:a8:53:
+                    24:ac:d6:f9:dd:2b:51:50:77:e4:b7:5d:ad:48:80:
+                    5d:65:57:e5:eb:07:82:7d:cb:72:4f:06:6a:34:d4:
+                    38:c8:6b:ed:8a:3a:68:5e:35:e3:78:14:da:5d:86:
+                    9f:e5:d4:1c:dd:90:c2:7c:a2:00:d4:95:65:04:85:
+                    ff:83
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Basic Constraints: critical
@@ -44,42 +43,42 @@ Certificate:
             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
+                12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
     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
+         d4:d0:22:19:78:2e:2e:1d:83:c6:79:89:c1:a8:23:43:4e:86:
+         76:16:31:bd:b7:c0:44:2c:b9:2c:79:99:2f:02:48:33:1e:a7:
+         d7:0e:d9:f1:cb:ed:39:1a:34:b3:50:af:c9:8d:64:bf:ff:72:
+         1b:1d:e0:5d:40:3b:b5:00:7c:d1:78:ff:45:ee:d9:05:3f:32:
+         f6:cd:f4:d3:79:58:d8:44:94:65:f5:c3:a9:5d:d8:13:d9:57:
+         e7:13:18:fa:f3:72:0b:cf:a3:4a:f4:6e:5e:74:30:3c:cb:76:
+         28:f9:44:9a:ba:3e:b7:3e:01:79:3e:cb:5c:df:5a:d4:6c:34:
+         aa:bd:c0:6d:25:85:e5:28:f6:15:e1:9d:af:a7:f7:a7:6c:2a:
+         1d:1d:93:1e:89:71:66:c7:0b:e4:ce:36:c1:21:c4:73:5d:2b:
+         24:a9:3d:26:df:1c:e8:60:69:e3:82:98:c3:5b:91:9e:da:bd:
+         27:ee:e0:fd:64:ea:7d:35:91:fd:5e:1e:33:82:24:39:7b:49:
+         af:23:05:fc:6e:53:7e:07:69:f4:e7:e3:1f:f0:1c:59:87:4c:
+         b6:74:c9:60:ed:f5:ab:a0:31:8a:05:d4:64:9f:1e:16:b6:9f:
+         f8:7e:0d:ac:b7:d9:16:b9:b3:bc:0b:03:6b:24:e9:46:81:dc:
+         d8:52:63:75
 -----BEGIN CERTIFICATE-----
-MIIDkDCCAnigAwIBAgIGC5iU9aumMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDkjCCAnqgAwIBAgIGDPpgvFFAMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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==
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0zMTA4MjQxNTA3MTFaMGgxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOFM2XQapKNCV6R6LnQCCElqah3b3sND
+1khgEjDt1m50FoEWTlC5bLk2DRmk94WZQEYmRjOGzgwnceSPD7Q6mW2veEi3y8TT
+YH3QF28jvInAvBa4lPCyEI3I4DWX7Y/G25vNqvaMRdwP7qB4Er72ffT3toxO5X0y
+6Pf3HgRGngjNy+zimsM1P86hAeMQCuzZqxMJ6+Y5a5Iwxwi9ijLvC7JhbxFDlc8x
+6hkBzBpt0tVXNdrArkY50zPt+MAerT1ob6hTJKzW+d0rUVB35LddrUiAXWVX5esH
+gn3Lck8GajTUOMhr7Yo6aF4143gU2l2Gn+XUHN2QwnyiANSVZQSF/4MCAwEAAaNC
+MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLK
+uktGBKd1iizoDlSUvBJlpnvOMA0GCSqGSIb3DQEBBQUAA4IBAQDU0CIZeC4uHYPG
+eYnBqCNDToZ2FjG9t8BELLkseZkvAkgzHqfXDtnxy+05GjSzUK/JjWS//3IbHeBd
+QDu1AHzReP9F7tkFPzL2zfTTeVjYRJRl9cOpXdgT2VfnExj683ILz6NK9G5edDA8
+y3Yo+USauj63PgF5Pstc31rUbDSqvcBtJYXlKPYV4Z2vp/enbCodHZMeiXFmxwvk
+zjbBIcRzXSskqT0m3xzoYGnjgpjDW5Ge2r0n7uD9ZOp9NZH9Xh4zgiQ5e0mvIwX8
+blN+B2n05+Mf8BxZh0y2dMlg7fWroDGKBdRknx4Wtp/4fg2st9kWubO8CwNrJOlG
+gdzYUmN1
 -----END CERTIFICATE-----
index 2df94f5..7d5e300 100644 (file)
@@ -1,17 +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==
+MIICrTCCAZUCAQAwaDELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
+cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAkBgNVBAMMHU5vcnRoZXJu
+IE5vd2hlcmUgVHJ1c3QgQW5jaG9yMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
+CgKCAQEA4UzZdBqko0JXpHoudAIISWpqHdvew0PWSGASMO3WbnQWgRZOULlsuTYN
+GaT3hZlARiZGM4bODCdx5I8PtDqZba94SLfLxNNgfdAXbyO8icC8FriU8LIQjcjg
+NZftj8bbm82q9oxF3A/uoHgSvvZ99Pe2jE7lfTLo9/ceBEaeCM3L7OKawzU/zqEB
+4xAK7NmrEwnr5jlrkjDHCL2KMu8LsmFvEUOVzzHqGQHMGm3S1Vc12sCuRjnTM+34
+wB6tPWhvqFMkrNb53StRUHfkt12tSIBdZVfl6weCfctyTwZqNNQ4yGvtijpoXjXj
+eBTaXYaf5dQc3ZDCfKIA1JVlBIX/gwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEB
+ANpolqnyNQ2zhqURf1ImBOTKLqN77neGe01rdkMrQfNP+ZSr5pxcoOZgMjUGrhyQ
+C6RWexcjwMFvr+16bsEyiBgw/PxTziw6ozvJZkDVQanKZet9+6o8P6AzfjOfwIiU
+8OkLYDaNJ0M807fTNFWdt/yDY1WNfNAxIX3gMMJ1dRvvLvgIJVE4RRAaW/pEMHky
+sQTfExs99Xooqh3E6CWyR1bVHWuid0a02LcD2Q0bKTBmi3xyBjEaq3vXxS6j1fDs
+aWpwznwuuX+J7K+MHYJH9DQIg/QY6rQzxokZ92wJGFdzL3m+kou6++OAPu1plpTL
+im5n/e87gdjerEJgCqoP4S8=
 -----END CERTIFICATE REQUEST-----
index 1eaf424..3f4ec7b 100644 (file)
Binary files a/tests/certs/EdelCurlRoot-ca.der and b/tests/certs/EdelCurlRoot-ca.der differ
index 9a1303a..bf46d1e 100644 (file)
@@ -1,27 +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
+MIIEpAIBAAKCAQEA4UzZdBqko0JXpHoudAIISWpqHdvew0PWSGASMO3WbnQWgRZO
+ULlsuTYNGaT3hZlARiZGM4bODCdx5I8PtDqZba94SLfLxNNgfdAXbyO8icC8FriU
+8LIQjcjgNZftj8bbm82q9oxF3A/uoHgSvvZ99Pe2jE7lfTLo9/ceBEaeCM3L7OKa
+wzU/zqEB4xAK7NmrEwnr5jlrkjDHCL2KMu8LsmFvEUOVzzHqGQHMGm3S1Vc12sCu
+RjnTM+34wB6tPWhvqFMkrNb53StRUHfkt12tSIBdZVfl6weCfctyTwZqNNQ4yGvt
+ijpoXjXjeBTaXYaf5dQc3ZDCfKIA1JVlBIX/gwIDAQABAoIBAQDGGcWGgjrLVnUr
+qUcZOARDUW9XK9IWjZpn7xlvrmECo8552Lwp3LDNtcoVB2mhLhxG0jad7eVU6IYL
+ewNK7M+lk0lHX1yrh1Trq0I/tgN8eFyp+cj0Tw2hLcR/O0RmTGsi9tdhi/uNQPEI
+ZivNf31HHVyEyIae7FnOVpotFk6022EElQd8F8GeeKpo9pQs8sHAVOUVC8Mf2sr+
+bFyo9nzU0XkSay72ozU9O5Iw2d5aVrN5f3NS+JG9OpzvouNwkaAMOUsLVvZlUTqY
+0ve5CY2rB3D72h4GJfM2aHi8hwj56yBOsyIhBSXNYJM8nXKEbJaK5ulVv/a7KKTk
+KzSdk/mJAoGBAPXPLLJgx0mZKXNXqSvSsvgVzcpLrJh8figoF4rMzq8+5bN9Y6KU
+Lvb2ODIm/oGCIiGDdFTYqBJ0/EpauaAJgdzIwYnMZXmVB97pmwni9KrDPDwWTOqS
+3Yzh0t4C8DAgwZE4X6Ad/fmn7V06dfJZZJynL9exPp8RF7ptJ2yOnlbdAoGBAOqk
+AfRWuPGeZL9rFkd45+j03MDHglE2xKhsbRobHANItHo7r26D/Ov7QkM+lGlqdrNg
+tTPPtHs50Ek+Sb0X31/Fj45IqQroxctpbZAaJchVl88tvKXA8fkk14a9GLiow3Bk
+UGA5DFRmsIMXEengzRJoxcHAbbciGWdeSneH49nfAoGAVMypHcyXU8Ob8ieuu+iP
+R1i2SvC6VUy1dQMHxCGNuBVZxwcd5Ut7vEUK8/pR2LndLnScIF0x9lQXaUtNOHGv
+NEypv/EcnMoWEgfDLbD3OSXrVMtYs6ABAIYzadXXqLLUNFYfXyyZnpQZJg1x/S5r
+sENZFO8XrGaIKg9YB3JYG50CgYBUQweMpmQOKNKHRz6d9hZaOyzXcg4jeiaPUTiw
+6lFaAI8HYk2yw2VdnUKDgYKshJYR/sWz0IBAzFc3Jk42wM7vxrOx5fgGuebmEHtP
+B4TP96TnusYHRE3hKdDYSyoIjlp5Dx0qIPKDkMkMmolNUvRyCvwRgzgjTvSOgXb+
+i+dQQwKBgQCKn04xYbhkMOiHxNP/DUf6+XmV1V7KbpjIySychbxcTKCV98c9q491
+YjF8FJgi2JdV5XOHWaKti2Qg/tYz7CBtqkQdeNjtfKkOUA8ZyZeiNZdPIza9tzmr
+t6mCthH1oT3jyiddhSYxyfUBW3olPhBPj8YBblmq1QHE8y2j3CNjvw==
 -----END RSA PRIVATE KEY-----
index 4c53ef5..d0eff48 100644 (file)
@@ -10,7 +10,7 @@ countryName_value            = NN
 organizationName              = "Organization Name"
 organizationName_value     = Edel Curl Arctic Illudium Research Cloud
 commonName                      = "Common Name"
-commonName_value              = Nothern Nowhere Trust Anchor 
+commonName_value              = Northern Nowhere Trust Anchor
 [ x509v3 ]
 basicConstraints = critical,CA:true
 keyUsage        = critical,keyCertSign,cRLSign
index ddb5c9f..7e7f1fa 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -23,23 +23,26 @@ AUTOMAKE_OPTIONS = foreign
 
 SUBDIRS = scripts
 
-CERTFILES = \
-  EdelCurlRoot-ca.cacert \
+CERTCONFIGS = \
+  EdelCurlRoot-ca.prm \
   EdelCurlRoot-ca.cnf \
+  Server-localhost-sv.prm \
+  Server-localhost.nn-sv.prm \
+  Server-localhost0h-sv.prm
+
+GENERATEDCERTS = \
+  EdelCurlRoot-ca.cacert \
   EdelCurlRoot-ca.crt \
   EdelCurlRoot-ca.csr \
   EdelCurlRoot-ca.der \
   EdelCurlRoot-ca.key \
-  EdelCurlRoot-ca.prm \
   Server-localhost-sv.crl \
   Server-localhost-sv.crt \
   Server-localhost-sv.csr \
   Server-localhost-sv.der \
   Server-localhost-sv.dhp \
   Server-localhost-sv.key \
-  Server-localhost-sv.p12 \
   Server-localhost-sv.pem \
-  Server-localhost-sv.prm \
   Server-localhost-sv.pub.der \
   Server-localhost-sv.pub.pem \
   Server-localhost.nn-sv.crl \
@@ -49,7 +52,6 @@ CERTFILES = \
   Server-localhost.nn-sv.dhp \
   Server-localhost.nn-sv.key \
   Server-localhost.nn-sv.pem \
-  Server-localhost.nn-sv.prm \
   Server-localhost.nn-sv.pub.der \
   Server-localhost.nn-sv.pub.pem \
   Server-localhost0h-sv.crl \
@@ -58,9 +60,7 @@ CERTFILES = \
   Server-localhost0h-sv.der \
   Server-localhost0h-sv.dhp \
   Server-localhost0h-sv.key \
-  Server-localhost0h-sv.p12 \
   Server-localhost0h-sv.pem \
-  Server-localhost0h-sv.prm \
   Server-localhost0h-sv.pub.der \
   Server-localhost0h-sv.pub.pem
 
@@ -68,5 +68,24 @@ SRPFILES = \
   srp-verifier-conf \
   srp-verifier-db
 
-EXTRA_DIST = $(CERTFILES) $(SRPFILES)
+EXTRA_DIST = $(CERTCONFIGS) $(GENERATEDCERTS) $(SRPFILES)
+
+# Rebuild the certificates
+
+clean-certs:
+       cd $(srcdir); rm -f $(GENERATEDCERTS)
+
+build-certs: $(srcdir)/EdelCurlRoot-ca.cacert $(srcdir)/Server-localhost-sv.pem \
+       $(srcdir)/Server-localhost.nn-sv.pem $(srcdir)/Server-localhost0h-sv.pem
+
+$(srcdir)/EdelCurlRoot-ca.cacert:
+       cd $(srcdir); scripts/genroot.sh EdelCurlRoot
+
+$(srcdir)/Server-localhost-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+       cd $(srcdir); scripts/genserv.sh Server-localhost EdelCurlRoot
+
+$(srcdir)/Server-localhost.nn-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+       cd $(srcdir); scripts/genserv.sh Server-localhost.nn EdelCurlRoot
 
+$(srcdir)/Server-localhost0h-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+       cd $(srcdir); scripts/genserv.sh Server-localhost0h EdelCurlRoot
index 0610cae..140bf3c 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = tests/certs
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -160,6 +169,7 @@ am__define_uniq_tagged_files = \
 ETAGS = etags
 CTAGS = ctags
 DIST_SUBDIRS = $(SUBDIRS)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 am__relativize = \
   dir0=`pwd`; \
@@ -243,7 +253,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -263,6 +273,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -296,6 +307,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -307,17 +319,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -363,6 +376,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -384,7 +398,7 @@ top_srcdir = @top_srcdir@
 #
 # 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.
+# are also available at https://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
@@ -396,23 +410,26 @@ top_srcdir = @top_srcdir@
 ###########################################################################
 AUTOMAKE_OPTIONS = foreign
 SUBDIRS = scripts
-CERTFILES = \
-  EdelCurlRoot-ca.cacert \
+CERTCONFIGS = \
+  EdelCurlRoot-ca.prm \
   EdelCurlRoot-ca.cnf \
+  Server-localhost-sv.prm \
+  Server-localhost.nn-sv.prm \
+  Server-localhost0h-sv.prm
+
+GENERATEDCERTS = \
+  EdelCurlRoot-ca.cacert \
   EdelCurlRoot-ca.crt \
   EdelCurlRoot-ca.csr \
   EdelCurlRoot-ca.der \
   EdelCurlRoot-ca.key \
-  EdelCurlRoot-ca.prm \
   Server-localhost-sv.crl \
   Server-localhost-sv.crt \
   Server-localhost-sv.csr \
   Server-localhost-sv.der \
   Server-localhost-sv.dhp \
   Server-localhost-sv.key \
-  Server-localhost-sv.p12 \
   Server-localhost-sv.pem \
-  Server-localhost-sv.prm \
   Server-localhost-sv.pub.der \
   Server-localhost-sv.pub.pem \
   Server-localhost.nn-sv.crl \
@@ -422,7 +439,6 @@ CERTFILES = \
   Server-localhost.nn-sv.dhp \
   Server-localhost.nn-sv.key \
   Server-localhost.nn-sv.pem \
-  Server-localhost.nn-sv.prm \
   Server-localhost.nn-sv.pub.der \
   Server-localhost.nn-sv.pub.pem \
   Server-localhost0h-sv.crl \
@@ -431,9 +447,7 @@ CERTFILES = \
   Server-localhost0h-sv.der \
   Server-localhost0h-sv.dhp \
   Server-localhost0h-sv.key \
-  Server-localhost0h-sv.p12 \
   Server-localhost0h-sv.pem \
-  Server-localhost0h-sv.prm \
   Server-localhost0h-sv.pub.der \
   Server-localhost0h-sv.pub.pem
 
@@ -441,7 +455,7 @@ SRPFILES = \
   srp-verifier-conf \
   srp-verifier-db
 
-EXTRA_DIST = $(CERTFILES) $(SRPFILES)
+EXTRA_DIST = $(CERTCONFIGS) $(GENERATEDCERTS) $(SRPFILES)
 all: all-recursive
 
 .SUFFIXES:
@@ -457,7 +471,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/certs/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/certs/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -752,6 +765,28 @@ uninstall-am:
        mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
        ps ps-am tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
+
+# Rebuild the certificates
+
+clean-certs:
+       cd $(srcdir); rm -f $(GENERATEDCERTS)
+
+build-certs: $(srcdir)/EdelCurlRoot-ca.cacert $(srcdir)/Server-localhost-sv.pem \
+       $(srcdir)/Server-localhost.nn-sv.pem $(srcdir)/Server-localhost0h-sv.pem
+
+$(srcdir)/EdelCurlRoot-ca.cacert:
+       cd $(srcdir); scripts/genroot.sh EdelCurlRoot
+
+$(srcdir)/Server-localhost-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+       cd $(srcdir); scripts/genserv.sh Server-localhost EdelCurlRoot
+
+$(srcdir)/Server-localhost.nn-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+       cd $(srcdir); scripts/genserv.sh Server-localhost.nn EdelCurlRoot
+
+$(srcdir)/Server-localhost0h-sv.pem: $(srcdir)/EdelCurlRoot-ca.cacert
+       cd $(srcdir); scripts/genserv.sh Server-localhost0h EdelCurlRoot
 
 # 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.
index 804655d..3e75229 100644 (file)
@@ -1,12 +1,21 @@
 -----BEGIN X509 CRL-----
-MIIB2zCBxAIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJOTjExMC8GA1UE
-CgwoRWRlbCBDdXJsIEFyY3RpYyBJbGx1ZGl1bSBSZXNlYXJjaCBDbG91ZDElMCMG
-A1UEAwwcTm90aGVybiBOb3doZXJlIFRydXN0IEFuY2hvchcNMTAwNTI3MjEzNzEx
-WhcNMTAwNjI2MjEzNzExWjAZMBcCBguYlPl8ahcNMTAwNTI3MjEzNzExWqAOMAww
-CgYDVR0UBAMCAQEwDQYJKoZIhvcNAQEFBQADggEBAFuPZJ/cNNCeAzkSxVvPPPRX
-Wsv9T6Dt61C5Fmq9eSNN2kRf7/dq5A5nqTIlHbXXiLdj3UqNhUHXe2oA1UpbdHz9
-0JlfwWm1Y/gMr1fh1n0oFebEtCuOgDRpd07Uiz8AqOUBykDNDUlMvVwR9raHL8hj
-NRwzugsfIxl0CvLLqrBpUWMxW3qemk4cWW39yrDdZgKo6eOZAOR3FQYlLIrw6Jcr
-Kmm0PjdcJIfRgJvNysgyx1dIIKe7QXvFTR/QzdHWIWTkiYIW7wUKSzSICvDCr094
-eo3nr3n9BtOqT61Z1m6FGCP6Mm0wFl6xLTCNd6ygfFo7pcAdWlUsdBgKzics0Kc=
+MIIDbzCCAlcCAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
+BAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAk
+BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0xNTAzMjExNTA3
+MTFaFw0xNTA0MjAxNTA3MTFaMIIBqTAXAgYM+ly45CIXDTE1MDMyMTEzMTQ1N1ow
+FwIGDPpcwXH8Fw0xNTAzMjExMzE1NTNaMBcCBgz6XO7ujBcNMTUwMzIxMTMyMDUx
+WjAXAgYM+lzu7p0XDTE1MDMyMTEzMjA1MVowFwIGDPpc7u6uFw0xNTAzMjExMzIw
+NTFaMBcCBgz6XZyD1RcNMTUwMzIxMTMzOTQ5WjAXAgYM+l4OXa8XDTE1MDMyMTEz
+NTIxNVowFwIGDPpeJlPZFw0xNTAzMjExMzU0NTJaMBcCBgz6XiZT6hcNMTUwMzIx
+MTM1NDUyWjAXAgYM+l4mU/sXDTE1MDMyMTEzNTQ1MlowFwIGDPpemKKEFw0xNTAz
+MjExNDA3MjFaMBcCBgz6XpiilRcNMTUwMzIxMTQwNzIxWjAXAgYM+l6YoqYXDTE1
+MDMyMTE0MDcyMVowFwIGDPpffssxFw0xNTAzMjExNDMyMzBaMBcCBgz6X37yUxcN
+MTUwMzIxMTQzMjMxWjAXAgYM+l9+8mYXDTE1MDMyMTE0MzIzMVowFwIGDPpgvFFL
+Fw0xNTAzMjExNTA3MTFaoA4wDDAKBgNVHRQEAwIBATANBgkqhkiG9w0BAQUFAAOC
+AQEAllslrhWUoq49PC+KQghVDAeFREP3pKPUlSebVVR8PCtCKrFtc53dUaTl8qhK
+1wOLodr80lfr2kEgzTEDt2CfXryl3orLPeMWe0OWTBsPbuwj+d7m3uq4B43laqJn
+JM5ebRvzHWMJkVNkwiXiadPTW5ZMUqu2Bs97rdcjklUrEcamf9aMLqb6sPGtU4EO
+o/GxGW2eypYwncFmzAc5W3NDRePGPhN5rUDfqm5Id4T9FKmGcNmI7qlLQi+jp23F
+V6RvrqANIemopQQ4kYGy7pzilDYm6+R+fPCIh2H/0eqCDY8NdjygXtWW+pJ58axV
+MPZ2mFPcH5UHiqmi8kRstnA8KQ==
 -----END X509 CRL-----
index 9a3d944..abf6924 100644 (file)
@@ -1,16 +1,15 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:94:f9:7c:6a
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311627 (0xcfa60bc514b)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:37:11 2010 GMT
-            Not After : Aug 13 21:37:11 2018 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Jun  7 15:07:11 2023 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
@@ -19,63 +18,63 @@ Certificate:
             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
+                    00:ba:5f:4b:69:74:31:99:4d:f4:b4:b7:2a:65:b8:
+                    b7:31:c1:38:cf:36:37:bb:5e:18:e3:52:1f:52:aa:
+                    5a:25:2f:0c:66:88:32:b0:ef:b2:2c:90:38:5e:6e:
+                    6f:0e:e4:3b:3f:f0:2e:f1:7a:3d:5e:c3:64:86:3f:
+                    68:b7:cf:0b:b3:ea:0a:ca:94:16:d4:2b:6a:02:e3:
+                    a1:b3:c7:d1:d0:06:b8:ff:df:dc:e0:32:2a:e7:dd:
+                    62:cc:71:c4:e8:cf:9d:de:5c:75:69:9d:b6:ce:e2:
+                    42:d8:a7:bd:50:54:78:2d:55:67:7f:00:7b:8f:9c:
+                    11:d1:9e:ce:be:1e:fe:cf:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Alternative Name: 
                 DNS:localhost
             X509v3 Key Usage: 
-                Key Encipherment
+                Digital Signature, Key Encipherment, Key Agreement
             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
+                7E:42:8D:AC:2E:93:AD:4C:E0:09:AC:C6:08:F1:82:E0:B7:B7:C6:7F
             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
+                keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
 
-            X509v3 Basic Constraints: critical
+            X509v3 Basic Constraints: 
                 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
+         00:fe:c4:fc:4b:28:b8:bc:39:8c:6f:f1:72:d3:76:da:28:27:
+         e2:97:94:bb:ad:2f:91:c4:db:df:33:4b:48:4e:97:5b:4c:4c:
+         be:fc:e4:b7:19:5c:b8:83:6e:ef:2c:b0:d5:7c:fc:0d:cb:7e:
+         29:ed:fd:4d:ef:05:1c:89:15:31:78:9b:18:29:d3:37:83:c7:
+         39:f4:78:27:b7:00:75:d1:fb:f0:29:88:79:e4:e9:a7:d4:65:
+         04:bf:d5:a1:dc:05:b2:17:c4:a9:da:61:10:22:5f:8f:50:fc:
+         1f:ab:f6:39:dd:ab:35:a6:94:54:63:5c:6d:25:f0:dc:3a:0a:
+         70:4e:49:ef:be:fa:2c:0a:cd:ce:a6:2d:26:cd:f8:24:89:77:
+         2c:ea:6e:19:b6:5c:8c:1a:08:ea:a8:9f:2c:1b:c7:fc:13:6c:
+         fe:a7:90:08:e5:98:83:30:52:86:ac:83:0b:cb:25:92:21:94:
+         80:13:d7:e8:d0:42:56:83:55:d3:09:9b:e8:c5:96:82:15:64:
+         6b:83:77:eb:99:e5:52:dc:1b:36:29:a0:c9:da:8b:d3:0d:77:
+         24:f2:c3:df:2e:c4:93:e0:34:47:a9:9b:54:d3:75:d5:c7:de:
+         88:a1:ef:7b:40:2f:dc:e9:28:8c:69:be:eb:71:4a:c2:30:50:
+         99:36:52:69
 -----BEGIN CERTIFICATE-----
-MIIDQTCCAimgAwIBAgIGC5iU+XxqMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDPzCCAiegAwIBAgIGDPpgvFFLMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0yMzA2MDcxNTA3MTFaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+ALpfS2l0MZlN9LS3KmW4tzHBOM82N7teGONSH1KqWiUvDGaIMrDvsiyQOF5ubw7k
+Oz/wLvF6PV7DZIY/aLfPC7PqCsqUFtQragLjobPH0dAGuP/f3OAyKufdYsxxxOjP
+nd5cdWmdts7iQtinvVBUeC1VZ38Ae4+cEdGezr4e/s83AgMBAAGjgYYwgYMwFAYD
+VR0RBA0wC4IJbG9jYWxob3N0MAsGA1UdDwQEAwIDqDATBgNVHSUEDDAKBggrBgEF
+BQcDATAdBgNVHQ4EFgQUfkKNrC6TrUzgCazGCPGC4Le3xn8wHwYDVR0jBBgwFoAU
+Esq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOC
+AQEAAP7E/EsouLw5jG/xctN22ign4peUu60vkcTb3zNLSE6XW0xMvvzktxlcuINu
+7yyw1Xz8Dct+Ke39Te8FHIkVMXibGCnTN4PHOfR4J7cAddH78CmIeeTpp9RlBL/V
+odwFshfEqdphECJfj1D8H6v2Od2rNaaUVGNcbSXw3DoKcE5J7776LArNzqYtJs34
+JIl3LOpuGbZcjBoI6qifLBvH/BNs/qeQCOWYgzBShqyDC8slkiGUgBPX6NBCVoNV
+0wmb6MWWghVka4N365nlUtwbNimgydqL0w13JPLD3y7Ek+A0R6mbVNN11cfeiKHv
+e0Av3OkojGm+63FKwjBQmTZSaQ==
 -----END CERTIFICATE-----
index a8773f5..f919409 100644 (file)
@@ -1,11 +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=
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6X0tpdDGZTfS0typluLcxwTjP
+Nje7XhjjUh9SqlolLwxmiDKw77IskDhebm8O5Ds/8C7xej1ew2SGP2i3zwuz6grK
+lBbUK2oC46Gzx9HQBrj/39zgMirn3WLMccToz53eXHVpnbbO4kLYp71QVHgtVWd/
+AHuPnBHRns6+Hv7PNwIDAQABoAAwDQYJKoZIhvcNAQELBQADgYEAsJ+ypJAE5YiR
+A1niVNXKoqXmIQsXGJv9BA39AjT+cdqvdd+WTKCaZ9QXucDArhG9B9Dp66bfSgvT
+WVz6F85ju5HQekZrS2ZxdR1+muWAFE/vDgi22QwTysXvTWUfsqBQ0ZGEmdzyPJJq
+7AGzbAWx8JDhgGg2jStvQJBLhtYxhoY=
 -----END CERTIFICATE REQUEST-----
index 766cf53..b76db9d 100644 (file)
Binary files a/tests/certs/Server-localhost-sv.der and b/tests/certs/Server-localhost-sv.der differ
index b61c28b..e69de29 100644 (file)
@@ -1,5 +0,0 @@
------BEGIN DH PARAMETERS-----
-MIGHAoGBAP5mA7oYimErFUulbvNC8V0HwyB62NCj6TZb6YXJwElCksQc8RyHnkrY
-9Wx2+lduFqHjUWalgVF7Gma7CfR/pt+fiU6Jn2vWR2v7KT6hYeRKsJrONJlth+NK
-V7/d4zyvleJ/VSp0TuuSxmMMQ6hG3i5YhSGXyCh4h0pl4Wu/hdVTAgEC
------END DH PARAMETERS-----
index 8ade26a..3540179 100644 (file)
@@ -1,15 +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
+MIICXgIBAAKBgQC6X0tpdDGZTfS0typluLcxwTjPNje7XhjjUh9SqlolLwxmiDKw
+77IskDhebm8O5Ds/8C7xej1ew2SGP2i3zwuz6grKlBbUK2oC46Gzx9HQBrj/39zg
+Mirn3WLMccToz53eXHVpnbbO4kLYp71QVHgtVWd/AHuPnBHRns6+Hv7PNwIDAQAB
+AoGBAJdWRGVIPfJP1BJe3eWl3dRgI2JXk1/pY+pLSDYXMIYbM0Wa+RamPRdksPE1
+WadM+zPLNENP0L+/iERe/wiq7sNxKQLwH5eE3tUxC+iC8GO6gQ2zHaWVNu3R79CM
+t8YZhlmG2o+xC4CGYzuITgPE16m24CYauLZHO/YVDzG6yNApAkEA6K0db5bZmIaU
+TJW/jEnPJSubDx8kE1YncTOAKaAeoJwaaSfFphVKNGNrZHu3jBhKFgVNBNxGUWrW
+0pIkDrb3hQJBAM0N7+ghZ/7vaOoKqYHQI2z8SgPsUjQjmubCBALe/Ys3kg9PPpyz
+umJSAOYjC4X1dSlkAkciJqRS0Y6uKgSH4osCQQCVIWftft1GsnNYxt43t5MKOvGu
+doIz1pN/LcgmZddbj9IptfErqxedjl9lzxnstCDADnO3+ssjIfxAiKSNvd3VAkA3
+3yFMTbXpZ9BdXPRc05qjeoasVPr9C+qMD7dKFPpesZCRrVTxG6OgYJmwG0JriLsY
+wRBB05NV2N8SknAOdfwLAkEAw5Hqxc/Xlh6xhy9tBdJXDtuptV10mg6EbO98x9/7
+gyuAArSguhXna+aRqjLRelCwVB9f9aZ1XVoDKWVCsnfCbQ==
 -----END RSA PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost-sv.p12 b/tests/certs/Server-localhost-sv.p12
deleted file mode 100644 (file)
index d7b8441..0000000
Binary files a/tests/certs/Server-localhost-sv.p12 and /dev/null differ
index 86b48b3..6ef1fd5 100644 (file)
@@ -1,11 +1,11 @@
 extensions = x509v3
 [ x509v3 ]
 subjectAltName = DNS:localhost
-keyUsage       = keyEncipherment
+keyUsage       = keyEncipherment,digitalSignature,keyAgreement
 extendedKeyUsage = serverAuth
 subjectKeyIdentifier = hash
 authorityKeyIdentifier = keyid
-basicConstraints = critical,CA:false
+basicConstraints = CA:false
 [ req ]
 default_bits                    = 1024
 distinguished_name              = req_DN
@@ -24,33 +24,32 @@ commonName_value              = localhost
 # 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
+MIICXgIBAAKBgQC6X0tpdDGZTfS0typluLcxwTjPNje7XhjjUh9SqlolLwxmiDKw
+77IskDhebm8O5Ds/8C7xej1ew2SGP2i3zwuz6grKlBbUK2oC46Gzx9HQBrj/39zg
+Mirn3WLMccToz53eXHVpnbbO4kLYp71QVHgtVWd/AHuPnBHRns6+Hv7PNwIDAQAB
+AoGBAJdWRGVIPfJP1BJe3eWl3dRgI2JXk1/pY+pLSDYXMIYbM0Wa+RamPRdksPE1
+WadM+zPLNENP0L+/iERe/wiq7sNxKQLwH5eE3tUxC+iC8GO6gQ2zHaWVNu3R79CM
+t8YZhlmG2o+xC4CGYzuITgPE16m24CYauLZHO/YVDzG6yNApAkEA6K0db5bZmIaU
+TJW/jEnPJSubDx8kE1YncTOAKaAeoJwaaSfFphVKNGNrZHu3jBhKFgVNBNxGUWrW
+0pIkDrb3hQJBAM0N7+ghZ/7vaOoKqYHQI2z8SgPsUjQjmubCBALe/Ys3kg9PPpyz
+umJSAOYjC4X1dSlkAkciJqRS0Y6uKgSH4osCQQCVIWftft1GsnNYxt43t5MKOvGu
+doIz1pN/LcgmZddbj9IptfErqxedjl9lzxnstCDADnO3+ssjIfxAiKSNvd3VAkA3
+3yFMTbXpZ9BdXPRc05qjeoasVPr9C+qMD7dKFPpesZCRrVTxG6OgYJmwG0JriLsY
+wRBB05NV2N8SknAOdfwLAkEAw5Hqxc/Xlh6xhy9tBdJXDtuptV10mg6EbO98x9/7
+gyuAArSguhXna+aRqjLRelCwVB9f9aZ1XVoDKWVCsnfCbQ==
 -----END RSA PRIVATE KEY-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:94:f9:7c:6a
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311627 (0xcfa60bc514b)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:37:11 2010 GMT
-            Not After : Aug 13 21:37:11 2018 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Jun  7 15:07:11 2023 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
@@ -59,68 +58,63 @@ Certificate:
             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
+                    00:ba:5f:4b:69:74:31:99:4d:f4:b4:b7:2a:65:b8:
+                    b7:31:c1:38:cf:36:37:bb:5e:18:e3:52:1f:52:aa:
+                    5a:25:2f:0c:66:88:32:b0:ef:b2:2c:90:38:5e:6e:
+                    6f:0e:e4:3b:3f:f0:2e:f1:7a:3d:5e:c3:64:86:3f:
+                    68:b7:cf:0b:b3:ea:0a:ca:94:16:d4:2b:6a:02:e3:
+                    a1:b3:c7:d1:d0:06:b8:ff:df:dc:e0:32:2a:e7:dd:
+                    62:cc:71:c4:e8:cf:9d:de:5c:75:69:9d:b6:ce:e2:
+                    42:d8:a7:bd:50:54:78:2d:55:67:7f:00:7b:8f:9c:
+                    11:d1:9e:ce:be:1e:fe:cf:37
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Alternative Name: 
                 DNS:localhost
             X509v3 Key Usage: 
-                Key Encipherment
+                Digital Signature, Key Encipherment, Key Agreement
             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
+                7E:42:8D:AC:2E:93:AD:4C:E0:09:AC:C6:08:F1:82:E0:B7:B7:C6:7F
             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
+                keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
 
-            X509v3 Basic Constraints: critical
+            X509v3 Basic Constraints: 
                 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
+         00:fe:c4:fc:4b:28:b8:bc:39:8c:6f:f1:72:d3:76:da:28:27:
+         e2:97:94:bb:ad:2f:91:c4:db:df:33:4b:48:4e:97:5b:4c:4c:
+         be:fc:e4:b7:19:5c:b8:83:6e:ef:2c:b0:d5:7c:fc:0d:cb:7e:
+         29:ed:fd:4d:ef:05:1c:89:15:31:78:9b:18:29:d3:37:83:c7:
+         39:f4:78:27:b7:00:75:d1:fb:f0:29:88:79:e4:e9:a7:d4:65:
+         04:bf:d5:a1:dc:05:b2:17:c4:a9:da:61:10:22:5f:8f:50:fc:
+         1f:ab:f6:39:dd:ab:35:a6:94:54:63:5c:6d:25:f0:dc:3a:0a:
+         70:4e:49:ef:be:fa:2c:0a:cd:ce:a6:2d:26:cd:f8:24:89:77:
+         2c:ea:6e:19:b6:5c:8c:1a:08:ea:a8:9f:2c:1b:c7:fc:13:6c:
+         fe:a7:90:08:e5:98:83:30:52:86:ac:83:0b:cb:25:92:21:94:
+         80:13:d7:e8:d0:42:56:83:55:d3:09:9b:e8:c5:96:82:15:64:
+         6b:83:77:eb:99:e5:52:dc:1b:36:29:a0:c9:da:8b:d3:0d:77:
+         24:f2:c3:df:2e:c4:93:e0:34:47:a9:9b:54:d3:75:d5:c7:de:
+         88:a1:ef:7b:40:2f:dc:e9:28:8c:69:be:eb:71:4a:c2:30:50:
+         99:36:52:69
 -----BEGIN CERTIFICATE-----
-MIIDQTCCAimgAwIBAgIGC5iU+XxqMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDPzCCAiegAwIBAgIGDPpgvFFLMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0yMzA2MDcxNTA3MTFaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+ALpfS2l0MZlN9LS3KmW4tzHBOM82N7teGONSH1KqWiUvDGaIMrDvsiyQOF5ubw7k
+Oz/wLvF6PV7DZIY/aLfPC7PqCsqUFtQragLjobPH0dAGuP/f3OAyKufdYsxxxOjP
+nd5cdWmdts7iQtinvVBUeC1VZ38Ae4+cEdGezr4e/s83AgMBAAGjgYYwgYMwFAYD
+VR0RBA0wC4IJbG9jYWxob3N0MAsGA1UdDwQEAwIDqDATBgNVHSUEDDAKBggrBgEF
+BQcDATAdBgNVHQ4EFgQUfkKNrC6TrUzgCazGCPGC4Le3xn8wHwYDVR0jBBgwFoAU
+Esq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOC
+AQEAAP7E/EsouLw5jG/xctN22ign4peUu60vkcTb3zNLSE6XW0xMvvzktxlcuINu
+7yyw1Xz8Dct+Ke39Te8FHIkVMXibGCnTN4PHOfR4J7cAddH78CmIeeTpp9RlBL/V
+odwFshfEqdphECJfj1D8H6v2Od2rNaaUVGNcbSXw3DoKcE5J7776LArNzqYtJs34
+JIl3LOpuGbZcjBoI6qifLBvH/BNs/qeQCOWYgzBShqyDC8slkiGUgBPX6NBCVoNV
+0wmb6MWWghVka4N365nlUtwbNimgydqL0w13JPLD3y7Ek+A0R6mbVNN11cfeiKHv
+e0Av3OkojGm+63FKwjBQmTZSaQ==
 -----END CERTIFICATE-----
------BEGIN DH PARAMETERS-----
-MIGHAoGBAP5mA7oYimErFUulbvNC8V0HwyB62NCj6TZb6YXJwElCksQc8RyHnkrY
-9Wx2+lduFqHjUWalgVF7Gma7CfR/pt+fiU6Jn2vWR2v7KT6hYeRKsJrONJlth+NK
-V7/d4zyvleJ/VSp0TuuSxmMMQ6hG3i5YhSGXyCh4h0pl4Wu/hdVTAgEC
------END DH PARAMETERS-----
index 6351025..97e64ce 100644 (file)
@@ -1,11 +1,11 @@
 extensions = x509v3
 [ x509v3 ]
 subjectAltName = DNS:localhost
-keyUsage       = keyEncipherment
+keyUsage       = keyEncipherment,digitalSignature,keyAgreement
 extendedKeyUsage = serverAuth
 subjectKeyIdentifier = hash
 authorityKeyIdentifier = keyid
-basicConstraints = critical,CA:false
+basicConstraints = CA:false
 [ req ]
 default_bits                    = 1024
 distinguished_name              = req_DN
index 7e89b51..e954839 100644 (file)
Binary files a/tests/certs/Server-localhost-sv.pub.der and b/tests/certs/Server-localhost-sv.pub.der differ
index 2384643..d119616 100644 (file)
@@ -1,6 +1,6 @@
 -----BEGIN PUBLIC KEY-----
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwJ3kmLLnk0YEKCdJ2/prhBWgB
-s3J3lzjkYBxxnZn3JnshtW2qnxR2B2ykKi197vZviljEk97+oSUP/1dJwNmU2Qd5
-v4xt+vEYgmegP9cxA4LsuTlpB+zskxdbGnKRk7JrmGZj/mEp562GDgS6v4tVV2Gl
-SvbK58bRuGVCq2dkFwIDAQAB
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6X0tpdDGZTfS0typluLcxwTjP
+Nje7XhjjUh9SqlolLwxmiDKw77IskDhebm8O5Ds/8C7xej1ew2SGP2i3zwuz6grK
+lBbUK2oC46Gzx9HQBrj/39zgMirn3WLMccToz53eXHVpnbbO4kLYp71QVHgtVWd/
+AHuPnBHRns6+Hv7PNwIDAQAB
 -----END PUBLIC KEY-----
index db40831..0676f73 100644 (file)
@@ -1,13 +1,21 @@
 -----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
+MIIDiDCCAnACAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
+BAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAk
+BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0xNTAzMjExNTA3
+MTFaFw0xNTA0MjAxNTA3MTFaMIIBwjAXAgYM+ly45CIXDTE1MDMyMTEzMTQ1N1ow
+FwIGDPpcwXH8Fw0xNTAzMjExMzE1NTNaMBcCBgz6XO7ujBcNMTUwMzIxMTMyMDUx
+WjAXAgYM+lzu7p0XDTE1MDMyMTEzMjA1MVowFwIGDPpc7u6uFw0xNTAzMjExMzIw
+NTFaMBcCBgz6XZyD1RcNMTUwMzIxMTMzOTQ5WjAXAgYM+l4OXa8XDTE1MDMyMTEz
+NTIxNVowFwIGDPpeJlPZFw0xNTAzMjExMzU0NTJaMBcCBgz6XiZT6hcNMTUwMzIx
+MTM1NDUyWjAXAgYM+l4mU/sXDTE1MDMyMTEzNTQ1MlowFwIGDPpemKKEFw0xNTAz
+MjExNDA3MjFaMBcCBgz6XpiilRcNMTUwMzIxMTQwNzIxWjAXAgYM+l6YoqYXDTE1
+MDMyMTE0MDcyMVowFwIGDPpffssxFw0xNTAzMjExNDMyMzBaMBcCBgz6X37yUxcN
+MTUwMzIxMTQzMjMxWjAXAgYM+l9+8mYXDTE1MDMyMTE0MzIzMVowFwIGDPpgvFFL
+Fw0xNTAzMjExNTA3MTFaMBcCBgz6YLxRXBcNMTUwMzIxMTUwNzExWqAOMAwwCgYD
+VR0UBAMCAQEwDQYJKoZIhvcNAQEFBQADggEBANd1Fp3lPmLALcGvEB4kB4Uo6vhM
+ZWcAUE96oerpW0OnZ6v7o8ghLvs/pJfIoD+7hV3RuAgUUBqv2N8VTaL2IYarom/H
+CK78oLrIwwej/7K1pIfG53bJuaYyim5Lpl/YzGwhdC2vO2kBXHC1gVj5hN3uM/2A
++cFPTDMsDU7szGq1bHObEKumXXzG5LfwGJGaHNGdvglV7zKthRjk/plYKE4/F0Ah
+jRQys6crClCKC5vug1GbzKbQue/Pbw1e3Rm/e0DVeOCREdvcHat43SIPf5yUYLsz
+b7P7pIOIoSgiIgEdbmj2pi1xdtxrYRyJJk0H7XQJHDehkyZsy6l62mKam/E=
 -----END X509 CRL-----
index 722aeeb..69bd40d 100644 (file)
@@ -1,16 +1,15 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:94:fb:78:5f
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311644 (0xcfa60bc515c)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:37:24 2010 GMT
-            Not After : Aug 13 21:37:24 2018 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Jun  7 15:07:11 2023 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
@@ -19,63 +18,63 @@ Certificate:
             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
+                    00:ac:cc:11:70:74:29:ed:7b:00:44:8a:c0:47:03:
+                    50:9d:6f:51:b7:c9:7b:dd:7e:ee:29:67:5b:91:9b:
+                    c7:c5:e6:9d:59:3e:6b:33:25:b7:7c:39:7c:84:79:
+                    dd:15:98:e7:27:63:93:10:3a:3a:40:a0:dd:d0:1e:
+                    6e:60:f4:1e:a4:f7:1e:0a:0b:84:44:77:e7:05:16:
+                    39:aa:de:bd:1e:c7:bc:c9:e1:4e:8c:86:1c:3f:d6:
+                    cd:e3:f2:68:02:5b:17:53:49:51:29:a8:89:f3:d0:
+                    e1:5e:71:07:9f:15:47:08:40:e9:ac:49:e4:21:ac:
+                    65:29:09:ca:a2:dc:9e:ab:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Alternative Name: 
                 DNS:localhost.nn
             X509v3 Key Usage: 
-                Key Encipherment
+                Digital Signature, Key Encipherment, Key Agreement
             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
+                12:AF:44:46:B1:04:69:61:64:83:39:A2:BD:5D:97:2B:F4:1D:D4:6C
             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
+                keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
 
-            X509v3 Basic Constraints: critical
+            X509v3 Basic Constraints: 
                 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
+         44:54:d7:d7:75:14:60:a5:1a:1d:1e:a9:dc:6f:b1:b1:d8:13:
+         e2:10:22:9a:f5:ca:b6:38:3c:d9:ac:2e:dc:ce:38:bc:cc:38:
+         a1:cc:a8:9c:73:37:f9:b6:a8:42:87:d9:80:21:45:81:43:9d:
+         73:3c:67:cf:cd:c5:c3:91:df:60:6b:6d:69:f9:be:a1:92:cc:
+         5d:ea:bc:67:f3:c7:bc:ea:41:d1:11:7b:e3:f1:b8:a7:8d:9a:
+         d0:23:6c:df:0e:2a:35:98:50:c1:a6:8b:d2:07:aa:a6:2f:cb:
+         98:a9:a3:8d:a0:8c:87:ab:ec:e1:c5:0b:25:e2:e9:a9:08:13:
+         30:86:1b:e5:b6:ac:03:85:35:0c:9a:5d:5b:82:c4:04:6a:05:
+         4c:f3:f7:b3:b5:ac:92:3b:46:71:a8:7f:54:c7:96:37:dc:38:
+         2c:a2:18:23:10:00:de:f8:21:40:52:99:94:ad:b2:b6:e5:87:
+         8e:29:0b:3b:b3:8a:52:67:54:dc:0a:e9:75:60:33:ff:13:9a:
+         61:a4:15:0c:d0:6f:de:0d:06:23:a8:44:ad:f0:68:60:93:6b:
+         75:06:24:5b:47:9a:b9:3a:ef:d9:4f:df:31:d5:65:3a:e2:94:
+         03:be:88:94:49:7c:6a:d0:da:c0:d0:62:81:f5:61:50:96:5a:
+         d0:ee:22:39
 -----BEGIN CERTIFICATE-----
-MIIDRzCCAi+gAwIBAgIGC5iU+3hfMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDRTCCAi2gAwIBAgIGDPpgvFFcMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0yMzA2MDcxNTA3MTFaMFcxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBAKzMEXB0Ke17AESKwEcDUJ1vUbfJe91+7ilnW5Gbx8XmnVk+azMlt3w5fIR5
+3RWY5ydjkxA6OkCg3dAebmD0HqT3HgoLhER35wUWOarevR7HvMnhToyGHD/WzePy
+aAJbF1NJUSmoifPQ4V5xB58VRwhA6axJ5CGsZSkJyqLcnquJAgMBAAGjgYkwgYYw
+FwYDVR0RBBAwDoIMbG9jYWxob3N0Lm5uMAsGA1UdDwQEAwIDqDATBgNVHSUEDDAK
+BggrBgEFBQcDATAdBgNVHQ4EFgQUEq9ERrEEaWFkgzmivV2XK/Qd1GwwHwYDVR0j
+BBgwFoAUEsq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0B
+AQUFAAOCAQEARFTX13UUYKUaHR6p3G+xsdgT4hAimvXKtjg82awu3M44vMw4ocyo
+nHM3+baoQofZgCFFgUOdczxnz83Fw5HfYGttafm+oZLMXeq8Z/PHvOpB0RF74/G4
+p42a0CNs3w4qNZhQwaaL0geqpi/LmKmjjaCMh6vs4cULJeLpqQgTMIYb5basA4U1
+DJpdW4LEBGoFTPP3s7WskjtGcah/VMeWN9w4LKIYIxAA3vghQFKZlK2ytuWHjikL
+O7OKUmdU3ArpdWAz/xOaYaQVDNBv3g0GI6hErfBoYJNrdQYkW0eauTrv2U/fMdVl
+OuKUA76IlEl8atDawNBigfVhUJZa0O4iOQ==
 -----END CERTIFICATE-----
index 6424343..7f2fa77 100644 (file)
@@ -1,11 +1,11 @@
 -----BEGIN CERTIFICATE REQUEST-----
 MIIBlzCCAQACAQAwVzELMAkGA1UEBhMCTk4xMTAvBgNVBAoMKEVkZWwgQ3VybCBB
 cmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxFTATBgNVBAMMDGxvY2FsaG9z
-dC5ubjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA09RO22NcPzo6XjgJlOZN
-cJ0Nr0nmgl0Ht/XNoN+vcfHPv9Wava98eF1VPxS9uywOc53WgprV5vYhXQiSonFf
-gF9czvDCNzd5D0091PKAbUc2RdHSi3ouEnFLR4b1jJmv5w7PtclNenX3snQMQeOr
-uyydb1QIE1o673wn9z8LC3ECAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4GBAM5PenDC
-AtDhzdVKrX6DcJINWck5XFEnvWQksSYU7iDeiQVycQxR+LYKGZiy04u+9C+MN7eq
-JmHAIi+88r7/ZaGJLujqSUOJn8ocZ+vwhJOwh2XBhhLaCjIW/H05g0aNlk80Ye6m
-OA9DCIZUINF0lDQaJCpKXxwNVcz4Rifp5/9T
+dC5ubjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArMwRcHQp7XsARIrARwNQ
+nW9Rt8l73X7uKWdbkZvHxeadWT5rMyW3fDl8hHndFZjnJ2OTEDo6QKDd0B5uYPQe
+pPceCguERHfnBRY5qt69Hse8yeFOjIYcP9bN4/JoAlsXU0lRKaiJ89DhXnEHnxVH
+CEDprEnkIaxlKQnKotyeq4kCAwEAAaAAMA0GCSqGSIb3DQEBCwUAA4GBADnob1ds
+8MytEcgSZdkgP4iQ2L+aPXTPBqTThaV7Zto1mAhwG/D6rTiGq6t+IlZQNoDdZPp3
+r1WDQJj6ed54xUY4Im4m1Np8oURamt5NJMKURDbv0xOQHW8EOoN+F8rfKyu2Hk1O
+hJulv+cBz75yi3+LVu+IEuSFQIQUZiy6V+Il
 -----END CERTIFICATE REQUEST-----
index 08cf02f..9bb4ff3 100644 (file)
Binary files a/tests/certs/Server-localhost.nn-sv.der and b/tests/certs/Server-localhost.nn-sv.der differ
index 5d54840..e69de29 100644 (file)
@@ -1,5 +0,0 @@
------BEGIN DH PARAMETERS-----
-MIGHAoGBAPrtEVPhZfEczB9JnWXbln79YnTh/V6ehXMWe414wyn/VT1ow25sLEev
-H2+eT84aDp5e+TfBSFjA6or96/lyQvsgAE+cE6f6uuw9ApVG2MK+BCn4snxHBb6G
-LFQf+9qHZ4BEkpBL60p1fkGu8BM1wXGXEaeYhgGumNA9fm5YJrl7AgEC
------END DH PARAMETERS-----
index bf1cc7e..6a75071 100644 (file)
@@ -1,15 +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==
+MIICXQIBAAKBgQCszBFwdCntewBEisBHA1Cdb1G3yXvdfu4pZ1uRm8fF5p1ZPmsz
+Jbd8OXyEed0VmOcnY5MQOjpAoN3QHm5g9B6k9x4KC4REd+cFFjmq3r0ex7zJ4U6M
+hhw/1s3j8mgCWxdTSVEpqInz0OFecQefFUcIQOmsSeQhrGUpCcqi3J6riQIDAQAB
+AoGAK7nYD+TVV0rw3mdeEJo+JBivTRqnRX2BNuj4uvf4rZOV7adl6SN6Mu05HSzZ
+TUXL+KOx60FQzFnox2lr9QzRU/LelLQ3H9fgVTVmGUCEAoDVRoWas8XlYGZsiHZ/
+yJn+9Z3yQYpufSb0LQiSt73sgrTNPu50gMxe/ZSAbSscyyECQQDV8juKzWmizlTh
++wVs/pihE0+BX1BRCsezs7FCdDEWle3XidBtYlYyUIm5wx6v8xM/F7Q/nwgymOnV
+A62PtfyjAkEAzsM3DsuJ9dG5n+EPTH3kDdfr0eYy76XPYz4HK8/FgiKPWy55BRCH
+biLcbDAe06olJiCzEvwggFigthrIqj0t4wJBALDTUi74c3SiADn+FI/vJQsMQMv2
+kRVKSZ/WxozcJ645IKjiOKgPfJp9QjeMcxKNXrzoxItIz6eyBqGONqbujO0CQQCh
+b6azdJR5TJEklfL+BGVlsas8rgIjP1FX6Xxr5sQNwbIwvW5cV/WGNs3n4wKOvZBX
+3rwzHIy76XdB+FOpKC+FAkBDVbicC19LE6+tBzOyx4uTEm3N7N8vh566VaOpok02
+Io7F/WYL7WSCXAtvmueWV+FJyVUMN1f2nWfWqaEXP2ag
 -----END RSA PRIVATE KEY-----
index b5c2531..b3712f7 100644 (file)
@@ -1,11 +1,11 @@
 extensions = x509v3
 [ x509v3 ]
 subjectAltName = DNS:localhost.nn
-keyUsage       = keyEncipherment
+keyUsage       = keyEncipherment,digitalSignature,keyAgreement
 extendedKeyUsage = serverAuth
 subjectKeyIdentifier = hash
 authorityKeyIdentifier = keyid
-basicConstraints = critical,CA:false
+basicConstraints = CA:false
 [ req ]
 default_bits                    = 1024
 distinguished_name              = req_DN
@@ -24,33 +24,32 @@ commonName_value              = localhost.nn
 # 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==
+MIICXQIBAAKBgQCszBFwdCntewBEisBHA1Cdb1G3yXvdfu4pZ1uRm8fF5p1ZPmsz
+Jbd8OXyEed0VmOcnY5MQOjpAoN3QHm5g9B6k9x4KC4REd+cFFjmq3r0ex7zJ4U6M
+hhw/1s3j8mgCWxdTSVEpqInz0OFecQefFUcIQOmsSeQhrGUpCcqi3J6riQIDAQAB
+AoGAK7nYD+TVV0rw3mdeEJo+JBivTRqnRX2BNuj4uvf4rZOV7adl6SN6Mu05HSzZ
+TUXL+KOx60FQzFnox2lr9QzRU/LelLQ3H9fgVTVmGUCEAoDVRoWas8XlYGZsiHZ/
+yJn+9Z3yQYpufSb0LQiSt73sgrTNPu50gMxe/ZSAbSscyyECQQDV8juKzWmizlTh
++wVs/pihE0+BX1BRCsezs7FCdDEWle3XidBtYlYyUIm5wx6v8xM/F7Q/nwgymOnV
+A62PtfyjAkEAzsM3DsuJ9dG5n+EPTH3kDdfr0eYy76XPYz4HK8/FgiKPWy55BRCH
+biLcbDAe06olJiCzEvwggFigthrIqj0t4wJBALDTUi74c3SiADn+FI/vJQsMQMv2
+kRVKSZ/WxozcJ645IKjiOKgPfJp9QjeMcxKNXrzoxItIz6eyBqGONqbujO0CQQCh
+b6azdJR5TJEklfL+BGVlsas8rgIjP1FX6Xxr5sQNwbIwvW5cV/WGNs3n4wKOvZBX
+3rwzHIy76XdB+FOpKC+FAkBDVbicC19LE6+tBzOyx4uTEm3N7N8vh566VaOpok02
+Io7F/WYL7WSCXAtvmueWV+FJyVUMN1f2nWfWqaEXP2ag
 -----END RSA PRIVATE KEY-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:94:fb:78:5f
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311644 (0xcfa60bc515c)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:37:24 2010 GMT
-            Not After : Aug 13 21:37:24 2018 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Jun  7 15:07:11 2023 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
@@ -59,68 +58,63 @@ Certificate:
             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
+                    00:ac:cc:11:70:74:29:ed:7b:00:44:8a:c0:47:03:
+                    50:9d:6f:51:b7:c9:7b:dd:7e:ee:29:67:5b:91:9b:
+                    c7:c5:e6:9d:59:3e:6b:33:25:b7:7c:39:7c:84:79:
+                    dd:15:98:e7:27:63:93:10:3a:3a:40:a0:dd:d0:1e:
+                    6e:60:f4:1e:a4:f7:1e:0a:0b:84:44:77:e7:05:16:
+                    39:aa:de:bd:1e:c7:bc:c9:e1:4e:8c:86:1c:3f:d6:
+                    cd:e3:f2:68:02:5b:17:53:49:51:29:a8:89:f3:d0:
+                    e1:5e:71:07:9f:15:47:08:40:e9:ac:49:e4:21:ac:
+                    65:29:09:ca:a2:dc:9e:ab:89
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Alternative Name: 
                 DNS:localhost.nn
             X509v3 Key Usage: 
-                Key Encipherment
+                Digital Signature, Key Encipherment, Key Agreement
             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
+                12:AF:44:46:B1:04:69:61:64:83:39:A2:BD:5D:97:2B:F4:1D:D4:6C
             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
+                keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
 
-            X509v3 Basic Constraints: critical
+            X509v3 Basic Constraints: 
                 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
+         44:54:d7:d7:75:14:60:a5:1a:1d:1e:a9:dc:6f:b1:b1:d8:13:
+         e2:10:22:9a:f5:ca:b6:38:3c:d9:ac:2e:dc:ce:38:bc:cc:38:
+         a1:cc:a8:9c:73:37:f9:b6:a8:42:87:d9:80:21:45:81:43:9d:
+         73:3c:67:cf:cd:c5:c3:91:df:60:6b:6d:69:f9:be:a1:92:cc:
+         5d:ea:bc:67:f3:c7:bc:ea:41:d1:11:7b:e3:f1:b8:a7:8d:9a:
+         d0:23:6c:df:0e:2a:35:98:50:c1:a6:8b:d2:07:aa:a6:2f:cb:
+         98:a9:a3:8d:a0:8c:87:ab:ec:e1:c5:0b:25:e2:e9:a9:08:13:
+         30:86:1b:e5:b6:ac:03:85:35:0c:9a:5d:5b:82:c4:04:6a:05:
+         4c:f3:f7:b3:b5:ac:92:3b:46:71:a8:7f:54:c7:96:37:dc:38:
+         2c:a2:18:23:10:00:de:f8:21:40:52:99:94:ad:b2:b6:e5:87:
+         8e:29:0b:3b:b3:8a:52:67:54:dc:0a:e9:75:60:33:ff:13:9a:
+         61:a4:15:0c:d0:6f:de:0d:06:23:a8:44:ad:f0:68:60:93:6b:
+         75:06:24:5b:47:9a:b9:3a:ef:d9:4f:df:31:d5:65:3a:e2:94:
+         03:be:88:94:49:7c:6a:d0:da:c0:d0:62:81:f5:61:50:96:5a:
+         d0:ee:22:39
 -----BEGIN CERTIFICATE-----
-MIIDRzCCAi+gAwIBAgIGC5iU+3hfMA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDRTCCAi2gAwIBAgIGDPpgvFFcMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0yMzA2MDcxNTA3MTFaMFcxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRUwEwYDVQQDDAxsb2NhbGhvc3Qubm4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBAKzMEXB0Ke17AESKwEcDUJ1vUbfJe91+7ilnW5Gbx8XmnVk+azMlt3w5fIR5
+3RWY5ydjkxA6OkCg3dAebmD0HqT3HgoLhER35wUWOarevR7HvMnhToyGHD/WzePy
+aAJbF1NJUSmoifPQ4V5xB58VRwhA6axJ5CGsZSkJyqLcnquJAgMBAAGjgYkwgYYw
+FwYDVR0RBBAwDoIMbG9jYWxob3N0Lm5uMAsGA1UdDwQEAwIDqDATBgNVHSUEDDAK
+BggrBgEFBQcDATAdBgNVHQ4EFgQUEq9ERrEEaWFkgzmivV2XK/Qd1GwwHwYDVR0j
+BBgwFoAUEsq6S0YEp3WKLOgOVJS8EmWme84wCQYDVR0TBAIwADANBgkqhkiG9w0B
+AQUFAAOCAQEARFTX13UUYKUaHR6p3G+xsdgT4hAimvXKtjg82awu3M44vMw4ocyo
+nHM3+baoQofZgCFFgUOdczxnz83Fw5HfYGttafm+oZLMXeq8Z/PHvOpB0RF74/G4
+p42a0CNs3w4qNZhQwaaL0geqpi/LmKmjjaCMh6vs4cULJeLpqQgTMIYb5basA4U1
+DJpdW4LEBGoFTPP3s7WskjtGcah/VMeWN9w4LKIYIxAA3vghQFKZlK2ytuWHjikL
+O7OKUmdU3ArpdWAz/xOaYaQVDNBv3g0GI6hErfBoYJNrdQYkW0eauTrv2U/fMdVl
+OuKUA76IlEl8atDawNBigfVhUJZa0O4iOQ==
 -----END CERTIFICATE-----
------BEGIN DH PARAMETERS-----
-MIGHAoGBAPrtEVPhZfEczB9JnWXbln79YnTh/V6ehXMWe414wyn/VT1ow25sLEev
-H2+eT84aDp5e+TfBSFjA6or96/lyQvsgAE+cE6f6uuw9ApVG2MK+BCn4snxHBb6G
-LFQf+9qHZ4BEkpBL60p1fkGu8BM1wXGXEaeYhgGumNA9fm5YJrl7AgEC
------END DH PARAMETERS-----
index e515ea1..399e38a 100644 (file)
@@ -1,11 +1,11 @@
 extensions = x509v3
 [ x509v3 ]
 subjectAltName = DNS:localhost.nn
-keyUsage       = keyEncipherment
+keyUsage       = keyEncipherment,digitalSignature,keyAgreement
 extendedKeyUsage = serverAuth
 subjectKeyIdentifier = hash
 authorityKeyIdentifier = keyid
-basicConstraints = critical,CA:false
+basicConstraints = CA:false
 [ req ]
 default_bits                    = 1024
 distinguished_name              = req_DN
index b67ab96..68b64eb 100644 (file)
Binary files a/tests/certs/Server-localhost.nn-sv.pub.der and b/tests/certs/Server-localhost.nn-sv.pub.der differ
index 3131e95..a59a0e6 100644 (file)
@@ -1,6 +1,6 @@
 -----BEGIN PUBLIC KEY-----
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDT1E7bY1w/OjpeOAmU5k1wnQ2v
-SeaCXQe39c2g369x8c+/1Zq9r3x4XVU/FL27LA5zndaCmtXm9iFdCJKicV+AX1zO
-8MI3N3kPTT3U8oBtRzZF0dKLei4ScUtHhvWMma/nDs+1yU16dfeydAxB46u7LJ1v
-VAgTWjrvfCf3PwsLcQIDAQAB
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCszBFwdCntewBEisBHA1Cdb1G3
+yXvdfu4pZ1uRm8fF5p1ZPmszJbd8OXyEed0VmOcnY5MQOjpAoN3QHm5g9B6k9x4K
+C4REd+cFFjmq3r0ex7zJ4U6Mhhw/1s3j8mgCWxdTSVEpqInz0OFecQefFUcIQOms
+SeQhrGUpCcqi3J6riQIDAQAB
 -----END PUBLIC KEY-----
index 87a1859..319af89 100644 (file)
@@ -1,14 +1,22 @@
 -----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==
+MIIDoTCCAokCAQEwDQYJKoZIhvcNAQEFBQAwaDELMAkGA1UEBhMCTk4xMTAvBgNV
+BAoMKEVkZWwgQ3VybCBBcmN0aWMgSWxsdWRpdW0gUmVzZWFyY2ggQ2xvdWQxJjAk
+BgNVBAMMHU5vcnRoZXJuIE5vd2hlcmUgVHJ1c3QgQW5jaG9yFw0xNTAzMjExNTA3
+MTFaFw0xNTA0MjAxNTA3MTFaMIIB2zAXAgYM+ly45CIXDTE1MDMyMTEzMTQ1N1ow
+FwIGDPpcwXH8Fw0xNTAzMjExMzE1NTNaMBcCBgz6XO7ujBcNMTUwMzIxMTMyMDUx
+WjAXAgYM+lzu7p0XDTE1MDMyMTEzMjA1MVowFwIGDPpc7u6uFw0xNTAzMjExMzIw
+NTFaMBcCBgz6XZyD1RcNMTUwMzIxMTMzOTQ5WjAXAgYM+l4OXa8XDTE1MDMyMTEz
+NTIxNVowFwIGDPpeJlPZFw0xNTAzMjExMzU0NTJaMBcCBgz6XiZT6hcNMTUwMzIx
+MTM1NDUyWjAXAgYM+l4mU/sXDTE1MDMyMTEzNTQ1MlowFwIGDPpemKKEFw0xNTAz
+MjExNDA3MjFaMBcCBgz6XpiilRcNMTUwMzIxMTQwNzIxWjAXAgYM+l6YoqYXDTE1
+MDMyMTE0MDcyMVowFwIGDPpffssxFw0xNTAzMjExNDMyMzBaMBcCBgz6X37yUxcN
+MTUwMzIxMTQzMjMxWjAXAgYM+l9+8mYXDTE1MDMyMTE0MzIzMVowFwIGDPpgvFFL
+Fw0xNTAzMjExNTA3MTFaMBcCBgz6YLxRXBcNMTUwMzIxMTUwNzExWjAXAgYM+mC8
+UW4XDTE1MDMyMTE1MDcxMVqgDjAMMAoGA1UdFAQDAgEBMA0GCSqGSIb3DQEBBQUA
+A4IBAQDER99gBe9w8a9X1pQQnzC87kYnW7R0K8wFr4KqCYP0De8tKxhCGrXaoQDK
+AvHQcT3RpCR5PAK5J1InxlCumJJjvo39OLTsaCbSyoynmAMGCXS0earSL83biquG
+jJ29ROXukT3fGE6HO+cKAaHyHeJa6OZEibmCvCls/YvvQTW2jlceOZmi22AL3jYN
+w6UVHRpbHDHupF5YxhwFG1GVTOd9cuik8CqVxPkOfIxeQbEV+qEiDWzjyy2aU3X7
+dLhZE47P5tYgb8nIsXb5PATqiK9vdv4EOyVKiiCmyFemrGGU7MqbTtTjJVB9nS2R
+QMWLS24xr3IcHt7FOX1w8UF/GXiP
 -----END X509 CRL-----
index 0dcb5df..b00859a 100644 (file)
@@ -1,16 +1,15 @@
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:95:00:0c:7e
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311662 (0xcfa60bc516e)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:37:54 2010 GMT
-            Not After : Aug 13 21:37:54 2018 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Jun  7 15:07:11 2023 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
@@ -19,63 +18,63 @@ Certificate:
             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
+                    00:e3:c7:52:fb:7d:02:b1:a7:0b:4c:2d:a6:2a:b0:
+                    57:6b:5e:0b:f9:9e:4b:e7:d0:ac:55:43:47:fa:b1:
+                    e0:fc:b0:63:30:84:31:f5:95:44:90:9a:b7:22:01:
+                    6f:c7:17:16:be:5a:19:ee:47:35:90:a5:5e:27:ba:
+                    86:47:3b:c5:63:d2:f2:c6:a1:db:ac:be:b1:2f:4c:
+                    c2:98:86:19:72:d5:f9:12:45:09:bc:23:e2:00:eb:
+                    4d:ba:99:71:b5:4a:fb:49:8c:4d:f3:0b:4e:cf:48:
+                    7b:c8:06:37:92:35:ff:bb:4f:ea:98:af:13:ac:a8:
+                    cd:9f:a7:e0:78:db:15:bc:3b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Alternative Name: 
                 DNS:localhost
             X509v3 Key Usage: 
-                Key Encipherment
+                Digital Signature, Key Encipherment, Key Agreement
             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
+                23:D7:CE:D8:B2:D0:F8:8E:3C:82:26:6C:F1:F5:2A:8A:48:90:58:66
             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
+                keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
 
-            X509v3 Basic Constraints: critical
+            X509v3 Basic Constraints: 
                 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
+         28:b9:77:ea:4a:8d:d6:a5:fb:72:5b:d6:cd:60:40:33:56:bf:
+         dd:23:ff:bf:e8:2e:10:cd:30:ab:24:a4:43:d8:98:71:e3:59:
+         66:3e:38:bd:b8:fb:19:1a:13:8f:a1:c8:39:93:b5:83:8d:62:
+         52:a9:7a:5b:0d:69:47:40:5c:51:4c:3a:be:a7:c9:5f:7b:93:
+         49:20:59:23:30:7c:d9:4a:dd:29:2c:ed:96:fd:cb:b8:13:ff:
+         36:2c:27:ce:28:c3:a6:d0:d8:ba:8c:38:9f:78:ff:54:c7:76:
+         05:37:47:f5:d3:55:9c:2c:12:41:81:14:ca:48:a2:b7:6d:05:
+         49:2b:c5:f5:7b:63:6d:6f:cd:3f:f4:8d:74:51:07:ff:e1:40:
+         d5:96:60:d8:c8:38:5a:15:f9:c5:fd:e1:5e:a3:02:95:90:4b:
+         fc:8a:42:de:72:31:72:3d:dd:a2:df:19:42:c8:fa:a8:77:11:
+         67:e6:64:8c:d0:fd:45:fd:f0:49:8c:e1:85:e6:f5:1f:47:c6:
+         ae:f2:70:c3:e8:99:d0:cd:9d:88:6b:33:ba:b9:65:3d:f4:b1:
+         f4:d0:3c:76:9c:18:9e:9e:c8:62:29:43:8e:f7:2f:2c:12:37:
+         39:02:26:4e:4b:b0:14:30:80:bb:2d:cc:fc:93:dc:c9:8b:c0:
+         69:12:71:36
 -----BEGIN CERTIFICATE-----
-MIIDQzCCAiugAwIBAgIGC5iVAAx+MA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDQTCCAimgAwIBAgIGDPpgvFFuMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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=
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0yMzA2MDcxNTA3MTFaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AOPHUvt9ArGnC0wtpiqwV2teC/meS+fQrFVDR/qx4PywYzCEMfWVRJCatyIBb8cX
+Fr5aGe5HNZClXie6hkc7xWPS8sah26y+sS9MwpiGGXLV+RJFCbwj4gDrTbqZcbVK
++0mMTfMLTs9Ie8gGN5I1/7tP6pivE6yozZ+n4HjbFbw7AgMBAAGjgYgwgYUwFgYD
+VR0RBA8wDYILbG9jYWxob3N0AGgwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMB0GA1UdDgQWBBQj187YstD4jjyCJmzx9SqKSJBYZjAfBgNVHSMEGDAW
+gBQSyrpLRgSndYos6A5UlLwSZaZ7zjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUA
+A4IBAQAouXfqSo3WpftyW9bNYEAzVr/dI/+/6C4QzTCrJKRD2Jhx41lmPji9uPsZ
+GhOPocg5k7WDjWJSqXpbDWlHQFxRTDq+p8lfe5NJIFkjMHzZSt0pLO2W/cu4E/82
+LCfOKMOm0Ni6jDifeP9Ux3YFN0f101WcLBJBgRTKSKK3bQVJK8X1e2Ntb80/9I10
+UQf/4UDVlmDYyDhaFfnF/eFeowKVkEv8ikLecjFyPd2i3xlCyPqodxFn5mSM0P1F
+/fBJjOGF5vUfR8au8nDD6JnQzZ2IazO6uWU99LH00Dx2nBienshiKUOO9y8sEjc5
+AiZOS7AUMIC7Lcz8k9zJi8BpEnE2
 -----END CERTIFICATE-----
index edf776f..d075157 100644 (file)
@@ -1,11 +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=
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjx1L7fQKxpwtMLaYqsFdrXgv5
+nkvn0KxVQ0f6seD8sGMwhDH1lUSQmrciAW/HFxa+WhnuRzWQpV4nuoZHO8Vj0vLG
+odusvrEvTMKYhhly1fkSRQm8I+IA6026mXG1SvtJjE3zC07PSHvIBjeSNf+7T+qY
+rxOsqM2fp+B42xW8OwIDAQABoAAwDQYJKoZIhvcNAQELBQADgYEAC6NxWuiENuj/
+oPsopZy/tVZzbioXZP/S9ECCbdgy33bg9zKwQYLeHOSgXxJzES+RhJwQCliFV17j
+jM1CH7heggwkPAx5KelyZ20DeoeaYOi/xv7TjozrZ+EkmivHKBJi3+qNjNYH0ul9
+HhQBO5+sSDAGLMkWL/nAfYKbf/8KSvA=
 -----END CERTIFICATE REQUEST-----
index 14be0ba..93642f4 100644 (file)
Binary files a/tests/certs/Server-localhost0h-sv.der and b/tests/certs/Server-localhost0h-sv.der differ
index 99e6107..e69de29 100644 (file)
@@ -1,5 +0,0 @@
------BEGIN DH PARAMETERS-----
-MIGHAoGBAL/3hRxvWX+Mdyu/aBPU1JeeA5sg4nXtA7B24eCql9Tq53Lks1/HJ5B+
-xSapGAFd+22xhBsNkJihf74oiPEVr9nNoLjFV/DZe259+JYgs+pBTFN+Cp13ALUi
-CeZxX2mlxlstD1SBRTKgxA/j4ttR1Chn8knn+RVdFE9YFKCYPyLrAgEC
------END DH PARAMETERS-----
index 95c4666..5fcc9c5 100644 (file)
@@ -1,15 +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=
+MIICXAIBAAKBgQDjx1L7fQKxpwtMLaYqsFdrXgv5nkvn0KxVQ0f6seD8sGMwhDH1
+lUSQmrciAW/HFxa+WhnuRzWQpV4nuoZHO8Vj0vLGodusvrEvTMKYhhly1fkSRQm8
+I+IA6026mXG1SvtJjE3zC07PSHvIBjeSNf+7T+qYrxOsqM2fp+B42xW8OwIDAQAB
+AoGAHdkk2qfLDpShOl5RBA8PpZYxY4iG0d3ad2HVsNhWb0Z9+QGZumDRF1Hu5Zni
+l+hCprcP5tWWA1poODSNHBCNEQRYZcHrfZlh+sDiV6ZmexBg7x9D5azyRbn20vr1
+79UxmisRxnDQQHCfOmgZtgs1EZXnFOs0OotoZAHFr+GLtQECQQD+R2TaWMCEPKJc
+IswGBqLGL8cyy+v2d5Glt5l+xzb/KCdY9cbOR/B9wq//0Nvqyiq1I1jUBVw9NJi/
+eBx/OYxhAkEA5VIC6uMpIck0Qxpbj7/H3k2pBf1HROgmLEq+cVLFgY62CIpTgleO
+SAzTmn0vDXir0jQHJn+JTokvn0PxyNquGwJBAJW+77rSl5WIq8j8yRAnakayrmnQ
+w8ZjBggExsVthorfV8TBAPJMVWmKdOF/W3O62UnRZid+fKKize28S3P1LSECQDF8
+3FJSSWsYH6YnhwDjkz9fJQ281eeB7dL7IlQUV7kY0iHPsCvdtz/HPNcHEuNmWjYX
+sj9VoI0JP/Sv1frRbmcCQDPaeWowPGf1Xtj0oTSlA6KQsKZPO7t15nivgX/AnZWQ
+01l8q6GPHeYwyG/caD3BZwAavsVLg9nhKx0lf0wExM0=
 -----END RSA PRIVATE KEY-----
diff --git a/tests/certs/Server-localhost0h-sv.p12 b/tests/certs/Server-localhost0h-sv.p12
deleted file mode 100644 (file)
index 82e03c7..0000000
Binary files a/tests/certs/Server-localhost0h-sv.p12 and /dev/null differ
index 45be9c3..a953370 100644 (file)
@@ -2,11 +2,11 @@ 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
+keyUsage       = keyEncipherment,digitalSignature,keyAgreement
 extendedKeyUsage = serverAuth
 subjectKeyIdentifier = hash
 authorityKeyIdentifier = keyid
-basicConstraints = critical,CA:false
+basicConstraints = CA:false
 [ req ]
 default_bits                    = 1024
 distinguished_name              = req_DN
@@ -25,33 +25,32 @@ commonName_value              = localhost
 # 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=
+MIICXAIBAAKBgQDjx1L7fQKxpwtMLaYqsFdrXgv5nkvn0KxVQ0f6seD8sGMwhDH1
+lUSQmrciAW/HFxa+WhnuRzWQpV4nuoZHO8Vj0vLGodusvrEvTMKYhhly1fkSRQm8
+I+IA6026mXG1SvtJjE3zC07PSHvIBjeSNf+7T+qYrxOsqM2fp+B42xW8OwIDAQAB
+AoGAHdkk2qfLDpShOl5RBA8PpZYxY4iG0d3ad2HVsNhWb0Z9+QGZumDRF1Hu5Zni
+l+hCprcP5tWWA1poODSNHBCNEQRYZcHrfZlh+sDiV6ZmexBg7x9D5azyRbn20vr1
+79UxmisRxnDQQHCfOmgZtgs1EZXnFOs0OotoZAHFr+GLtQECQQD+R2TaWMCEPKJc
+IswGBqLGL8cyy+v2d5Glt5l+xzb/KCdY9cbOR/B9wq//0Nvqyiq1I1jUBVw9NJi/
+eBx/OYxhAkEA5VIC6uMpIck0Qxpbj7/H3k2pBf1HROgmLEq+cVLFgY62CIpTgleO
+SAzTmn0vDXir0jQHJn+JTokvn0PxyNquGwJBAJW+77rSl5WIq8j8yRAnakayrmnQ
+w8ZjBggExsVthorfV8TBAPJMVWmKdOF/W3O62UnRZid+fKKize28S3P1LSECQDF8
+3FJSSWsYH6YnhwDjkz9fJQ281eeB7dL7IlQUV7kY0iHPsCvdtz/HPNcHEuNmWjYX
+sj9VoI0JP/Sv1frRbmcCQDPaeWowPGf1Xtj0oTSlA6KQsKZPO7t15nivgX/AnZWQ
+01l8q6GPHeYwyG/caD3BZwAavsVLg9nhKx0lf0wExM0=
 -----END RSA PRIVATE KEY-----
 Certificate:
     Data:
         Version: 3 (0x2)
-        Serial Number:
-            0b:98:95:00:0c:7e
-        Signature Algorithm: sha1WithRSAEncryption
+        Serial Number: 14269504311662 (0xcfa60bc516e)
+    Signature Algorithm: sha1WithRSAEncryption
         Issuer:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
-            commonName                = Nothern Nowhere Trust Anchor
+            commonName                = Northern Nowhere Trust Anchor
         Validity
-            Not Before: May 27 21:37:54 2010 GMT
-            Not After : Aug 13 21:37:54 2018 GMT
+            Not Before: Mar 21 15:07:11 2015 GMT
+            Not After : Jun  7 15:07:11 2023 GMT
         Subject:
             countryName               = NN
             organizationName          = Edel Curl Arctic Illudium Research Cloud
@@ -60,68 +59,63 @@ Certificate:
             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
+                    00:e3:c7:52:fb:7d:02:b1:a7:0b:4c:2d:a6:2a:b0:
+                    57:6b:5e:0b:f9:9e:4b:e7:d0:ac:55:43:47:fa:b1:
+                    e0:fc:b0:63:30:84:31:f5:95:44:90:9a:b7:22:01:
+                    6f:c7:17:16:be:5a:19:ee:47:35:90:a5:5e:27:ba:
+                    86:47:3b:c5:63:d2:f2:c6:a1:db:ac:be:b1:2f:4c:
+                    c2:98:86:19:72:d5:f9:12:45:09:bc:23:e2:00:eb:
+                    4d:ba:99:71:b5:4a:fb:49:8c:4d:f3:0b:4e:cf:48:
+                    7b:c8:06:37:92:35:ff:bb:4f:ea:98:af:13:ac:a8:
+                    cd:9f:a7:e0:78:db:15:bc:3b
                 Exponent: 65537 (0x10001)
         X509v3 extensions:
             X509v3 Subject Alternative Name: 
                 DNS:localhost
             X509v3 Key Usage: 
-                Key Encipherment
+                Digital Signature, Key Encipherment, Key Agreement
             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
+                23:D7:CE:D8:B2:D0:F8:8E:3C:82:26:6C:F1:F5:2A:8A:48:90:58:66
             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
+                keyid:12:CA:BA:4B:46:04:A7:75:8A:2C:E8:0E:54:94:BC:12:65:A6:7B:CE
 
-            X509v3 Basic Constraints: critical
+            X509v3 Basic Constraints: 
                 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
+         28:b9:77:ea:4a:8d:d6:a5:fb:72:5b:d6:cd:60:40:33:56:bf:
+         dd:23:ff:bf:e8:2e:10:cd:30:ab:24:a4:43:d8:98:71:e3:59:
+         66:3e:38:bd:b8:fb:19:1a:13:8f:a1:c8:39:93:b5:83:8d:62:
+         52:a9:7a:5b:0d:69:47:40:5c:51:4c:3a:be:a7:c9:5f:7b:93:
+         49:20:59:23:30:7c:d9:4a:dd:29:2c:ed:96:fd:cb:b8:13:ff:
+         36:2c:27:ce:28:c3:a6:d0:d8:ba:8c:38:9f:78:ff:54:c7:76:
+         05:37:47:f5:d3:55:9c:2c:12:41:81:14:ca:48:a2:b7:6d:05:
+         49:2b:c5:f5:7b:63:6d:6f:cd:3f:f4:8d:74:51:07:ff:e1:40:
+         d5:96:60:d8:c8:38:5a:15:f9:c5:fd:e1:5e:a3:02:95:90:4b:
+         fc:8a:42:de:72:31:72:3d:dd:a2:df:19:42:c8:fa:a8:77:11:
+         67:e6:64:8c:d0:fd:45:fd:f0:49:8c:e1:85:e6:f5:1f:47:c6:
+         ae:f2:70:c3:e8:99:d0:cd:9d:88:6b:33:ba:b9:65:3d:f4:b1:
+         f4:d0:3c:76:9c:18:9e:9e:c8:62:29:43:8e:f7:2f:2c:12:37:
+         39:02:26:4e:4b:b0:14:30:80:bb:2d:cc:fc:93:dc:c9:8b:c0:
+         69:12:71:36
 -----BEGIN CERTIFICATE-----
-MIIDQzCCAiugAwIBAgIGC5iVAAx+MA0GCSqGSIb3DQEBBQUAMGcxCzAJBgNVBAYT
+MIIDQTCCAimgAwIBAgIGDPpgvFFuMA0GCSqGSIb3DQEBBQUAMGgxCzAJBgNVBAYT
 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=
+IENsb3VkMSYwJAYDVQQDDB1Ob3J0aGVybiBOb3doZXJlIFRydXN0IEFuY2hvcjAe
+Fw0xNTAzMjExNTA3MTFaFw0yMzA2MDcxNTA3MTFaMFQxCzAJBgNVBAYTAk5OMTEw
+LwYDVQQKDChFZGVsIEN1cmwgQXJjdGljIElsbHVkaXVtIFJlc2VhcmNoIENsb3Vk
+MRIwEAYDVQQDDAlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+AOPHUvt9ArGnC0wtpiqwV2teC/meS+fQrFVDR/qx4PywYzCEMfWVRJCatyIBb8cX
+Fr5aGe5HNZClXie6hkc7xWPS8sah26y+sS9MwpiGGXLV+RJFCbwj4gDrTbqZcbVK
++0mMTfMLTs9Ie8gGN5I1/7tP6pivE6yozZ+n4HjbFbw7AgMBAAGjgYgwgYUwFgYD
+VR0RBA8wDYILbG9jYWxob3N0AGgwCwYDVR0PBAQDAgOoMBMGA1UdJQQMMAoGCCsG
+AQUFBwMBMB0GA1UdDgQWBBQj187YstD4jjyCJmzx9SqKSJBYZjAfBgNVHSMEGDAW
+gBQSyrpLRgSndYos6A5UlLwSZaZ7zjAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUA
+A4IBAQAouXfqSo3WpftyW9bNYEAzVr/dI/+/6C4QzTCrJKRD2Jhx41lmPji9uPsZ
+GhOPocg5k7WDjWJSqXpbDWlHQFxRTDq+p8lfe5NJIFkjMHzZSt0pLO2W/cu4E/82
+LCfOKMOm0Ni6jDifeP9Ux3YFN0f101WcLBJBgRTKSKK3bQVJK8X1e2Ntb80/9I10
+UQf/4UDVlmDYyDhaFfnF/eFeowKVkEv8ikLecjFyPd2i3xlCyPqodxFn5mSM0P1F
+/fBJjOGF5vUfR8au8nDD6JnQzZ2IazO6uWU99LH00Dx2nBienshiKUOO9y8sEjc5
+AiZOS7AUMIC7Lcz8k9zJi8BpEnE2
 -----END CERTIFICATE-----
------BEGIN DH PARAMETERS-----
-MIGHAoGBAL/3hRxvWX+Mdyu/aBPU1JeeA5sg4nXtA7B24eCql9Tq53Lks1/HJ5B+
-xSapGAFd+22xhBsNkJihf74oiPEVr9nNoLjFV/DZe259+JYgs+pBTFN+Cp13ALUi
-CeZxX2mlxlstD1SBRTKgxA/j4ttR1Chn8knn+RVdFE9YFKCYPyLrAgEC
------END DH PARAMETERS-----
index 5e8944b..619d825 100644 (file)
@@ -2,11 +2,11 @@ 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
+keyUsage       = keyEncipherment,digitalSignature,keyAgreement
 extendedKeyUsage = serverAuth
 subjectKeyIdentifier = hash
 authorityKeyIdentifier = keyid
-basicConstraints = critical,CA:false
+basicConstraints = CA:false
 [ req ]
 default_bits                    = 1024
 distinguished_name              = req_DN
index 2b071d3..1b079f4 100644 (file)
Binary files a/tests/certs/Server-localhost0h-sv.pub.der and b/tests/certs/Server-localhost0h-sv.pub.der differ
index c403ac5..c34cc77 100644 (file)
@@ -1,6 +1,6 @@
 -----BEGIN PUBLIC KEY-----
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMqZErIuiQK+VM3K5t2kzzMsyl
-aGdaO7mGo5WIPuhjw+0AYBkDK11bVoraIV5xXNHj3lEYwRcUsTOQAFya5XMLqIic
-0AtUvOo6Od32ZYFLKZlMcdP3aX+A6OhtYUGDh+usLL0P6xv9ojeXbTFWuktR3bEB
-64n4Jd5bo+WyP0x3UwIDAQAB
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjx1L7fQKxpwtMLaYqsFdrXgv5
+nkvn0KxVQ0f6seD8sGMwhDH1lUSQmrciAW/HFxa+WhnuRzWQpV4nuoZHO8Vj0vLG
+odusvrEvTMKYhhly1fkSRQm8I+IA6026mXG1SvtJjE3zC07PSHvIBjeSNf+7T+qY
+rxOsqM2fp+B42xW8OwIDAQAB
 -----END PUBLIC KEY-----
index ffc1449..db4a90f 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index c899d70..395420e 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 @SET_MAKE@
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -78,8 +88,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 subdir = tests/certs/scripts
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/mkinstalldirs
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/m4/curl-confopts.m4 \
@@ -100,7 +108,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -125,6 +134,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -183,7 +193,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -203,6 +213,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -236,6 +247,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -247,17 +259,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -303,6 +316,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -324,7 +338,7 @@ top_srcdir = @top_srcdir@
 #
 # 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.
+# are also available at https://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
@@ -355,7 +369,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__confi
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/certs/scripts/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/certs/scripts/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -530,6 +543,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 6ac1388..4d2118a 100755 (executable)
@@ -50,15 +50,15 @@ echo "openssl x509 -set_serial $SERIAL -extfile $PREFIX-ca.prm -days $DURATION -
 
 $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 -text -in $PREFIX-$SERIAL-ca.cacert -nameopt multiline > $PREFIX-ca.cacert "
+$OPENSSL x509 -text -in $PREFIX-$SERIAL-ca.cacert -nameopt multiline > $PREFIX-ca.cacert
 
 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"
+echo "openssl x509 -in $PREFIX-ca.cacert -text -nameopt multiline > $PREFIX-ca.crt "
 
-$OPENSSL x509 -in $PREFIX-ca.cacert -text -out $PREFIX-ca.crt -nameopt multiline
+$OPENSSL x509 -in $PREFIX-ca.cacert -text -nameopt multiline > $PREFIX-ca.crt
 
 echo "openssl x509 -noout -text -in $PREFIX-ca.cacert -nameopt multiline"
 $OPENSSL x509 -noout -text -in $PREFIX-ca.cacert -nameopt multiline
index 80876ec..e7845c5 100755 (executable)
@@ -81,9 +81,9 @@ $OPENSSL rsa -in $PREFIX-sv.key -pubout -outform DER -out $PREFIX-sv.pub.der
 echo "openssl rsa -in $PREFIX-sv.key -pubout -outform PEM -out $PREFIX-sv.pub.pem"
 $OPENSSL rsa -in $PREFIX-sv.key -pubout -outform PEM -out $PREFIX-sv.pub.pem
 
-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"
+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 -text -nameopt multiline -sha1 > $PREFIX-sv.crt "
 
-$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 -text -nameopt multiline -sha1 > $PREFIX-sv.crt
 
 if [ "$P12." = YES. ] ; then
 
diff --git a/tests/data/CMakeLists.txt b/tests/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..dec92e5
--- /dev/null
@@ -0,0 +1,7 @@
+# Loads 'TESTCASES' from for the 'make show' target in runtests.pl
+transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+
+# Prints all available test cases. Do not quote TESTCASES, it must be displayed
+# as a space-separated string rather than comma-separated (a list in CMake).
+add_custom_target(show COMMAND echo ${TESTCASES})
index 6a0119d..50544ab 100644 (file)
@@ -10,3 +10,9 @@
 836
 882
 938
+# test 1801 causes problems on Mac OS X and github
+# https://github.com/curl/curl/issues/380
+1801
+# test 1510 casues problems on the CI on github
+# example: https://travis-ci.org/curl/curl/builds/81633600
+1510
index a4b281f..4ec0364 100644 (file)
@@ -5,7 +5,7 @@ test:
 # TESTCASES are taken from Makefile.inc
 include Makefile.inc
 
-EXTRA_DIST = $(TESTCASES) DISABLED
+EXTRA_DIST = $(TESTCASES) DISABLED CMakeLists.txt
 
 filecheck:
        @mkdir test-place; \
index 99229d9..9161735 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
@@ -25,7 +25,7 @@
 #
 # 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.
+# are also available at https://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
 #
 ###########################################################################
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -99,8 +109,6 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs
 subdir = tests/data
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
@@ -122,7 +130,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -147,6 +156,7 @@ am__can_run_installinfo = \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -205,7 +215,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -225,6 +235,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -258,6 +269,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -269,17 +281,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -325,6 +338,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -401,18 +415,21 @@ test800 test801 test802 test803 test804 test805 test806 test807 test808 \
 test809 test810 test811 test812 test813 test814 test815 test816 test817 \
 test818 test819 test820 test821 test822 test823 test824 test825 test826 \
 test827 test828 test829 test830 test831 test832 test833 test834 test835 \
-test836 \
+test836 test837 test838 test839 test840 test841 test842 test843 test844 \
+test845 \
 \
 test850 test851 test852 test853 test854 test855 test856 test857 test858 \
 test859 test860 test861 test862 test863 test864 test865 test866 test867 \
 test868 test869 test870 test871 test872 test873 test874 test875 test876 \
-test877 test878 test879 test880 test881 test882 \
+test877 test878 test879 test880 test881 test882 test883 test884 test885 \
+test886 test887 test888 test889 test890 \
 \
 test900 test901 test902 test903 test904 test905 test906 test907 test908 \
 test909 test910 test911 test912 test913 test914 test915 test916 test917 \
 test918 test919 test920 test921 test922 test923 test924 test925 test926 \
 test927 test928 test929 test930 test931 test932 test933 test934 test935 \
-test936 test937 test938 test939 test940 test941 \
+test936 test937 test938 test939 test940 test941 test942 test943 test944 \
+test945 test946 test947 test948 test949 \
 \
 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
 test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
@@ -430,14 +447,15 @@ test1096 test1097 test1098 test1099 test1100 test1101 test1102 test1103 \
 test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \
 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
-test1128 test1129 test1130 test1131 test1132 test1133 test1134 \
+test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
+test1136 test1137 test1138 \
 \
 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
 test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
 test1216 test1217 test1218 test1219 \
 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \
 test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \
-test1236 test1237 test1238 test1239 test1240 \
+test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \
 \
 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 \
 test1308 test1309 test1310 test1311 test1312 test1313 test1314 test1315 \
@@ -455,10 +473,10 @@ test1396 test1397 test1398 \
 \
 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
 test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
-test1416 test1417 test1418 test1419 test1420 \
-\
+test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
+test1424 \
 test1428 test1429 test1430 test1431 test1432 test1433 test1434 test1435 \
-test1436 \
+test1436 test1437 \
 \
 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
 test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
@@ -466,7 +484,9 @@ test1516 \
 \
 test1520 \
 \
-test1525 test1526 test1527 test1528 test1529 \
+test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
+\
+test1600 test1601 test1602 test1603 test1604 \
 \
 test1800 test1801 \
 \
@@ -476,11 +496,13 @@ test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
 test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
 test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
 test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
-test2032 test2033 test2034 test2035 test2036 test2037 test2038
+test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
+test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
+test2048
 
 
 # TESTCASES are taken from Makefile.inc
-EXTRA_DIST = $(TESTCASES) DISABLED
+EXTRA_DIST = $(TESTCASES) DISABLED CMakeLists.txt
 all: all-am
 
 .SUFFIXES:
@@ -496,7 +518,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/data/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -505,7 +526,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -671,6 +692,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 iall:
 install:
 test:
index 6467ca0..a13aac9 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -86,18 +86,21 @@ test800 test801 test802 test803 test804 test805 test806 test807 test808 \
 test809 test810 test811 test812 test813 test814 test815 test816 test817 \
 test818 test819 test820 test821 test822 test823 test824 test825 test826 \
 test827 test828 test829 test830 test831 test832 test833 test834 test835 \
-test836 \
+test836 test837 test838 test839 test840 test841 test842 test843 test844 \
+test845 \
 \
 test850 test851 test852 test853 test854 test855 test856 test857 test858 \
 test859 test860 test861 test862 test863 test864 test865 test866 test867 \
 test868 test869 test870 test871 test872 test873 test874 test875 test876 \
-test877 test878 test879 test880 test881 test882 \
+test877 test878 test879 test880 test881 test882 test883 test884 test885 \
+test886 test887 test888 test889 test890 \
 \
 test900 test901 test902 test903 test904 test905 test906 test907 test908 \
 test909 test910 test911 test912 test913 test914 test915 test916 test917 \
 test918 test919 test920 test921 test922 test923 test924 test925 test926 \
 test927 test928 test929 test930 test931 test932 test933 test934 test935 \
-test936 test937 test938 test939 test940 test941 \
+test936 test937 test938 test939 test940 test941 test942 test943 test944 \
+test945 test946 test947 test948 test949 \
 \
 test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \
 test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \
@@ -115,14 +118,15 @@ test1096 test1097 test1098 test1099 test1100 test1101 test1102 test1103 \
 test1104 test1105 test1106 test1107 test1108 test1109 test1110 test1111 \
 test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
 test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
-test1128 test1129 test1130 test1131 test1132 test1133 test1134 \
+test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
+test1136 test1137 test1138 \
 \
 test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
 test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
 test1216 test1217 test1218 test1219 \
 test1220 test1221 test1222 test1223 test1224 test1225 test1226 test1227 \
 test1228 test1229 test1230 test1231 test1232 test1233 test1234 test1235 \
-test1236 test1237 test1238 test1239 test1240 \
+test1236 test1237 test1238 test1239 test1240 test1241 test1242 test1243 \
 \
 test1300 test1301 test1302 test1303 test1304 test1305 test1306 test1307 \
 test1308 test1309 test1310 test1311 test1312 test1313 test1314 test1315 \
@@ -140,10 +144,10 @@ test1396 test1397 test1398 \
 \
 test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
 test1408 test1409 test1410 test1411 test1412 test1413 test1414 test1415 \
-test1416 test1417 test1418 test1419 test1420 \
-\
+test1416 test1417 test1418 test1419 test1420 test1421 test1422 test1423 \
+test1424 \
 test1428 test1429 test1430 test1431 test1432 test1433 test1434 test1435 \
-test1436 \
+test1436 test1437 \
 \
 test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
 test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
@@ -151,7 +155,9 @@ test1516 \
 \
 test1520 \
 \
-test1525 test1526 test1527 test1528 test1529 \
+test1525 test1526 test1527 test1528 test1529 test1530 test1531 \
+\
+test1600 test1601 test1602 test1603 test1604 \
 \
 test1800 test1801 \
 \
@@ -161,4 +167,6 @@ test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
 test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
 test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
 test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
-test2032 test2033 test2034 test2035 test2036 test2037 test2038
+test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
+test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
+test2048
index 4adbd89..60e68a8 100644 (file)
@@ -85,19 +85,17 @@ test
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/1001 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Content-Range: bytes 2-4/5\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 \r
 GET http://%HOSTIP:%HTTPPORT/1001 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1001", response="6af4d89c952f4dd4cc215a6878dc499d"\r
 Content-Range: bytes 2-4/5\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 3\r
 Expect: 100-continue\r
 \r
index 4c3bf16..83b87b9 100644 (file)
@@ -84,30 +84,27 @@ test
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/1002.upload1 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Content-Range: bytes 2-4/5\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 \r
 GET http://%HOSTIP:%HTTPPORT/1002.upload1 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload1", response="198aa9b6acb4b0c71d02a197a5e41f54"\r
 Content-Range: bytes 2-4/5\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 3\r
 Expect: 100-continue\r
 \r
 st
 GET http://%HOSTIP:%HTTPPORT/1002.upload2 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/1002.upload2", response="d711f0d2042786d930de635ba0d1a1d0"\r
 Content-Range: bytes 2-4/5\r
 User-Agent: curl/7.16.1\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 3\r
 Expect: 100-continue\r
 \r
index 5966ab3..6baf221 100644 (file)
@@ -32,8 +32,11 @@ This data will not be sent
 </errorcode>
 <protocol>
 opcode: 2
-filename: /invalid-file
 mode: octet
+tsize: 27
+blksize: 512
+timeout: 6
+filename: /invalid-file
 </protocol>
 </verify>
 </testcase>
index bcc503e..1dac395 100644 (file)
@@ -114,12 +114,10 @@ chkhostname curlhost
 CONNECT test.remote.example.com.1008:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.1008:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.example.com.1008:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.1008:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /path/10080002 HTTP/1.1\r
 User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4\r
index b0a93e5..e1929be 100644 (file)
@@ -37,8 +37,11 @@ tftp://%HOSTIP:%TFTPPORT//1009 --local-port 44444-45444
 <verify>
 <protocol>
 opcode: 1
-filename: /1009
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /1009
 </protocol>
 </verify>
 </testcase>
index 3ac9e12..3bd64bd 100644 (file)
@@ -119,17 +119,14 @@ chkhostname curlhost
 <protocol>
 CONNECT test.remote.example.com.1021:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.1021:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.example.com.1021:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.1021:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.example.com.1021:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.1021:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /path/10210002 HTTP/1.1\r
 User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4\r
index a0f215d..5a8ed4c 100644 (file)
@@ -94,9 +94,9 @@ a second line
 line three
 four is the number of lines
 PUT /1030 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1030", response="01cb59db1ddaac246b072d5f5f0716d9"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 85\r
 Expect: 100-continue\r
index 5691864..b0b6834 100644 (file)
@@ -47,8 +47,8 @@ HTTP HEAD with --range
 </strip>
 <protocol>
 HEAD /1032 HTTP/1.1\r
-Range: bytes=1-3\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=1-3\r
 Accept: */*\r
 \r
 </protocol>
index c475740..f142684 100644 (file)
@@ -55,7 +55,6 @@ http://invalid-utf8-
 GET http://invalid-utf8-â\90.local/page/1034 HTTP/1.1\r
 Host: invalid-utf8-â\90.local\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 20b434c..e1c2af6 100644 (file)
@@ -52,7 +52,6 @@ http://too-long-IDN-name-c
 GET http://too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local/page/1035 HTTP/1.1\r
 Host: too-long-IDN-name-cürl-rüles-la-la-la-dee-da-flooby-nooby.local\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 2466e70..e21ed81 100644 (file)
@@ -70,8 +70,8 @@ http://%HOSTIP:%HTTPPORT/1040 -C -
 </strip>
 <protocol>
 GET /1040 HTTP/1.1\r
-Range: bytes=100-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=100-\r
 Accept: */*\r
 \r
 </protocol>
index c0d23c6..c77d616 100644 (file)
@@ -57,8 +57,8 @@ http://%HOSTIP:%HTTPPORT/1041 -Tlog/test1041.txt -C -
 # it can skip part of the file or not.  Instead, it sends the entire file.
 <protocol>
 PUT /1041 HTTP/1.1\r
-Content-Range: bytes 0-99/100\r
 Host: %HOSTIP:%HTTPPORT\r
+Content-Range: bytes 0-99/100\r
 Accept: */*\r
 Content-Length: 100\r
 Expect: 100-continue\r
index f9a2255..dfebaa1 100644 (file)
@@ -85,8 +85,8 @@ http://%HOSTIP:%HTTPPORT/1042 -C 200
 </strip>
 <protocol>
 GET /1042 HTTP/1.1\r
-Range: bytes=200-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=200-\r
 Accept: */*\r
 \r
 </protocol>
index f9bd105..4ab4987 100644 (file)
@@ -75,8 +75,8 @@ http://%HOSTIP:%HTTPPORT/1043 -C -
 </strip>
 <protocol>
 GET /1043 HTTP/1.1\r
-Range: bytes=40-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=40-\r
 Accept: */*\r
 \r
 </protocol>
index c303473..f94ae58 100644 (file)
@@ -16,7 +16,7 @@ IPv6
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index e6054a4..60f4136 100644 (file)
@@ -37,8 +37,11 @@ tftp://%HOSTIP:%TFTPPORT//1049 --trace-ascii log/traceit --interface %CLIENTIP
 <verify>
 <protocol>
 opcode: 1
-filename: /1049
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /1049
 </protocol>
 </verify>
 </testcase>
index 1abb9b1..a0e5bea 100644 (file)
@@ -12,7 +12,7 @@ EPRT
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index 0731778..4eb34da 100644 (file)
@@ -44,8 +44,8 @@ http://%HOSTIP:%HTTPPORT/want/1058 -r -101
 </strip>
 <protocol>
 GET /want/1058 HTTP/1.1\r
-Range: bytes=-101\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=-101\r
 Accept: */*\r
 \r
 </protocol>
index 6820ea6..ee4e6a7 100644 (file)
@@ -51,7 +51,6 @@ ftp://test-number:1059/wanted/page -p -x %HOSTIP:%HTTPPORT
 <protocol>
 CONNECT test-number:1059 HTTP/1.1\r
 Host: test-number:1059\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index e4aea65..1094792 100644 (file)
@@ -887,12 +887,10 @@ http://test.remote.haxx.se.1060:8990/path/10600002 --proxy http://%HOSTIP:%HTTPP
 <protocol>
 CONNECT test.remote.haxx.se.1060:8990 HTTP/1.1\r
 Host: test.remote.haxx.se.1060:8990\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.haxx.se.1060:8990 HTTP/1.1\r
 Host: test.remote.haxx.se.1060:8990\r
 Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se.1060:8990", response="e1fbed39c26f4efe284adc0e576ff638"\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /path/10600002 HTTP/1.1\r
 Host: test.remote.haxx.se.1060:8990\r
index a55a272..4f53a87 100644 (file)
@@ -892,12 +892,10 @@ http://test.remote.haxx.se.1061:8990/path/10610002 --proxy http://%HOSTIP:%HTTPP
 <protocol>
 CONNECT test.remote.haxx.se.1061:8990 HTTP/1.1\r
 Host: test.remote.haxx.se.1061:8990\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.haxx.se.1061:8990 HTTP/1.1\r
 Host: test.remote.haxx.se.1061:8990\r
 Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se.1061:8990", response="4e23449fa93224834299e7282a70472c"\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /path/10610002 HTTP/1.1\r
 Host: test.remote.haxx.se.1061:8990\r
index d338e2c..4352e61 100644 (file)
@@ -100,8 +100,8 @@ a second line
 line three
 four is the number of lines
 PUT /1071 HTTP/1.0\r
-Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1071", response="df4cef6b52a30e65d472dd848d2055a1"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1071", response="df4cef6b52a30e65d472dd848d2055a1"\r
 Accept: */*\r
 Content-Length: 85\r
 \r
index 5b8f186..4b30c59 100644 (file)
@@ -79,8 +79,8 @@ a second line
 line three
 four is the number of lines
 PUT /1075 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 Content-Length: 85\r
 Expect: 100-continue\r
index a3c9024..e71d756 100644 (file)
@@ -30,7 +30,6 @@ Server: test-server/fake
 Content-Type: text/plain\r
 Content-Length: 9\r
 Funny-head: yesyes\r
-Proxy-Connection: Keep-Alive\r
 \r
 contents
 </data2>
@@ -63,12 +62,10 @@ FTP over HTTP proxy with downgrade to HTTP 1.0
 GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1077 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/10770002 HTTP/1.0\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index a9bb771..f04bad3 100644 (file)
@@ -56,7 +56,6 @@ HTTP 1.0 CONNECT with proxytunnel and downgrade GET to HTTP/1.0
 <proxy>
 CONNECT %HOSTIP.1078:%HTTPPORT HTTP/1.0\r
 Host: %HOSTIP.1078:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 <protocol>
index 24cd20d..ac7b899 100644 (file)
@@ -67,8 +67,8 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1079 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1079", response="e340c7cdca0950462070f46ee139e9f7"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1079", response="e340c7cdca0950462070f46ee139e9f7"\r
 Accept: */*\r
 \r
 </protocol>
index d3bec0c..1fb13cb 100644 (file)
@@ -92,18 +92,15 @@ http://first.host.it.is/we/want/that/page/10871000 -x %HOSTIP:%HTTPPORT --user i
 GET http://first.host.it.is/we/want/that/page/10871000 HTTP/1.1\r
 Host: first.host.it.is\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://first.host.it.is/we/want/that/page/10871000 HTTP/1.1\r
-Authorization: Basic aWFtOm15c2VsZg==\r
 Host: first.host.it.is\r
+Authorization: Basic aWFtOm15c2VsZg==\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://goto.second.host.now/10871002 HTTP/1.1\r
 Host: goto.second.host.now\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 13e7d03..9801fff 100644 (file)
@@ -93,19 +93,16 @@ http://first.host.it.is/we/want/that/page/10881000 -x %HOSTIP:%HTTPPORT --user i
 GET http://first.host.it.is/we/want/that/page/10881000 HTTP/1.1\r
 Host: first.host.it.is\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://first.host.it.is/we/want/that/page/10881000 HTTP/1.1\r
-Authorization: Basic aWFtOm15c2VsZg==\r
 Host: first.host.it.is\r
+Authorization: Basic aWFtOm15c2VsZg==\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://goto.second.host.now/10881002 HTTP/1.1\r
-Authorization: Basic aWFtOm15c2VsZg==\r
 Host: goto.second.host.now\r
+Authorization: Basic aWFtOm15c2VsZg==\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index adef432..ce843f0 100644 (file)
@@ -49,7 +49,6 @@ FTP with type=i over HTTP proxy
 GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/1092;type=i HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index dbcfd9f..2087c82 100644 (file)
@@ -37,8 +37,11 @@ TFTP retrieve with mode=i
 <verify>
 <protocol>
 opcode: 1
-filename: /1093
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /1093
 </protocol>
 </verify>
 </testcase>
index 2996550..9131722 100644 (file)
@@ -43,8 +43,11 @@ TFTP retrieve with mode=netascii
 <verify>
 <protocol>
 opcode: 1
-filename: /1094
 mode: netascii
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /1094
 </protocol>
 </verify>
 </testcase>
index a442120..6bfe54f 100644 (file)
@@ -74,9 +74,9 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1095 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="test \"this\" realm!!", nonce="1053604145", uri="/1095", response="a1c7931ece9e8617bae2715045e4f49f"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 3b733a5..81ea855 100644 (file)
@@ -67,7 +67,6 @@ CONNECT test.a.galaxy.far.far.away.1097:%HTTPPORT HTTP/1.1
 Host: test.a.galaxy.far.far.away.1097:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Proxy-Connection: Keep-Alive\r
 \r
 POST /1097 HTTP/1.1\r
 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\r
index 9805648..70a6f39 100644 (file)
@@ -49,12 +49,10 @@ ftp://ftp-site/moo/1098 ftp://ftp-site/moo/1098 --proxy http://%HOSTIP:%HTTPPORT
 GET ftp://ftp-site/moo/1098 HTTP/1.1\r
 Host: ftp-site:21\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET ftp://ftp-site/moo/1098 HTTP/1.1\r
 Host: ftp-site:21\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <stdout>
index cde4039..7aacc11 100644 (file)
@@ -32,11 +32,17 @@ tftp://%HOSTIP:%TFTPPORT/an/invalid-file tftp://%HOSTIP:%TFTPPORT//1099 --trace-
 <verify>
 <protocol>
 opcode: 1
-filename: an/invalid-file
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: an/invalid-file
 opcode: 1
-filename: /1099
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /1099
 </protocol>
 <stdout>
 data for 1099
index 10fa25d..cd61691 100644 (file)
@@ -93,24 +93,24 @@ chkhostname curlhost
 </strip>
 <protocol>
 POST /1100 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST /1100 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 18\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 stuff to send awayGET /1100 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 \r
 </protocol>
index 63887c4..75c6619 100644 (file)
@@ -45,8 +45,8 @@ http://user:secret@%HOSTIP:%HTTPPORT/gimme/1101
 </strip>
 <protocol>
 GET /gimme/1101 HTTP/1.1\r
-Authorization: Basic dXNlcjpzZWNyZXQ=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dXNlcjpzZWNyZXQ=\r
 Accept: */*\r
 \r
 </protocol>
index 21efe3c..4df81a1 100644 (file)
@@ -72,12 +72,10 @@ http://%HOSTIP:%HTTPPORT/want/1104 -L -x %HOSTIP:%HTTPPORT -c log/cookies.jar
 GET http://%HOSTIP:%HTTPPORT/want/1104 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://%HOSTIP:%HTTPPORT/want/data/11040002 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Cookie: test2=true\r
 \r
 </protocol>
index 9564775..76ac450 100644 (file)
@@ -55,7 +55,7 @@ userid=myname&password=mypassword
 </protocol>
 <file name="log/cookie1105.txt" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 127.0.0.1      FALSE   /we/want/       FALSE   0       foobar  name
index 0c6bec1..a2adbbb 100644 (file)
@@ -50,7 +50,6 @@ ftp://%HOSTIP:23456/1106
 GET ftp://%HOSTIP:23456/1106 HTTP/1.1\r
 Host: %HOSTIP:23456\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 5b69611..963f1ef 100644 (file)
@@ -73,13 +73,13 @@ partial body
 </strip>
 <protocol>
 GET /want/1117 HTTP/1.1\r
-Range: bytes=10-22\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=10-22\r
 Accept: */*\r
 \r
 GET /wantmore/11170001 HTTP/1.1\r
-Range: bytes=10-22\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=10-22\r
 Accept: */*\r
 \r
 </protocol>
index e704e05..405066f 100644 (file)
@@ -39,10 +39,8 @@ HTTP multiple provided Host: headers
 </strip>
 <protocol>
 GET /1121 HTTP/1.1\r
-Accept: */*\r
 Host: host1\r
-Host: host2\r
-Host: host3\r
+Accept: */*\r
 \r
 </protocol>
 </verify>
index f8db6eb..e290b53 100644 (file)
@@ -50,13 +50,13 @@ http://%HOSTIP:%HTTPPORT/1134 -u user1:password1 --next http://%HOSTIP:%HTTPPORT
 </strip>
 <protocol>
 GET /1134 HTTP/1.1\r
-Authorization: Basic dXNlcjE6cGFzc3dvcmQx\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dXNlcjE6cGFzc3dvcmQx\r
 Accept: */*\r
 \r
 GET /11340001 HTTP/1.1\r
-Authorization: Basic MnVzZXI6cGFzc3dvcmQy\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic MnVzZXI6cGFzc3dvcmQy\r
 Accept: */*\r
 \r
 [DISCONNECT]
diff --git a/tests/data/test1135 b/tests/data/test1135
new file mode 100644 (file)
index 0000000..960aade
--- /dev/null
@@ -0,0 +1,95 @@
+<testcase>
+<info>
+<keywords>
+source analysis
+CURL_EXTERN
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+
+# The VMS and OS/400 builds extract the CURL_EXTERN protos and use in
+# the build. We break binary compatibility by changing order. Only add
+# new entries last or bump the SONAME.
+# 
+ <name>
+Verify CURL_EXTERN order
+ </name>
+
+<command type="perl">
+%SRCDIR/extern-scan.pl %SRCDIR/..
+</command>
+</client>
+
+<verify>
+<stdout>
+CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
+CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n);
+CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
+CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
+CURL_EXTERN void curl_formfree(struct curl_httppost *form);
+CURL_EXTERN char *curl_getenv(const char *variable);
+CURL_EXTERN char *curl_version(void);
+CURL_EXTERN char *curl_easy_escape(CURL *handle,
+CURL_EXTERN char *curl_escape(const char *string,
+CURL_EXTERN char *curl_easy_unescape(CURL *handle,
+CURL_EXTERN char *curl_unescape(const char *string,
+CURL_EXTERN void curl_free(void *p);
+CURL_EXTERN CURLcode curl_global_init(long flags);
+CURL_EXTERN CURLcode curl_global_init_mem(long flags,
+CURL_EXTERN void curl_global_cleanup(void);
+CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
+CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
+CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
+CURL_EXTERN CURLSH *curl_share_init(void);
+CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
+CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
+CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
+CURL_EXTERN const char *curl_easy_strerror(CURLcode);
+CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
+CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
+CURL_EXTERN CURL *curl_easy_init(void);
+CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
+CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
+CURL_EXTERN void curl_easy_cleanup(CURL *curl);
+CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
+CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl);
+CURL_EXTERN void curl_easy_reset(CURL *curl);
+CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
+CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
+CURL_EXTERN int curl_mprintf(const char *format, ...);
+CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
+CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
+CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
+CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
+CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
+CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
+CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
+CURL_EXTERN char *curl_maprintf(const char *format, ...);
+CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
+CURL_EXTERN CURLM *curl_multi_init(void);
+CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
+CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
+CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
+CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
+CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
+CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
+CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
+CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
+</stdout>
+</verify>
+
+</testcase>
diff --git a/tests/data/test1136 b/tests/data/test1136
new file mode 100644 (file)
index 0000000..d3327e8
--- /dev/null
@@ -0,0 +1,64 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+cookies
+cookiejar
+PSL
+</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: test1=forbidden1; domain=example.ck; path=/;
+Set-Cookie: test2=allowed2; domain=www.example.ck; path=/;
+Set-Cookie: test3=forbidden3; domain=ck; path=/;
+Set-Cookie: test4=allowed4; domain=www.ck; path=/;
+Set-Cookie: test5=forbidden5; domain=z-1.compute-1.amazonaws.com; path=/;
+
+boo
+</data>
+</reply>
+
+# Client-side
+<client>
+<features>
+PSL
+</features>
+<server>
+http
+</server>
+<name>
+Check cookies against PSL
+</name>
+<setenv>
+TZ=GMT
+</setenv>
+<command>
+http://www.example.ck/1136 http://www.ck/1136 http://z-1.compute-1.amazonaws.com/1136 -b none -c log/jar1136.txt -x %HOSTIP:%HTTPPORT
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<file name="log/jar1136.txt" mode="text">
+# Netscape HTTP Cookie File
+# https://curl.haxx.se/docs/http-cookies.html
+# This file was generated by libcurl! Edit at your own risk.
+
+.www.example.ck        TRUE    /       FALSE   0       test2   allowed2
+.www.ck        TRUE    /       FALSE   0       test4   allowed4
+.z-1.compute-1.amazonaws.com   TRUE    /       FALSE   0       test5   forbidden5
+</file>
+</verify>
+</testcase>
diff --git a/tests/data/test1137 b/tests/data/test1137
new file mode 100644 (file)
index 0000000..a2bfcba
--- /dev/null
@@ -0,0 +1,52 @@
+<testcase>
+<info>
+<keywords>
+FTP
+PASV
+RETR
+--ignore-content-length
+</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 --ignore-content-length
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/1137 --ignore-content-length
+</command>
+
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous\r
+PASS ftp@example.com\r
+PWD\r
+EPSV\r
+PASV\r
+TYPE I\r
+RETR 1137\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1138 b/tests/data/test1138
new file mode 100644 (file)
index 0000000..0c91d20
--- /dev/null
@@ -0,0 +1,74 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+followlocation
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 302 OK swsclose\r
+Location: ../moo.html/?name=آغاز-سم-زدایی-از-بازار-پول&testcase=/11380002    \r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Connection: close\r
+\r
+</data>
+<data2>
+HTTP/1.1 200 OK swsclose\r
+Location: this should be ignored\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Connection: close\r
+\r
+body
+</data2>
+<datacheck>
+HTTP/1.1 302 OK swsclose\r
+Location: ../moo.html/?name=آغاز-سم-زدایی-از-بازار-پول&testcase=/11380002    \r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Connection: close\r
+\r
+HTTP/1.1 200 OK swsclose\r
+Location: this should be ignored\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Connection: close\r
+\r
+body
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP redirect with UTF-8 characters
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/we/are/all/twits/1138 -L
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /we/are/all/twits/1138 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+GET /we/are/all/moo.html/?name=%d8%a2%d8%ba%d8%a7%d8%b2-%d8%b3%d9%85-%d8%b2%d8%af%d8%a7%db%8c%db%8c-%d8%a7%d8%b2-%d8%a8%d8%a7%d8%b2%d8%a7%d8%b1-%d9%be%d9%88%d9%84&testcase=/11380002 HTTP/1.1\r
+User-Agent: curl/7.10 (i686-pc-linux-gnu) libcurl/7.10 OpenSSL/0.9.6c ipv6 zlib/1.1.3\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
+</testcase>
index 95b891a..06dbdf5 100644 (file)
@@ -47,8 +47,8 @@ http://%HOSTIP:%HTTPPORT/want/12 -r 100-200
 </strip>
 <protocol>
 GET /want/12 HTTP/1.1\r
-Range: bytes=100-200\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=100-200\r
 Accept: */*\r
 \r
 </protocol>
index 02502fb..d2f06b6 100644 (file)
@@ -70,8 +70,8 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1204 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 </protocol>
index 3fd8fdd..a50601f 100644 (file)
@@ -42,8 +42,8 @@ http://user:secret@%HOSTIP:%HTTPPORT/ulion/1212 --socks5 non-existing-host.haxx.
 </strip>
 <protocol>
 GET /ulion/1212 HTTP/1.1\r
-Authorization: Basic dXNlcjpzZWNyZXQ=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dXNlcjpzZWNyZXQ=\r
 Accept: */*\r
 \r
 </protocol>
index 729a703..bc146b0 100644 (file)
@@ -43,10 +43,9 @@ HTTP with proxy and host-only URL
 ^User-Agent:.*
 </strip>
 <protocol>
-GET HTTP://we.want.that.site.com.1213/ HTTP/1.1\r
+GET http://we.want.that.site.com.1213/ HTTP/1.1\r
 Host: we.want.that.site.com.1213\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 3eeb3e3..e703f7a 100644 (file)
@@ -46,7 +46,6 @@ HTTP with proxy and URL with ? and no slash separator
 GET http://we.want.that.site.com.1214/?moo=foo HTTP/1.1\r
 Host: we.want.that.site.com.1214\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index d49f71f..e22591c 100644 (file)
@@ -88,18 +88,16 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/1215 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 User-Agent: curl/7.30.0-DEV\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://%HOSTIP:%HTTPPORT/1215 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 User-Agent: curl/7.30.0-DEV\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 5beda79..6e45ac6 100644 (file)
@@ -50,13 +50,11 @@ example.fake        TRUE    /c      FALSE   2139150993      moo3    indeed
 GET http://example.fake/c/1216 HTTP/1.1\r
 Host: example.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Cookie: moo2=indeed; moo3=indeed\r
 \r
 GET http://bexample.fake/c/1216 HTTP/1.1\r
 Host: bexample.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 7d86547..9c2fc03 100644 (file)
@@ -14,7 +14,7 @@ cookies
 <data>
 HTTP/1.1 200 OK
 Date: Tue, 25 Sep 2001 19:37:44 GMT
-Set-Cookie: domain=.example.fake; bug=fixed;
+Set-Cookie: bug=fixed; domain=.example.fake;
 Content-Length: 21\r
 
 This server says moo
@@ -43,18 +43,15 @@ http://example.fake/c/1218 http://example.fake/c/1218 http://bexample.fake/c/121
 GET http://example.fake/c/1218 HTTP/1.1\r
 Host: example.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://example.fake/c/1218 HTTP/1.1\r
 Host: example.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Cookie: bug=fixed\r
 \r
 GET http://bexample.fake/c/1218 HTTP/1.1\r
 Host: bexample.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index a7e56a7..d0af517 100644 (file)
@@ -42,12 +42,10 @@ http://example.fake/hoge/1228 http://example.fake/hogege/ -b nonexisting -x %HOS
 GET http://example.fake/hoge/1228 HTTP/1.1\r
 Host: example.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://example.fake/hogege/ HTTP/1.1\r
 Host: example.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Cookie: path1=root\r
 \r
 </protocol>
index 77e7e8c..225ba3c 100644 (file)
@@ -74,8 +74,8 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1229 HTTP/1.1\r
-Authorization: Digest username="\\user\"", realm="testrealm", nonce="1053604145", uri="/1229", response="f2694d426040712584c156d3de72b8d6"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="\\user\"", realm="testrealm", nonce="1053604145", uri="/1229", response="f2694d426040712584c156d3de72b8d6"\r
 Accept: */*\r
 \r
 </protocol>
index 3c1d3d4..8ce4c4e 100644 (file)
@@ -69,7 +69,6 @@ http://[1234:1234:1234::4ce]:%HTTPPORT/wanted/page/1230 -p -x %HOSTIP:%HTTPPORT
 <protocol>
 CONNECT [1234:1234:1234::4ce]:%HTTPPORT HTTP/1.1\r
 Host: [1234:1234:1234::4ce]:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /wanted/page/1230 HTTP/1.1\r
 Host: [1234:1234:1234::4ce]:%HTTPPORT\r
index ead4336..1c5bc20 100644 (file)
@@ -53,12 +53,10 @@ HTTP URL with dotdot removal from path using an HTTP proxy
 GET http://test.remote.haxx.se.1232:8990/hej/but/1232?stupid=me/../1232 HTTP/1.1\r
 Host: test.remote.haxx.se.1232:8990\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://test.remote.haxx.se.1232:8990/hej/but/12320001 HTTP/1.1\r
 Host: test.remote.haxx.se.1232:8990\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 68f023d..21da17d 100644 (file)
@@ -38,8 +38,8 @@ URL with 1000+ letter user name + password
 </strip>
 <protocol>
 GET /1237 HTTP/1.1\r
-Authorization: Basic QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkI=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQTpCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkI=\r
 Accept: */*\r
 \r
 </protocol>
index 1859339..4c976c7 100644 (file)
@@ -38,8 +38,11 @@ tftp://%HOSTIP:%TFTPPORT//1238 -Y1000 -y2
 <verify>
 <protocol>
 opcode: 1
-filename: /1238
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /1238
 </protocol>
 # 28 = CURLE_OPERATION_TIMEDOUT
 <errorcode>
diff --git a/tests/data/test1241 b/tests/data/test1241
new file mode 100644 (file)
index 0000000..5a12732
--- /dev/null
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+# verify that dotdot removal can be disabled!
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Content-Length: 6
+Connection: close
+
+-foo-
+</data>
+
+<data1>
+HTTP/1.1 200 OK
+Content-Length: 7
+Connection: close
+
+-cool-
+</data1>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+HTTP _without_ dotdot removal
+ </name>
+ <command>
+--path-as-is --proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.1241:8990/../../hej/but/who/../1241?stupid=me/../1241#soo/../1241 http://test.remote.haxx.se.1241:8990/../../hej/but/who/../12410001#/../12410001
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://test.remote.haxx.se.1241:8990/../../hej/but/who/../1241?stupid=me/../1241 HTTP/1.1\r
+Host: test.remote.haxx.se.1241:8990\r
+Accept: */*\r
+\r
+GET http://test.remote.haxx.se.1241:8990/../../hej/but/who/../12410001 HTTP/1.1\r
+Host: test.remote.haxx.se.1241:8990\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1242 b/tests/data/test1242
new file mode 100644 (file)
index 0000000..c8bc3d4
--- /dev/null
@@ -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 without TFTP options requests
+ </name>
+ <command>
+tftp://%HOSTIP:%TFTPPORT//1242 --tftp-no-options --trace-ascii log/traceit
+</command>
+</client>
+
+#
+# Verify pseudo protocol after the test has been "shot"
+<verify>
+<protocol>
+opcode: 1
+mode: octet
+filename: /1242
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1243 b/tests/data/test1243
new file mode 100644 (file)
index 0000000..0303a5d
--- /dev/null
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+TFTP
+TFTP WRQ
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+tftp
+</server>
+ <name>
+TFTP send without TFTP options requests
+ </name>
+ <command>
+-T log/test1243.txt tftp://%HOSTIP:%TFTPPORT// --tftp-no-options --trace-ascii log/traceit
+</command>
+<file name="log/test1243.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
+mode: octet
+filename: /test1243.txt
+</protocol>
+</verify>
+</testcase>
index 827b1a0..6e6d9c1 100644 (file)
@@ -43,6 +43,7 @@ FTP (optional .netrc; no user/pass) dir list PASV
 # the following two lines were created while testing curl
 machine %HOSTIP login user1 password passwd1
 machine %HOSTIP login user2 password passwd2
+default login userdef password passwddef
 </file>
 </client>
 
index 840f3c5..9ffe0d5 100644 (file)
@@ -91,15 +91,15 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /1310 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAwAAAA\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /1310 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAE8AAAAYABgAZwAAAAAAAABAAAAACAAIAEAAAAAHAAcASAAAAAAAAAAAAAAAggEAAHRlc3R1c2VyVU5LTk9XTlpkQwKRCZFMhjj0tw47wEjKHRHlvzfxQamFcheMuv8v+xeqphEO5V41xRd7R9deOQ==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 078ada6..11e128a 100644 (file)
@@ -67,12 +67,10 @@ http://firstplace.example.com/want/1314 -L -x http://%HOSTIP:%HTTPPORT
 GET http://firstplace.example.com/want/1314 HTTP/1.1\r
 Host: firstplace.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://somewhere.example.com/reply/1314 HTTP/1.1\r
 Host: somewhere.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 0520b1b..a97da9c 100644 (file)
@@ -79,7 +79,6 @@ QUIT
 CONNECT pop.1319:%POP3PORT HTTP/1.1\r
 Host: pop.1319:%POP3PORT\r
 User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 </verify>
index 7a15f80..609f4c2 100644 (file)
@@ -66,7 +66,6 @@ body
 CONNECT smtp.1320:%SMTPPORT HTTP/1.1\r
 Host: smtp.1320:%SMTPPORT\r
 User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 </verify>
index 266fd88..b5ad277 100644 (file)
@@ -75,7 +75,6 @@ A005 LOGOUT
 CONNECT imap.1321:%IMAPPORT HTTP/1.1\r
 Host: imap.1321:%IMAPPORT\r
 User-Agent: curl/7.24.0-DEV (i686-pc-linux-gnu) libcurl/7.24.0-DEV OpenSSL/1.0.0e zlib/1.2.3.4 c-ares/1.7.6-DEV libidn/1.23 libssh2/1.4.0_DEV librtmp/2.2e\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 </verify>
index bb0cbac..2bcf64b 100644 (file)
@@ -33,7 +33,7 @@ GET /we/want/1326 HTTP/1.0
 \r
 </stdin>
  <command>
-telnet://%HOSTIP:%HTTPPORT
+telnet://%HOSTIP:%HTTPPORT --upload-file -
 </command>
 </client>
 
index 6896856..837ef8d 100644 (file)
@@ -75,13 +75,11 @@ HTTP --proxy-anyauth and 407 with cookies
 GET http://z.x.com/1331 HTTP/1.1\r
 Host: z.x.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://z.x.com/1331 HTTP/1.1\r
-Proxy-Authorization: Basic bXluYW1lOm15cGFzc3dvcmQ=\r
 Host: z.x.com\r
+Proxy-Authorization: Basic bXluYW1lOm15cGFzc3dvcmQ=\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Cookie: proxycookie=weirdo\r
 \r
 </protocol>
index 72989c4..0ee7370 100644 (file)
@@ -46,15 +46,16 @@ Accept: */*
 </protocol>
 <stripfile>
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 <file name="log/test1400.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
index e709c8e..602b09a 100644 (file)
@@ -43,9 +43,9 @@ http://%HOSTIP:%HTTPPORT/we/want/1401 --libcurl log/test1401.c --basic -u fake:u
 </strip>
 <protocol>
 GET /we/want/1401 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 User-Agent: stripped\r
 Authorization: Basic ZmFrZTp1c2Vy\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Cookie: chocolate=chip\r
 X-Files: Mulder\r
@@ -53,15 +53,16 @@ X-Men: cyclops, iceman
 \r
 </protocol>
 <stripfile>
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 <file name="log/test1401.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
index c3bf834..0c2199e 100644 (file)
@@ -51,15 +51,16 @@ foo=bar&baz=quux
 <stripfile>
 # curl's default user-agent varies with version, libraries etc.
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 <file name="log/test1402.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
index 3ec7dd0..98f238f 100644 (file)
@@ -48,15 +48,16 @@ Accept: */*
 <stripfile>
 # curl's default user-agent varies with version, libraries etc.
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 <file name="log/test1403.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
index 4415697..a159e49 100644 (file)
@@ -83,15 +83,16 @@ dummy data
 <stripfile>
 # curl's default user-agent varies with version, libraries etc.
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 <file name="log/test1404.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
index 38bfd5c..f223954 100644 (file)
@@ -58,7 +58,7 @@ QUIT
 <file name="log/test1405.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
@@ -127,10 +127,11 @@ int main(int argc, char *argv[])
 # support, IOW depends on configuration - just ignore these.
 $_ = '' if /CURLOPT_USERAGENT/
 $_ = '' if /CURLOPT_MAXREDIRS/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 </verify>
 </testcase>
index c80459f..c7e4cd4 100644 (file)
@@ -57,7 +57,7 @@ body
 <file name="log/test1406.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
@@ -116,10 +116,11 @@ int main(int argc, char *argv[])
 <stripfile>
 # curl's default user-agent varies with version, libraries etc.
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 </verify>
 </testcase>
index e84463a..8f8cb2a 100644 (file)
@@ -44,7 +44,7 @@ QUIT
 <file name="log/test1407.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
@@ -94,10 +94,11 @@ int main(int argc, char *argv[])
 <stripfile>
 # curl's default user-agent varies with version, libraries etc.
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 </verify>
 </testcase>
index 971aac8..ae63290 100644 (file)
@@ -102,15 +102,15 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1412 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/1412", response="0390dbe89e31adca0413d11f91f30e7f"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /14120001 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/14120001", response="0085df91870374c8bf4e94415e7fbf8e"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index d97dfce..37cfb07 100644 (file)
@@ -57,13 +57,12 @@ http://example.com/we/want/1415 -b none -c log/jar1415.txt -x %HOSTIP:%HTTPPORT
 GET http://example.com/we/want/1415 HTTP/1.1\r
 Host: example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 
 <file name="log/jar1415.txt" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 .example.com   TRUE    /       FALSE   0       test1value      test1
index de133af..b3a2f23 100644 (file)
@@ -93,13 +93,13 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1418 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/1418", response="986238b7e0077754944c966f56d9bc77"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/1418", response="986238b7e0077754944c966f56d9bc77"\r
 Accept: */*\r
 \r
 GET /14180003 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/14180003", response="1c6390a67bac3283a9b023402f3b3540"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="loonie", nonce="314156592", uri="/14180003", response="1c6390a67bac3283a9b023402f3b3540"\r
 Accept: */*\r
 \r
 [DISCONNECT]
index 79ca675..7a86806 100644 (file)
@@ -50,7 +50,7 @@ A005 LOGOUT
 <file name="log/test1420.c" mode="text">
 /********* Sample code generated by the curl command line tool **********
  * All curl_easy_setopt() options are documented at:
- * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+ * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
  ************************************************************************/
 #include <curl/curl.h>
 
@@ -99,10 +99,11 @@ int main(int argc, char *argv[])
 <stripfile>
 # curl's default user-agent varies with version, libraries etc.
 s/(USERAGENT, \")[^\"]+/${1}stripped/
-# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just
-# ignore them
+# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
+# configurations - just ignore them
 $_ = '' if /CURLOPT_SSL_VERIFYPEER/
 $_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
+$_ = '' if /CURLOPT_HTTP_VERSION/
 </stripfile>
 </verify>
 </testcase>
diff --git a/tests/data/test1421 b/tests/data/test1421
new file mode 100644 (file)
index 0000000..889c938
--- /dev/null
@@ -0,0 +1,70 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK
+Uknown-header: blrub
+Content-Length: 6
+
+-foo-
+</data>
+
+<servercmd>
+connection-monitor
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+ <name>
+Re-using HTTP proxy connection for two different host names
+ </name>
+ <command>
+--proxy http://%HOSTIP:%HTTPPORT http://test.remote.haxx.se.1421:8990/ http://different.remote.haxx.se.1421:8990
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<stdout>
+HTTP/1.1 200 OK
+Uknown-header: blrub
+Content-Length: 6
+
+-foo-
+HTTP/1.1 200 OK
+Uknown-header: blrub
+Content-Length: 6
+
+-foo-
+</stdout>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET http://test.remote.haxx.se.1421:8990/ HTTP/1.1\r
+Host: test.remote.haxx.se.1421:8990\r
+Accept: */*\r
+\r
+GET http://different.remote.haxx.se.1421:8990/ HTTP/1.1\r
+Host: different.remote.haxx.se.1421:8990\r
+Accept: */*\r
+\r
+[DISCONNECT]
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test1422 b/tests/data/test1422
new file mode 100644 (file)
index 0000000..9b436cc
--- /dev/null
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+-J
+</keywords>
+</info>
+
+#
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Server: test-server/fake\r
+Content-Length: 0\r
+Connection: close\r
+Content-Type: text/html\r
+Content-Disposition: filename=name1422; charset=funny; option=strange\r
+\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+# this relies on the debug feature to allow us to set directory to store the
+# -O and -J output in, using the CURL_TESTDIR variable
+<features>
+debug
+</features>
+<server>
+http
+</server>
+<name>
+HTTP GET with -O -J and Content-Disposition (empty file)
+</name>
+<setenv>
+CURL_TESTDIR=%PWD/log
+</setenv>
+<command option="no-output,no-include">
+http://%HOSTIP:%HTTPPORT/1422 -J -O file://%PWD/log/name1422
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1422 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+
+<file1 name="log/name1422">
+</file1>
+
+</verify>
+</testcase>
diff --git a/tests/data/test1423 b/tests/data/test1423
new file mode 100644 (file)
index 0000000..908ff8c
--- /dev/null
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+</keywords>
+</info>
+
+#
+<reply>
+<data nocheck="yes">
+HTTP/1.1 200 OK\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Server: test-server/fake\r
+Content-Length: 0\r
+Connection: close\r
+Content-Type: text/html\r
+\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+file
+</server>
+<name>
+HTTP GET -o fname without Content-Disposition (empty file)
+</name>
+<command option="no-output,no-include">
+http://%HOSTIP:%HTTPPORT/1423 -o log/outfile1423 file://%PWD/log/outfile1423
+</command>
+<postcheck>
+perl %SRCDIR/libtest/notexists.pl log/1423
+</postcheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1423 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+
+<file1 name="log/outfile1423">
+</file1>
+
+</verify>
+</testcase>
diff --git a/tests/data/test1424 b/tests/data/test1424
new file mode 100644 (file)
index 0000000..17bc46a
--- /dev/null
@@ -0,0 +1,76 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+If-Modified-Since
+-z
+</keywords>
+</info>
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+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 GET -o fname without Content-Disposition (unmet time condition)
+</name>
+<file name="log/outfile1424">
+original contents
+</file>
+<command option="no-output,no-include">
+http://%HOSTIP:%HTTPPORT/1424 -z "dec 12 11:00:00 1999 GMT" -o log/outfile1424
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1424 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+If-Modified-Since: Sun, 12 Dec 1999 11:00:00 GMT\r
+\r
+</protocol>
+
+<file1 name="log/outfile1424">
+original contents
+</file1>
+
+</verify>
+</testcase>
index f976569..60fb8a9 100644 (file)
@@ -62,17 +62,16 @@ http://test.1428:%HTTPPORT/we/want/that/page/1428 -p -x %HOSTIP:%PROXYPORT --use
 </strip>
 <proxy>
 CONNECT test.1428:%HTTPPORT HTTP/1.1\r
-User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
 Host: test.1428:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
 header-type: proxy\r
 \r
 </proxy>
 <protocol>
 GET /we/want/that/page/1428 HTTP/1.1\r
+Host: test.1428:%HTTPPORT\r
 Authorization: Basic aWFtOm15OjtzZWxm\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Host: test.1428:%HTTPPORT\r
 Accept: */*\r
 header-type: server\r
 \r
index fba104b..0b33bb9 100644 (file)
@@ -81,8 +81,8 @@ http://%HOSTIP:%HTTPPORT/1434 -C 100
 </strip>
 <protocol>
 GET /1434 HTTP/1.1\r
-Range: bytes=100-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=100-\r
 Accept: */*\r
 \r
 </protocol>
diff --git a/tests/data/test1437 b/tests/data/test1437
new file mode 100644 (file)
index 0000000..19ccece
--- /dev/null
@@ -0,0 +1,84 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Digest auth
+</keywords>
+</info>
+# Server-side
+<reply>
+<data>
+HTTP/1.1 401 Authorization Required swsclose\r
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2\r
+WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, algorithm=MD5, nonce=1, nonce=2\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 26\r
+\r
+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\r
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 23\r
+\r
+This IS the real page!
+</data1000>
+
+<datacheck>
+HTTP/1.1 401 Authorization Required swsclose\r
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2\r
+WWW-Authenticate: Digest realm="testrealm", algorithm=MD5, algorithm=MD5, nonce=1, nonce=2\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 26\r
+\r
+HTTP/1.1 200 OK swsclose\r
+Server: Apache/1.3.27 (Darwin) PHP/4.1.2\r
+Content-Type: text/html; charset=iso-8859-1\r
+Content-Length: 23\r
+\r
+This IS the real page!
+</datacheck>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+!SSPI
+crypto
+</features>
+ <name>
+HTTP with duplicated WWW-Authenticate parameters
+ </name>
+ <command>
+http://%HOSTIP:%HTTPPORT/1437 -u testuser:testpass --digest
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /1437 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+GET /1437 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/1437", response="4376eb639bf8e7343a6e7b56e1b89c4f", algorithm="MD5"\r
+User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
+</testcase>
index f846fd0..69c5835 100644 (file)
@@ -87,15 +87,15 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /150 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /150 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index b4bfc66..18eb07f 100644 (file)
@@ -74,7 +74,6 @@ moo
 <proxy>
 CONNECT the.old.moo.1509:%HTTPPORT HTTP/1.1\r
 Host: the.old.moo.1509:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 <protocol>
index fdf6c7d..2767f60 100644 (file)
@@ -3,6 +3,7 @@
 <keywords>
 HTTP
 verbose logs
+flaky
 </keywords>
 </info>
 
index 4a63f18..ba0c18a 100644 (file)
@@ -7,16 +7,20 @@ PROGRESSFUNCTION
 
 # Server-side
 <reply>
+<data nocheck="yes">
+HTTP/1.1 204 PARTIAL\r
+X-Comment: partial response to keep the client waiting\r
+</data>
+<postcmd>
+wait 10
+</postcmd>
 </reply>
 
 # Client-side
 <client>
 <server>
-none
-</server>
-<features>
 http
-</features>
+</server>
 <tool>
 lib1513
 </tool>
@@ -26,7 +30,7 @@ return failure immediately from progress callback
 
 # this server/host won't be used for real
  <command>
-http://localhost/1513
+http://%HOSTIP:%HTTPPORT/1513
 </command>
 </client>
 
@@ -38,5 +42,8 @@ http://localhost/1513
 <errorcode>
 42
 </errorcode>
+<stdout>
+PROGRESSFUNCTION called
+</stdout>
 </verify>
 </testcase>
index 3a49d1b..7417924 100644 (file)
@@ -32,6 +32,10 @@ Content-Length: 6
 
 hello
 </data2>
+<datacheck>
+hello
+hello
+</datacheck>
 </reply>
 
 <client>
@@ -45,7 +49,7 @@ lib1515
 caching of manual libcurl DNS entries after DNS cache timeout
 </name>
 <command>
-/path/1515 %HOSTIP %HTTPPORT
+path/1515 %HOSTIP %HTTPPORT
 </command>
 </client>
 
index 0560d5c..d8f6883 100644 (file)
@@ -58,7 +58,6 @@ CURLOPT_PROXYHEADER is ignored CURLHEADER_UNIFIED
 <proxy>
 CONNECT the.old.moo.1525:%HTTPPORT HTTP/1.1\r
 Host: the.old.moo.1525:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 User-Agent: Http Agent\r
 \r
 </proxy>
index aa111c8..9f5d09e 100644 (file)
@@ -58,7 +58,6 @@ CURLOPT_PROXYHEADER: separate host/proxy headers
 <proxy>
 CONNECT the.old.moo.1526:%HTTPPORT HTTP/1.1\r
 Host: the.old.moo.1526:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 User-Agent: Proxy Agent\r
 \r
 </proxy>
index ee4887a..69ae6e4 100644 (file)
@@ -45,7 +45,7 @@ http-proxy
 lib1527
 </tool>
  <name>
-Check same headers are generated without CURLOPT_PROXYHEADER
+Check same headers are generated with CURLOPT_HEADEROPT == CURLHEADER_UNIFIED
  </name>
  <command>
  http://the.old.moo.1527:%HTTPPORT/1527 %HOSTIP:%PROXYPORT
@@ -57,7 +57,6 @@ Check same headers are generated without CURLOPT_PROXYHEADER
 <proxy>
 CONNECT the.old.moo.1527:%HTTPPORT HTTP/1.1\r
 Host: the.old.moo.1527:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 User-Agent: Http Agent\r
 Expect: 100-continue\r
 \r
index 876806a..e60f600 100644 (file)
@@ -51,7 +51,6 @@ Separately specified proxy/server headers sent in a proxy GET
 GET http://the.old.moo:%HTTPPORT/1528 HTTP/1.1\r
 Host: the.old.moo:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 User-Agent: Http Agent\r
 Proxy-User-Agent: Http Agent2\r
 \r
index 89560f8..fc1d812 100644 (file)
@@ -86,21 +86,21 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /1530001 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530001", response="f4f83139396995bac665f24a1f1055c7"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /1530002 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/1530002", response="f84511b014fdd0ba6494f42871079c32"\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /1530002 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="999999", uri="/1530002", cnonce="MTA4MzIy", nc="00000001", qop="auth", response="25291c357671604a16c0242f56721c07", algorithm="MD5"\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
diff --git a/tests/data/test1530 b/tests/data/test1530
new file mode 100644 (file)
index 0000000..8372d29
--- /dev/null
@@ -0,0 +1,30 @@
+<testcase>
+<info>
+<keywords>
+CURLOPT_OPENSOCKETFUNCTION
+</keywords>
+</info>
+
+<client>
+<server>
+none
+</server>
+<features>
+http
+</features>
+<tool>
+lib1530
+</tool>
+ <name>
+CURLOPT_OPENSOCKETFUNCTION returns bad socket
+ </name>
+</client>
+
+# it should be detected and an error should be reported
+<verify>
+# 7 == CURLE_COULDNT_CONNECT
+<errorcode>
+7
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test1531 b/tests/data/test1531
new file mode 100644 (file)
index 0000000..d58deb6
Binary files /dev/null and b/tests/data/test1531 differ
index aa7989e..3d693f4 100644 (file)
@@ -93,9 +93,9 @@ Content-Length: 85
 Expect: 100-continue\r
 \r
 PUT /154 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="gimme all yer s3cr3ts", nonce="11223344", uri="/154", response="b71551e12d1c456e47d8388ecb2edeca"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 85\r
 Expect: 100-continue\r
index 4e0870a..46f890f 100644 (file)
@@ -118,15 +118,15 @@ Content-Length: 85
 Expect: 100-continue\r
 \r
 PUT /155 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 Content-Length: 0\r
 \r
 PUT /155 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 85\r
 Expect: 100-continue\r
index e05ceef..5a06217 100644 (file)
@@ -21,34 +21,20 @@ Server: Microsoft-IIS/5.0
 Content-Type: text/html; charset=iso-8859-1\r
 Content-Length: 34\r
 WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
+Connection: close\r
 \r
 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\r
-Server: Microsoft-IIS/5.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 32\r
-\r
-Finally, this is the real page!
-</data1002>
-
 <datacheck>
 HTTP/1.1 401 Now gimme that second request of crap\r
 Server: Microsoft-IIS/5.0\r
 Content-Type: text/html; charset=iso-8859-1\r
 Content-Length: 34\r
 WWW-Authenticate: NTLM TlRMTVNTUAACAAAAAgACADAAAAAGgoEAc51AYVDgyNcAAAAAAAAAAG4AbgAyAAAAQ0MCAAQAQwBDAAEAEgBFAEwASQBTAEEAQgBFAFQASAAEABgAYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAwAsAGUAbABpAHMAYQBiAGUAdABoAC4AYwBjAC4AaQBjAGUAZABlAHYALgBuAHUAAAAAAA==\r
+Connection: close\r
 \r
-HTTP/1.1 200 Things are fine in server land swsclose\r
-Server: Microsoft-IIS/5.0\r
-Content-Type: text/html; charset=iso-8859-1\r
-Content-Length: 32\r
-\r
-Finally, this is the real page!
+This is not the real page either!
 </datacheck>
 
 </reply>
@@ -64,7 +50,7 @@ debug
 http
 </server>
  <name>
-HTTP with NTLM authorization when talking HTTP/1.0
+HTTP with NTLM authorization when talking HTTP/1.0 (known to fail)
  </name>
  <setenv>
 # we force our own host name, in order to make the test machine independent
@@ -87,15 +73,9 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /159 HTTP/1.0\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
-Accept: */*\r
-\r
-GET /159 HTTP/1.0\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 98539be..9d9a9cc 100644 (file)
@@ -31,7 +31,7 @@ http
 HTTP with proxy authorization
  </name>
  <command>
- -U fake@user:§§§looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x %HOSTIP:%HTTPPORT http://we.want.that.site.com/16
+ -U fake@user:loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong -x %HOSTIP:%HTTPPORT http://we.want.that.site.com/16
 </command>
 </client>
 
@@ -42,10 +42,9 @@ HTTP with proxy authorization
 </strip>
 <protocol>
 GET http://we.want.that.site.com/16 HTTP/1.1\r
-Proxy-Authorization: Basic ZmFrZUB1c2VyOqenp2xvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZw==\r
 Host: we.want.that.site.com\r
+Proxy-Authorization: Basic ZmFrZUB1c2VyOmxvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29uZw==\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
diff --git a/tests/data/test1600 b/tests/data/test1600
new file mode 100644 (file)
index 0000000..8804074
--- /dev/null
@@ -0,0 +1,27 @@
+<testcase>
+<info>
+<keywords>
+unittest
+NTLM
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+NTLM
+</features>
+ <name>
+NTLM unit tests
+ </name>
+<tool>
+unit1600
+</tool>
+</client>
+
+</testcase>
diff --git a/tests/data/test1601 b/tests/data/test1601
new file mode 100644 (file)
index 0000000..125493b
--- /dev/null
@@ -0,0 +1,26 @@
+<testcase>
+<info>
+<keywords>
+unittest
+MD5
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+ <name>
+MD5 unit tests
+ </name>
+<tool>
+unit1601
+</tool>
+</client>
+
+</testcase>
diff --git a/tests/data/test1602 b/tests/data/test1602
new file mode 100644 (file)
index 0000000..4717058
--- /dev/null
@@ -0,0 +1,26 @@
+<testcase>
+<info>
+<keywords>
+unittest
+hash
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+ <name>
+Internal hash create/add/destroy testing, exercising clean functions
+ </name>
+<tool>
+unit1602
+</tool>
+</client>
+
+</testcase>
diff --git a/tests/data/test1603 b/tests/data/test1603
new file mode 100644 (file)
index 0000000..805c9e3
--- /dev/null
@@ -0,0 +1,26 @@
+<testcase>
+<info>
+<keywords>
+unittest
+hash
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+ <name>
+Internal hash add, retrieval, deletion testing
+ </name>
+<tool>
+unit1603
+</tool>
+</client>
+
+</testcase>
diff --git a/tests/data/test1604 b/tests/data/test1604
new file mode 100644 (file)
index 0000000..cf20775
--- /dev/null
@@ -0,0 +1,25 @@
+<testcase>
+<info>
+<keywords>
+unittest
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<server>
+none
+</server>
+<features>
+unittest
+</features>
+ <name>
+Test WIN32/MSDOS filename sanitization
+ </name>
+<tool>
+unit1604
+</tool>
+</client>
+
+</testcase>
index 828c2a5..cc4c82d 100644 (file)
@@ -47,11 +47,10 @@ http://%HOSTIP:%HTTPPORT/162 --proxy http://%HOSTIP:%HTTPPORT --proxy-user foo:b
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/162 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 User-Agent: curl/7.8.1-pre3 (sparc-sun-solaris2.7) libcurl 7.8.1-pre3 (OpenSSL 0.9.6a) (krb4 enabled)\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <errorcode>
index 227bd71..9240611 100644 (file)
@@ -59,8 +59,8 @@ http://%HOSTIP:%HTTPPORT/want/164 -r 0-10,12-15
 </strip>
 <protocol>
 GET /want/164 HTTP/1.1\r
-Range: bytes=0-10,12-15\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=0-10,12-15\r
 Accept: */*\r
 \r
 </protocol>
index ddfe1e9..b475fde 100644 (file)
@@ -51,7 +51,6 @@ http://www.
 GET http://www.xn--4cab6c.se/page/165 HTTP/1.1\r
 Host: www.xn--4cab6c.se\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 550803a..76f9e5c 100644 (file)
@@ -61,19 +61,17 @@ http://data.from.server.requiring.digest.hohoho.com/167 --proxy http://%HOSTIP:%
 </strip>
 <protocol>
 GET http://data.from.server.requiring.digest.hohoho.com/167 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Proxy-Authorization: Basic Zm9vOmJhcg==\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://data.from.server.requiring.digest.hohoho.com/167 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Proxy-Authorization: Basic Zm9vOmJhcg==\r
 Authorization: Digest username="digest", realm="weirdorealm", nonce="12345", uri="/167", response="13c7c02a252cbe1c46d8669898a3be26"\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index e46b726..0f4e025 100644 (file)
@@ -75,25 +75,22 @@ http://data.from.server.requiring.digest.hohoho.com/168 --proxy http://%HOSTIP:%
 </strip>
 <protocol>
 GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1\r
-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\r
 Host: data.from.server.requiring.digest.hohoho.com\r
+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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/168", response="fb8608e00ad9239a3dedb14bc8575976"\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://data.from.server.requiring.digest.hohoho.com/168 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Proxy-Authorization: Digest username="foo", realm="weirdorealm", nonce="12345", uri="/168", response="fb8608e00ad9239a3dedb14bc8575976"\r
 Authorization: Digest username="digest", realm="realmweirdo", nonce="123456", uri="/168", response="ca87f2d768a231e2d637a55698d5c416"\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index f236a89..be5b4c6 100644 (file)
@@ -104,25 +104,22 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://data.from.server.requiring.digest.hohoho.com/169 HTTP/1.1\r
+Host: data.from.server.requiring.digest.hohoho.com\r
 Authorization: Digest username="digest", realm="r e a l m", nonce="abcdef", uri="/169", response="95d48591985a03c4b49cb962aa7bd3e6"\r
 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\r
-Host: data.from.server.requiring.digest.hohoho.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 259580b..de03c1d 100644 (file)
@@ -45,8 +45,8 @@ request MOOO
 <verify>
 <protocol>
 MOOO /that.site.com/17 HTTP/1.1\r
-User-Agent: agent007 license to drill  \r
 Host: %HOSTIP:%HTTPPORT\r
+User-Agent: agent007 license to drill  \r
 Accept: */*\r
 \r
 </protocol>
index f0e596b..48a263f 100644 (file)
@@ -36,11 +36,10 @@ http://a.galaxy.far.far.away/170 --proxy http://%HOSTIP:%HTTPPORT --proxy-user f
 </strip>
 <protocol>
 POST http://a.galaxy.far.far.away/170 HTTP/1.1\r
+Host: a.galaxy.far.far.away\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: a.galaxy.far.far.away\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 \r
 </protocol>
index 147be0a..3b9f7ba 100644 (file)
@@ -44,12 +44,11 @@ HTTP, get cookie with dot prefixed full domain
 GET http://z.x.com/171 HTTP/1.1\r
 Host: z.x.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <file name="log/jar171" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 .z.x.com       TRUE    /       FALSE   0       XToken  xt
index 3d53418..ad36284 100644 (file)
@@ -31,7 +31,7 @@ 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/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 .%HOSTIP       TRUE    /silly/ FALSE   0       ismatch this
index ffff82c..73c53ca 100644 (file)
@@ -68,16 +68,16 @@ http://%HOSTIP:%HTTPPORT/176 -u auser:apasswd --ntlm -d "junkelijunk"
 </strip>
 <protocol nonewline="yes">
 POST /176 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST /176 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 Content-Length: 11\r
 Content-Type: application/x-www-form-urlencoded\r
index f8f7811..1cd5bad 100644 (file)
@@ -49,7 +49,6 @@ supertrooper.fake     FALSE   /c      FALSE   2139150993      moo2    indeed
 GET http://supertrooper.fake/c/179 HTTP/1.1\r
 Host: supertrooper.fake\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Cookie: moo2=indeed\r
 \r
 </protocol>
index 3e069f5..0aedfed 100644 (file)
@@ -23,7 +23,6 @@ lies!
 
 <datacheck>
 HTTP/1.1 101 Switching!
-
 </datacheck>
 
 # listen to the upgrade request!
@@ -62,5 +61,9 @@ Upgrade: %H2CVER
 HTTP2-Settings: AAMAAABkAAQAAP__\r
 \r
 </protocol>
+# CURLE_HTTP2: Send failure: Broken pipe
+<errorcode>
+16
+</errorcode>
 </verify>
 </testcase>
index f34dc0c..b447109 100644 (file)
@@ -42,13 +42,11 @@ 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\r
 Host: deathstar.another.galaxy\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://a.galaxy.far.far.away/183 HTTP/1.1\r
 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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 
index e42a393..9cadc82 100644 (file)
@@ -59,15 +59,13 @@ http://deathstar.another.galaxy/184 -L -H "Host: another.visitor.stay.a.while.st
 </strip>
 <protocol>
 GET http://deathstar.another.galaxy/184 HTTP/1.1\r
+Host: another.visitor.stay.a.while.stay.foreeeeeever\r
 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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-Host: another.visitor.stay.a.while.stay.foreeeeeever\r
 \r
 GET http://yet.another.host/184 HTTP/1.1\r
 Host: yet.another.host\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 
index 01a66f6..dbef6e7 100644 (file)
@@ -59,15 +59,13 @@ http://deathstar.another.galaxy/185 -L -H "Host: another.visitor.stay.a.while.st
 </strip>
 <protocol>
 GET http://deathstar.another.galaxy/185 HTTP/1.1\r
+Host: another.visitor.stay.a.while.stay.foreeeeeever\r
 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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-Host: another.visitor.stay.a.while.stay.foreeeeeever\r
 \r
 GET http://deathstar.another.galaxy/go/west/185 HTTP/1.1\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Host: another.visitor.stay.a.while.stay.foreeeeeever\r
+Accept: */*\r
 \r
 </protocol>
 
index 0303544..a23a2a1 100644 (file)
@@ -62,15 +62,15 @@ http://%HOSTIP:%HTTPPORT/188 -C 50 -L
 </strip>
 <protocol>
 GET /188 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Range: bytes=50-\r
 User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /188 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Range: bytes=50-\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index deb6e89..f82b4ad 100644 (file)
@@ -56,15 +56,15 @@ http://%HOSTIP:%HTTPPORT/189 -C 50 -L
 </strip>
 <protocol>
 GET /189 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Range: bytes=50-\r
 User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /189 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Range: bytes=50-\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 555b486..533ed55 100644 (file)
@@ -48,11 +48,11 @@ http://%HOSTIP:%HTTPPIPEPORT/
 <file name="log/urls.txt">
 0 1k.txt
 1000 connection_close.txt
-0 1k.txt
-0 1k.txt
-0 1k.txt
-0 1k.txt
-0 1k.txt
+1 1k.txt
+2 1k.txt
+3 1k.txt
+4 1k.txt
+5 1k.txt
 </file>
 </client>
 
index 26f7f17..730446f 100644 (file)
@@ -60,8 +60,8 @@ http://%HOSTIP:%HTTPPORT/want/194 -C 87 --fail
 </strip>
 <protocol>
 GET /want/194 HTTP/1.1\r
-Range: bytes=87-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=87-\r
 Accept: */*\r
 \r
 </protocol>
index 22b4f18..9f9c506 100644 (file)
@@ -41,8 +41,8 @@ HTTP GET with user and password
 </strip>
 <protocol>
 GET /2 HTTP/1.1\r
-Authorization: Basic ZmFrZTp1c2Vy\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic ZmFrZTp1c2Vy\r
 Accept: */*\r
 \r
 </protocol>
index f39cd60..db96bfe 100644 (file)
@@ -88,8 +88,11 @@ TYPE I
 SIZE 20020002\r
 RETR 20020002\r
 opcode: 1
-filename: /20020003
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /20020003
 QUIT\r
 </protocol>
 <stdout>
index 57c0d24..59a743f 100644 (file)
@@ -88,11 +88,17 @@ TYPE I
 SIZE 20030002\r
 RETR 20030002\r
 opcode: 1
-filename: /20030003
 mode: octet
-opcode: 1
+tsize: 0
+blksize: 512
+timeout: 6
 filename: /20030003
+opcode: 1
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /20030003
 EPSV\r
 SIZE 20030002\r
 RETR 20030002\r
index bad6f7b..8035183 100644 (file)
@@ -43,11 +43,17 @@ for several protocols
 <verify>
 <protocol>
 opcode: 1
-filename: /2004
 mode: octet
-opcode: 1
+tsize: 0
+blksize: 512
+timeout: 6
 filename: /2004
+opcode: 1
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /2004
 </protocol>
 <stdout>
 Test data file
index 9b04ff3..382b6cb 100644 (file)
@@ -133,28 +133,28 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20230100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20230200 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20230300 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20230400 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20230500 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 </protocol>
index 9c155a2..cd06b7c 100644 (file)
@@ -147,28 +147,28 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20240100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20240200 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20240200", response="ed646c565f79e2dd9fa37cb5a621213c"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20240200", response="ed646c565f79e2dd9fa37cb5a621213c"\r
 Accept: */*\r
 \r
 GET /20240300 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20240400 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20240400", response="9741ced8caacc6124770187b36f007c5"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20240400", response="9741ced8caacc6124770187b36f007c5"\r
 Accept: */*\r
 \r
 GET /20240500 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20240500", response="5bc77ec8c2d443b27a1b55f1fd8fbb13"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20240500", response="5bc77ec8c2d443b27a1b55f1fd8fbb13"\r
 Accept: */*\r
 \r
 </protocol>
index 03b6b14..1eae482 100644 (file)
@@ -228,43 +228,43 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20250100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20250200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20250200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20250300 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20250400 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20250400 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20250500 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20250500 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 </protocol>
index b1d2341..afbd4f3 100644 (file)
@@ -187,13 +187,13 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /20260100 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20260100", response="5f992a2e761ab926256419f7c685f85b"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20260100", response="5f992a2e761ab926256419f7c685f85b"\r
 Accept: */*\r
 \r
 GET /20260200 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20260300 HTTP/1.1\r
@@ -201,18 +201,18 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /20260300 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20260300", response="132242e602882251929be93228c830ae"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="3", uri="/20260300", response="132242e602882251929be93228c830ae"\r
 Accept: */*\r
 \r
 GET /20260400 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20260500 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 </protocol>
index e9a62d6..3302a15 100644 (file)
@@ -210,13 +210,13 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /20270100 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20270100", response="f7fd60eefaff5225971bf9b3d80d6ba6"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20270100", response="f7fd60eefaff5225971bf9b3d80d6ba6"\r
 Accept: */*\r
 \r
 GET /20270200 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20270200", response="785ca3ef511999f7e9c178195f5b388c"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20270200", response="785ca3ef511999f7e9c178195f5b388c"\r
 Accept: */*\r
 \r
 GET /20270300 HTTP/1.1\r
@@ -224,23 +224,23 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /20270300 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20270300", response="4c735d2360fd6848e7cb32a11ae3612b"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20270300", response="4c735d2360fd6848e7cb32a11ae3612b"\r
 Accept: */*\r
 \r
 GET /20270400 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20270400", response="f5906785511fb60a2af8b1cd53008ead"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20270400", response="f5906785511fb60a2af8b1cd53008ead"\r
 Accept: */*\r
 \r
 GET /20270400 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20270400", response="f5906785511fb60a2af8b1cd53008ead"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20270400", response="f5906785511fb60a2af8b1cd53008ead"\r
 Accept: */*\r
 \r
 GET /20270500 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="7", uri="/20270500", response="8ef4d935fd964a46c3965c0863b52cf1"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="7", uri="/20270500", response="8ef4d935fd964a46c3965c0863b52cf1"\r
 Accept: */*\r
 \r
 </protocol>
index 2a03836..1ae1fae 100644 (file)
@@ -268,18 +268,18 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /20280100 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20280100", response="53c80666f5e3a4a55f92a66aaf0078bb"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="1", uri="/20280100", response="53c80666f5e3a4a55f92a66aaf0078bb"\r
 Accept: */*\r
 \r
 GET /20280200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20280200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20280300 HTTP/1.1\r
@@ -287,28 +287,28 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /20280300 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20280300", response="1aa5d90da9803ca12d04b24e0f19476e"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="4", uri="/20280300", response="1aa5d90da9803ca12d04b24e0f19476e"\r
 Accept: */*\r
 \r
 GET /20280400 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20280400 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20280500 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20280500 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 </protocol>
index 7c697e3..42866a3 100644 (file)
@@ -201,38 +201,38 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20290100 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20290100 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20290200 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20290300 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20290300 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20290400 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6d3JvbmdwYXNz\r
 Accept: */*\r
 \r
 GET /20290500 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 </protocol>
index a80c15e..5c2754c 100644 (file)
@@ -253,43 +253,43 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20300100 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20300100 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20300200 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20300200", response="2f2d784ba53a0a307758a90e98d25c27"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="2", uri="/20300200", response="2f2d784ba53a0a307758a90e98d25c27"\r
 Accept: */*\r
 \r
 GET /20300300 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20300300 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20300400 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20300400", response="d6262e9147db08c62ff2f53b515861e8"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20300400", response="d6262e9147db08c62ff2f53b515861e8"\r
 Accept: */*\r
 \r
 GET /20300400 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20300400", response="d6262e9147db08c62ff2f53b515861e8"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="5", uri="/20300400", response="d6262e9147db08c62ff2f53b515861e8"\r
 Accept: */*\r
 \r
 GET /20300500 HTTP/1.1\r
-Authorization: Digest username="testuser", realm="testrealm", nonce="7", uri="/20300500", response="198757e61163a779cf24ed4c49c1ad7d"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="testuser", realm="testrealm", nonce="7", uri="/20300500", response="198757e61163a779cf24ed4c49c1ad7d"\r
 Accept: */*\r
 \r
 </protocol>
index 0df841b..bd5aa07 100644 (file)
@@ -267,53 +267,53 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20310100 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20310100 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20310200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20310200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20310300 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20310300 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20310400 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20310400 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBANgKEcT5xUUBHw5+0m4FjWTGNzg6PeHJHbaPwNwCt/tXcnIeTQCTMAg12SPDyNXMf3Rlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 GET /20310500 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20310500 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 </protocol>
index 23f44e6..f708665 100644 (file)
@@ -123,23 +123,23 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20320100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20320100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20320200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20320200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 </protocol>
index aacbe5e..6c41700 100644 (file)
@@ -124,23 +124,23 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /20320100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20320100 HTTP/1.1\r
-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 Accept: */*\r
 \r
 GET /20320200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 Accept: */*\r
 \r
 GET /20320200 HTTP/1.1\r
-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Host: 127.0.0.1:%HTTPPORT\r
+Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAAYABgAWAAAAAAAAABwAAAACAAIAHAAAAAIAAgAeAAAAAAAAAAAAAAABoIBAI+/Fp9IERAQ74OsdNPbBpg7o8CVwLSO4DtFyIcZHUMKVktWIu92s2892OVpd2JzqnRlc3R1c2VyY3VybGhvc3Q=\r
 Accept: */*\r
 \r
 </protocol>
diff --git a/tests/data/test2039 b/tests/data/test2039
new file mode 100644 (file)
index 0000000..1595ded
--- /dev/null
@@ -0,0 +1,63 @@
+<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 mode="text">
+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 (optional .netrc with 'default' override; no user/pass) dir list PASV
+ </name>
+ <command>
+--netrc-optional --netrc-file log/netrc2039 ftp://%HOSTIP:%FTPPORT/
+</command>
+<file name="log/netrc2039" >
+# the following two lines were created while testing curl
+default login userdef password passwddef
+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 userdef\r
+PASS passwddef\r
+PWD\r
+EPSV\r
+TYPE A\r
+LIST\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test2040 b/tests/data/test2040
new file mode 100644 (file)
index 0000000..ac60017
--- /dev/null
@@ -0,0 +1,69 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP Basic auth
+</keywords>
+</info>
+# Server-side
+<reply>
+
+<!-- First request has Basic auth, right password -->
+<data100>
+HTTP/1.1 200 Things are fine in server land
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 32
+
+Finally, this is the real page!
+</data100>
+
+<!-- Second request with Basic auth disabled -->
+<data200>
+HTTP/1.1 401 Sorry wrong password (2)
+Server: Microsoft-IIS/5.0
+Content-Type: text/html; charset=iso-8859-1
+Content-Length: 29
+WWW-Authenticate: Basic realm="testrealm"
+
+This is a bad password page!
+</data200>
+
+</reply>
+
+# Client-side
+<client>
+<server>
+http
+</server>
+<name>
+HTTP Basic authorization, then without authorization
+</name>
+<command option="no-output,no-include">
+-u testuser:testpass http://%HOSTIP:%HTTPPORT/20400100 --next --no-basic http://%HOSTIP:%HTTPPORT/20400200
+</command>
+</client>
+
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+GET /20400100 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
+Accept: */*\r
+\r
+GET /20400200 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+<stdout>
+Finally, this is the real page!
+This is a bad password page!
+</stdout>
+</verify>
+</testcase>
diff --git a/tests/data/test2041 b/tests/data/test2041
new file mode 100644 (file)
index 0000000..dcad2fd
--- /dev/null
@@ -0,0 +1,58 @@
+<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
+SSLpinning
+</features>
+<server>
+https Server-localhost-sv.pem
+</server>
+ <name>
+simple HTTPS GET with base64-sha256 public key pinning
+ </name>
+ <command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//pyh+fICi9M8MFEZvherIT0cs3MN+cXNGoU9Giwyx1so= https://localhost:%HTTPSPORT/2041
+</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 /2041 HTTP/1.1\r
+Host: localhost:%HTTPSPORT\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test2042 b/tests/data/test2042
new file mode 100644 (file)
index 0000000..2181e53
--- /dev/null
@@ -0,0 +1,44 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+PEM certificate
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+SSLpinning
+</features>
+<server>
+https Server-localhost-sv.pem
+</server>
+ <name>
+HTTPS wrong base64-sha256 pinnedpubkey but right CN
+ </name>
+ <command>
+--cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey sha256//bSIggTf+ikMG0CtmDlpMVBd7yi7H1md4URogRPqerso= https://localhost:%HTTPSPORT/2042
+</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>
+90
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test2043 b/tests/data/test2043
new file mode 100644 (file)
index 0000000..7a91f5b
--- /dev/null
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<features>
+WinSSL
+</features>
+<server>
+none
+</server>
+ <name>
+Disable certificate revocation checks
+ </name>
+ <command>
+--ssl-no-revoke -I https://revoked.grc.com/
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+0
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test2044 b/tests/data/test2044
new file mode 100644 (file)
index 0000000..33e81a8
--- /dev/null
@@ -0,0 +1,33 @@
+<testcase>
+<info>
+<keywords>
+--proto-default
+</keywords>
+</info>
+
+#
+# Client-side
+<client>
+<features>
+none
+</features>
+<server>
+none
+</server>
+<name>
+Attempt to set a default protocol that does not exist
+</name>
+<command>
+--proto-default DOESNOTEXIST
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# CURLE_UNSUPPORTED_PROTOCOL is error code 1
+<errorcode>
+1
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test2045 b/tests/data/test2045
new file mode 100644 (file)
index 0000000..3190f80
--- /dev/null
@@ -0,0 +1,54 @@
+<testcase>
+<info>
+<keywords>
+FTP
+--proto-default
+</keywords>
+</info>
+
+
+#
+# Server-side
+<reply>
+<!--
+The purpose of this test is to make sure the --proto-default option works
+properly. We specify a default protocol of FTP and if the option works properly
+curl will use the FTP protocol. If the option is broken however curl will use
+the HTTP protocol.
+In the broken scenario curl would use HTTP to talk to our FTP server. We handle
+that by replying with something that both protocols can understand. Our FTP
+server allows a custom welcome message, so we use that feature to make an HTTP
+reply that contains an FTP reply (think polyglot). In the case of FTP we expect
+curl will return CURLE_FTP_WEIRD_SERVER_REPLY so we test for that return code.
+-->
+<servercmd>
+REPLY welcome HTTP/1.1 200 OK\r\nContent-Length: 21\r\n\r\n500 Weird FTP Reply
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+none
+</features>
+<server>
+ftp
+</server>
+<name>
+Set the default protocol to ftp for a schemeless URL
+</name>
+<command>
+-H "User-Agent:" -H "Host:" -H "Accept:" --proto-default ftp %HOSTIP:%FTPPORT
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# CURLE_FTP_WEIRD_SERVER_REPLY is error code 8
+<errorcode>
+8
+</errorcode>
+</verify>
+</testcase>
diff --git a/tests/data/test2046 b/tests/data/test2046
new file mode 100644 (file)
index 0000000..133c14d
--- /dev/null
@@ -0,0 +1,94 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+IDN
+followlocation
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Content-Type: text/plain
+Location: ./20460001
+
+redirect
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Content-Type: text/plain; charset=us-ascii
+
+OK
+</data1>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+idn
+</features>
+<setenv>
+CHARSET=UTF-8
+</setenv>
+ <name>
+Connection re-use with IDN host name
+ </name>
+
+ <command>
+http://åäö.se:%HTTPPORT/2046 --resolve xn--4cab6c.se:%HTTPPORT:%HOSTIP -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 /2046 HTTP/1.1\r
+Host: xn--4cab6c.se:%HTTPPORT\r
+Accept: */*\r
+\r
+GET /20460001 HTTP/1.1\r
+Host: xn--4cab6c.se:%HTTPPORT\r
+Accept: */*\r
+\r
+</protocol>
+
+<stdout>
+HTTP/1.1 302 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Content-Type: text/plain
+Location: ./20460001
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Content-Type: text/plain; charset=us-ascii
+
+OK
+1
+1
+3
+http://åäö.se:%HTTPPORT/20460001
+text/plain; charset=us-ascii
+200
+</stdout>
+
+</verify>
+</testcase>
diff --git a/tests/data/test2047 b/tests/data/test2047
new file mode 100644 (file)
index 0000000..a8cca2f
--- /dev/null
@@ -0,0 +1,95 @@
+<testcase>
+<info>
+<keywords>
+HTTP
+HTTP GET
+HTTP proxy
+IDN
+followlocation
+--write-out
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data nocheck="yes">
+HTTP/1.1 302 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Content-Type: text/plain
+Location: ./20470001
+
+redirect
+</data>
+<data1 nocheck="yes">
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Content-Type: text/plain; charset=us-ascii
+
+OK
+</data1>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<features>
+idn
+</features>
+<setenv>
+CHARSET=UTF-8
+</setenv>
+ <name>
+Connection re-use with IDN host name over HTTP proxy
+ </name>
+
+ <command>
+http://åäö.se/2047 -x %HOSTIP:%HTTPPORT -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 http://xn--4cab6c.se/2047 HTTP/1.1\r
+Host: xn--4cab6c.se\r
+Accept: */*\r
+\r
+GET http://xn--4cab6c.se/20470001 HTTP/1.1\r
+Host: xn--4cab6c.se\r
+Accept: */*\r
+\r
+</protocol>
+
+<stdout>
+HTTP/1.1 302 OK swsbounce
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 9
+Content-Type: text/plain
+Location: ./20470001
+
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Content-Length: 3
+Content-Type: text/plain; charset=us-ascii
+
+OK
+1
+1
+3
+http://xn--4cab6c.se/20470001
+text/plain; charset=us-ascii
+200
+</stdout>
+
+</verify>
+</testcase>
diff --git a/tests/data/test2048 b/tests/data/test2048
new file mode 100644 (file)
index 0000000..eb2b1df
--- /dev/null
@@ -0,0 +1,40 @@
+<testcase>
+<info>
+<keywords>
+HTTPS
+HTTP GET
+PEM certificate
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+</reply>
+
+#
+# Client-side
+<client>
+<features>
+SSL
+SSLpinning
+</features>
+<server>
+https Server-localhost-sv.pem
+</server>
+<name>
+pinnedpubkey no-match must fail even when insecure
+</name>
+<command>
+--insecure --cacert %SRCDIR/certs/EdelCurlRoot-ca.crt --pinnedpubkey %SRCDIR/certs/Server-localhost.nn-sv.pub.der https://localhost:%HTTPSPORT/2034
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<errorcode>
+90
+</errorcode>
+</verify>
+</testcase>
index 5f0c885..efbc56e 100644 (file)
@@ -90,12 +90,10 @@ http://test.remote.haxx.se.206:8990/path/2060002 --proxy http://%HOSTIP:%HTTPPOR
 <protocol>
 CONNECT test.remote.haxx.se.206:8990 HTTP/1.1\r
 Host: test.remote.haxx.se.206:8990\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.haxx.se.206:8990 HTTP/1.1\r
 Host: test.remote.haxx.se.206:8990\r
 Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="test.remote.haxx.se.206:8990", response="003e36decb4dbf6366b3ecb9b87c24ec"\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /path/2060002 HTTP/1.1\r
 User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4\r
index a7a99b9..fb4c0ea 100644 (file)
@@ -54,10 +54,9 @@ the
 </strip>
 <protocol>
 PUT ftp://daniel:mysecret@host.com/we/want/208 HTTP/1.1\r
-Authorization: Basic ZGFuaWVsOm15c2VjcmV0\r
 Host: host.com:21\r
+Authorization: Basic ZGFuaWVsOm15c2VjcmV0\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 78\r
 Expect: 100-continue\r
 \r
index 961eba1..f868541 100644 (file)
@@ -104,12 +104,10 @@ chkhostname curlhost
 CONNECT test.remote.example.com.209:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.209:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.example.com.209:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.209:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET /path/2090002 HTTP/1.1\r
 User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4\r
index edbb6a6..7ceed98 100644 (file)
@@ -104,12 +104,10 @@ chkhostname curlhost
 CONNECT test.remote.example.com.213:%HTTPPORT HTTP/1.0\r
 Host: test.remote.example.com.213:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.example.com.213:%HTTPPORT HTTP/1.0\r
 Host: test.remote.example.com.213:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
-Proxy-Connection: Keep-Alive\r
 \r
 POST /path/2130002 HTTP/1.1\r
 User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4\r
index f10df56..0e0c0ad 100644 (file)
@@ -44,7 +44,6 @@ http://test.remote.example.com.217:%HTTPPORT/path/2170002 --proxy http://%HOSTIP
 <protocol>
 CONNECT test.remote.example.com.217:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.217:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 # CURLE_RECV_ERROR
index d165da9..996855d 100644 (file)
@@ -77,17 +77,15 @@ http://first.host.it.is/we/want/that/page/233 -x %HOSTIP:%HTTPPORT --user iam:my
 </strip>
 <protocol>
 GET http://first.host.it.is/we/want/that/page/233 HTTP/1.1\r
+Host: first.host.it.is\r
 Proxy-Authorization: Basic dGVzdGluZzp0aGlz\r
 Authorization: Basic aWFtOm15c2VsZg==\r
-Host: first.host.it.is\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://goto.second.host.now/2330002 HTTP/1.1\r
-Proxy-Authorization: Basic dGVzdGluZzp0aGlz\r
 Host: goto.second.host.now\r
+Proxy-Authorization: Basic dGVzdGluZzp0aGlz\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index d8c7081..f7da2b9 100644 (file)
@@ -79,18 +79,16 @@ http://first.host.it.is/we/want/that/page/234 -x %HOSTIP:%HTTPPORT --user iam:my
 </strip>
 <protocol>
 GET http://first.host.it.is/we/want/that/page/234 HTTP/1.1\r
+Host: first.host.it.is\r
 Proxy-Authorization: Basic dGVzdGluZzp0aGlz\r
 Authorization: Basic aWFtOm15c2VsZg==\r
-Host: first.host.it.is\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://goto.second.host.now/2340002 HTTP/1.1\r
+Host: goto.second.host.now\r
 Proxy-Authorization: Basic dGVzdGluZzp0aGlz\r
 Authorization: Basic aWFtOm15c2VsZg==\r
-Host: goto.second.host.now\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 89ccaef..275c81b 100644 (file)
@@ -79,20 +79,18 @@ chkhostname curlhost
 </strip>
 <protocol nonewline="yes">
 POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST http://%HOSTIP:%HTTPPORT/239 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 6\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
index 01d40bd..9457c58 100644 (file)
@@ -45,8 +45,8 @@ HTTP-IPv6 GET with username+password in URL
 </strip>
 <protocol>
 GET /242 HTTP/1.1\r
-Authorization: Basic Zm9vYmFyOmJhcmZvbw==\r
 Host: %HOST6IP:%HTTP6PORT\r
+Authorization: Basic Zm9vYmFyOmJhcmZvbw==\r
 Accept: */*\r
 \r
 </protocol>
index 0ac4222..bc09286 100644 (file)
@@ -100,28 +100,25 @@ chkhostname curlhost
 </strip>
 <protocol nonewline="yes">
 POST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 6\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 postitPOST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST http://%HOSTIP:%HTTPPORT/243 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 6\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
index 02a2772..cbb5ee3 100644 (file)
@@ -68,16 +68,16 @@ http://%HOSTIP:%HTTPPORT/245 -u auser:apasswd --digest -d "junkelijunk"
 </strip>
 <protocol nonewline="yes">
 POST /245 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST /245 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/245", response="379a439b1737ba257c1d2f103914b18b"\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 11\r
 Content-Type: application/x-www-form-urlencoded\r
index cfa31db..acf47da 100644 (file)
@@ -78,16 +78,16 @@ http://%HOSTIP:%HTTPPORT/246 -u auser:apasswd --digest -d "junkelijunk"
 </strip>
 <protocol nonewline="yes">
 POST /246 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST /246 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="auser", realm="testrealm", nonce="1053604144", uri="/246", response="761e6fc9a760c39d587092e8d840e740"\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 11\r
 Content-Type: application/x-www-form-urlencoded\r
index b3f4966..559ece0 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTP-ipv6
 IPv6
 EPSV
@@ -11,7 +12,7 @@ EPSV
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index 9be5f3d..8974a8b 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTP-ipv6
 IPv6
 EPRT
@@ -11,7 +12,7 @@ EPRT
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index 571b033..a9ea0cc 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTP-ipv6
 IPv6
 EPSV
@@ -12,7 +13,7 @@ EPSV
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index cc50c95..79d43af 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTP-ipv6
 IPv6
 EPRT
@@ -12,7 +13,7 @@ EPRT
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index 5f8323b..0acd9db 100644 (file)
@@ -47,11 +47,10 @@ download on.
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/want/256 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: Basic ZGFuaWVsOnN0ZW5iZXJn\r
 Range: bytes=78-\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 
index 45642d5..45dcbd5 100644 (file)
@@ -88,24 +88,21 @@ machine anotherone.com login user2 password passwd2
 </strip>
 <protocol>
 GET http://supersite.com/want/257 HTTP/1.1\r
+Host: supersite.com\r
 Authorization: Basic dXNlcjE6cGFzc3dkMQ==\r
 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\r
-Host: supersite.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://anotherone.com/2570002 HTTP/1.1\r
+Host: anotherone.com\r
 Authorization: Basic dXNlcjI6cGFzc3dkMg==\r
 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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://athird.com/2570003 HTTP/1.1\r
-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\r
+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
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 1173707..82c6731 100644 (file)
@@ -20,7 +20,6 @@ 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>
@@ -37,7 +36,6 @@ 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\r
@@ -80,10 +78,9 @@ bar
 </strip>
 <protocol>
 POST http://remotehost:54321/we/want/258 HTTP/1.1\r
-User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
 Host: remotehost:54321\r
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 409\r
 Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce\r
 \r
@@ -105,11 +102,10 @@ bar
 \r
 ------------------------------7c633d5c27ce--\r
 POST http://remotehost:54321/we/want/258 HTTP/1.1\r
+Host: remotehost:54321\r
 User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
 Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911", uri="/we/want/258", response="2501654ca391f0b5c8c12a1da77e34cd"\r
-Host: remotehost:54321\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 409\r
 Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce\r
 \r
index d4a8227..75b1f53 100644 (file)
@@ -76,10 +76,9 @@ bar
 </strip>
 <protocol>
 POST http://remotehost:54321/we/want/259 HTTP/1.1\r
-User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
 Host: remotehost:54321\r
+User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 409\r
 Expect: 100-continue\r
 Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce\r
@@ -102,11 +101,10 @@ bar
 \r
 ------------------------------7c633d5c27ce--\r
 POST http://remotehost:54321/we/want/259 HTTP/1.1\r
+Host: remotehost:54321\r
 User-Agent: curl/7.10.4 (i686-pc-linux-gnu) libcurl/7.10.4 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
 Proxy-Authorization: Digest username="uuuser", realm="many secrets", nonce="911", uri="/we/want/259", response="b479994d13e60f3aa192a67c5892ddc5"\r
-Host: remotehost:54321\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 409\r
 Expect: 100-continue\r
 Content-Type: multipart/form-data; boundary=----------------------------7c633d5c27ce\r
index 5088141..df0ba03 100644 (file)
@@ -47,7 +47,6 @@ HTTP-IPv6 GET with proxy specified using IPv6-numerical address
 GET http://veryveryremotesite.com/263 HTTP/1.1\r
 Host: veryveryremotesite.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 3cfb4d8..1174ca5 100644 (file)
@@ -39,10 +39,9 @@ http://we.want.that.site.com/264 -x http://f%61ke:user@%HOSTIP:%HTTPPORT
 </strip>
 <protocol>
 GET http://we.want.that.site.com/264 HTTP/1.1\r
-Proxy-Authorization: Basic ZmFrZTp1c2Vy\r
 Host: we.want.that.site.com\r
+Proxy-Authorization: Basic ZmFrZTp1c2Vy\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 1a162b8..79ab183 100644 (file)
@@ -107,12 +107,10 @@ chkhostname curlhost
 CONNECT test.remote.example.com.265:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.265:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
-Proxy-Connection: Keep-Alive\r
 \r
 CONNECT test.remote.example.com.265:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.265:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
-Proxy-Connection: Keep-Alive\r
 \r
 POST /path/2650002 HTTP/1.1\r
 User-Agent: curl/7.12.3-CVS (i686-pc-linux-gnu) libcurl/7.12.3-CVS OpenSSL/0.9.6b zlib/1.1.4\r
index ea4a9cf..7cc8375 100644 (file)
@@ -86,9 +86,9 @@ chkhostname curlhost
 </strip>
 <protocol nonewline="yes">
 POST /267 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Header1: yes\r
 Header2: no\r
@@ -96,9 +96,9 @@ Content-Length: 0
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST /267 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Header1: yes\r
 Header2: no\r
index 5ae2ffd..6fed3d9 100644 (file)
@@ -11,7 +11,7 @@ cookies
 <data>
 HTTP/1.1 200 Mooo swsclose
 Connection: close
-Set-Cookie: path=/; thewinneris=nowayyouwin;
+Set-Cookie: thewinneris=nowayyouwin; path=/;
 Content-Length: 8
 
 *flopp*
index af5a6c6..06d5a8b 100644 (file)
@@ -36,8 +36,11 @@ tftp://%HOSTIP:%TFTPPORT//271 --trace-ascii log/traceit
 <verify>
 <protocol>
 opcode: 1
-filename: /271
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /271
 </protocol>
 </verify>
 </testcase>
index c8010d9..ce0be33 100644 (file)
@@ -74,9 +74,9 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /273 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/273", response="576ae57b1db0039f8c0de43ef58e49e3"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index ac54e25..6000454 100644 (file)
@@ -69,18 +69,17 @@ CONNECT remotesite.com.275:%HTTPPORT HTTP/1.1
 Host: remotesite.com.275:%HTTPPORT\r
 Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 <protocol>
 GET /we/want/that/page/275 HTTP/1.1\r
-Authorization: Basic aWFtOm15c2VsZg==\r
 Host: remotesite.com.275:%HTTPPORT\r
+Authorization: Basic aWFtOm15c2VsZg==\r
 Accept: */*\r
 \r
 GET /we/want/that/page/275 HTTP/1.1\r
-Authorization: Basic aWFtOm15c2VsZg==\r
 Host: remotesite.com.275:%HTTPPORT\r
+Authorization: Basic aWFtOm15c2VsZg==\r
 Accept: */*\r
 \r
 </protocol>
index 6c57822..e6f1ef7 100644 (file)
@@ -39,10 +39,9 @@ http://we.want.that.site.com/278 -x http://f%61ke:@%HOSTIP:%HTTPPORT
 </strip>
 <protocol>
 GET http://we.want.that.site.com/278 HTTP/1.1\r
-Proxy-Authorization: Basic ZmFrZTo=\r
 Host: we.want.that.site.com\r
+Proxy-Authorization: Basic ZmFrZTo=\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 5a1938c..5005daa 100644 (file)
@@ -40,10 +40,9 @@ http://we.want.that.site.com/279 -x http://f%61ke@%HOSTIP:%HTTPPORT
 </strip>
 <protocol>
 GET http://we.want.that.site.com/279 HTTP/1.1\r
-Proxy-Authorization: Basic ZmFrZTo=\r
 Host: we.want.that.site.com\r
+Proxy-Authorization: Basic ZmFrZTo=\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 922de51..0dc1270 100644 (file)
@@ -17,7 +17,7 @@ tftp
 TFTP retrieve on invalid file
  </name>
  <command>
-tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit
+tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit --tftp-blksize 1024
 </command>
 </client>
 
@@ -29,8 +29,11 @@ tftp://%HOSTIP:%TFTPPORT//invalid-file --trace-ascii log/traceit
 </errorcode>
 <protocol>
 opcode: 1
-filename: /invalid-file
 mode: octet
+tsize: 0
+blksize: 1024
+timeout: 6
+filename: /invalid-file
 </protocol>
 </verify>
 </testcase>
index 0c2a665..954c902 100644 (file)
@@ -60,8 +60,11 @@ tftp://%HOSTIP:%TFTPPORT//284 --trace-ascii log/traceit
 <verify>
 <protocol>
 opcode: 1
-filename: /284
 mode: octet
+tsize: 0
+blksize: 512
+timeout: 6
+filename: /284
 </protocol>
 </verify>
 </testcase>
index 75a1999..d7a4a39 100644 (file)
@@ -37,8 +37,11 @@ sent
 </upload>
 <protocol>
 opcode: 2
-filename: /test285.txt
 mode: octet
+tsize: 32
+blksize: 512
+timeout: 6
+filename: /test285.txt
 </protocol>
 </verify>
 </testcase>
index 841ee1e..b909fd3 100644 (file)
@@ -85,8 +85,11 @@ condition in the TFTP transmit code.
 </upload>
 <protocol>
 opcode: 2
-filename: /test286.txt
 mode: octet
+tsize: 512
+blksize: 512
+timeout: 6
+filename: /test286.txt
 </protocol>
 </verify>
 </testcase>
index ec4dfeb..526446f 100644 (file)
@@ -28,7 +28,7 @@ http
 HTTP proxy CONNECT with custom User-Agent header
  </name>
  <command>
-http://test.remote.example.com.287:%HTTPPORT/path/287 -H "User-Agent: looser/2007" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel
+http://test.remote.example.com.287:%HTTPPORT/path/287 -H "User-Agent: looser/2015" --proxy http://%HOSTIP:%HTTPPORT --proxytunnel --proxy-header "User-Agent: looser/2007"
 </command>
 </client>
 
@@ -37,7 +37,6 @@ http://test.remote.example.com.287:%HTTPPORT/path/287 -H "User-Agent: looser/200
 <protocol>
 CONNECT test.remote.example.com.287:%HTTPPORT HTTP/1.1\r
 Host: test.remote.example.com.287:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 User-Agent: looser/2007\r
 \r
 </protocol>
index a557a14..a7b7755 100644 (file)
@@ -43,10 +43,9 @@ FTP over HTTP proxy with user:pass not in url
 </strip>
 <protocol>
 GET ftp://michal:aybabtu@host.com/we/want/299 HTTP/1.1\r
-Authorization: Basic bWljaGFsOmF5YmFidHU=\r
 Host: host.com:21\r
+Authorization: Basic bWljaGFsOmF5YmFidHU=\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 2167b2a..0fe2764 100644 (file)
@@ -48,8 +48,8 @@ HTTP POST with auth and contents but with content-length set to 0
 </strip>
 <protocol nonewline="yes">
 POST /3 HTTP/1.1\r
-Authorization: Basic ZmFrZTotdXNlcg==\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic ZmFrZTotdXNlcg==\r
 Accept: */*\r
 Content-Length: 37\r
 Content-Type: application/x-www-form-urlencoded\r
index d5974ce..c404695 100644 (file)
@@ -45,8 +45,8 @@ HTTPS GET with user and password
 </strip>
 <protocol>
 GET /301 HTTP/1.1\r
-Authorization: Basic ZmFrZTp1c2Vy\r
 Host: %HOSTIP:%HTTPSPORT\r
+Authorization: Basic ZmFrZTp1c2Vy\r
 Accept: */*\r
 \r
 </protocol>
index dfcac04..2289d56 100644 (file)
@@ -53,6 +53,10 @@ Set-Cookie: test2=yes; domain=se; expires=Sat Feb 2 11:56:27 GMT 2030
 Set-Cookie: magic=yessir; path=/silly/; HttpOnly\r
 Set-Cookie: blexp=yesyes; domain=127.0.0.1; domain=127.0.0.1; expiry=totally bad;\r
 Set-Cookie: partialip=nono; domain=.0.0.1;\r
+Set-Cookie: withspaces=  yes  within and around    ;\r
+Set-Cookie: withspaces2 =before equals;\r
+Set-Cookie: prespace=  yes before;\r
+Set-Cookie: securewithspace=after    ; secure =\r
 \r
 boo
 </data>
@@ -93,7 +97,7 @@ Accept: */*
 </protocol>
 <file name="log/jar31.txt" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 127.0.0.1      FALSE   /silly/ FALSE   0       ismatch this
@@ -124,6 +128,10 @@ Accept: */*
 127.0.0.1      FALSE   /we/want/       FALSE   2054030187      nodomain        value
 #HttpOnly_127.0.0.1    FALSE   /silly/ FALSE   0       magic   yessir
 127.0.0.1      FALSE   /we/want/       FALSE   0       blexp   yesyes
+127.0.0.1      FALSE   /we/want/       FALSE   0       withspaces      yes  within and around
+127.0.0.1      FALSE   /we/want/       FALSE   0       withspaces2     before equals
+127.0.0.1      FALSE   /we/want/       FALSE   0       prespace        yes before
+127.0.0.1      FALSE   /we/want/       TRUE    0       securewithspace after
 </file>
 </verify>
 </testcase>
index 8f6df05..4b6f833 100644 (file)
@@ -28,8 +28,8 @@ Content-type: text/html
 <TR><TD>Cipher</TD><TD>AES-NNN-CBC</TD></TR>
 <TR><TD>MAC</TD><TD>SHA1</TD></TR>
 <TR><TD>Ciphersuite</TD><TD>SRP_SHA_AES_NNN_CBC_SHA1</TD></TR></p></TABLE>
-<hr><P>Your HTTP header was:<PRE>User-Agent: curl/7.21.4-DEV (x86_64-apple-darwin10.5.0) libcurl/7.21.4-DEV GnuTLS/2.10.4 zlib/1.2.5 libidn/1.19\r
-Host: localhost:9011\r
+<hr><P>Your HTTP header was:<PRE>Host: localhost:9011\r
+User-Agent: curl-test-suite\r
 Accept: */*\r
 \r
 </PRE></P>
@@ -50,7 +50,7 @@ TLS-SRP
 simple TLS-SRP HTTPS GET, check user in response
  </name>
 <command>
---insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword abc https://%HOSTIP:%HTTPTLSPORT
+--insecure --tlsauthtype SRP --tlsuser jsmith --tlspassword abc -A curl-test-suite https://%HOSTIP:%HTTPTLSPORT
 </command>
 </client>
 
@@ -77,8 +77,8 @@ Content-type: text/html
 <TR><TD>Cipher</TD><TD>AES-NNN-CBC</TD></TR>
 <TR><TD>MAC</TD><TD>SHA1</TD></TR>
 <TR><TD>Ciphersuite</TD><TD>SRP_SHA_AES_NNN_CBC_SHA1</TD></TR></p></TABLE>
-<PRE>
-Host: %HOSTIP:%HTTPTLSPORT\r
+<hr><P>Your HTTP header was:<PRE>Host: %HOSTIP:%HTTPTLSPORT\r
+User-Agent: curl-test-suite\r
 Accept: */*\r
 \r
 </PRE></P>
@@ -87,7 +87,6 @@ Accept: */*
 </file>
 <stripfile>
 s/^<p>Session ID:.*//
-s/^<hr><P>Your HTTP header was:<PRE>.*/<PRE>/
 s/Protocol version:.*[0-9]//
 s/GNUTLS/GnuTLS/
 s/(AES[-_])\d\d\d([-_]CBC)/$1NNN$2/
index 9b86cd3..9f7c31f 100644 (file)
@@ -47,9 +47,9 @@ http://%HOSTIP:%HTTPPORT/33 -Tlog/test33.txt -C 50
 </strip>
 <protocol>
 PUT /33 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Content-Range: bytes 50-99/100\r
 User-Agent: curl/7.6 (sparc-sun-solaris2.7) libcurl 7.6-pre4 (SSL 0.9.6) (krb4 enabled)\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 50\r
 Expect: 100-continue\r
index 7515586..848150a 100644 (file)
@@ -46,8 +46,8 @@ download on.
 </strip>
 <protocol>
 GET /want/38 HTTP/1.1\r
-Range: bytes=78-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=78-\r
 Accept: */*\r
 \r
 </protocol>
index 75d5979..f2d3263 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 PASV
 LIST
@@ -11,7 +12,7 @@ LIST
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTPS server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index cb01c1c..1bb9fb1 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 EPSV
 STOR
index 272c4e3..3060c99 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 FAILURE
 </keywords>
index 2b8ff5e..7e4d2bf 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 PASV
 LIST
@@ -13,7 +14,7 @@ FAILURE
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTPS server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index 9766630..0f73325 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 FAILURE
 </keywords>
index 29e7af2..28d8b57 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 FAILURE
 </keywords>
index 3259bc6..01d83dc 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 PORT
 LIST
@@ -11,7 +12,7 @@ LIST
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTPS server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index 8c14fa8..ca06838 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 PASV
 RETR
index d0aa13b..68b42b2 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 PORT
 STOR
index d7801a8..00100bc 100644 (file)
@@ -1,6 +1,7 @@
 <testcase>
 <info>
 <keywords>
+FTP
 FTPS
 EPSV
 STOR
index e5535bb..dc0dd5f 100644 (file)
@@ -67,12 +67,10 @@ http://%HOSTIP:%HTTPPORT/want/43 -L -x %HOSTIP:%HTTPPORT
 GET http://%HOSTIP:%HTTPPORT/want/43 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://%HOSTIP:%HTTPPORT/want/data/430002.txt?coolsite=yes HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index b6f8f83..d1045b3 100644 (file)
@@ -46,13 +46,13 @@ TZ=GMT
 </command>
 <file name="log/injar46">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.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   /want   FALSE   1439150993      mooo2   indeed2
+www.fake.come  FALSE   /       FALSE   2022144953      cookiecliente   si
+www.loser.com  FALSE   /       FALSE   2139150993      UID     99
+%HOSTIP        FALSE   /       FALSE   1739150993      mooo    indeed
+#HttpOnly_%HOSTIP      FALSE   /want   FALSE   1739150993      mooo2   indeed2
 %HOSTIP        FALSE   /want   FALSE   0       empty   
 </file>
 </client>
@@ -71,13 +71,13 @@ Cookie: empty=; mooo2=indeed2; mooo=indeed
 </protocol>
 <file name="log/jar46" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.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   /want   FALSE   1439150993      mooo2   indeed2
+www.fake.come  FALSE   /       FALSE   2022144953      cookiecliente   si
+www.loser.com  FALSE   /       FALSE   2139150993      UID     99
+%HOSTIP        FALSE   /       FALSE   1739150993      mooo    indeed
+#HttpOnly_%HOSTIP      FALSE   /want   FALSE   1739150993      mooo2   indeed2
 %HOSTIP        FALSE   /want   FALSE   0       empty   
 %HOSTIP        FALSE   /       FALSE   2054030187      ckyPersistent   permanent
 %HOSTIP        FALSE   /       FALSE   0       ckySession      temporary
index b62f1a1..1331457 100644 (file)
@@ -43,7 +43,6 @@ http://%HOSTIP:%HTTPPORT/we/want/that/page/5#5 -x %HOSTIP:%HTTPPORT
 GET http://%HOSTIP:%HTTPPORT/we/want/that/page/5 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index ea31483..f02bac6 100644 (file)
@@ -72,13 +72,12 @@ moo
 CONNECT machine.503:%HTTPPORT HTTP/1.1\r
 Host: machine.503:%HTTPPORT\r
 Proxy-Authorization: Basic dGVzdDppbmc=\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 <protocol>
 GET /503 HTTP/1.1\r
-Authorization: Basic dGVzdDppbmc=\r
 Host: machine.503:%HTTPPORT\r
+Authorization: Basic dGVzdDppbmc=\r
 Accept: */*\r
 \r
 [DISCONNECT]
index 07bbdea..f1939fe 100644 (file)
@@ -212,7 +212,7 @@ http://%HOSTIP:%HTTPPORT/506
 </stderr>
 <file name="log/jar506" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 .host.foo.com  TRUE    /       FALSE   1896263787      injected        yes
index b8ca9ab..9760560 100644 (file)
@@ -64,13 +64,13 @@ http://%HOSTIP:%HTTPPORT/519
 <verify>
 <protocol>
 GET /519 HTTP/1.1\r
-Authorization: Basic bW9uc3Rlcjp1bmRlcmJlZA==\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic bW9uc3Rlcjp1bmRlcmJlZA==\r
 Accept: */*\r
 \r
 GET /519 HTTP/1.1\r
-Authorization: Basic YW5vdGhlcm1vbnN0ZXI6aW53YXJkcm9iZQ==\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic YW5vdGhlcm1vbnN0ZXI6aW53YXJkcm9iZQ==\r
 Accept: */*\r
 \r
 </protocol>
index 56d1f3b..89a0dbf 100644 (file)
@@ -48,8 +48,8 @@ http://%HOSTIP/522 %HTTPPORT
 </strip>
 <protocol>
 GET /522 HTTP/1.1\r
-Authorization: Basic eHh4Onl5eQ==\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Basic eHh4Onl5eQ==\r
 Accept: */*\r
 \r
 </protocol>
index 7d3db38..d021ae3 100644 (file)
@@ -51,10 +51,9 @@ http://www.example.com:999/523 http://%HOSTIP:%HTTPPORT
 </strip>
 <protocol>
 GET HTTP://www.example.com:19999/523 HTTP/1.1\r
-Authorization: Basic eHh4Onl5eQ==\r
 Host: www.example.com:19999\r
+Authorization: Basic eHh4Onl5eQ==\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <stdout>
index eaa64d5..e9aadd1 100644 (file)
@@ -12,8 +12,10 @@ FTP
 file contents
 </data>
 
-<datacheck mode="text">
+<datacheck>
 file contents
+</datacheck>
+<datacheck1 mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
@@ -25,7 +27,7 @@ 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>
+</datacheck1>
 </reply>
 
 # Client-side
index a2f7364..19a13f1 100644 (file)
@@ -76,21 +76,18 @@ http://test.remote.example.com/path/540 http://%HOSTIP:%HTTPPORT silly:person cu
 </strip>
 <protocol>
 GET http://test.remote.example.com/path/540 HTTP/1.1\r
-Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Host: custom.set.host.name\r
+Accept: */*\r
 \r
 GET http://test.remote.example.com/path/540 HTTP/1.1\r
+Host: custom.set.host.name\r
 Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-Host: custom.set.host.name\r
 \r
 GET http://test.remote.example.com/path/540 HTTP/1.1\r
+Host: custom.set.host.name\r
 Proxy-Authorization: Digest username="silly", realm="weirdorealm", nonce="12345", uri="/path/540", response="ca507dcf189196b6a5374d3233042261"\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
-Host: custom.set.host.name\r
 \r
 </protocol>
 </verify>
index f4802e2..7cf3e91 100644 (file)
@@ -103,29 +103,26 @@ chkhostname curlhost
 </strip>
 <protocol>
 POST http://test.remote.example.com/path/547 HTTP/1.1\r
-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\r
 Host: test.remote.example.com\r
+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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 this is the blurb we want to upload
 POST http://test.remote.example.com/path/547 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST http://test.remote.example.com/path/547 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
index 54f242f..e9d2262 100644 (file)
@@ -103,29 +103,26 @@ chkhostname curlhost
 </strip>
 <protocol>
 POST http://test.remote.example.com/path/548 HTTP/1.1\r
-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\r
 Host: test.remote.example.com\r
+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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 this is the blurb we want to upload
 POST http://test.remote.example.com/path/548 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST http://test.remote.example.com/path/548 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
index a248edb..59925ce 100644 (file)
@@ -55,7 +55,6 @@ ftp://www.example.com/moo/549 http://%HOSTIP:%HTTPPORT
 GET ftp://www.example.com/moo/549;type=i HTTP/1.1\r
 Host: www.example.com:21\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <stdout>
index a609aa2..9a717ee 100644 (file)
@@ -55,7 +55,6 @@ ftp://www.example.com/moo/550 http://%HOSTIP:%HTTPPORT ascii
 GET ftp://www.example.com/moo/550;type=a HTTP/1.1\r
 Host: www.example.com:21\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <stdout>
index 5776303..6dd0133 100644 (file)
@@ -81,16 +81,14 @@ http://test.remote.example.com/path/551 http://%HOSTIP:%HTTPPORT s1lly:pers0n
 POST http://test.remote.example.com/path/551 HTTP/1.1\r
 Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 this is the blurb we want to upload
 POST http://test.remote.example.com/path/551 HTTP/1.1\r
-Proxy-Authorization: Digest username="s1lly", realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", uri="/path/551", response="3325240726fbdaf1e61f3a0dd40b930c"\r
 Host: test.remote.example.com\r
+Proxy-Authorization: Digest username="s1lly", realm="something fun to read", nonce="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", uri="/path/551", response="3325240726fbdaf1e61f3a0dd40b930c"\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
index 61de9fe..c20e204 100644 (file)
Binary files a/tests/data/test552 and b/tests/data/test552 differ
index b55fa3d..fdbd186 100644 (file)
@@ -18,6 +18,22 @@ Content-Type: text/html
 \r
 hello
 </data>
+<datacheck>
+HTTP/1.1 200 OK\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Server: test-server/fake swsclose\r
+Connection: close\r
+Content-Type: text/html\r
+\r
+hello
+HTTP/1.1 200 OK\r
+Date: Thu, 09 Nov 2010 14:49:00 GMT\r
+Server: test-server/fake swsclose\r
+Connection: close\r
+Content-Type: text/html\r
+\r
+hello
+</datacheck>
 </reply>
 
 # Client-side
@@ -80,6 +96,37 @@ Content-Type: text/plain
 \r
 blah blah\r
 --------------------------------\r
+POST /554 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
+Accept: */*\r
+Content-Length: 732\r
+Expect: 100-continue\r
+Content-Type: multipart/form-data; boundary=----------------------------\r
+\r
+------------------------------\r
+Content-Disposition: form-data; name="sendfile alternative"; filename="file name 2"\r
+\r
+this is what we post to the silly web server
+\r
+------------------------------\r
+Content-Disposition: form-data; name="callbackdata"\r
+\r
+this is what we post to the silly web server
+\r
+------------------------------\r
+Content-Disposition: form-data; name="filename"\r
+\r
+postit2.c\r
+------------------------------\r
+Content-Disposition: form-data; name="submit"\r
+\r
+send\r
+------------------------------\r
+Content-Disposition: form-data; name="somename"; filename="somefile.txt"\r
+Content-Type: text/plain\r
+\r
+blah blah\r
+--------------------------------\r
 </protocol>
 </verify>
 </testcase>
index c802fea..6c09e3c 100644 (file)
@@ -112,29 +112,26 @@ s/^(this is the blurb we want to upload)\r\n/$1\n/ if($has_charconv)
 </strippart>
 <protocol>
 POST http://test.remote.example.com/path/555 HTTP/1.1\r
-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\r
 Host: test.remote.example.com\r
+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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 this is the blurb we want to upload
 POST http://test.remote.example.com/path/555 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 0\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
 POST http://test.remote.example.com/path/555 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 Content-Length: 36\r
 Content-Type: application/x-www-form-urlencoded\r
 \r
index a97b365..f221981 100644 (file)
@@ -46,8 +46,8 @@ header "Transfer-Encoding: chunked"
 <verify>
 <protocol>
 POST /that.site.com/56 HTTP/1.1\r
-User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r
 Host: %HOSTIP:%HTTPPORT\r
+User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r
 Accept: */*\r
 Transfer-Encoding: chunked\r
 Content-Type: application/x-www-form-urlencoded\r
index a6188ea..905e756 100644 (file)
@@ -56,7 +56,6 @@ FTP RETR with CURLOPT_PROXY_TRANSFER_MODE, ASCII transfer and type=i
 GET ftp://www.example.com/moo/561;type=i HTTP/1.1\r
 Host: www.example.com:21\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 <stdout>
index 7851523..e4c00f5 100644 (file)
@@ -50,7 +50,6 @@ ftp_proxy=http://%HOSTIP:%HTTPPORT/
 GET FTP://%HOSTIP:%FTPPORT/563;type=A HTTP/1.1\r
 Host: %HOSTIP:%FTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 90fa4d1..6e215a2 100644 (file)
@@ -86,8 +86,8 @@ Content-Type: application/x-www-form-urlencoded
 0\r
 \r
 POST /565 HTTP/1.1\r
-Authorization: Digest username="foo", realm="testrealm", nonce="1053604144", uri="/565", response="877424f750af047634dbd94f9933217b"\r
 Host: %HOSTIP:%HTTPPORT\r
+Authorization: Digest username="foo", realm="testrealm", nonce="1053604144", uri="/565", response="877424f750af047634dbd94f9933217b"\r
 Accept: */*\r
 Transfer-Encoding: chunked\r
 Content-Type: application/x-www-form-urlencoded\r
index 0712c16..3341776 100644 (file)
@@ -101,24 +101,21 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET http://test.remote.example.com/path/590 HTTP/1.1\r
-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\r
 Host: test.remote.example.com\r
+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\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://test.remote.example.com/path/590 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://test.remote.example.com/path/590 HTTP/1.1\r
+Host: test.remote.example.com\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAAAgACAPYAAAAIAAgA+AAAAAAAAAAAAAAABoKBAB3Hr6SDn3NDNkgebbaP88ExMjM0MjIzNFIW4N7aYT44bAIg1jt2blUBAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAbWVjdXJsaG9zdA==\r
 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\r
-Host: test.remote.example.com\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 11a0dbc..89b8e6f 100644 (file)
@@ -65,8 +65,8 @@ http://%HOSTIP:%HTTPPORT/598
 <verify>
 <protocol>
 GET /598 HTTP/1.1\r
-User-Agent: the-moo agent next generation\r
 Host: %HOSTIP:%HTTPPORT\r
+User-Agent: the-moo agent next generation\r
 Accept: */*\r
 Referer: http://example.com/the-moo\r
 Cookie: name=moo\r
index e6dbbb9..74b8f64 100644 (file)
@@ -56,13 +56,13 @@ http://%HOSTIP:%HTTPPORT/we/want/61 -c log/jar61.txt -H "Host: www.host.foo.com"
 </strip>
 <protocol>
 GET /we/want/61 HTTP/1.1\r
-Accept: */*\r
 Host: www.host.foo.com\r
+Accept: */*\r
 \r
 </protocol>
 <file name="log/jar61.txt" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 #HttpOnly_.foo.com     TRUE    /we/want/       FALSE   2054030187      test    yes
index 2e5d1db..add2a6a 100644 (file)
@@ -33,7 +33,7 @@ http://%HOSTIP:%HTTPPORT/we/want/62 http://%HOSTIP:%HTTPPORT/we/want?hoge=fuga -
 </command>
 <file name="log/jar62.txt">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 #HttpOnly_.foo.com     TRUE    /we/want/       FALSE   2054030187      test    yes
@@ -51,14 +51,14 @@ http://%HOSTIP:%HTTPPORT/we/want/62 http://%HOSTIP:%HTTPPORT/we/want?hoge=fuga -
 </strip>
 <protocol>
 GET /we/want/62 HTTP/1.1\r
+Host: www.host.foo.com\r
 Accept: */*\r
 Cookie: test2=yes; test=yes\r
-Host: www.host.foo.com\r
 \r
 GET /we/want?hoge=fuga HTTP/1.1\r
+Host: www.host.foo.com\r
 Accept: */*\r
 Cookie: test2=yes; test=yes\r
-Host: www.host.foo.com\r
 \r
 </protocol>
 </verify>
index 66ed1d8..2a96449 100644 (file)
@@ -42,10 +42,9 @@ http://we.want.that.site.com/63
 </strip>
 <protocol>
 GET http://we.want.that.site.com/63 HTTP/1.1\r
-Proxy-Authorization: Basic ZmFrZTp1c2Vy\r
 Host: we.want.that.site.com\r
+Proxy-Authorization: Basic ZmFrZTp1c2Vy\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 7a2e3d0..804a6fa 100644 (file)
@@ -74,9 +74,9 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /64 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 001d598..f0b9742 100644 (file)
@@ -74,9 +74,9 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /65 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="2053604145", uri="/65", response="66d68d3251f1839576ba7c766cf9205b"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 58d35e6..b343111 100644 (file)
@@ -86,15 +86,15 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /67 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /67 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 92a915b..acd710f 100644 (file)
@@ -85,15 +85,15 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /68 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /68 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 50603b0..887a460 100644 (file)
@@ -102,20 +102,20 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /69 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 \r
 GET /69 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /69 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 74f70e1..9057d6a 100644 (file)
@@ -73,14 +73,14 @@ http://%HOSTIP:%HTTPPORT/70 -u testuser:testpass --anyauth
 </strip>
 <protocol>
 GET /70 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 \r
 GET /70 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604199", uri="/70", response="2c9a6f00af0d86497b177b90e90c688a"\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index 330cb23..b0531e7 100644 (file)
@@ -13,7 +13,7 @@ SOCKS4
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index c3a8621..d4c3ab7 100644 (file)
@@ -13,7 +13,7 @@ SOCKS5
 <reply>
 # When doing LIST, we get the default list output hard-coded in the test
 # FTP server
-<datacheck>
+<datacheck mode="text">
 total 20
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 .
 drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..
index b90e19c..8e3adaa 100644 (file)
@@ -72,14 +72,14 @@ http://%HOSTIP:%HTTPPORT/72 -u testuser:testpass --anyauth
 </strip>
 <protocol>
 GET /72 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 \r
 GET /72 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604199", uri="/72", response="9fcd1330377365a09bbcb33b2cbb25bd"\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index d60ee62..70408a8 100644 (file)
@@ -40,13 +40,13 @@ http://%HOSTIP:%HTTPPORT/we/want/73 -c log/jar73.txt -H "Host: host.NOT_DISCLOSE
 </strip>
 <protocol>
 GET /we/want/73 HTTP/1.1\r
-Accept: */*\r
 Host: host.NOT_DISCLOSED.se\r
+Accept: */*\r
 \r
 </protocol>
 <file name="log/jar73.txt" mode="text">
 # Netscape HTTP Cookie File
-# http://curl.haxx.se/docs/http-cookies.html
+# https://curl.haxx.se/docs/http-cookies.html
 # This file was generated by libcurl! Edit at your own risk.
 
 .NOT_DISCLOSED.se      TRUE    /       FALSE   0       IPCZQX01af0fca5c        000010008168c200d25dfc4b
index b2566e2..55fc245 100644 (file)
@@ -48,7 +48,6 @@ ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 -x %HOSTIP:%HTTPPORT
 GET ftp://%HOSTIP:%HTTPPORT/we/want/that/page/79 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 030fd55..ffc421a 100644 (file)
@@ -41,6 +41,8 @@ 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: name with space=is weird but; path=/we/want;
+Set-Cookie: trailingspace    = removed; path=/we/want;
 Set-Cookie: nocookie=yes; path=/WE;
 Set-Cookie: blexp=yesyes; domain=%HOSTIP; domain=%HOSTIP; expiry=totally bad;
 Set-Cookie: partialip=nono; domain=.0.0.1;
@@ -60,7 +62,7 @@ perl -e 'if ("%HOSTIP" !~ /\.0\.0\.1$/) {print "Test only works for HOSTIPs endi
 GET /we/want/8 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Cookie: cookie=perhaps; cookie=yes; foobar=name; blexp=yesyes\r
+Cookie: cookie=perhaps; name with space=is weird but; trailingspace=removed; cookie=yes; foobar=name; blexp=yesyes\r
 \r
 </protocol>
 </verify>
index 16805ca..8a635b4 100644 (file)
@@ -68,14 +68,13 @@ CONNECT test.80:%HTTPPORT HTTP/1.0
 Host: test.80:%HTTPPORT\r
 Proxy-Authorization: Basic eW91YXJlOnlvdXJzZWxm\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 <protocol>
 GET /we/want/that/page/80 HTTP/1.1\r
+Host: test.80:%HTTPPORT\r
 Authorization: Basic aWFtOm15c2VsZg==\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Host: test.80:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index ff258ed..53affa0 100644 (file)
@@ -85,18 +85,16 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/81 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 GET http://%HOSTIP:%HTTPPORT/81 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 9e800bb..de3fcba 100644 (file)
@@ -45,11 +45,10 @@ http://%HOSTIP:%HTTPPORT/82 --proxy-user testuser:testpass -x http://%HOSTIP:%HT
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/82 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 242c1b4..e646eec 100644 (file)
@@ -34,7 +34,7 @@ body
 imap
 </server>
  <name>
-IMAP OAuth 2.0 authentication
+IMAP OAuth 2.0 (XOAUTH2) authentication
  </name>
  <command>
 'imap://%HOSTIP:%IMAPPORT/824/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
index b2fb693..c86516a 100644 (file)
@@ -35,7 +35,7 @@ body
 imap
 </server>
  <name>
-IMAP OAuth 2.0 authentication with initial response
+IMAP OAuth 2.0 (XOAUTH2) authentication with initial response
  </name>
  <command>
 'imap://%HOSTIP:%IMAPPORT/828/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
index e00a288..4fe8ba3 100644 (file)
@@ -62,16 +62,15 @@ http://test.83:%HTTPPORT/we/want/that/page/83 -p -x %HOSTIP:%PROXYPORT --user 'i
 </strip>
 <proxy>
 CONNECT test.83:%HTTPPORT HTTP/1.1\r
-User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
 Host: test.83:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
+User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
 \r
 </proxy>
 <protocol>
 GET /we/want/that/page/83 HTTP/1.1\r
+Host: test.83:%HTTPPORT\r
 Authorization: Basic aWFtOm15OjtzZWxm\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Host: test.83:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
diff --git a/tests/data/test837 b/tests/data/test837
new file mode 100644 (file)
index 0000000..d597463
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH EXTERNAL
+RFC4422
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTHENTICATE +
+REPLY dXNlcg== A002 OK AUTHENTICATE completed
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP external authentication
+ </name>
+ <command>
+'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/837/;UID=1'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE EXTERNAL\r
+dXNlcg==\r
+A003 SELECT 837\r
+A004 FETCH 1 BODY[]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test838 b/tests/data/test838
new file mode 100644 (file)
index 0000000..da2d28d
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH EXTERNAL
+RFC4422
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTHENTICATE +
+REPLY = A002 OK AUTHENTICATE completed
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP external authentication without credentials
+ </name>
+ <command>
+'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/838/;UID=1'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE EXTERNAL\r
+=\r
+A003 SELECT 838\r
+A004 FETCH 1 BODY[]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test839 b/tests/data/test839
new file mode 100644 (file)
index 0000000..2a544c1
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH EXTERNAL
+SASL-IR
+RFC4422
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+CAPA SASL-IR
+REPLY AUTHENTICATE A002 OK AUTHENTICATE completed
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP external authentication with initial response
+ </name>
+ <command>
+'imap://user;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/839/;UID=1'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE EXTERNAL dXNlcg==\r
+A003 SELECT 839\r
+A004 FETCH 1 BODY[]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
index 4dbf164..cf667d6 100644 (file)
@@ -43,11 +43,10 @@ http://%HOSTIP:%HTTPPORT/we/want/that/page/84 -x %HOSTIP:%HTTPPORT --user iam:my
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/we/want/that/page/84 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Basic aWFtOm15c2VsZg==\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
diff --git a/tests/data/test840 b/tests/data/test840
new file mode 100644 (file)
index 0000000..eaf1aee
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH EXTERNAL
+SASL-IR
+RFC4422
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+CAPA SASL-IR
+REPLY AUTHENTICATE A002 OK AUTHENTICATE completed
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP external authentication with initial response without credentials
+ </name>
+ <command>
+'imap://;AUTH=EXTERNAL@%HOSTIP:%IMAPPORT/840/;UID=1'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE EXTERNAL =\r
+A003 SELECT 840\r
+A004 FETCH 1 BODY[]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test841 b/tests/data/test841
new file mode 100644 (file)
index 0000000..839bfe3
--- /dev/null
@@ -0,0 +1,51 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+Clear Text
+FETCH
+CUSTOMREQUEST
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<data>
+body\r
+\r
++ Curl did not used to like this line\r
+--\r
+  yours sincerely\r
+</data>
+<datacheck>
+* 123 FETCH (BODY[1] {70}\r
+</datacheck>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP custom request doesn't check continuation data
+ </name>
+ <command>
+ imap://%HOSTIP:%IMAPPORT/841/ -u user:secret -X 'FETCH 123 BODY[1]'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 LOGIN user secret\r
+A003 SELECT 841\r
+A004 FETCH 123 BODY[1]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test842 b/tests/data/test842
new file mode 100644 (file)
index 0000000..b98d5a2
--- /dev/null
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH OAUTH2
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTHENTICATE +
+REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== A002 OK AUTHENTICATE completed
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP OAuth 2.0 (OAUTHBEARER) authentication
+ </name>
+ <command>
+'imap://%HOSTIP:%IMAPPORT/842/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE OAUTHBEARER\r
+dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+A003 SELECT 842\r
+A004 FETCH 1 BODY[]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test843 b/tests/data/test843
new file mode 100644 (file)
index 0000000..266aaa7
--- /dev/null
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH OAUTH2
+SASL-IR
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+CAPA SASL-IR
+REPLY AUTHENTICATE A002 OK AUTHENTICATE completed
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP OAuth 2.0 (OAUTHBEARER) authentication with initial response
+ </name>
+ <command>
+'imap://%HOSTIP:%IMAPPORT/843/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+A003 SELECT 843\r
+A004 FETCH 1 BODY[]\r
+A005 LOGOUT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test844 b/tests/data/test844
new file mode 100644 (file)
index 0000000..4acd667
--- /dev/null
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH OAUTH2
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTHENTICATE +
+REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=
+REPLY AQ== A002 NO Authentication failed
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation
+ </name>
+ <command>
+'imap://%HOSTIP:%IMAPPORT/844/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 67 - CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+#
+# The multi interface considers a broken "CONNECT" as a prematurely broken
+# transfer and such a connection will not get a "LOGOUT"
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE OAUTHBEARER\r
+dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+AQ==\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test845 b/tests/data/test845
new file mode 100644 (file)
index 0000000..152ab58
--- /dev/null
@@ -0,0 +1,59 @@
+<testcase>
+<info>
+<keywords>
+IMAP
+SASL
+SASL AUTH OAUTH2
+SASL-IR
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+CAPA SASL-IR
+REPLY AUTHENTICATE + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=
+REPLY AQ== A002 NO Authentication failed
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+imap
+</server>
+ <name>
+IMAP OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
+ </name>
+ <command>
+'imap://%HOSTIP:%IMAPPORT/845/;UID=1' -u user --oauth2-bearer mF_9.B5f-4.1JqM
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%IMAPPORT' ne '9003' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 67 - CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+#
+# The multi interface considers a broken "CONNECT" as a prematurely broken
+# transfer and such a connection will not get a "LOGOUT"
+<protocol>
+A001 CAPABILITY\r
+A002 AUTHENTICATE OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+AQ==\r
+</protocol>
+</verify>
+</testcase>
index a5d1a3b..a11363f 100644 (file)
@@ -46,12 +46,11 @@ http://%HOSTIP:%HTTPPORT/we/want/that/page/85 -x %HOSTIP:%HTTPPORT --user iam:my
 </strip>
 <protocol>
 GET http://%HOSTIP:%HTTPPORT/we/want/that/page/85 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Proxy-Authorization: Basic dGVzdGluZzp0aGlz\r
 Authorization: Basic aWFtOm15c2VsZg==\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 488037c..5e6aef3 100644 (file)
@@ -50,7 +50,7 @@ urlglob with out of range -o #[num] usage
 # survives
 #
 <verify>
-<file name="log/dumpit#2.dump" mode="text">
+<file name="log/dumpit#2.dump">
 HTTP/1.1 200 OK\r
 Funny-head: yesyes\r
 Content-Length: 16\r
index 885b8c1..f6333f7 100644 (file)
@@ -36,7 +36,7 @@ body
 pop3
 </server>
  <name>
-POP3 OAuth 2.0 authentication
+POP3 OAuth 2.0 (XOAUTH2) authentication
  </name>
  <command>
 pop3://%HOSTIP:%POP3PORT/870 -u user --oauth2-bearer mF_9.B5f-4.1JqM
index de221fa..d1030da 100644 (file)
@@ -36,7 +36,7 @@ body
 pop3
 </server>
  <name>
-POP3 OAuth 2.0 authentication with initial response
+POP3 OAuth 2.0 (XOAUTH2) authentication with initial response
  </name>
  <command>
 pop3://%HOSTIP:%POP3PORT/874 -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir
index 253b420..e2d019c 100644 (file)
@@ -85,9 +85,9 @@ Accept: */*
 Content-Length: 0\r
 \r
 PUT /88 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: Digest username="testuser", realm="testrealm", nonce="1053604145", uri="/88", response="78a49fa53d0c228778297687d4168e71"\r
 User-Agent: curl/7.10.5 (i686-pc-linux-gnu) libcurl/7.10.5 OpenSSL/0.9.7a ipv6 zlib/1.1.3\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 Content-Length: 85\r
 Expect: 100-continue\r
diff --git a/tests/data/test883 b/tests/data/test883
new file mode 100644 (file)
index 0000000..5d5a756
--- /dev/null
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH EXTERNAL
+RFC1734
+RFC4422
+RFC5034
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH +
+REPLY dXNlcg== +OK Login successful
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 external authentication
+ </name>
+ <command>
+'pop3://user;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/883'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA\r
+AUTH EXTERNAL\r
+dXNlcg==\r
+RETR 883\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test884 b/tests/data/test884
new file mode 100644 (file)
index 0000000..34fd94d
--- /dev/null
@@ -0,0 +1,57 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH EXTERNAL
+RFC1734
+RFC4422
+RFC5034
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH +
+REPLY = +OK Login successful
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 external authentication without credentials
+ </name>
+ <command>
+'pop3://;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/884'
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA\r
+AUTH EXTERNAL\r
+=\r
+RETR 884\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test885 b/tests/data/test885
new file mode 100644 (file)
index 0000000..581e9b2
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH EXTERNAL
+SASL-IR
+RFC1734
+RFC4422
+RFC5034
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH +OK Login successful
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 external authentication with initial response
+ </name>
+ <command>
+'pop3://user;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/885' --sasl-ir
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA\r
+AUTH EXTERNAL dXNlcg==\r
+RETR 885\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test886 b/tests/data/test886
new file mode 100644 (file)
index 0000000..3aca2f1
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH EXTERNAL
+SASL-IR
+RFC1734
+RFC4422
+RFC5034
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH +OK Login successful
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 external authentication with initial response without credentials
+ </name>
+ <command>
+'pop3://;AUTH=EXTERNAL@%HOSTIP:%POP3PORT/886' --sasl-ir
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA\r
+AUTH EXTERNAL =\r
+RETR 886\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test887 b/tests/data/test887
new file mode 100644 (file)
index 0000000..b39dc21
--- /dev/null
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH OAUTH2
+RFC1734
+RFC5034
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH +
+REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +OK Login successful
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 OAuth 2.0 (OAUTHBEARER) authentication
+ </name>
+ <command>
+pop3://%HOSTIP:%POP3PORT/887 -u user --oauth2-bearer mF_9.B5f-4.1JqM
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA\r
+AUTH OAUTHBEARER\r
+dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+RETR 887\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test888 b/tests/data/test888
new file mode 100644 (file)
index 0000000..1a359df
--- /dev/null
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH OAUTH2
+SASL-IR
+RFC1734
+RFC5034
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH +OK Login successful
+</servercmd>
+<data>
+From: me@somewhere\r
+To: fake@nowhere\r
+\r
+body\r
+\r
+--\r
+  yours sincerely\r
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 OAuth 2.0 (OAUTHBEARER) authentication with initial response
+ </name>
+ <command>
+pop3://%HOSTIP:%POP3PORT/888 -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+CAPA\r
+AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+RETR 888\r
+QUIT\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test889 b/tests/data/test889
new file mode 100644 (file)
index 0000000..5fbd0ca
--- /dev/null
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH OAUTH2
+RFC1734
+RFC5034
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH +
+REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
+REPLY AQ== -ERR Authentication failed
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 OAuth 2.0 (OAUTHBEARER) failure as continuation
+ </name>
+ <command>
+pop3://%HOSTIP:%POP3PORT/889 -u user --oauth2-bearer mF_9.B5f-4.1JqM
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 67 - CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+#
+# The multi interface considers a broken "CONNECT" as a prematurely broken
+# transfer and such a connection will not get a "QUIT"
+<protocol>
+CAPA\r
+AUTH OAUTHBEARER\r
+dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+AQ==\r
+</protocol>
+</verify>
+</testcase>
index cbabe8e..c7f69a2 100644 (file)
@@ -119,27 +119,27 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /89 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /89 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /you/890010 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /you/890010 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBALIBPdoGahtQQ8gQ7TJrKTYzMjM0NDIzNBFnpKw8B1BLcb456sVeozgBAQAAAAAAAACAPtXesZ0BMzIzNDQyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
diff --git a/tests/data/test890 b/tests/data/test890
new file mode 100644 (file)
index 0000000..6392dfa
--- /dev/null
@@ -0,0 +1,60 @@
+<testcase>
+<info>
+<keywords>
+POP3
+SASL
+SASL AUTH OAUTH2
+SASL-IR
+RFC1734
+RFC5034
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
+REPLY AQ== -ERR Authentication failed
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+pop3
+</server>
+ <name>
+POP3 OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
+ </name>
+ <command>
+pop3://%HOSTIP:%POP3PORT/890 -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%POP3PORT' ne '9001' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 67 - CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+#
+# The multi interface considers a broken "CONNECT" as a prematurely broken
+# transfer and such a connection will not get a "QUIT"
+<protocol>
+CAPA\r
+AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+AQ==\r
+</protocol>
+</verify>
+</testcase>
index 90dae2c..3b1231a 100644 (file)
@@ -161,15 +161,15 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /90 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /90 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBAL9LNW5+nkyHZRmyFaL/LJ4xMjM0MjIzNGUCyhgQ9hw6eWAT13EbDa0BAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /you/900010 HTTP/1.1\r
@@ -177,15 +177,15 @@ Host: %HOSTIP:%HTTPPORT
 Accept: */*\r
 \r
 GET /you/900010 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /you/900010 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAAAAAD2AAAACAAIAPYAAAAIAAgA/gAAAAAAAAAAAAAABoKBALIBPdoGahtQQ8gQ7TJrKTYzMjM0NDIzNBFnpKw8B1BLcb456sVeozgBAQAAAAAAAACAPtXesZ0BMzIzNDQyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAdGVzdHVzZXJjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index c471cb7..bf0b45a 100644 (file)
@@ -26,7 +26,7 @@ REPLY dXNlcj11c2VyAWF1dGg9QmVhcmVyIG1GXzkuQjVmLTQuMUpxTQEB 235 Authenticated
 smtp
 </server>
  <name>
-SMTP OAuth 2.0 authentication
+SMTP OAuth 2.0 (XOAUTH2) authentication
  </name>
 <stdin>
 mail body\r
index 26ee318..35195ad 100644 (file)
@@ -103,20 +103,20 @@ chkhostname curlhost
 </strip>
 <protocol>
 GET /91 HTTP/1.1\r
-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\r
 Host: %HOSTIP:%HTTPPORT\r
+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\r
 Accept: */*\r
 \r
 GET /91 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 GET /91 HTTP/1.1\r
+Host: %HOSTIP:%HTTPPORT\r
 Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAACeAJ4AWAAAAAgACAD2AAAABgAGAP4AAAAIAAgABAEAAAAAAAAAAAAABoKBAI9byKoy6qyyS+1JCYN1XYoxMjM0MjIzNEYCr85trkciZ2j/7/T8MmUBAQAAAAAAAACAPtXesZ0BMTIzNDIyMzQAAAAAAgAEAEMAQwABABIARQBMAEkAUwBBAEIARQBUAEgABAAYAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAMALABlAGwAaQBzAGEAYgBlAHQAaAAuAGMAYwAuAGkAYwBlAGQAZQB2AC4AbgB1AAAAAAAAAAAAbXlkb21haW5teXNlbGZjdXJsaG9zdA==\r
 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\r
-Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
 \r
 </protocol>
index bf78276..1304c81 100644 (file)
@@ -45,8 +45,8 @@ http://%HOSTIP:%HTTPPORT/want/92 -C 87
 </strip>
 <protocol>
 GET /want/92 HTTP/1.1\r
-Range: bytes=87-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=87-\r
 Accept: */*\r
 \r
 </protocol>
index e9e0d5f..aacd684 100644 (file)
@@ -26,7 +26,7 @@ REPLY AUTH 235 Authenticated
 smtp
 </server>
  <name>
-SMTP OAuth 2.0 authentication with initial response
+SMTP OAuth 2.0 (XOAUTH2) authentication with initial response
  </name>
 <stdin>
 mail body\r
index 1387248..948d29c 100644 (file)
@@ -43,7 +43,6 @@ http://%HOSTIP:%HTTPPORT/93 -x %HOSTIP:%HTTPPORT
 GET http://%HOSTIP:%HTTPPORT/93 HTTP/1.1\r
 Host: %HOSTIP:%HTTPPORT\r
 Accept: */*\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
index 7299d34..7931d0a 100644 (file)
@@ -61,3 +61,5 @@ QUIT
 mail body\r
 .\r
 </upload>
+</verify>
+</testcase>
index 2f3f482..94c894c 100644 (file)
@@ -51,7 +51,6 @@ https://test.anything.really.com:94 --proxy1.0 %HOSTIP:%HTTPPORT
 CONNECT test.anything.really.com:94 HTTP/1.0\r
 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\r
 Host: test.anything.really.com:94\r
-Proxy-Connection: Keep-Alive\r
 \r
 </protocol>
 </verify>
diff --git a/tests/data/test942 b/tests/data/test942
new file mode 100644 (file)
index 0000000..26740f7
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH EXTERNAL
+RFC4422
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH 334 EXTERNAL supported
+REPLY dXNlcg== 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP external authentication
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+'smtp://user;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/942' --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO 942\r
+AUTH EXTERNAL\r
+dXNlcg==\r
+MAIL FROM:<sender@example.com>\r
+RCPT TO:<recipient@example.com>\r
+DATA\r
+QUIT\r
+</protocol>
+<upload>
+mail body\r
+.\r
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test943 b/tests/data/test943
new file mode 100644 (file)
index 0000000..aef2c62
--- /dev/null
@@ -0,0 +1,56 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH EXTERNAL
+RFC4422
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH 334 EXTERNAL supported
+REPLY = 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP external authentication without credentials
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+'smtp://;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/943' --mail-rcpt recipient@example.com --mail-from sender@example.com -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO 943\r
+AUTH EXTERNAL\r
+=\r
+MAIL FROM:<sender@example.com>\r
+RCPT TO:<recipient@example.com>\r
+DATA\r
+QUIT\r
+</protocol>
+<upload>
+mail body\r
+.\r
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test944 b/tests/data/test944
new file mode 100644 (file)
index 0000000..4b60f12
--- /dev/null
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH EXTERNAL
+SASL-IR
+RFC4422
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP external authentication with initial response
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+'smtp://user;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/944' --mail-rcpt recipient@example.com --mail-from sender@example.com --sasl-ir -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO 944\r
+AUTH EXTERNAL dXNlcg==\r
+MAIL FROM:<sender@example.com>\r
+RCPT TO:<recipient@example.com>\r
+DATA\r
+QUIT\r
+</protocol>
+<upload>
+mail body\r
+.\r
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test945 b/tests/data/test945
new file mode 100644 (file)
index 0000000..3526408
--- /dev/null
@@ -0,0 +1,55 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH EXTERNAL
+SASL-IR
+RFC4422
+RFC4954
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH EXTERNAL
+REPLY AUTH 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP external authentication with initial response without credentials
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+'smtp://;AUTH=EXTERNAL@%HOSTIP:%SMTPPORT/945' --mail-rcpt recipient@example.com --mail-from sender@example.com --sasl-ir -T -
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO 945\r
+AUTH EXTERNAL =\r
+MAIL FROM:<sender@example.com>\r
+RCPT TO:<recipient@example.com>\r
+DATA\r
+QUIT\r
+</protocol>
+<upload>
+mail body\r
+.\r
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test946 b/tests/data/test946
new file mode 100644 (file)
index 0000000..d34bd91
--- /dev/null
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH OAUTH2
+RFC4954
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH 334 OAUTHBEARER supported
+REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP OAuth 2.0 (OAUTHBEARER) authentication
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/946 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T -
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO 946\r
+AUTH OAUTHBEARER\r
+dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+MAIL FROM:<sender@example.com>\r
+RCPT TO:<recipient@example.com>\r
+DATA\r
+QUIT\r
+</protocol>
+<upload>
+mail body\r
+.\r
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test947 b/tests/data/test947
new file mode 100644 (file)
index 0000000..03648a4
--- /dev/null
@@ -0,0 +1,61 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH OAUTH2
+SASL-IR
+RFC4954
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH 235 Authenticated
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP OAuth 2.0 (OAUTHBEARER) authentication with initial response
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/947 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T -
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+EHLO 947\r
+AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+MAIL FROM:<sender@example.com>\r
+RCPT TO:<recipient@example.com>\r
+DATA\r
+QUIT\r
+</protocol>
+<upload>
+mail body\r
+.\r
+</upload>
+</verify>
+</testcase>
diff --git a/tests/data/test948 b/tests/data/test948
new file mode 100644 (file)
index 0000000..51bb41a
--- /dev/null
@@ -0,0 +1,63 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH OAUTH2
+RFC4954
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH 334 OAUTHBEARER supported
+REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
+REPLY AQ== 535 Username and Password not accepted. Learn more at\r\n535 http://support.example.com/mail/oauth
+</servercmd>
+</reply>
+
+#vi
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP OAuth 2.0 (OAUTHBEARER) failure as continuation
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/948 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM -T -
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 67 - CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+#
+# The multi interface considers a broken "CONNECT" as a prematurely broken
+# transfer and such a connection will not get a "QUIT"
+<protocol>
+EHLO 948\r
+AUTH OAUTHBEARER\r
+dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+AQ==\r
+</protocol>
+</verify>
+</testcase>
diff --git a/tests/data/test949 b/tests/data/test949
new file mode 100644 (file)
index 0000000..f84c42b
--- /dev/null
@@ -0,0 +1,62 @@
+<testcase>
+<info>
+<keywords>
+SMTP
+SASL
+SASL AUTH OAUTH2
+SASL-IR
+RFC4954
+RFC6749
+RFC7628
+</keywords>
+</info>
+
+#
+# Server-side
+<reply>
+<servercmd>
+AUTH OAUTHBEARER
+REPLY AUTH 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
+REPLY AQ== 535 Username and Password not accepted. Learn more at\r\n535 http://support.example.com/mail/oauth
+</servercmd>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+smtp
+</server>
+ <name>
+SMTP OAuth 2.0 (OAUTHBEARER) failure as continuation with initial response
+ </name>
+<stdin>
+mail body\r
+</stdin>
+ <command>
+smtp://%HOSTIP:%SMTPPORT/949 --mail-rcpt recipient@example.com --mail-from sender@example.com -u user --oauth2-bearer mF_9.B5f-4.1JqM --sasl-ir -T -
+</command>
+# The protocol section doesn't support ways of specifing the raw data in the
+# base64 encoded message so we must assert this
+<precheck>
+perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%SMTPPORT' ne '9005' );"
+</precheck>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+# 67 - CURLE_LOGIN_DENIED
+<errorcode>
+67
+</errorcode>
+#
+# The multi interface considers a broken "CONNECT" as a prematurely broken
+# transfer and such a connection will not get a "QUIT"
+<protocol>
+EHLO 949\r
+AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==\r
+AQ==\r
+</protocol>
+</verify>
+</testcase>
index 1cd88ac..2b3e2c2 100644 (file)
@@ -64,7 +64,6 @@ http://test.95:%HTTPPORT/we/want/that/page/95 -p -x %HOSTIP:%PROXYPORT -d "datat
 CONNECT test.95:%HTTPPORT HTTP/1.1\r
 User-Agent: curl/7.10.7-pre2 (i686-pc-linux-gnu) libcurl/7.10.7-pre2 OpenSSL/0.9.7a zlib/1.1.3\r
 Host: test.95:%HTTPPORT\r
-Proxy-Connection: Keep-Alive\r
 \r
 </proxy>
 <protocol nonewline="yes">
index 3d9a933..27044bc 100644 (file)
@@ -37,7 +37,7 @@ MEM tool_cfgable.c
 MEM tool_cfgable.c
 </file>
 <stripfile>
-$_ = '' if (($_ !~ /tool_paramhlp/) && ($_ !~ /tool_cfgable/))
+$_ = '' if ((($_ !~ /tool_paramhlp/) && ($_ !~ /tool_cfgable/)) || ($_ =~ /free\(\(nil\)\)/))
 s/:\d+.*//
 s:^(MEM )(.*/)(.*):$1$3:
 </stripfile>
index 2517002..9797600 100644 (file)
@@ -60,8 +60,8 @@ http://%HOSTIP:%HTTPPORT/99 -C 9999999999
 </strip>
 <protocol>
 GET /99 HTTP/1.1\r
-Range: bytes=9999999999-\r
 Host: %HOSTIP:%HTTPPORT\r
+Range: bytes=9999999999-\r
 Accept: */*\r
 \r
 </protocol>
index 6cbb963..e3327c1 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
diff --git a/tests/extern-scan.pl b/tests/extern-scan.pl
new file mode 100755 (executable)
index 0000000..7a5c291
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/env perl
+#***************************************************************************
+#                                  _   _ ____  _
+#  Project                     ___| | | |  _ \| |
+#                             / __| | | | |_) | |
+#                            | (__| |_| |  _ <| |___
+#                             \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2010-2015, 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 https://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;
+
+# we may get the dir root pointed out
+my $root=$ARGV[0] || ".";
+
+my @incs = (
+    "$root/include/curl/curl.h",
+    "$root/include/curl/easy.h",
+    "$root/include/curl/mprintf.h",
+    "$root/include/curl/multi.h",
+    );
+
+my $verbose=0;
+my $summary=0;
+my $misses=0;
+
+my @syms;
+my %doc;
+my %rem;
+
+sub scanheader {
+    my ($f)=@_;
+    open H, "<$f" || die;
+    while(<H>) {
+        if (/^(CURL_EXTERN.*)/) {
+            print "$1\n";
+        }
+    }
+    close H;
+}
+
+foreach my $i (@incs) {
+    scanheader($i);
+}
index 2e125e2..f4a4ace 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 4807a1f..01a7df8 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
index 0729cf4..5198b5f 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 19ebec7..bc32173 100755 (executable)
@@ -6,7 +6,7 @@
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-#    http://www.apache.org/licenses/LICENSE-2.0
+#    https://www.apache.org/licenses/LICENSE-2.0
 #
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
@@ -34,11 +34,11 @@ This is a test server to test the libcurl pipelining functionality.
 It is a modified version if Google's HTTP pipelining test server. More
 information can be found here:
 
-http://dev.chromium.org/developers/design-documents/network-stack/http-pipelining
+https://dev.chromium.org/developers/design-documents/network-stack/http-pipelining
 
 Source code can be found here:
 
-http://code.google.com/p/http-pipelining-test/
+https://code.google.com/archive/p/http-pipelining-test/
 '''
 MAX_REQUEST_SIZE = 1024  # bytes
 MIN_POLL_TIME = 0.01  # seconds. Minimum time to poll, in order to prevent
index b60dadc..0be5667 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
diff --git a/tests/libtest/CMakeLists.txt b/tests/libtest/CMakeLists.txt
new file mode 100644 (file)
index 0000000..cc9d7e1
--- /dev/null
@@ -0,0 +1,122 @@
+set(TARGET_LABEL_PREFIX "Test ")
+
+function(SETUP_TEST TEST_NAME)          # ARGN are the files in the test
+  add_executable( ${TEST_NAME} ${ARGN} )
+  string(TOUPPER ${TEST_NAME} UPPER_TEST_NAME)
+
+  include_directories(
+    ${CURL_SOURCE_DIR}/lib          # To be able to reach "curl_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"
+    )
+  if(USE_ARES)
+    include_directories(${CARES_INCLUDE_DIR})
+  endif()
+
+  target_link_libraries( ${TEST_NAME} libcurl ${CURL_LIBS})
+
+  set_target_properties(${TEST_NAME}
+    PROPERTIES COMPILE_DEFINITIONS ${UPPER_TEST_NAME})
+  set_target_properties(${TEST_NAME}
+    PROPERTIES PROJECT_LABEL "${TARGET_LABEL_PREFIX}${TEST_NAME}")
+
+  # Add the postfix to the executable since it is
+  # not added automatically as for modules and shared libraries
+  set_target_properties(${TEST_NAME}
+    PROPERTIES DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
+
+endfunction()
+
+
+transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
+
+foreach(TEST_NAME ${noinst_PROGRAMS})
+  setup_test(${TEST_NAME} ${${TEST_NAME}_SOURCES})
+endforeach()
+
+# Allows for hostname override to make tests machine independent.
+# TODO this cmake build assumes a shared build, detect static linking here!
+if(NOT WIN32)
+  add_library(hostname MODULE sethostname.c sethostname.h)
+  # Output to .libs for compatibility with autotools, the test data expects a
+  # library at (tests)/libtest/.libs/libhostname.so
+  set_target_properties(hostname PROPERTIES
+      LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/.libs)
+endif()
+
+# # files used only in some libcurl test programs
+# SET(TESTUTIL testutil.c testutil.h)
+
+# # these files are used in every single test program below
+# SET(SUPPORTFILES first.c test.h)
+
+# # These are all libcurl test programs
+# SET(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
+# #lib529
+# lib530
+# #lib532
+# lib533 lib536 lib537 lib540 lib541 lib542 lib543
+# lib544
+# #lib545
+# lib547
+# #lib548
+# lib549 lib552 lib553 lib554 lib555 lib556
+# lib539 lib557
+# lib560
+# )
+
+# SET(noinst_PROGRAMS_USE_TESTUTIL
+# lib502 lib503 lib504
+# lib507
+# lib525 lib526 lib527
+# lib529
+# lib530
+# lib532
+# lib533 lib536
+# lib555
+# )
+
+# MACRO(ADD_TESTUTIL_IF_NECESSARY TEST_NAME)
+# LIST(FIND noinst_PROGRAMS_USE_TESTUTIL ${TEST_NAME} USES_TESTUTIL)
+# IF(NOT ${USES_TESTUTIL} EQUAL -1)
+# LIST(APPEND SOURCE ${TESTUTIL})               # Need TestUtil
+# ENDIF()
+# ENDMACRO()
+
+# # General case
+# FOREACH(TEST_NAME ${noinst_PROGRAMS})
+# SET(SOURCE "${TEST_NAME}.c" ${SUPPORTFILES})
+# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
+# SETUP_TEST(${TEST_NAME} ${SOURCE})
+# ENDFOREACH()
+
+# # Special cases
+# SET(TEST_NAME lib527)
+# SET(SOURCE "lib526.c" ${SUPPORTFILES})
+# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
+# SETUP_TEST(${TEST_NAME} ${SOURCE})
+
+# SET(TEST_NAME lib529)
+# SET(SOURCE "lib525.c" ${SUPPORTFILES})
+# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
+# SETUP_TEST(${TEST_NAME} ${SOURCE})
+
+# SET(TEST_NAME lib532)
+# SET(SOURCE "lib526.c" ${SUPPORTFILES})
+# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
+# SETUP_TEST(${TEST_NAME} ${SOURCE})
+
+# SET(TEST_NAME lib545)
+# SET(SOURCE "lib544.c" ${SUPPORTFILES})
+# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
+# SETUP_TEST(${TEST_NAME} ${SOURCE})
+
+# SET(TEST_NAME lib548)
+# SET(SOURCE "lib547.c" ${SUPPORTFILES})
+# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
+# SETUP_TEST(${TEST_NAME} ${SOURCE})
index 80707b1..87ee56e 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -51,7 +51,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include/curl \
 endif
 
 EXTRA_DIST = test75.pl test307.pl test610.pl test613.pl test1013.pl    \
-test1022.pl Makefile.inc notexists.pl
+test1022.pl Makefile.inc notexists.pl CMakeLists.txt
 
 CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@
 
@@ -62,8 +62,8 @@ if USE_EXPLICIT_LIB_DEPS
 SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
 TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
 else
-SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@
-TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@
+SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@ @NSS_LIBS@
+TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@ @NSS_LIBS@
 endif
 
 # Dependencies (may need to be overriden)
index bc276f5..b002dd6 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -79,9 +89,6 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \
-       $(top_srcdir)/depcomp
 noinst_PROGRAMS = chkhostname$(EXEEXT) libauthretry$(EXEEXT) \
        libntlmconnect$(EXEEXT) lib500$(EXEEXT) lib501$(EXEEXT) \
        lib502$(EXEEXT) lib503$(EXEEXT) lib504$(EXEEXT) \
@@ -116,7 +123,8 @@ noinst_PROGRAMS = chkhostname$(EXEEXT) libauthretry$(EXEEXT) \
        lib1512$(EXEEXT) lib1513$(EXEEXT) lib1514$(EXEEXT) \
        lib1515$(EXEEXT) lib1520$(EXEEXT) lib1525$(EXEEXT) \
        lib1526$(EXEEXT) lib1527$(EXEEXT) lib1528$(EXEEXT) \
-       lib1529$(EXEEXT) lib1900$(EXEEXT) lib2033$(EXEEXT)
+       lib1529$(EXEEXT) lib1530$(EXEEXT) lib1531$(EXEEXT) \
+       lib1900$(EXEEXT) lib2033$(EXEEXT)
 @USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
 @CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined
 @CURL_LT_SHLIB_USE_MIMPURE_TEXT_TRUE@am__append_3 = -mimpure-text
@@ -143,7 +151,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -320,473 +329,487 @@ am_lib1529_OBJECTS = lib1529-lib1529.$(OBJEXT) $(am__objects_61) \
        $(am__objects_62) $(am__objects_63)
 lib1529_OBJECTS = $(am_lib1529_OBJECTS)
 lib1529_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_64 = lib1900-first.$(OBJEXT)
-am__objects_65 = lib1900-testutil.$(OBJEXT)
-am__objects_66 = ../../lib/lib1900-warnless.$(OBJEXT)
-am_lib1900_OBJECTS = lib1900-lib1900.$(OBJEXT) $(am__objects_64) \
+am__objects_64 = lib1530-first.$(OBJEXT)
+am__objects_65 = lib1530-testutil.$(OBJEXT)
+am__objects_66 = ../../lib/lib1530-warnless.$(OBJEXT)
+am_lib1530_OBJECTS = lib1530-lib1530.$(OBJEXT) $(am__objects_64) \
        $(am__objects_65) $(am__objects_66)
+lib1530_OBJECTS = $(am_lib1530_OBJECTS)
+lib1530_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_67 = lib1531-first.$(OBJEXT)
+am__objects_68 = lib1531-testutil.$(OBJEXT)
+am__objects_69 = ../../lib/lib1531-warnless.$(OBJEXT)
+am_lib1531_OBJECTS = lib1531-lib1531.$(OBJEXT) $(am__objects_67) \
+       $(am__objects_68) $(am__objects_69)
+lib1531_OBJECTS = $(am_lib1531_OBJECTS)
+lib1531_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am__objects_70 = lib1900-first.$(OBJEXT)
+am__objects_71 = lib1900-testutil.$(OBJEXT)
+am__objects_72 = ../../lib/lib1900-warnless.$(OBJEXT)
+am_lib1900_OBJECTS = lib1900-lib1900.$(OBJEXT) $(am__objects_70) \
+       $(am__objects_71) $(am__objects_72)
 lib1900_OBJECTS = $(am_lib1900_OBJECTS)
 lib1900_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_67 = lib2033-first.$(OBJEXT)
-am__objects_68 = lib2033-testutil.$(OBJEXT)
-am__objects_69 = ../../lib/lib2033-warnless.$(OBJEXT)
+am__objects_73 = lib2033-first.$(OBJEXT)
+am__objects_74 = lib2033-testutil.$(OBJEXT)
+am__objects_75 = ../../lib/lib2033-warnless.$(OBJEXT)
 am_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \
-       $(am__objects_67) $(am__objects_68) $(am__objects_69)
+       $(am__objects_73) $(am__objects_74) $(am__objects_75)
 lib2033_OBJECTS = $(am_lib2033_OBJECTS)
 lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_70 = lib500-first.$(OBJEXT)
-am__objects_71 = lib500-testutil.$(OBJEXT)
-am__objects_72 = lib500-testtrace.$(OBJEXT)
-am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_70) \
-       $(am__objects_71) $(am__objects_72)
+am__objects_76 = lib500-first.$(OBJEXT)
+am__objects_77 = lib500-testutil.$(OBJEXT)
+am__objects_78 = lib500-testtrace.$(OBJEXT)
+am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_76) \
+       $(am__objects_77) $(am__objects_78)
 lib500_OBJECTS = $(am_lib500_OBJECTS)
 lib500_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_73 = lib501-first.$(OBJEXT)
-am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_73)
+am__objects_79 = lib501-first.$(OBJEXT)
+am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_79)
 lib501_OBJECTS = $(am_lib501_OBJECTS)
 lib501_LDADD = $(LDADD)
 lib501_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_74 = lib502-first.$(OBJEXT)
-am__objects_75 = lib502-testutil.$(OBJEXT)
-am__objects_76 = ../../lib/lib502-warnless.$(OBJEXT)
-am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_74) \
-       $(am__objects_75) $(am__objects_76)
+am__objects_80 = lib502-first.$(OBJEXT)
+am__objects_81 = lib502-testutil.$(OBJEXT)
+am__objects_82 = ../../lib/lib502-warnless.$(OBJEXT)
+am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_80) \
+       $(am__objects_81) $(am__objects_82)
 lib502_OBJECTS = $(am_lib502_OBJECTS)
 lib502_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_77 = lib503-first.$(OBJEXT)
-am__objects_78 = lib503-testutil.$(OBJEXT)
-am__objects_79 = ../../lib/lib503-warnless.$(OBJEXT)
-am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_77) \
-       $(am__objects_78) $(am__objects_79)
+am__objects_83 = lib503-first.$(OBJEXT)
+am__objects_84 = lib503-testutil.$(OBJEXT)
+am__objects_85 = ../../lib/lib503-warnless.$(OBJEXT)
+am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_83) \
+       $(am__objects_84) $(am__objects_85)
 lib503_OBJECTS = $(am_lib503_OBJECTS)
 lib503_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_80 = lib504-first.$(OBJEXT)
-am__objects_81 = lib504-testutil.$(OBJEXT)
-am__objects_82 = ../../lib/lib504-warnless.$(OBJEXT)
-am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_80) \
-       $(am__objects_81) $(am__objects_82)
+am__objects_86 = lib504-first.$(OBJEXT)
+am__objects_87 = lib504-testutil.$(OBJEXT)
+am__objects_88 = ../../lib/lib504-warnless.$(OBJEXT)
+am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_86) \
+       $(am__objects_87) $(am__objects_88)
 lib504_OBJECTS = $(am_lib504_OBJECTS)
 lib504_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_83 = lib505-first.$(OBJEXT)
-am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_83)
+am__objects_89 = lib505-first.$(OBJEXT)
+am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_89)
 lib505_OBJECTS = $(am_lib505_OBJECTS)
 lib505_LDADD = $(LDADD)
 lib505_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_84 = lib506-first.$(OBJEXT)
-am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_84)
+am__objects_90 = lib506-first.$(OBJEXT)
+am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_90)
 lib506_OBJECTS = $(am_lib506_OBJECTS)
 lib506_LDADD = $(LDADD)
 lib506_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_85 = lib507-first.$(OBJEXT)
-am__objects_86 = lib507-testutil.$(OBJEXT)
-am__objects_87 = ../../lib/lib507-warnless.$(OBJEXT)
-am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_85) \
-       $(am__objects_86) $(am__objects_87)
+am__objects_91 = lib507-first.$(OBJEXT)
+am__objects_92 = lib507-testutil.$(OBJEXT)
+am__objects_93 = ../../lib/lib507-warnless.$(OBJEXT)
+am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_91) \
+       $(am__objects_92) $(am__objects_93)
 lib507_OBJECTS = $(am_lib507_OBJECTS)
 lib507_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_88 = lib508-first.$(OBJEXT)
-am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_88)
+am__objects_94 = lib508-first.$(OBJEXT)
+am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_94)
 lib508_OBJECTS = $(am_lib508_OBJECTS)
 lib508_LDADD = $(LDADD)
 lib508_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_89 = lib509-first.$(OBJEXT)
-am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_89)
+am__objects_95 = lib509-first.$(OBJEXT)
+am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_95)
 lib509_OBJECTS = $(am_lib509_OBJECTS)
 lib509_LDADD = $(LDADD)
 lib509_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_90 = lib510-first.$(OBJEXT)
-am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_90)
+am__objects_96 = lib510-first.$(OBJEXT)
+am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_96)
 lib510_OBJECTS = $(am_lib510_OBJECTS)
 lib510_LDADD = $(LDADD)
 lib510_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_91 = lib511-first.$(OBJEXT)
-am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_91)
+am__objects_97 = lib511-first.$(OBJEXT)
+am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_97)
 lib511_OBJECTS = $(am_lib511_OBJECTS)
 lib511_LDADD = $(LDADD)
 lib511_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_92 = lib512-first.$(OBJEXT)
-am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_92)
+am__objects_98 = lib512-first.$(OBJEXT)
+am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_98)
 lib512_OBJECTS = $(am_lib512_OBJECTS)
 lib512_LDADD = $(LDADD)
 lib512_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_93 = lib513-first.$(OBJEXT)
-am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_93)
+am__objects_99 = lib513-first.$(OBJEXT)
+am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_99)
 lib513_OBJECTS = $(am_lib513_OBJECTS)
 lib513_LDADD = $(LDADD)
 lib513_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_94 = lib514-first.$(OBJEXT)
-am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_94)
+am__objects_100 = lib514-first.$(OBJEXT)
+am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_100)
 lib514_OBJECTS = $(am_lib514_OBJECTS)
 lib514_LDADD = $(LDADD)
 lib514_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_95 = lib515-first.$(OBJEXT)
-am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_95)
+am__objects_101 = lib515-first.$(OBJEXT)
+am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_101)
 lib515_OBJECTS = $(am_lib515_OBJECTS)
 lib515_LDADD = $(LDADD)
 lib515_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_96 = lib516-first.$(OBJEXT)
-am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_96)
+am__objects_102 = lib516-first.$(OBJEXT)
+am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_102)
 lib516_OBJECTS = $(am_lib516_OBJECTS)
 lib516_LDADD = $(LDADD)
 lib516_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_97 = lib517-first.$(OBJEXT)
-am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_97)
+am__objects_103 = lib517-first.$(OBJEXT)
+am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_103)
 lib517_OBJECTS = $(am_lib517_OBJECTS)
 lib517_LDADD = $(LDADD)
 lib517_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_98 = lib518-first.$(OBJEXT)
-am__objects_99 = ../../lib/lib518-warnless.$(OBJEXT)
-am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_98) \
-       $(am__objects_99)
+am__objects_104 = lib518-first.$(OBJEXT)
+am__objects_105 = ../../lib/lib518-warnless.$(OBJEXT)
+am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_104) \
+       $(am__objects_105)
 lib518_OBJECTS = $(am_lib518_OBJECTS)
 lib518_LDADD = $(LDADD)
 lib518_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_100 = lib519-first.$(OBJEXT)
-am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_100)
+am__objects_106 = lib519-first.$(OBJEXT)
+am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_106)
 lib519_OBJECTS = $(am_lib519_OBJECTS)
 lib519_LDADD = $(LDADD)
 lib519_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_101 = lib520-first.$(OBJEXT)
-am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_101)
+am__objects_107 = lib520-first.$(OBJEXT)
+am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_107)
 lib520_OBJECTS = $(am_lib520_OBJECTS)
 lib520_LDADD = $(LDADD)
 lib520_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_102 = lib521-first.$(OBJEXT)
-am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_102)
+am__objects_108 = lib521-first.$(OBJEXT)
+am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_108)
 lib521_OBJECTS = $(am_lib521_OBJECTS)
 lib521_LDADD = $(LDADD)
 lib521_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_103 = lib523-first.$(OBJEXT)
-am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_103)
+am__objects_109 = lib523-first.$(OBJEXT)
+am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_109)
 lib523_OBJECTS = $(am_lib523_OBJECTS)
 lib523_LDADD = $(LDADD)
 lib523_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_104 = lib524-first.$(OBJEXT)
-am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_104)
+am__objects_110 = lib524-first.$(OBJEXT)
+am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_110)
 lib524_OBJECTS = $(am_lib524_OBJECTS)
 lib524_LDADD = $(LDADD)
 lib524_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_105 = lib525-first.$(OBJEXT)
-am__objects_106 = lib525-testutil.$(OBJEXT)
-am__objects_107 = ../../lib/lib525-warnless.$(OBJEXT)
-am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_105) \
-       $(am__objects_106) $(am__objects_107)
+am__objects_111 = lib525-first.$(OBJEXT)
+am__objects_112 = lib525-testutil.$(OBJEXT)
+am__objects_113 = ../../lib/lib525-warnless.$(OBJEXT)
+am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_111) \
+       $(am__objects_112) $(am__objects_113)
 lib525_OBJECTS = $(am_lib525_OBJECTS)
 lib525_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_108 = lib526-first.$(OBJEXT)
-am__objects_109 = lib526-testutil.$(OBJEXT)
-am__objects_110 = ../../lib/lib526-warnless.$(OBJEXT)
-am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_108) \
-       $(am__objects_109) $(am__objects_110)
+am__objects_114 = lib526-first.$(OBJEXT)
+am__objects_115 = lib526-testutil.$(OBJEXT)
+am__objects_116 = ../../lib/lib526-warnless.$(OBJEXT)
+am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_114) \
+       $(am__objects_115) $(am__objects_116)
 lib526_OBJECTS = $(am_lib526_OBJECTS)
 lib526_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_111 = lib527-first.$(OBJEXT)
-am__objects_112 = lib527-testutil.$(OBJEXT)
-am__objects_113 = ../../lib/lib527-warnless.$(OBJEXT)
-am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_111) \
-       $(am__objects_112) $(am__objects_113)
+am__objects_117 = lib527-first.$(OBJEXT)
+am__objects_118 = lib527-testutil.$(OBJEXT)
+am__objects_119 = ../../lib/lib527-warnless.$(OBJEXT)
+am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_117) \
+       $(am__objects_118) $(am__objects_119)
 lib527_OBJECTS = $(am_lib527_OBJECTS)
 lib527_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_114 = lib529-first.$(OBJEXT)
-am__objects_115 = lib529-testutil.$(OBJEXT)
-am__objects_116 = ../../lib/lib529-warnless.$(OBJEXT)
-am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_114) \
-       $(am__objects_115) $(am__objects_116)
+am__objects_120 = lib529-first.$(OBJEXT)
+am__objects_121 = lib529-testutil.$(OBJEXT)
+am__objects_122 = ../../lib/lib529-warnless.$(OBJEXT)
+am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_120) \
+       $(am__objects_121) $(am__objects_122)
 lib529_OBJECTS = $(am_lib529_OBJECTS)
 lib529_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_117 = lib530-first.$(OBJEXT)
-am__objects_118 = lib530-testutil.$(OBJEXT)
-am__objects_119 = ../../lib/lib530-warnless.$(OBJEXT)
-am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_117) \
-       $(am__objects_118) $(am__objects_119)
+am__objects_123 = lib530-first.$(OBJEXT)
+am__objects_124 = lib530-testutil.$(OBJEXT)
+am__objects_125 = ../../lib/lib530-warnless.$(OBJEXT)
+am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_123) \
+       $(am__objects_124) $(am__objects_125)
 lib530_OBJECTS = $(am_lib530_OBJECTS)
 lib530_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_120 = lib532-first.$(OBJEXT)
-am__objects_121 = lib532-testutil.$(OBJEXT)
-am__objects_122 = ../../lib/lib532-warnless.$(OBJEXT)
-am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_120) \
-       $(am__objects_121) $(am__objects_122)
+am__objects_126 = lib532-first.$(OBJEXT)
+am__objects_127 = lib532-testutil.$(OBJEXT)
+am__objects_128 = ../../lib/lib532-warnless.$(OBJEXT)
+am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_126) \
+       $(am__objects_127) $(am__objects_128)
 lib532_OBJECTS = $(am_lib532_OBJECTS)
 lib532_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_123 = lib533-first.$(OBJEXT)
-am__objects_124 = lib533-testutil.$(OBJEXT)
-am__objects_125 = ../../lib/lib533-warnless.$(OBJEXT)
-am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_123) \
-       $(am__objects_124) $(am__objects_125)
+am__objects_129 = lib533-first.$(OBJEXT)
+am__objects_130 = lib533-testutil.$(OBJEXT)
+am__objects_131 = ../../lib/lib533-warnless.$(OBJEXT)
+am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_129) \
+       $(am__objects_130) $(am__objects_131)
 lib533_OBJECTS = $(am_lib533_OBJECTS)
 lib533_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_126 = lib536-first.$(OBJEXT)
-am__objects_127 = lib536-testutil.$(OBJEXT)
-am__objects_128 = ../../lib/lib536-warnless.$(OBJEXT)
-am_lib536_OBJECTS = lib536-lib536.$(OBJEXT) $(am__objects_126) \
-       $(am__objects_127) $(am__objects_128)
+am__objects_132 = lib536-first.$(OBJEXT)
+am__objects_133 = lib536-testutil.$(OBJEXT)
+am__objects_134 = ../../lib/lib536-warnless.$(OBJEXT)
+am_lib536_OBJECTS = lib536-lib536.$(OBJEXT) $(am__objects_132) \
+       $(am__objects_133) $(am__objects_134)
 lib536_OBJECTS = $(am_lib536_OBJECTS)
 lib536_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_129 = lib537-first.$(OBJEXT)
-am__objects_130 = ../../lib/lib537-warnless.$(OBJEXT)
-am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_129) \
-       $(am__objects_130)
+am__objects_135 = lib537-first.$(OBJEXT)
+am__objects_136 = ../../lib/lib537-warnless.$(OBJEXT)
+am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_135) \
+       $(am__objects_136)
 lib537_OBJECTS = $(am_lib537_OBJECTS)
 lib537_LDADD = $(LDADD)
 lib537_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_131 = lib539-first.$(OBJEXT)
-am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_131)
+am__objects_137 = lib539-first.$(OBJEXT)
+am_lib539_OBJECTS = lib539-lib539.$(OBJEXT) $(am__objects_137)
 lib539_OBJECTS = $(am_lib539_OBJECTS)
 lib539_LDADD = $(LDADD)
 lib539_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_132 = lib540-first.$(OBJEXT)
-am__objects_133 = lib540-testutil.$(OBJEXT)
-am__objects_134 = ../../lib/lib540-warnless.$(OBJEXT)
-am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_132) \
-       $(am__objects_133) $(am__objects_134)
+am__objects_138 = lib540-first.$(OBJEXT)
+am__objects_139 = lib540-testutil.$(OBJEXT)
+am__objects_140 = ../../lib/lib540-warnless.$(OBJEXT)
+am_lib540_OBJECTS = lib540-lib540.$(OBJEXT) $(am__objects_138) \
+       $(am__objects_139) $(am__objects_140)
 lib540_OBJECTS = $(am_lib540_OBJECTS)
 lib540_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_135 = lib541-first.$(OBJEXT)
-am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_135)
+am__objects_141 = lib541-first.$(OBJEXT)
+am_lib541_OBJECTS = lib541-lib541.$(OBJEXT) $(am__objects_141)
 lib541_OBJECTS = $(am_lib541_OBJECTS)
 lib541_LDADD = $(LDADD)
 lib541_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_136 = lib542-first.$(OBJEXT)
-am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_136)
+am__objects_142 = lib542-first.$(OBJEXT)
+am_lib542_OBJECTS = lib542-lib542.$(OBJEXT) $(am__objects_142)
 lib542_OBJECTS = $(am_lib542_OBJECTS)
 lib542_LDADD = $(LDADD)
 lib542_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_137 = lib543-first.$(OBJEXT)
-am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_137)
+am__objects_143 = lib543-first.$(OBJEXT)
+am_lib543_OBJECTS = lib543-lib543.$(OBJEXT) $(am__objects_143)
 lib543_OBJECTS = $(am_lib543_OBJECTS)
 lib543_LDADD = $(LDADD)
 lib543_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_138 = lib544-first.$(OBJEXT)
-am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_138)
+am__objects_144 = lib544-first.$(OBJEXT)
+am_lib544_OBJECTS = lib544-lib544.$(OBJEXT) $(am__objects_144)
 lib544_OBJECTS = $(am_lib544_OBJECTS)
 lib544_LDADD = $(LDADD)
 lib544_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_139 = lib545-first.$(OBJEXT)
-am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_139)
+am__objects_145 = lib545-first.$(OBJEXT)
+am_lib545_OBJECTS = lib545-lib544.$(OBJEXT) $(am__objects_145)
 lib545_OBJECTS = $(am_lib545_OBJECTS)
 lib545_LDADD = $(LDADD)
 lib545_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_140 = lib547-first.$(OBJEXT)
-am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_140)
+am__objects_146 = lib547-first.$(OBJEXT)
+am_lib547_OBJECTS = lib547-lib547.$(OBJEXT) $(am__objects_146)
 lib547_OBJECTS = $(am_lib547_OBJECTS)
 lib547_LDADD = $(LDADD)
 lib547_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_141 = lib548-first.$(OBJEXT)
-am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_141)
+am__objects_147 = lib548-first.$(OBJEXT)
+am_lib548_OBJECTS = lib548-lib547.$(OBJEXT) $(am__objects_147)
 lib548_OBJECTS = $(am_lib548_OBJECTS)
 lib548_LDADD = $(LDADD)
 lib548_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_142 = lib549-first.$(OBJEXT)
-am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_142)
+am__objects_148 = lib549-first.$(OBJEXT)
+am_lib549_OBJECTS = lib549-lib549.$(OBJEXT) $(am__objects_148)
 lib549_OBJECTS = $(am_lib549_OBJECTS)
 lib549_LDADD = $(LDADD)
 lib549_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_143 = lib552-first.$(OBJEXT)
-am__objects_144 = ../../lib/lib552-warnless.$(OBJEXT)
-am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_143) \
-       $(am__objects_144)
+am__objects_149 = lib552-first.$(OBJEXT)
+am__objects_150 = ../../lib/lib552-warnless.$(OBJEXT)
+am_lib552_OBJECTS = lib552-lib552.$(OBJEXT) $(am__objects_149) \
+       $(am__objects_150)
 lib552_OBJECTS = $(am_lib552_OBJECTS)
 lib552_LDADD = $(LDADD)
 lib552_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_145 = lib553-first.$(OBJEXT)
-am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_145)
+am__objects_151 = lib553-first.$(OBJEXT)
+am_lib553_OBJECTS = lib553-lib553.$(OBJEXT) $(am__objects_151)
 lib553_OBJECTS = $(am_lib553_OBJECTS)
 lib553_LDADD = $(LDADD)
 lib553_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_146 = lib554-first.$(OBJEXT)
-am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_146)
+am__objects_152 = lib554-first.$(OBJEXT)
+am_lib554_OBJECTS = lib554-lib554.$(OBJEXT) $(am__objects_152)
 lib554_OBJECTS = $(am_lib554_OBJECTS)
 lib554_LDADD = $(LDADD)
 lib554_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_147 = lib555-first.$(OBJEXT)
-am__objects_148 = lib555-testutil.$(OBJEXT)
-am__objects_149 = ../../lib/lib555-warnless.$(OBJEXT)
-am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_147) \
-       $(am__objects_148) $(am__objects_149)
+am__objects_153 = lib555-first.$(OBJEXT)
+am__objects_154 = lib555-testutil.$(OBJEXT)
+am__objects_155 = ../../lib/lib555-warnless.$(OBJEXT)
+am_lib555_OBJECTS = lib555-lib555.$(OBJEXT) $(am__objects_153) \
+       $(am__objects_154) $(am__objects_155)
 lib555_OBJECTS = $(am_lib555_OBJECTS)
 lib555_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_150 = lib556-first.$(OBJEXT)
-am__objects_151 = ../../lib/lib556-warnless.$(OBJEXT)
-am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_150) \
-       $(am__objects_151)
+am__objects_156 = lib556-first.$(OBJEXT)
+am__objects_157 = ../../lib/lib556-warnless.$(OBJEXT)
+am_lib556_OBJECTS = lib556-lib556.$(OBJEXT) $(am__objects_156) \
+       $(am__objects_157)
 lib556_OBJECTS = $(am_lib556_OBJECTS)
 lib556_LDADD = $(LDADD)
 lib556_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_152 = lib557-first.$(OBJEXT)
-am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_152)
+am__objects_158 = lib557-first.$(OBJEXT)
+am_lib557_OBJECTS = lib557-lib557.$(OBJEXT) $(am__objects_158)
 lib557_OBJECTS = $(am_lib557_OBJECTS)
 lib557_LDADD = $(LDADD)
 lib557_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_153 = lib558-first.$(OBJEXT)
-am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_153)
+am__objects_159 = lib558-first.$(OBJEXT)
+am_lib558_OBJECTS = lib558-lib558.$(OBJEXT) $(am__objects_159)
 lib558_OBJECTS = $(am_lib558_OBJECTS)
 lib558_LDADD = $(LDADD)
 lib558_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_154 = lib560-first.$(OBJEXT)
-am__objects_155 = lib560-testutil.$(OBJEXT)
-am__objects_156 = ../../lib/lib560-warnless.$(OBJEXT)
-am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_154) \
-       $(am__objects_155) $(am__objects_156)
+am__objects_160 = lib560-first.$(OBJEXT)
+am__objects_161 = lib560-testutil.$(OBJEXT)
+am__objects_162 = ../../lib/lib560-warnless.$(OBJEXT)
+am_lib560_OBJECTS = lib560-lib560.$(OBJEXT) $(am__objects_160) \
+       $(am__objects_161) $(am__objects_162)
 lib560_OBJECTS = $(am_lib560_OBJECTS)
 lib560_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_157 = lib562-first.$(OBJEXT)
-am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_157)
+am__objects_163 = lib562-first.$(OBJEXT)
+am_lib562_OBJECTS = lib562-lib562.$(OBJEXT) $(am__objects_163)
 lib562_OBJECTS = $(am_lib562_OBJECTS)
 lib562_LDADD = $(LDADD)
 lib562_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_158 = lib564-first.$(OBJEXT)
-am__objects_159 = lib564-testutil.$(OBJEXT)
-am__objects_160 = ../../lib/lib564-warnless.$(OBJEXT)
-am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_158) \
-       $(am__objects_159) $(am__objects_160)
+am__objects_164 = lib564-first.$(OBJEXT)
+am__objects_165 = lib564-testutil.$(OBJEXT)
+am__objects_166 = ../../lib/lib564-warnless.$(OBJEXT)
+am_lib564_OBJECTS = lib564-lib564.$(OBJEXT) $(am__objects_164) \
+       $(am__objects_165) $(am__objects_166)
 lib564_OBJECTS = $(am_lib564_OBJECTS)
 lib564_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_161 = lib565-first.$(OBJEXT)
-am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_161)
+am__objects_167 = lib565-first.$(OBJEXT)
+am_lib565_OBJECTS = lib565-lib510.$(OBJEXT) $(am__objects_167)
 lib565_OBJECTS = $(am_lib565_OBJECTS)
 lib565_LDADD = $(LDADD)
 lib565_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_162 = lib566-first.$(OBJEXT)
-am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_162)
+am__objects_168 = lib566-first.$(OBJEXT)
+am_lib566_OBJECTS = lib566-lib566.$(OBJEXT) $(am__objects_168)
 lib566_OBJECTS = $(am_lib566_OBJECTS)
 lib566_LDADD = $(LDADD)
 lib566_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_163 = lib567-first.$(OBJEXT)
-am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_163)
+am__objects_169 = lib567-first.$(OBJEXT)
+am_lib567_OBJECTS = lib567-lib567.$(OBJEXT) $(am__objects_169)
 lib567_OBJECTS = $(am_lib567_OBJECTS)
 lib567_LDADD = $(LDADD)
 lib567_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_164 = lib568-first.$(OBJEXT)
-am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_164)
+am__objects_170 = lib568-first.$(OBJEXT)
+am_lib568_OBJECTS = lib568-lib568.$(OBJEXT) $(am__objects_170)
 lib568_OBJECTS = $(am_lib568_OBJECTS)
 lib568_LDADD = $(LDADD)
 lib568_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_165 = lib569-first.$(OBJEXT)
-am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_165)
+am__objects_171 = lib569-first.$(OBJEXT)
+am_lib569_OBJECTS = lib569-lib569.$(OBJEXT) $(am__objects_171)
 lib569_OBJECTS = $(am_lib569_OBJECTS)
 lib569_LDADD = $(LDADD)
 lib569_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_166 = lib570-first.$(OBJEXT)
-am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_166)
+am__objects_172 = lib570-first.$(OBJEXT)
+am_lib570_OBJECTS = lib570-lib570.$(OBJEXT) $(am__objects_172)
 lib570_OBJECTS = $(am_lib570_OBJECTS)
 lib570_LDADD = $(LDADD)
 lib570_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_167 = lib571-first.$(OBJEXT)
-am__objects_168 = ../../lib/lib571-warnless.$(OBJEXT)
-am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_167) \
-       $(am__objects_168)
+am__objects_173 = lib571-first.$(OBJEXT)
+am__objects_174 = ../../lib/lib571-warnless.$(OBJEXT)
+am_lib571_OBJECTS = lib571-lib571.$(OBJEXT) $(am__objects_173) \
+       $(am__objects_174)
 lib571_OBJECTS = $(am_lib571_OBJECTS)
 lib571_LDADD = $(LDADD)
 lib571_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_169 = lib572-first.$(OBJEXT)
-am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_169)
+am__objects_175 = lib572-first.$(OBJEXT)
+am_lib572_OBJECTS = lib572-lib572.$(OBJEXT) $(am__objects_175)
 lib572_OBJECTS = $(am_lib572_OBJECTS)
 lib572_LDADD = $(LDADD)
 lib572_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_170 = lib573-first.$(OBJEXT)
-am__objects_171 = lib573-testutil.$(OBJEXT)
-am__objects_172 = ../../lib/lib573-warnless.$(OBJEXT)
-am__objects_173 = lib573-testtrace.$(OBJEXT)
-am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_170) \
-       $(am__objects_171) $(am__objects_172) $(am__objects_173)
+am__objects_176 = lib573-first.$(OBJEXT)
+am__objects_177 = lib573-testutil.$(OBJEXT)
+am__objects_178 = ../../lib/lib573-warnless.$(OBJEXT)
+am__objects_179 = lib573-testtrace.$(OBJEXT)
+am_lib573_OBJECTS = lib573-lib573.$(OBJEXT) $(am__objects_176) \
+       $(am__objects_177) $(am__objects_178) $(am__objects_179)
 lib573_OBJECTS = $(am_lib573_OBJECTS)
 lib573_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_174 = lib574-first.$(OBJEXT)
-am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_174)
+am__objects_180 = lib574-first.$(OBJEXT)
+am_lib574_OBJECTS = lib574-lib574.$(OBJEXT) $(am__objects_180)
 lib574_OBJECTS = $(am_lib574_OBJECTS)
 lib574_LDADD = $(LDADD)
 lib574_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_175 = lib575-first.$(OBJEXT)
-am__objects_176 = lib575-testutil.$(OBJEXT)
-am__objects_177 = ../../lib/lib575-warnless.$(OBJEXT)
-am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_175) \
-       $(am__objects_176) $(am__objects_177)
+am__objects_181 = lib575-first.$(OBJEXT)
+am__objects_182 = lib575-testutil.$(OBJEXT)
+am__objects_183 = ../../lib/lib575-warnless.$(OBJEXT)
+am_lib575_OBJECTS = lib575-lib575.$(OBJEXT) $(am__objects_181) \
+       $(am__objects_182) $(am__objects_183)
 lib575_OBJECTS = $(am_lib575_OBJECTS)
 lib575_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_178 = lib576-first.$(OBJEXT)
-am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_178)
+am__objects_184 = lib576-first.$(OBJEXT)
+am_lib576_OBJECTS = lib576-lib576.$(OBJEXT) $(am__objects_184)
 lib576_OBJECTS = $(am_lib576_OBJECTS)
 lib576_LDADD = $(LDADD)
 lib576_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_179 = lib578-first.$(OBJEXT)
-am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_179)
+am__objects_185 = lib578-first.$(OBJEXT)
+am_lib578_OBJECTS = lib578-lib578.$(OBJEXT) $(am__objects_185)
 lib578_OBJECTS = $(am_lib578_OBJECTS)
 lib578_LDADD = $(LDADD)
 lib578_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_180 = lib579-first.$(OBJEXT)
-am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_180)
+am__objects_186 = lib579-first.$(OBJEXT)
+am_lib579_OBJECTS = lib579-lib579.$(OBJEXT) $(am__objects_186)
 lib579_OBJECTS = $(am_lib579_OBJECTS)
 lib579_LDADD = $(LDADD)
 lib579_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_181 = lib582-first.$(OBJEXT)
-am__objects_182 = lib582-testutil.$(OBJEXT)
-am__objects_183 = ../../lib/lib582-warnless.$(OBJEXT)
-am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_181) \
-       $(am__objects_182) $(am__objects_183)
+am__objects_187 = lib582-first.$(OBJEXT)
+am__objects_188 = lib582-testutil.$(OBJEXT)
+am__objects_189 = ../../lib/lib582-warnless.$(OBJEXT)
+am_lib582_OBJECTS = lib582-lib582.$(OBJEXT) $(am__objects_187) \
+       $(am__objects_188) $(am__objects_189)
 lib582_OBJECTS = $(am_lib582_OBJECTS)
 lib582_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_184 = lib583-first.$(OBJEXT)
-am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_184)
+am__objects_190 = lib583-first.$(OBJEXT)
+am_lib583_OBJECTS = lib583-lib583.$(OBJEXT) $(am__objects_190)
 lib583_OBJECTS = $(am_lib583_OBJECTS)
 lib583_LDADD = $(LDADD)
 lib583_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_185 = lib585-first.$(OBJEXT)
-am__objects_186 = lib585-testutil.$(OBJEXT)
-am__objects_187 = lib585-testtrace.$(OBJEXT)
-am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_185) \
-       $(am__objects_186) $(am__objects_187)
+am__objects_191 = lib585-first.$(OBJEXT)
+am__objects_192 = lib585-testutil.$(OBJEXT)
+am__objects_193 = lib585-testtrace.$(OBJEXT)
+am_lib585_OBJECTS = lib585-lib500.$(OBJEXT) $(am__objects_191) \
+       $(am__objects_192) $(am__objects_193)
 lib585_OBJECTS = $(am_lib585_OBJECTS)
 lib585_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_188 = lib586-first.$(OBJEXT)
-am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_188)
+am__objects_194 = lib586-first.$(OBJEXT)
+am_lib586_OBJECTS = lib586-lib586.$(OBJEXT) $(am__objects_194)
 lib586_OBJECTS = $(am_lib586_OBJECTS)
 lib586_LDADD = $(LDADD)
 lib586_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_189 = lib587-first.$(OBJEXT)
-am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_189)
+am__objects_195 = lib587-first.$(OBJEXT)
+am_lib587_OBJECTS = lib587-lib554.$(OBJEXT) $(am__objects_195)
 lib587_OBJECTS = $(am_lib587_OBJECTS)
 lib587_LDADD = $(LDADD)
 lib587_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_190 = lib590-first.$(OBJEXT)
-am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_190)
+am__objects_196 = lib590-first.$(OBJEXT)
+am_lib590_OBJECTS = lib590-lib590.$(OBJEXT) $(am__objects_196)
 lib590_OBJECTS = $(am_lib590_OBJECTS)
 lib590_LDADD = $(LDADD)
 lib590_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_191 = lib591-first.$(OBJEXT)
-am__objects_192 = lib591-testutil.$(OBJEXT)
-am__objects_193 = ../../lib/lib591-warnless.$(OBJEXT)
-am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_191) \
-       $(am__objects_192) $(am__objects_193)
+am__objects_197 = lib591-first.$(OBJEXT)
+am__objects_198 = lib591-testutil.$(OBJEXT)
+am__objects_199 = ../../lib/lib591-warnless.$(OBJEXT)
+am_lib591_OBJECTS = lib591-lib591.$(OBJEXT) $(am__objects_197) \
+       $(am__objects_198) $(am__objects_199)
 lib591_OBJECTS = $(am_lib591_OBJECTS)
 lib591_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_194 = lib597-first.$(OBJEXT)
-am__objects_195 = lib597-testutil.$(OBJEXT)
-am__objects_196 = ../../lib/lib597-warnless.$(OBJEXT)
-am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_194) \
-       $(am__objects_195) $(am__objects_196)
+am__objects_200 = lib597-first.$(OBJEXT)
+am__objects_201 = lib597-testutil.$(OBJEXT)
+am__objects_202 = ../../lib/lib597-warnless.$(OBJEXT)
+am_lib597_OBJECTS = lib597-lib597.$(OBJEXT) $(am__objects_200) \
+       $(am__objects_201) $(am__objects_202)
 lib597_OBJECTS = $(am_lib597_OBJECTS)
 lib597_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_197 = lib598-first.$(OBJEXT)
-am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_197)
+am__objects_203 = lib598-first.$(OBJEXT)
+am_lib598_OBJECTS = lib598-lib598.$(OBJEXT) $(am__objects_203)
 lib598_OBJECTS = $(am_lib598_OBJECTS)
 lib598_LDADD = $(LDADD)
 lib598_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_198 = lib599-first.$(OBJEXT)
-am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_198)
+am__objects_204 = lib599-first.$(OBJEXT)
+am_lib599_OBJECTS = lib599-lib599.$(OBJEXT) $(am__objects_204)
 lib599_OBJECTS = $(am_lib599_OBJECTS)
 lib599_LDADD = $(LDADD)
 lib599_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_199 = libauthretry-first.$(OBJEXT)
+am__objects_205 = libauthretry-first.$(OBJEXT)
 am_libauthretry_OBJECTS = libauthretry-libauthretry.$(OBJEXT) \
-       $(am__objects_199)
+       $(am__objects_205)
 libauthretry_OBJECTS = $(am_libauthretry_OBJECTS)
 libauthretry_LDADD = $(LDADD)
 libauthretry_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_200 = libntlmconnect-first.$(OBJEXT)
-am__objects_201 = libntlmconnect-testutil.$(OBJEXT)
-am__objects_202 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
+am__objects_206 = libntlmconnect-first.$(OBJEXT)
+am__objects_207 = libntlmconnect-testutil.$(OBJEXT)
+am__objects_208 = ../../lib/libntlmconnect-warnless.$(OBJEXT)
 am_libntlmconnect_OBJECTS = libntlmconnect-libntlmconnect.$(OBJEXT) \
-       $(am__objects_200) $(am__objects_201) $(am__objects_202)
+       $(am__objects_206) $(am__objects_207) $(am__objects_208)
 libntlmconnect_OBJECTS = $(am_libntlmconnect_OBJECTS)
 libntlmconnect_DEPENDENCIES = $(am__DEPENDENCIES_1)
 AM_V_P = $(am__v_P_@AM_V@)
@@ -831,33 +854,34 @@ SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
        $(lib1512_SOURCES) $(lib1513_SOURCES) $(lib1514_SOURCES) \
        $(lib1515_SOURCES) $(lib1520_SOURCES) $(lib1525_SOURCES) \
        $(lib1526_SOURCES) $(lib1527_SOURCES) $(lib1528_SOURCES) \
-       $(lib1529_SOURCES) $(lib1900_SOURCES) $(lib2033_SOURCES) \
-       $(lib500_SOURCES) $(lib501_SOURCES) $(lib502_SOURCES) \
-       $(lib503_SOURCES) $(lib504_SOURCES) $(lib505_SOURCES) \
-       $(lib506_SOURCES) $(lib507_SOURCES) $(lib508_SOURCES) \
-       $(lib509_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) $(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) $(lib578_SOURCES) \
-       $(lib579_SOURCES) $(lib582_SOURCES) $(lib583_SOURCES) \
-       $(lib585_SOURCES) $(lib586_SOURCES) $(lib587_SOURCES) \
-       $(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \
-       $(lib598_SOURCES) $(lib599_SOURCES) $(libauthretry_SOURCES) \
+       $(lib1529_SOURCES) $(lib1530_SOURCES) $(lib1531_SOURCES) \
+       $(lib1900_SOURCES) $(lib2033_SOURCES) $(lib500_SOURCES) \
+       $(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \
+       $(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \
+       $(lib507_SOURCES) $(lib508_SOURCES) $(lib509_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) $(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) $(lib578_SOURCES) $(lib579_SOURCES) \
+       $(lib582_SOURCES) $(lib583_SOURCES) $(lib585_SOURCES) \
+       $(lib586_SOURCES) $(lib587_SOURCES) $(lib590_SOURCES) \
+       $(lib591_SOURCES) $(lib597_SOURCES) $(lib598_SOURCES) \
+       $(lib599_SOURCES) $(libauthretry_SOURCES) \
        $(libntlmconnect_SOURCES)
 DIST_SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
        $(lib1500_SOURCES) $(lib1501_SOURCES) $(lib1502_SOURCES) \
@@ -867,33 +891,34 @@ DIST_SOURCES = $(libhostname_la_SOURCES) $(chkhostname_SOURCES) \
        $(lib1512_SOURCES) $(lib1513_SOURCES) $(lib1514_SOURCES) \
        $(lib1515_SOURCES) $(lib1520_SOURCES) $(lib1525_SOURCES) \
        $(lib1526_SOURCES) $(lib1527_SOURCES) $(lib1528_SOURCES) \
-       $(lib1529_SOURCES) $(lib1900_SOURCES) $(lib2033_SOURCES) \
-       $(lib500_SOURCES) $(lib501_SOURCES) $(lib502_SOURCES) \
-       $(lib503_SOURCES) $(lib504_SOURCES) $(lib505_SOURCES) \
-       $(lib506_SOURCES) $(lib507_SOURCES) $(lib508_SOURCES) \
-       $(lib509_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) $(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) $(lib578_SOURCES) \
-       $(lib579_SOURCES) $(lib582_SOURCES) $(lib583_SOURCES) \
-       $(lib585_SOURCES) $(lib586_SOURCES) $(lib587_SOURCES) \
-       $(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \
-       $(lib598_SOURCES) $(lib599_SOURCES) $(libauthretry_SOURCES) \
+       $(lib1529_SOURCES) $(lib1530_SOURCES) $(lib1531_SOURCES) \
+       $(lib1900_SOURCES) $(lib2033_SOURCES) $(lib500_SOURCES) \
+       $(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \
+       $(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \
+       $(lib507_SOURCES) $(lib508_SOURCES) $(lib509_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) $(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) $(lib578_SOURCES) $(lib579_SOURCES) \
+       $(lib582_SOURCES) $(lib583_SOURCES) $(lib585_SOURCES) \
+       $(lib586_SOURCES) $(lib587_SOURCES) $(lib590_SOURCES) \
+       $(lib591_SOURCES) $(lib597_SOURCES) $(lib598_SOURCES) \
+       $(lib599_SOURCES) $(libauthretry_SOURCES) \
        $(libntlmconnect_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -919,6 +944,8 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+       $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -977,7 +1004,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -999,6 +1026,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -1032,6 +1060,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -1043,17 +1072,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -1099,6 +1129,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -1120,7 +1151,7 @@ top_srcdir = @top_srcdir@
 #
 # 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.
+# are also available at https://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
@@ -1157,11 +1188,11 @@ AUTOMAKE_OPTIONS = foreign nostdinc
 @USE_EMBEDDED_ARES_TRUE@       -I$(top_builddir)/ares \
 @USE_EMBEDDED_ARES_TRUE@       -I$(top_srcdir)/ares $(am__append_1)
 EXTRA_DIST = test75.pl test307.pl test610.pl test613.pl test1013.pl    \
-test1022.pl Makefile.inc notexists.pl
+test1022.pl Makefile.inc notexists.pl CMakeLists.txt
 
-@USE_EXPLICIT_LIB_DEPS_FALSE@SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@
+@USE_EXPLICIT_LIB_DEPS_FALSE@SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_LIBS@ @NSS_LIBS@
 @USE_EXPLICIT_LIB_DEPS_TRUE@SUPPORTFILES_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
-@USE_EXPLICIT_LIB_DEPS_FALSE@TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@
+@USE_EXPLICIT_LIB_DEPS_FALSE@TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @CURL_NETWORK_AND_TIME_LIBS@ @NSS_LIBS@
 @USE_EXPLICIT_LIB_DEPS_TRUE@TESTUTIL_LIBS = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@
 
 # Dependencies (may need to be overriden)
@@ -1430,6 +1461,12 @@ lib1528_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1528
 lib1529_SOURCES = lib1529.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1529_LDADD = $(TESTUTIL_LIBS)
 lib1529_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1529
+lib1530_SOURCES = lib1530.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1530_LDADD = $(TESTUTIL_LIBS)
+lib1530_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1530
+lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1531_LDADD = $(TESTUTIL_LIBS)
+lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
 lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1900_LDADD = $(TESTUTIL_LIBS)
 lib1900_CPPFLAGS = $(AM_CPPFLAGS)
@@ -1472,7 +1509,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/libtest/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/libtest/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -1481,7 +1517,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -1654,6 +1690,18 @@ lib1528$(EXEEXT): $(lib1528_OBJECTS) $(lib1528_DEPENDENCIES) $(EXTRA_lib1528_DEP
 lib1529$(EXEEXT): $(lib1529_OBJECTS) $(lib1529_DEPENDENCIES) $(EXTRA_lib1529_DEPENDENCIES) 
        @rm -f lib1529$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(lib1529_OBJECTS) $(lib1529_LDADD) $(LIBS)
+../../lib/lib1530-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
+
+lib1530$(EXEEXT): $(lib1530_OBJECTS) $(lib1530_DEPENDENCIES) $(EXTRA_lib1530_DEPENDENCIES) 
+       @rm -f lib1530$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(lib1530_OBJECTS) $(lib1530_LDADD) $(LIBS)
+../../lib/lib1531-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
+       ../../lib/$(DEPDIR)/$(am__dirstamp)
+
+lib1531$(EXEEXT): $(lib1531_OBJECTS) $(lib1531_DEPENDENCIES) $(EXTRA_lib1531_DEPENDENCIES) 
+       @rm -f lib1531$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(lib1531_OBJECTS) $(lib1531_LDADD) $(LIBS)
 ../../lib/lib1900-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
        ../../lib/$(DEPDIR)/$(am__dirstamp)
 
@@ -2065,6 +2113,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1527-warnless.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1528-warnless.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1529-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1530-warnless.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1531-warnless.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1900-warnless.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib2033-warnless.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@
@@ -2160,6 +2210,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529-first.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529-lib1529.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1529-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530-lib1530.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1530-testutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531-lib1531.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1531-testutil.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-first.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-lib1900.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-testutil.Po@am__quote@
@@ -3602,6 +3658,118 @@ lib1529-testutil.obj: testutil.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1529_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1529-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
 
+lib1530-lib1530.o: lib1530.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-lib1530.o -MD -MP -MF $(DEPDIR)/lib1530-lib1530.Tpo -c -o lib1530-lib1530.o `test -f 'lib1530.c' || echo '$(srcdir)/'`lib1530.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-lib1530.Tpo $(DEPDIR)/lib1530-lib1530.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1530.c' object='lib1530-lib1530.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-lib1530.o `test -f 'lib1530.c' || echo '$(srcdir)/'`lib1530.c
+
+lib1530-lib1530.obj: lib1530.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-lib1530.obj -MD -MP -MF $(DEPDIR)/lib1530-lib1530.Tpo -c -o lib1530-lib1530.obj `if test -f 'lib1530.c'; then $(CYGPATH_W) 'lib1530.c'; else $(CYGPATH_W) '$(srcdir)/lib1530.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-lib1530.Tpo $(DEPDIR)/lib1530-lib1530.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1530.c' object='lib1530-lib1530.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-lib1530.obj `if test -f 'lib1530.c'; then $(CYGPATH_W) 'lib1530.c'; else $(CYGPATH_W) '$(srcdir)/lib1530.c'; fi`
+
+lib1530-first.o: first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-first.o -MD -MP -MF $(DEPDIR)/lib1530-first.Tpo -c -o lib1530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-first.Tpo $(DEPDIR)/lib1530-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1530-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib1530-first.obj: first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-first.obj -MD -MP -MF $(DEPDIR)/lib1530-first.Tpo -c -o lib1530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-first.Tpo $(DEPDIR)/lib1530-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1530-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib1530-testutil.o: testutil.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-testutil.o -MD -MP -MF $(DEPDIR)/lib1530-testutil.Tpo -c -o lib1530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-testutil.Tpo $(DEPDIR)/lib1530-testutil.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1530-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib1530-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1530-testutil.obj -MD -MP -MF $(DEPDIR)/lib1530-testutil.Tpo -c -o lib1530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1530-testutil.Tpo $(DEPDIR)/lib1530-testutil.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1530-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1530-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+../../lib/lib1530-warnless.o: ../../lib/warnless.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1530-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1530-warnless.Tpo -c -o ../../lib/lib1530-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1530-warnless.Tpo ../../lib/$(DEPDIR)/lib1530-warnless.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1530-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1530-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
+
+../../lib/lib1530-warnless.obj: ../../lib/warnless.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1530-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1530-warnless.Tpo -c -o ../../lib/lib1530-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1530-warnless.Tpo ../../lib/$(DEPDIR)/lib1530-warnless.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1530-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1530_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1530-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
+
+lib1531-lib1531.o: lib1531.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-lib1531.o -MD -MP -MF $(DEPDIR)/lib1531-lib1531.Tpo -c -o lib1531-lib1531.o `test -f 'lib1531.c' || echo '$(srcdir)/'`lib1531.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-lib1531.Tpo $(DEPDIR)/lib1531-lib1531.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1531.c' object='lib1531-lib1531.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-lib1531.o `test -f 'lib1531.c' || echo '$(srcdir)/'`lib1531.c
+
+lib1531-lib1531.obj: lib1531.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-lib1531.obj -MD -MP -MF $(DEPDIR)/lib1531-lib1531.Tpo -c -o lib1531-lib1531.obj `if test -f 'lib1531.c'; then $(CYGPATH_W) 'lib1531.c'; else $(CYGPATH_W) '$(srcdir)/lib1531.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-lib1531.Tpo $(DEPDIR)/lib1531-lib1531.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='lib1531.c' object='lib1531-lib1531.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-lib1531.obj `if test -f 'lib1531.c'; then $(CYGPATH_W) 'lib1531.c'; else $(CYGPATH_W) '$(srcdir)/lib1531.c'; fi`
+
+lib1531-first.o: first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-first.o -MD -MP -MF $(DEPDIR)/lib1531-first.Tpo -c -o lib1531-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-first.Tpo $(DEPDIR)/lib1531-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1531-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
+
+lib1531-first.obj: first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-first.obj -MD -MP -MF $(DEPDIR)/lib1531-first.Tpo -c -o lib1531-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-first.Tpo $(DEPDIR)/lib1531-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='first.c' object='lib1531-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
+
+lib1531-testutil.o: testutil.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-testutil.o -MD -MP -MF $(DEPDIR)/lib1531-testutil.Tpo -c -o lib1531-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-testutil.Tpo $(DEPDIR)/lib1531-testutil.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1531-testutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
+
+lib1531-testutil.obj: testutil.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1531-testutil.obj -MD -MP -MF $(DEPDIR)/lib1531-testutil.Tpo -c -o lib1531-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1531-testutil.Tpo $(DEPDIR)/lib1531-testutil.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testutil.c' object='lib1531-testutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1531-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
+
+../../lib/lib1531-warnless.o: ../../lib/warnless.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1531-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1531-warnless.Tpo -c -o ../../lib/lib1531-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1531-warnless.Tpo ../../lib/$(DEPDIR)/lib1531-warnless.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1531-warnless.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1531-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
+
+../../lib/lib1531-warnless.obj: ../../lib/warnless.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1531-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1531-warnless.Tpo -c -o ../../lib/lib1531-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1531-warnless.Tpo ../../lib/$(DEPDIR)/lib1531-warnless.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1531-warnless.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1531_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1531-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
+
 lib1900-lib1900.o: lib1900.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1900_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1900-lib1900.o -MD -MP -MF $(DEPDIR)/lib1900-lib1900.Tpo -c -o lib1900-lib1900.o `test -f 'lib1900.c' || echo '$(srcdir)/'`lib1900.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/lib1900-lib1900.Tpo $(DEPDIR)/lib1900-lib1900.Po
@@ -6893,6 +7061,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 3508b80..27d5ee9 100644 (file)
@@ -23,7 +23,7 @@ noinst_PROGRAMS = chkhostname libauthretry libntlmconnect                \
  lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \
  lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515 \
  lib1520 \
- lib1525 lib1526 lib1527 lib1528 lib1529 \
+ lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 \
  lib1900 \
  lib2033
 
@@ -380,6 +380,14 @@ lib1529_SOURCES = lib1529.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1529_LDADD = $(TESTUTIL_LIBS)
 lib1529_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1529
 
+lib1530_SOURCES = lib1530.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1530_LDADD = $(TESTUTIL_LIBS)
+lib1530_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1530
+
+lib1531_SOURCES = lib1531.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
+lib1531_LDADD = $(TESTUTIL_LIBS)
+lib1531_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1531
+
 lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
 lib1900_LDADD = $(TESTUTIL_LIBS)
 lib1900_CPPFLAGS = $(AM_CPPFLAGS)
index 168294a..02a4eef 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 5851faf..4714395 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #  include <fcntl.h> /* for setmode() */
 #endif
 
+#ifdef USE_NSS
+#include <nspr.h>
+#endif
+
 #ifdef CURLDEBUG
 #  define MEMDEBUG_NODEFINES
 #  include "memdebug.h"
@@ -52,7 +56,7 @@ int select_wrapper(int nfds, fd_set *rd, fd_set *wr, fd_set *exc,
    * select() can not be used to sleep without a single fd_set.
    */
   if(!nfds) {
-    Sleep(1000*tv->tv_sec + tv->tv_usec/1000);
+    Sleep((1000*tv->tv_sec) + (DWORD)(((double)tv->tv_usec)/1000.0));
     return 0;
   }
 #endif
@@ -111,9 +115,24 @@ static void memory_tracking_init(void)
 #  define memory_tracking_init() Curl_nop_stmt
 #endif
 
+/* returns a hexdump in a static memory area */
+char *hexdump(unsigned char *buffer, size_t len)
+{
+  static char dump[200*3+1];
+  char *p = dump;
+  size_t i;
+  if(len > 200)
+    return NULL;
+  for(i=0; i<len; i++, p += 3)
+    snprintf(p, 4, "%02x ", buffer[i]);
+  return dump;
+}
+
+
 int main(int argc, char **argv)
 {
   char *URL;
+  int result;
 
 #ifdef O_BINARY
 #  ifdef __HIGHC__
@@ -152,5 +171,13 @@ int main(int argc, char **argv)
 
   fprintf(stderr, "URL: %s\n", URL);
 
-  return test(URL);
+  result = test(URL);
+
+#ifdef USE_NSS
+  if(PR_Initialized())
+    /* prevent valgrind from reporting possibly lost memory (fd cache, ...) */
+    PR_Cleanup();
+#endif
+
+  return result;
 }
index 08b917f..8998361 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 01a382e..f9bd966 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 2b50c47..2336a8d 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index b61c4db..0551f04 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 5bb61b3..5340c57 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 72f26d1..f536422 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index f67c7d6..df428a0 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index d19a7b5..3d791e0 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a46f9ab..bec3167 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 86372aa..7598987 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index aefb577..d0123f1 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -41,6 +41,7 @@ static int progressKiller(void *arg,
   (void)dlnow;
   (void)ultotal;
   (void)ulnow;
+  printf("PROGRESSFUNCTION called\n");
   return 1;
 }
 
index ec8f8a3..b4ab9dc 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4ac9fcf..db0d09e 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -39,9 +39,6 @@
 #define sleep(s) Sleep(s * 1000)
 #endif
 
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-
 static int debug_callback(CURL *curl, curl_infotype info, char *msg, size_t len, void *ptr)
 {
   (void)curl;
@@ -133,7 +130,7 @@ int test(char *URL)
 
   for(i = 1; i <= count; i++) {
     char target_url[256];
-    snprintf(target_url, sizeof(target_url), "http://testserver.example.com:%s%s%04d", port, path, i);
+    snprintf(target_url, sizeof(target_url), "http://testserver.example.com:%s/%s%04d", port, path, i);
 
     /* second request must succeed like the first one */
     if((res = do_one_request(multi, target_url, dns_entry)))
index c6d2e82..a4ce79b 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 957b429..270a002 100644 (file)
@@ -10,7 +10,7 @@
  *
  * 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.
+ * are also available at https://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
index ec21fb0..0ebd8ed 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 280c947..e3ba106 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -83,6 +83,7 @@ int test(char *URL)
   test_setopt(curl, CURLOPT_READFUNCTION, read_callback);
   test_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
   test_setopt(curl, CURLOPT_INFILESIZE, strlen(data));
+  test_setopt(curl, CURLOPT_HEADEROPT, CURLHEADER_UNIFIED);
 
   res = curl_easy_perform(curl);
 
index 94a7cd0..cd953d6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 3def142..3333ae6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
diff --git a/tests/libtest/lib1530.c b/tests/libtest/lib1530.c
new file mode 100644 (file)
index 0000000..d1ca34c
--- /dev/null
@@ -0,0 +1,67 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 "test.h"
+
+#include "memdebug.h"
+
+static curl_socket_t opensocket(void *clientp,
+                                curlsocktype purpose,
+                                struct curl_sockaddr *address)
+{
+  (void)purpose;
+  (void)address;
+  (void)clientp;
+  fprintf(stderr, "opensocket() returns CURL_SOCKET_BAD\n");
+  return CURL_SOCKET_BAD;
+}
+
+int test(char *URL)
+{
+  CURL *curl = NULL;
+  CURLcode res = CURLE_FAILED_INIT;
+  (void)URL;
+
+  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, "http://99.99.99.99:9999");
+  test_setopt(curl, CURLOPT_VERBOSE, 1L);
+  test_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
+
+  res = curl_easy_perform(curl);
+
+test_cleanup:
+
+  curl_easy_cleanup(curl);
+  curl_global_cleanup();
+
+  return (int)res;
+}
diff --git a/tests/libtest/lib1531.c b/tests/libtest/lib1531.c
new file mode 100644 (file)
index 0000000..438408d
--- /dev/null
@@ -0,0 +1,144 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 "test.h"
+
+#include "testutil.h"
+#include "warnless.h"
+#include "memdebug.h"
+
+#define TEST_HANG_TIMEOUT 60 * 1000
+
+char const testData[] = ".abc\0xyz";
+off_t const testDataSize = sizeof(testData) - 1;
+
+int test(char *URL)
+{
+  CURL *easy;
+  CURLM *multi_handle;
+  int still_running; /* keep number of running handles */
+  CURLMsg *msg; /* for picking up messages with the transfer status */
+  int msgs_left; /* how many messages are left */
+
+  /* Allocate one CURL handle per transfer */
+  easy = curl_easy_init();
+
+  /* init a multi stack */
+  multi_handle = curl_multi_init();
+
+  /* add the individual transfer */
+  curl_multi_add_handle(multi_handle, easy);
+
+  /* set the options (I left out a few, you'll get the point anyway) */
+  curl_easy_setopt(easy, CURLOPT_URL, URL);
+  curl_easy_setopt(easy, CURLOPT_POSTFIELDSIZE_LARGE, (curl_off_t)testDataSize);
+  curl_easy_setopt(easy, CURLOPT_POSTFIELDS, testData);
+
+  /* we start some action by calling perform right away */
+  curl_multi_perform(multi_handle, &still_running);
+
+  do {
+    struct timeval timeout;
+    int rc; /* select() return code */
+    CURLMcode mc; /* curl_multi_fdset() 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 */
+    mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
+
+    if(mc != CURLM_OK)
+    {
+      fprintf(stderr, "curl_multi_fdset() failed, code %d.\n", mc);
+      break;
+    }
+
+    /* On success the value of maxfd is guaranteed to be >= -1. We call
+       select(maxfd + 1, ...); specially in case of (maxfd == -1) there are
+       no fds ready yet so we call select(0, ...) --or Sleep() on Windows--
+       to sleep 100ms, which is the minimum suggested value in the
+       curl_multi_fdset() doc. */
+
+    if(maxfd == -1) {
+#ifdef _WIN32
+      Sleep(100);
+      rc = 0;
+#else
+      /* Portable sleep for platforms other than Windows. */
+      struct timeval wait = { 0, 100 * 1000 }; /* 100ms */
+      rc = select(0, NULL, NULL, NULL, &wait);
+#endif
+    }
+    else {
+      /* Note that on some platforms 'timeout' may be modified by select().
+         If you need access to the original value save a copy beforehand. */
+      rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
+    }
+
+    switch(rc) {
+    case -1:
+      /* select error */
+      break;
+    case 0: /* timeout */
+    default: /* action */
+      curl_multi_perform(multi_handle, &still_running);
+      break;
+    }
+  } while(still_running);
+
+  /* See how the transfers went */
+  while ((msg = curl_multi_info_read(multi_handle, &msgs_left))) {
+    if (msg->msg == CURLMSG_DONE) {
+      printf("HTTP transfer completed with status %d\n", msg->data.result);
+      break;
+    }
+  }
+
+  curl_multi_cleanup(multi_handle);
+
+  /* Free the CURL handles */
+  curl_easy_cleanup(easy);
+
+  return 0;
+}
+
index 2f64742..f52a9c2 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4d62208..e249d9f 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 26275f9..b1b9ad4 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 554583a..7cf6415 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 50277f7..2eb2874 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 358fc98..5573420 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 9592e0f..79c3bc7 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4dad0d9..4ee384f 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -20,9 +20,6 @@
  *
  ***************************************************************************/
 #include "test.h"
-
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 static const char *HOSTHEADER = "Host: www.host.foo.com";
index 87c21de..7487992 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 7f37309..5b2ff1f 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a3de51e..1f9e3e4 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index c60b2ca..f84af76 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 6be2d2f..81dc753 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 19da18b..14241dd 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 7aab3b1..6462ac7 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 953e90d..916ed6b 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4e96c4a..d982145 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a959094..4c04af6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index ba49ec4..2f68ebd 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 23f7f17..94343f6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index b720c8f..a95bc3c 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 9ffaa4f..556b66b 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 93c3068..d15add7 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 0fdc83d..3272df4 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 6f56df9..e5ab187 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index ca128cb..8290cad 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 9db04db..0ce7ebb 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 06a8464..a3e2d0c 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -83,13 +83,15 @@ int test(char *URL)
 
     abort_on_test_timeout();
 
-    if(!running && handles_added >= NUM_HANDLES)
-      break; /* done */
+    if(!running) {
+      if(handles_added >= NUM_HANDLES)
+        break; /* done */
 
-    /* Add the rest of the handles now that the first handle has sent the
-       request. */
-    while(handles_added < NUM_HANDLES)
-      multi_add_handle(m, curl[handles_added++]);
+      /* Add the rest of the handles now that the first handle has completed
+         its request. */
+      while(handles_added < NUM_HANDLES)
+        multi_add_handle(m, curl[handles_added++]);
+    }
 
     FD_ZERO(&rd);
     FD_ZERO(&wr);
index fdc18a1..706b269 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index e3ae402..f3ba573 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 5da5379..88cbcea 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 923893f..c6ca0d2 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -83,8 +83,7 @@ int test(char *URL)
 test_cleanup:
 
    curl_slist_free_all(slist);
-   if(newURL)
-     free(newURL);
+   free(newURL);
    curl_easy_cleanup(curl);
    curl_global_cleanup();
 
index ac0ebe6..62d8dfd 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 6015d2f..64c7d20 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 84f493f..0d0d574 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index b4a31ca..3672483 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 7e2f735..9bd80d8 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index c82bc3f..c282be1 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a1568c8..961a4ba 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 2cc942a..408b60c 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index cb1cefd..96d5699 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 0596f3e..23f0e23 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -64,7 +64,7 @@ static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp)
 #endif
 }
 
-int test(char *URL)
+static int once(char *URL, bool oldstyle)
 {
   CURL *curl;
   CURLcode res=CURLE_OK;
@@ -75,22 +75,29 @@ int test(char *URL)
   struct WriteThis pooh;
   struct WriteThis pooh2;
 
-  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, (long)pooh.sizeleft,
-                        CURLFORM_FILENAME, "postit2.c",
-                        CURLFORM_END);
+  if(oldstyle) {
+    formrc = curl_formadd(&formpost,
+                          &lastptr,
+                          CURLFORM_COPYNAME, "sendfile",
+                          CURLFORM_STREAM, &pooh,
+                          CURLFORM_CONTENTSLENGTH, (long)pooh.sizeleft,
+                          CURLFORM_FILENAME, "postit2.c",
+                          CURLFORM_END);
+  }
+  else {
+    /* new style */
+    formrc = curl_formadd(&formpost,
+                          &lastptr,
+                          CURLFORM_COPYNAME, "sendfile alternative",
+                          CURLFORM_STREAM, &pooh,
+                          CURLFORM_CONTENTLEN, (curl_off_t)pooh.sizeleft,
+                          CURLFORM_FILENAME, "file name 2",
+                          CURLFORM_END);
+  }
 
   if(formrc)
     printf("curl_formadd(1) = %d\n", (int)formrc);
@@ -190,10 +197,27 @@ test_cleanup:
 
   /* always cleanup */
   curl_easy_cleanup(curl);
-  curl_global_cleanup();
 
   /* now cleanup the formpost chain */
   curl_formfree(formpost);
 
   return res;
 }
+
+int test(char *URL)
+{
+  int res;
+
+  if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
+    fprintf(stderr, "curl_global_init() failed\n");
+    return TEST_ERR_MAJOR_BAD;
+  }
+
+  res = once(URL, TRUE); /* old */
+  if(!res)
+    res = once(URL, FALSE); /* new */
+
+  curl_global_cleanup();
+
+  return res;
+}
index 49a81bf..fea4ea4 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a4b4b93..3c1ff0e 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 7e5f9e9..2c0d5e0 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -26,9 +26,6 @@
  */
 
 #include "test.h"
-
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 
index 1286a1d..3947563 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index e8be1c7..8fa0c2d 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a5f0ea5..b5c3970 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 2a0a566..1822931 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index ba839d6..fc03d4e 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 573529c..080efb1 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4b15821..3dfb948 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -28,8 +28,6 @@
 #include <fcntl.h>
 #endif
 
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 /* build request url */
@@ -161,8 +159,7 @@ test_cleanup:
   if(sdpf)
     fclose(sdpf);
 
-  if(stream_uri)
-    free(stream_uri);
+  free(stream_uri);
 
   if(custom_headers)
     curl_slist_free_all(custom_headers);
index a434d74..909a12c 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -20,9 +20,6 @@
  *
  ***************************************************************************/
 #include "test.h"
-
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 /* build request url */
@@ -118,9 +115,7 @@ test_cleanup:
   if(idfile)
     fclose(idfile);
 
-  if(stream_uri)
-    free(stream_uri);
-
+  free(stream_uri);
   curl_easy_cleanup(curl);
   curl_global_cleanup();
 
index fe10de5..db44985 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -20,9 +20,6 @@
  *
  ***************************************************************************/
 #include "test.h"
-
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 /* build request url */
@@ -105,9 +102,7 @@ int test(char *URL)
   }
 
 test_cleanup:
-
-  if(stream_uri)
-    free(stream_uri);
+  free(stream_uri);
 
   curl_easy_cleanup(curl);
   curl_global_cleanup();
index 78c1c95..95c8684 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -37,8 +37,6 @@
 #  include <fcntl.h>
 #endif
 
-#include <curl/mprintf.h>
-
 #include "warnless.h"
 #include "memdebug.h"
 
@@ -197,9 +195,7 @@ int test(char *URL)
   }
 
 test_cleanup:
-
-  if(stream_uri)
-    free(stream_uri);
+  free(stream_uri);
 
   if(protofile)
     fclose(protofile);
index 3df4d03..9e7a9fe 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -28,8 +28,6 @@
 #include <fcntl.h>
 #endif
 
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 /* build request url */
@@ -167,8 +165,7 @@ test_cleanup:
   if(paramsf)
     fclose(paramsf);
 
-  if(stream_uri)
-    free(stream_uri);
+  free(stream_uri);
 
   if(custom_headers)
     curl_slist_free_all(custom_headers);
index b49d26a..527c19b 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -95,7 +95,8 @@ int test(char *URL)
 
   curl_easy_getinfo(c, CURLINFO_CONNECT_TIME, &connect_time);
   if (connect_time < dbl_epsilon) {
-    fprintf(stderr, "connect time is < epsilon\n");
+    fprintf(stderr, "connect time %e is < epsilon %e\n",
+            connect_time, dbl_epsilon);
     res = TEST_ERR_MAJOR_BAD;
   }
 
index afb2bce..6baeb00 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 942df68..186170c 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 61bb613..692faf3 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a39b317..9189d6e 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 0e8bd2f..fc9f791 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 952efb4..738aa63 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -357,10 +357,8 @@ test_cleanup:
   fclose(hd_src);
 
   /* free local memory */
-  if(sockets.read.sockets)
-    free(sockets.read.sockets);
-  if(sockets.write.sockets)
-    free(sockets.write.sockets);
+  free(sockets.read.sockets);
+  free(sockets.write.sockets);
 
   return res;
 }
index ad5a5ce..9af48d2 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -21,7 +21,7 @@
  ***************************************************************************/
 /*
  * This test case is based on the sample code provided by Saqib Ali
- * http://curl.haxx.se/mail/lib-2011-03/0066.html
+ * https://curl.haxx.se/mail/lib-2011-03/0066.html
  */
 
 #include "test.h"
index 4ee0ad3..3965c74 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -20,9 +20,6 @@
  *
  ***************************************************************************/
 #include "test.h"
-
-#include <curl/mprintf.h>
-
 #include "memdebug.h"
 
 #define THREADS 2
index 68603c6..44409af 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -23,7 +23,7 @@
 
 /*
   Based on a bug report recipe by Rene Bernhardt in
-  http://curl.haxx.se/mail/lib-2011-10/0323.html
+  https://curl.haxx.se/mail/lib-2011-10/0323.html
 
   It is reproducible by the following steps:
 
index 5cd4644..7d50f89 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a27cefd..493d4d8 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index e9c1ad7..215ab57 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 08c536c..20b0891 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 103a89c..eabe5bf 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 509b671..a960967 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 9da6a67..210a600 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 032eaa0..1a1c077 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 4186c4f..f724e42 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #  include "select.h"
 #endif
 
+#define _MPRINTF_REPLACE
+#include <curl/mprintf.h>
+
+
 #define test_setopt(A,B,C) \
   if((res = curl_easy_setopt((A),(B),(C))) != CURLE_OK) goto test_cleanup
 
@@ -63,6 +67,8 @@ extern void wait_ms(int ms); /* wait this many milliseconds */
 extern int test(char *URL); /* the actual test function provided by each
                                individual libXXX.c file */
 
+extern char *hexdump(unsigned char *buffer, size_t len);
+
 #ifdef UNITTESTS
 extern int unitfail;
 #endif
index c977d21..958719f 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
  ***************************************************************************/
 
 #include "test.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
 #include "testutil.h"
 #include "testtrace.h"
 #include "memdebug.h"
@@ -34,7 +30,7 @@ struct libtest_trace_cfg libtest_debug_config;
 static time_t epoch_offset; /* for test time tracing */
 static int    known_offset; /* for test time tracing */
 
-static 
+static
 void libtest_debug_dump(const char *timebuf, const char *text, FILE *stream,
                         const unsigned char *ptr, size_t size, int nohex)
 {
index 73d2489..fafdf29 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index b18a607..2ff06b1 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a236970..0bc5e03 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 676df25..8922bd4 100644 (file)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
index 54117f8..35d1c7e 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
@@ -108,9 +108,12 @@ while(<FILE>) {
         $linenum = $2;
         $function = $3;
 
-        if($function =~ /free\(0x([0-9a-f]*)/) {
-            $addr = $1;
-            if(!exists $sizeataddr{$addr}) {
+        if($function =~ /free\((\(nil\)|0x([0-9a-f]*))/) {
+            $addr = $2;
+            if($1 eq "(nil)") {
+                ; # do nothing when free(NULL)
+            }
+            elsif(!exists $sizeataddr{$addr}) {
                 print "FREE ERROR: No memory allocated: $line\n";
             }
             elsif(-1 == $sizeataddr{$addr}) {
index 07a588e..bddccb9 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
index cb765a6..5576b2f 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
index 6a02b92..7dcde48 100644 (file)
@@ -4,15 +4,20 @@
 <title>runtests.pl man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
index 994123a..43746d4 100644 (file)
Binary files a/tests/runtests.pdf and b/tests/runtests.pdf differ
index 846687c..f2b73f6 100755 (executable)
@@ -6,11 +6,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -199,8 +199,8 @@ my $valgrind_tool;
 my $gdb = checktestcmd("gdb");
 my $httptlssrv = find_httptlssrv();
 
-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_ssl;        # set if libcurl is built with SSL support
+my $has_largefile;  # 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 $http_unix;      # set if HTTP server has Unix sockets support
@@ -224,9 +224,10 @@ my $has_http2;      # set if libcurl is built with HTTP2 support
 my $has_crypto;     # set if libcurl is built with cryptographic support
 my $has_cares;      # set if built with c-ares
 my $has_threadedres;# set if built with threaded resolver
+my $has_psl;        # set if libcurl is built with PSL support
 
 # this version is decided by the particular nghttp2 library that is being used
-my $h2cver = "h2c-14";
+my $h2cver = "h2c";
 
 my $has_openssl;    # built with a lib using an OpenSSL-like API
 my $has_gnutls;     # built with GnuTLS
@@ -235,7 +236,10 @@ my $has_yassl;      # built with yassl
 my $has_polarssl;   # built with polarssl
 my $has_axtls;      # built with axTLS
 my $has_winssl;     # built with WinSSL    (Secure Channel aka Schannel)
-my $has_darwinssl;  # build with DarwinSSL (Secure Transport)
+my $has_darwinssl;  # built with DarwinSSL (Secure Transport)
+my $has_boringssl;  # built with BoringSSL
+my $has_libressl;   # built with libressl
+my $has_mbedtls;    # built with mbedTLS
 
 my $has_sslpinning; # built with a TLS backend that supports pinning
 
@@ -395,7 +399,7 @@ sub init_serverpidfile_hash {
 sub checkdied {
     use POSIX ":sys_wait_h";
     my $pid = $_[0];
-    if(not defined $pid || $pid <= 0) {
+    if((not defined $pid) || $pid <= 0) {
         return 0;
     }
     my $rc = waitpid($pid, &WNOHANG);
@@ -601,7 +605,7 @@ sub torture {
 
         my $ret = 0;
         if($gdbthis) {
-            runclient($gdbline)
+            runclient($gdbline);
         }
         else {
             $ret = runclient($testcmd);
@@ -2307,7 +2311,7 @@ sub checksystem {
             $curl =~ s/^(.*)(libcurl.*)/$1/g;
 
             $libcurl = $2;
-            if($curl =~ /mingw32/) {
+            if($curl =~ /mingw(32|64)/) {
                 # This is a windows minw32 build, we need to translate the
                 # given path to the "actual" windows path. The MSYS shell
                 # has a builtin 'pwd -W' command which converts the path.
@@ -2344,10 +2348,12 @@ sub checksystem {
            }
            elsif ($libcurl =~ /nss/i) {
                $has_nss=1;
+               $has_sslpinning=1;
                $ssllib="NSS";
            }
-           elsif ($libcurl =~ /yassl/i) {
+           elsif ($libcurl =~ /(yassl|wolfssl)/i) {
                $has_yassl=1;
+               $has_sslpinning=1;
                $ssllib="yassl";
            }
            elsif ($libcurl =~ /polarssl/i) {
@@ -2362,6 +2368,21 @@ sub checksystem {
                $has_darwinssl=1;
                $ssllib="DarwinSSL";
            }
+           elsif ($libcurl =~ /BoringSSL/i) {
+               $has_boringssl=1;
+               $has_sslpinning=1;
+               $ssllib="BoringSSL";
+           }
+           elsif ($libcurl =~ /libressl/i) {
+               $has_libressl=1;
+               $has_sslpinning=1;
+               $ssllib="libressl";
+           }
+           elsif ($libcurl =~ /mbedTLS/i) {
+               $has_mbedtls=1;
+               $has_sslpinning=1;
+               $ssllib="mbedTLS";
+           }
            if ($libcurl =~ /ares/i) {
                $has_cares=1;
                $resolver="c-ares";
@@ -2398,11 +2419,11 @@ sub checksystem {
             }
             if($feat =~ /SSL/i) {
                 # ssl enabled
-                $ssl_version=1;
+                $has_ssl=1;
             }
             if($feat =~ /Largefile/i) {
                 # large file support
-                $large_file=1;
+                $has_largefile=1;
             }
             if($feat =~ /IDN/i) {
                 # IDN support
@@ -2462,6 +2483,10 @@ sub checksystem {
                 # Metalink enabled
                 $has_metalink=1;
             }
+            if($feat =~ /PSL/i) {
+                # PSL enabled
+                $has_psl=1;
+            }
             if($feat =~ /AsynchDNS/i) {
                 if(!$has_cares) {
                     # this means threaded resolver
@@ -2578,72 +2603,67 @@ sub checksystem {
                "*\n");
     }
 
-    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", $has_memory_tracking?"ON ":"OFF");
-    logmsg sprintf("* valgrind:     %8s", $valgrind?"ON ":"OFF");
-    logmsg sprintf("  HTTP IPv6     %s\n", $http_ipv6?"ON ":"OFF");
-    logmsg sprintf("* HTTP Unix     %s\n", $http_unix?"ON ":"OFF");
-    logmsg sprintf("* FTP IPv6      %8s", $ftp_ipv6?"ON ":"OFF");
-    logmsg sprintf("  Libtool lib:  %s\n", $libtool?"ON ":"OFF");
-    logmsg sprintf("* Shared build:      %-3s", $has_shared);
-    logmsg sprintf("  Resolver:     %s\n", $resolver);
-    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);
-    }
-    if($httptlssrv) {
-        logmsg sprintf("*   HTTPTLS/%d ", $HTTPTLSPORT);
-        if($has_ipv6) {
-            logmsg sprintf("HTTPTLS-IPv6/%d ", $HTTPTLS6PORT);
-        }
-        logmsg "\n";
-    }
-    logmsg sprintf("*   HTTP-PIPE/%d \n", $HTTPPIPEPORT);
+    logmsg sprintf("* Servers: %s", $stunnel?"SSL ":"");
+    logmsg sprintf("%s", $http_ipv6?"HTTP-IPv6 ":"");
+    logmsg sprintf("%s", $http_unix?"HTTP-unix ":"");
+    logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"OFF");
 
-    if($has_unix) {
-        logmsg "* Unix socket paths:\n";
-        if($http_unix) {
-            logmsg sprintf("*   HTTP-Unix:%s\n", $HTTPUNIXPATH);
+    logmsg sprintf("* Env: %s%s", $valgrind?"Valgrind ":"",
+                   $run_event_based?"event-based ":"");
+    logmsg sprintf("%s\n", $libtool?"Libtool ":"");
+
+    if($verbose) {
+        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);
+        }
+        if($httptlssrv) {
+            logmsg sprintf("*   HTTPTLS/%d ", $HTTPTLSPORT);
+            if($has_ipv6) {
+                logmsg sprintf("HTTPTLS-IPv6/%d ", $HTTPTLS6PORT);
+            }
+            logmsg "\n";
+        }
+        logmsg sprintf("*   HTTP-PIPE/%d \n", $HTTPPIPEPORT);
 
+        if($has_unix) {
+            logmsg "* Unix socket paths:\n";
+            if($http_unix) {
+                logmsg sprintf("*   HTTP-Unix:%s\n", $HTTPUNIXPATH);
+            }
+        }
+    }
     $has_textaware = ($^O eq 'MSWin32') || ($^O eq 'msys');
 
     logmsg "***************************************** \n";
@@ -2840,7 +2860,7 @@ sub singletest {
             $feature{$1} = $1;
 
             if($1 eq "SSL") {
-                if($ssl_version) {
+                if($has_ssl) {
                     next;
                 }
             }
@@ -2895,7 +2915,7 @@ sub singletest {
                 }
             }
             elsif($1 eq "large_file") {
-                if($large_file) {
+                if($has_largefile) {
                     next;
                 }
             }
@@ -2969,6 +2989,11 @@ sub singletest {
                     next;
                 }
             }
+            elsif($1 eq "PSL") {
+                if($has_psl) {
+                    next;
+                }
+            }
             elsif($1 eq "socks") {
                 next;
             }
@@ -2993,7 +3018,7 @@ sub singletest {
 
             if($f =~ /^!(.*)$/) {
                 if($1 eq "SSL") {
-                    if(!$ssl_version) {
+                    if(!$has_ssl) {
                         next;
                     }
                 }
@@ -3033,7 +3058,7 @@ sub singletest {
                     }
                 }
                 elsif($1 eq "large_file") {
-                    if(!$large_file) {
+                    if(!$has_largefile) {
                         next;
                     }
                 }
@@ -3105,6 +3130,11 @@ sub singletest {
                         next;
                     }
                 }
+                elsif($1 eq "PSL") {
+                    if(!$has_psl) {
+                        next;
+                    }
+                }
                 else {
                     next;
                 }
@@ -3263,18 +3293,50 @@ sub singletest {
 
     if (@replycheck) {
         # we use this file instead to check the final output against
-
+        # get the mode attribute
+        my $filemode=$replycheckattr{'mode'};
+        if($filemode && ($filemode eq "text") && $has_textaware) {
+            # text mode when running on windows: fix line endings
+            map s/\r\n/\n/g, @replycheck;
+            map s/\n/\r\n/g, @replycheck;
+        }
         if($replycheckattr{'nonewline'}) {
             # Yes, we must cut off the final newline from the final line
             # of the datacheck
             chomp($replycheck[$#replycheck]);
         }
-        if($replycheckattr{'mode'}) {
-            $replyattr{'mode'} = $replycheckattr{'mode'};
+
+        for my $partsuffix (('1', '2', '3', '4')) {
+            my @replycheckpart = getpart("reply", "datacheck".$partsuffix);
+            if(@replycheckpart || partexists("reply", "datacheck".$partsuffix) ) {
+                my %replycheckpartattr = getpartattr("reply", "datacheck".$partsuffix);
+                # get the mode attribute
+                my $filemode=$replycheckpartattr{'mode'};
+                if($filemode && ($filemode eq "text") && $has_textaware) {
+                    # text mode when running on windows: fix line endings
+                    map s/\r\n/\n/g, @replycheckpart;
+                    map s/\n/\r\n/g, @replycheckpart;
+                }
+                if($replycheckpartattr{'nonewline'}) {
+                    # Yes, we must cut off the final newline from the final line
+                    # of the datacheck
+                    chomp($replycheckpart[$#replycheckpart]);
+                }
+                push(@replycheck, @replycheckpart);
+            }
         }
 
         @reply=@replycheck;
     }
+    else {
+        # get the mode attribute
+        my $filemode=$replyattr{'mode'};
+        if($filemode && ($filemode eq "text") && $has_textaware) {
+            # text mode when running on windows: fix line endings
+            map s/\r\n/\n/g, @reply;
+            map s/\n/\r\n/g, @reply;
+        }
+    }
 
     # this is the valid protocol blurb curl should generate
     my @protocol= fixarray ( getpart("verify", "protocol") );
@@ -3810,14 +3872,6 @@ sub singletest {
     if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
         # verify the received data
         my @out = loadarray($CURLOUT);
-        # get the mode attribute
-        my $filemode=$replyattr{'mode'};
-        if($filemode && ($filemode eq "text") && $has_textaware) {
-            # text mode when running on windows: fix line endings
-            map s/\r\n/\n/g, @reply;
-            map s/\n/\r\n/g, @reply;
-        }
-
         $res = compare($testnum, $testname, "data", \@out, \@reply);
         if ($res) {
             return 1;
@@ -4322,7 +4376,7 @@ sub startservers {
                 # we can't run ftps tests without stunnel
                 return "no stunnel";
             }
-            if(!$ssl_version) {
+            if(!$has_ssl) {
                 # we can't run ftps tests if libcurl is SSL-less
                 return "curl lacks SSL support";
             }
@@ -4360,7 +4414,7 @@ sub startservers {
                 # we can't run https tests without stunnel
                 return "no stunnel";
             }
-            if(!$ssl_version) {
+            if(!$has_ssl) {
                 # we can't run https tests if libcurl is SSL-less
                 return "curl lacks SSL support";
             }
@@ -4722,7 +4776,7 @@ while(@ARGV) {
     }
     elsif ($ARGV[0] eq "-c") {
         # use this path to curl instead of default
-        $DBGCURL=$CURL=$ARGV[1];
+        $DBGCURL=$CURL="\"$ARGV[1]\"";
         shift @ARGV;
     }
     elsif ($ARGV[0] eq "-vc") {
@@ -4732,7 +4786,7 @@ while(@ARGV) {
         # the development version as then it won't be able to run any tests
         # since it can't verify the servers!
 
-        $VCURL=$ARGV[1];
+        $VCURL="\"$ARGV[1]\"";
         shift @ARGV;
     }
     elsif ($ARGV[0] eq "-d") {
@@ -4990,19 +5044,29 @@ if(!$listonly) {
 # Fetch all disabled tests, if there are any
 #
 
-if(open(D, "<$TESTDIR/DISABLED")) {
-    while(<D>) {
-        if(/^ *\#/) {
-            # allow comments
-            next;
-        }
-        if($_ =~ /(\d+)/) {
-            $disabled{$1}=$1; # disable this test number
+sub disabledtests {
+    my ($file) = @_;
+
+    if(open(D, "<$file")) {
+        while(<D>) {
+            if(/^ *\#/) {
+                # allow comments
+                next;
+            }
+            if($_ =~ /(\d+)/) {
+                $disabled{$1}=$1; # disable this test number
+            }
         }
+        close(D);
     }
-    close(D);
 }
 
+# globally disabled tests
+disabledtests("$TESTDIR/DISABLED");
+
+# locally disabled tests, ignored by git etc
+disabledtests("$TESTDIR/DISABLED.local");
+
 #######################################################################
 # If 'all' tests are requested, find out all test numbers
 #
index 6276110..c770fa5 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
diff --git a/tests/server/CMakeLists.txt b/tests/server/CMakeLists.txt
new file mode 100644 (file)
index 0000000..00f5242
--- /dev/null
@@ -0,0 +1,62 @@
+set(TARGET_LABEL_PREFIX "Test server ")
+
+function(SETUP_EXECUTABLE TEST_NAME)    # ARGN are the files in the test
+  add_executable( ${TEST_NAME} ${ARGN} )
+  string(TOUPPER ${TEST_NAME} UPPER_TEST_NAME)
+
+  include_directories(
+    ${CURL_SOURCE_DIR}/lib      # To be able to reach "curl_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"
+    )
+  if(USE_ARES)
+    include_directories(${CARES_INCLUDE_DIR})
+  endif()
+
+  target_link_libraries(${TEST_NAME} ${CURL_LIBS})
+
+  # Test servers simply are standalone programs that do not use libcurl
+  # library.  For convinience and to ease portability of these servers,
+  # some source code files from the libcurl subdirectory are also used
+  # to build the servers.  In order to achieve proper linkage of these
+  # files on Win32 targets it is necessary to build the test servers
+  # with CURL_STATICLIB defined, independently of how libcurl is built.
+  if(NOT CURL_STATICLIB)
+    set_target_properties(${TEST_NAME} PROPERTIES
+      COMPILE_DEFINITIONS CURL_STATICLIB)       # ${UPPER_TEST_NAME}
+  endif()
+  set_target_properties(${TEST_NAME} PROPERTIES
+    PROJECT_LABEL "${TARGET_LABEL_PREFIX}${TEST_NAME}")
+
+  # Add the postfix to the executable since it is not added
+  # automatically as for modules and shared libraries
+  set_target_properties(${TEST_NAME} PROPERTIES
+    DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
+
+endfunction()
+
+
+transform_makefile_inc("Makefile.inc"
+  "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
+include(${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake)
+
+foreach(EXECUTABLE_NAME ${noinst_PROGRAMS})
+  setup_executable(${EXECUTABLE_NAME} ${${EXECUTABLE_NAME}_SOURCES})
+endforeach()
+
+
+# SET(useful
+# getpart.c getpart.h
+# ${CURL_SOURCE_DIR}/lib/strequal.c
+# ${CURL_SOURCE_DIR}/lib/base64.c
+# ${CURL_SOURCE_DIR}/lib/mprintf.c
+# ${CURL_SOURCE_DIR}/lib/memdebug.c
+# ${CURL_SOURCE_DIR}/lib/timeval.c
+# )
+
+# SETUP_EXECUTABLE(sws sws.c util.c util.h ${useful})
+# SETUP_EXECUTABLE(resolve resolve.c util.c util.h ${useful})
+# SETUP_EXECUTABLE(sockfilt sockfilt.c util.c util.h ${useful} ${CURL_SOURCE_DIR}/lib/inet_pton.c)
+# SETUP_EXECUTABLE(getpart testpart.c ${useful})
+# SETUP_EXECUTABLE(tftpd tftpd.c util.c util.h ${useful} tftp.h)
+
index 7533a98..cc779e6 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -60,5 +60,5 @@ endif
 # Makefile.inc provides neat definitions
 include Makefile.inc
 
-EXTRA_DIST = base64.pl Makefile.inc
+EXTRA_DIST = base64.pl Makefile.inc CMakeLists.txt
 
index f63718a..28306f8 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 @SET_MAKE@
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -79,9 +89,6 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 @DOING_NATIVE_WINDOWS_TRUE@am__append_1 = -DCURL_STATICLIB
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \
-       $(top_srcdir)/depcomp
 noinst_PROGRAMS = getpart$(EXEEXT) resolve$(EXEEXT) rtspd$(EXEEXT) \
        sockfilt$(EXEEXT) sws$(EXEEXT) tftpd$(EXEEXT) \
        fake_ntlm$(EXEEXT)
@@ -106,7 +113,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -303,6 +311,8 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+       $(top_srcdir)/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -361,7 +371,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -383,6 +393,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -416,6 +427,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -427,17 +439,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -483,6 +496,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -504,7 +518,7 @@ top_srcdir = @top_srcdir@
 #
 # 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.
+# are also available at https://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
@@ -613,7 +627,7 @@ fake_ntlm_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
 fake_ntlm_CFLAGS = $(AM_CFLAGS)
 
 # Makefile.inc provides neat definitions
-EXTRA_DIST = base64.pl Makefile.inc
+EXTRA_DIST = base64.pl Makefile.inc CMakeLists.txt
 all: all-am
 
 .SUFFIXES:
@@ -630,7 +644,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/server/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/server/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -639,7 +652,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -2222,6 +2235,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 799f573..5b4d4fe 100644 (file)
@@ -10,7 +10,7 @@
  *
  * 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.
+ * are also available at https://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
index fb86596..0642564 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -209,8 +209,7 @@ static int decodedata(char  **buf,   /* dest buffer */
     ** 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)
-      free(buf64);
+    free(buf64);
 
     return GPE_OUT_OF_MEMORY;
   }
@@ -435,15 +434,13 @@ int getpart(char **outbuf, size_t *outlen,
 
   } /* while */
 
-  if(buffer)
-    free(buffer);
+  free(buffer);
 
   if(error != GPE_OK) {
     if(error == GPE_END_OF_FILE)
       error = GPE_OK;
     else {
-      if(*outbuf)
-        free(*outbuf);
+      free(*outbuf);
       *outbuf = NULL;
       *outlen = 0;
     }
index 25320b0..2773685 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 39849e7..8cd0c26 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 72422ec..0838ce2 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -523,8 +523,7 @@ static int ProcessRequest(struct httprequest *req)
           } while(ptr && *ptr);
           logmsg("Done parsing server commands");
         }
-        if(cmd)
-          free(cmd);
+        free(cmd);
       }
     }
     else {
@@ -993,8 +992,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     }
 
     if(got_exit_signal) {
-      if(ptr)
-        free(ptr);
+      free(ptr);
       return -1;
     }
 
@@ -1005,8 +1003,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
       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);
+      free(ptr);
       return 0;
     }
     else {
@@ -1015,18 +1012,15 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
       fclose(stream);
       if(error) {
         logmsg("getpart() failed with error: %d", error);
-        if(ptr)
-          free(ptr);
+        free(ptr);
         return 0;
       }
     }
   }
 
   if(got_exit_signal) {
-    if(ptr)
-      free(ptr);
-    if(cmd)
-      free(cmd);
+    free(ptr);
+    free(cmd);
     return -1;
   }
 
@@ -1050,10 +1044,8 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     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);
+    free(ptr);
+    free(cmd);
     return -1;
   }
 
@@ -1110,28 +1102,22 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
            RESPONSE_DUMP, error, strerror(error));
 
   if(got_exit_signal) {
-    if(ptr)
-      free(ptr);
-    if(cmd)
-      free(cmd);
+    free(ptr);
+    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);
+    free(ptr);
+    free(cmd);
     return -1;
   }
 
   logmsg("Response sent (%zu bytes) and written to " RESPONSE_DUMP,
          responsesize);
-
-  if(ptr)
-    free(ptr);
+  free(ptr);
 
   if(cmdsize > 0 ) {
     char command[32];
@@ -1169,9 +1155,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
         ptr = NULL;
     } while(ptr && *ptr);
   }
-  if(cmd)
-    free(cmd);
-
+  free(cmd);
   req->open = persistant;
 
   prevtestno = req->testno;
index 59e3695..76c4623 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 3f4cd67..bbcab83 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index a4496e0..2e30f62 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
@@ -509,8 +509,8 @@ static void lograw(unsigned char *buffer, ssize_t len)
  * other handle types supported by WaitForMultipleObjectsEx() as
  * well as disk files, anonymous and names pipes, and character input.
  *
- * http://msdn.microsoft.com/en-us/library/windows/desktop/ms687028.aspx
- * http://msdn.microsoft.com/en-us/library/windows/desktop/ms741572.aspx
+ * https://msdn.microsoft.com/en-us/library/windows/desktop/ms687028.aspx
+ * https://msdn.microsoft.com/en-us/library/windows/desktop/ms741572.aspx
  */
 struct select_ws_wait_data {
   HANDLE handle; /* actual handle to wait for during select */
@@ -547,8 +547,8 @@ static DWORD WINAPI select_ws_wait_thread(LPVOID lpParameter)
         * Approach: Loop till either the internal event is signalled
         *           or if the end of the file has already been reached.
         */
-      while(WaitForMultipleObjectsEx(2, handles, FALSE, INFINITE, FALSE)
-            == WAIT_OBJECT_0 + 1) {
+      while(WaitForMultipleObjectsEx(1, handles, FALSE, 0, FALSE)
+            == WAIT_TIMEOUT) {
         /* get total size of file */
         length = 0;
         size.QuadPart = 0;
@@ -558,7 +558,8 @@ static DWORD WINAPI select_ws_wait_thread(LPVOID lpParameter)
           size.HighPart = length;
           /* get the current position within the file */
           pos.QuadPart = 0;
-          pos.LowPart = SetFilePointer(handle, 0, &pos.HighPart, FILE_CURRENT);
+          pos.LowPart = SetFilePointer(handle, 0, &pos.HighPart,
+                                       FILE_CURRENT);
           if((pos.LowPart != INVALID_SET_FILE_POINTER) ||
              (GetLastError() == NO_ERROR)) {
             /* compare position with size, abort if not equal */
@@ -611,8 +612,8 @@ static DWORD WINAPI select_ws_wait_thread(LPVOID lpParameter)
         * Approach: Loop till either the internal event is signalled
         *           or there is data in the pipe available for reading.
         */
-      while(WaitForMultipleObjectsEx(2, handles, FALSE, INFINITE, FALSE)
-            == WAIT_OBJECT_0 + 1) {
+      while(WaitForMultipleObjectsEx(1, handles, FALSE, 0, FALSE)
+            == WAIT_TIMEOUT) {
         /* peek into the pipe and retrieve the amount of data available */
         length = 0;
         if(PeekNamedPipe(handle, NULL, 0, NULL, &length, NULL)) {
@@ -695,7 +696,7 @@ static int select_ws(int nfds, fd_set *readfds, fd_set *writefds,
 
   /* check if we got descriptors, sleep in case we got none */
   if(!nfds) {
-    Sleep((timeout->tv_sec * 1000) + (timeout->tv_usec / 1000));
+    Sleep((timeout->tv_sec*1000)+(DWORD)(((double)timeout->tv_usec)/1000.0));
     return 0;
   }
 
@@ -856,6 +857,17 @@ static int select_ws(int nfds, fd_set *readfds, fd_set *writefds,
     }
   }
 
+  for(fds = 0; fds < nfds; fds++) {
+    if(FD_ISSET(fds, readfds))
+      logmsg("select_ws: %d is readable", fds);
+
+    if(FD_ISSET(fds, writefds))
+      logmsg("select_ws: %d is writable", fds);
+
+    if(FD_ISSET(fds, exceptfds))
+      logmsg("select_ws: %d is excepted", fds);
+  }
+
   for(idx = 0; idx < wsa; idx++) {
     WSAEventSelect(data[idx].wsasock, NULL, 0);
     WSACloseEvent(data[idx].wsaevent);
index 8cd30c5..ffed383 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
@@ -442,8 +442,7 @@ static int parse_servercmd(struct httprequest *req)
       else
         break;
     }
-    if(orgcmd)
-      free(orgcmd);
+    free(orgcmd);
   }
 
   return 0; /* OK! */
@@ -914,6 +913,8 @@ static void init_httprequest(struct httprequest *req)
   req->callcount = 0;
   req->connect_port = 0;
   req->done_processing = 0;
+  req->upgrade = 0;
+  req->upgrade_request = 0;
 }
 
 /* returns 1 if the connection should be serviced again immediately, 0 if there
@@ -1126,8 +1127,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     }
 
     if(got_exit_signal) {
-      if(ptr)
-        free(ptr);
+      free(ptr);
       return -1;
     }
 
@@ -1137,8 +1137,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
       error = errno;
       logmsg("fopen() failed with error: %d %s", error, strerror(error));
       logmsg("  [4] Error opening file: %s", filename);
-      if(ptr)
-        free(ptr);
+      free(ptr);
       return 0;
     }
     else {
@@ -1147,18 +1146,15 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
       fclose(stream);
       if(error) {
         logmsg("getpart() failed with error: %d", error);
-        if(ptr)
-          free(ptr);
+        free(ptr);
         return 0;
       }
     }
   }
 
   if(got_exit_signal) {
-    if(ptr)
-      free(ptr);
-    if(cmd)
-      free(cmd);
+    free(ptr);
+    free(cmd);
     return -1;
   }
 
@@ -1181,10 +1177,8 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     error = errno;
     logmsg("fopen() failed with error: %d %s", error, strerror(error));
     logmsg("  [5] Error opening file: %s", responsedump);
-    if(ptr)
-      free(ptr);
-    if(cmd)
-      free(cmd);
+    free(ptr);
+    free(cmd);
     return -1;
   }
 
@@ -1228,28 +1222,22 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
            responsedump, error, strerror(error));
 
   if(got_exit_signal) {
-    if(ptr)
-      free(ptr);
-    if(cmd)
-      free(cmd);
+    free(ptr);
+    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);
+    free(ptr);
+    free(cmd);
     return -1;
   }
 
   logmsg("Response sent (%zu bytes) and written to %s",
          responsesize, responsedump);
-
-  if(ptr)
-    free(ptr);
+  free(ptr);
 
   if(cmdsize > 0 ) {
     char command[32];
@@ -1285,9 +1273,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
         ptr = NULL;
     } while(ptr && *ptr);
   }
-  if(cmd)
-    free(cmd);
-
+  free(cmd);
   req->open = use_gopher?FALSE:persistant;
 
   prevtestno = req->testno;
@@ -1334,8 +1320,6 @@ static curl_socket_t connect_to(const char *ipaddr, unsigned short port)
     if(0 != setsockopt(serverfd, IPPROTO_TCP, TCP_NODELAY,
                        (void *)&flag, sizeof(flag)))
       logmsg("====> TCP_NODELAY for server conection failed");
-    else
-      logmsg("TCP_NODELAY set for server conection");
   }
 #endif
 
@@ -1429,6 +1413,7 @@ static void http_connect(curl_socket_t *infdp,
   int max_tunnel_idx; /* CTRL or DATA */
   int loop;
   int i;
+  int timeout_count=0;
 
   /* primary tunnel client endpoint already connected */
   clientfd[CTRL] = *infdp;
@@ -1457,7 +1442,7 @@ static void http_connect(curl_socket_t *infdp,
 
     fd_set input;
     fd_set output;
-    struct timeval timeout = {0, 250000L}; /* 250 ms */
+    struct timeval timeout = {1, 0}; /* 1000 ms */
     ssize_t rc;
     curl_socket_t maxfd = (curl_socket_t)-1;
 
@@ -1518,6 +1503,7 @@ static void http_connect(curl_socket_t *infdp,
     if(rc > 0) {
       /* socket action */
       bool tcp_fin_wr;
+      timeout_count=0;
 
       if(got_exit_signal)
         break;
@@ -1543,8 +1529,6 @@ static void http_connect(curl_socket_t *infdp,
             if(0 != setsockopt(datafd, IPPROTO_TCP, TCP_NODELAY,
                                (void *)&flag, sizeof(flag)))
               logmsg("====> TCP_NODELAY for client DATA conection failed");
-            else
-              logmsg("TCP_NODELAY set for client DATA conection");
           }
 #endif
           req2.pipelining = FALSE;
@@ -1761,7 +1745,13 @@ static void http_connect(curl_socket_t *infdp,
         break;
 
     } /* (rc > 0) */
-
+    else {
+      timeout_count++;
+      if(timeout_count > 5) {
+        logmsg("CONNECT proxy timeout after %d idle seconds!", timeout_count);
+        break;
+      }
+    }
   }
 
 http_connect_cleanup:
@@ -1867,8 +1857,6 @@ static curl_socket_t accept_connection(curl_socket_t sock)
     if(0 != setsockopt(msgsock, IPPROTO_TCP, TCP_NODELAY,
                        (void *)&flag, sizeof(flag)))
       logmsg("====> TCP_NODELAY failed");
-    else
-      logmsg("TCP_NODELAY set");
   }
 #endif
 
index 912096f..86854f6 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 0650efe..3cdd6e6 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 2555793..ffc2496 100644 (file)
@@ -565,7 +565,11 @@ static ssize_t write_behind(struct testcase *test, int convert)
   if(!test->ofile) {
     char outfile[256];
     snprintf(outfile, sizeof(outfile), "log/upload.%ld", test->testno);
+#ifdef WIN32
+    test->ofile=open(outfile, O_CREAT|O_RDWR|O_BINARY, 0777);
+#else
     test->ofile=open(outfile, O_CREAT|O_RDWR, 0777);
+#endif
     if(test->ofile == -1) {
       logmsg("Couldn't create and/or open file %s for upload!", outfile);
       return -1; /* failure! */
@@ -876,8 +880,7 @@ int main(int argc, char **argv)
       memset(&test, 0, sizeof(test));
       if (do_tftp(&test, tp, n) < 0)
         break;
-      if(test.buffer)
-        free(test.buffer);
+      free(test.buffer);
     }
     sclose(peer);
     peer = CURL_SOCKET_BAD;
@@ -952,6 +955,8 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
 #ifdef USE_WINSOCK
   DWORD recvtimeout, recvtimeoutbak;
 #endif
+  char *option = (char *)"mode"; /* mode is implicit */
+  int toggle = 1;
 
   /* Open request dump file. */
   server = fopen(REQUEST_DUMP, "ab");
@@ -967,22 +972,48 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
 
   cp = (char *)&tp->th_stuff;
   filename = cp;
-again:
-  while (cp < &buf.storage[size]) {
-    if (*cp == '\0')
+  do {
+    bool endofit = true;
+    while (cp < &buf.storage[size]) {
+      if (*cp == '\0') {
+        endofit = false;
+        break;
+      }
+      cp++;
+    }
+    if(endofit)
+      /* no more options */
       break;
-    cp++;
-  }
+
+    /* before increasing pointer, make sure it is still within the legal
+       space */
+    if((cp+1) < &buf.storage[size]) {
+      ++cp;
+      if(first) {
+        /* store the mode since we need it later */
+        mode = cp;
+        first = 0;
+      }
+      if(toggle)
+        /* name/value pair: */
+        fprintf(server, "%s: %s\n", option, cp);
+      else {
+        /* store the name pointer */
+        option = cp;
+      }
+      toggle ^= 1;
+    }
+    else
+      /* No more options */
+      break;
+  } while(1);
+
   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);
 
@@ -991,7 +1022,6 @@ again:
       *cp = (char)tolower((int)*cp);
 
   /* store input protocol */
-  fprintf(server, "mode: %s\n", mode);
   fclose(server);
 
   for (pf = formata; pf->f_mode; pf++)
@@ -1089,8 +1119,7 @@ static int parse_servercmd(struct testcase *req)
       else
         break;
     }
-    if(orgcmd)
-      free(orgcmd);
+    free(orgcmd);
   }
 
   return 0; /* OK! */
index 06f3ce1..535554c 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 8d2e582..2a19a61 100644 (file)
@@ -11,7 +11,7 @@
  *
  * 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.
+ * are also available at https://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
index 220fba9..8b2779d 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 914879b..c5618a1 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
@@ -120,8 +120,8 @@ $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
+$hstprvkeyf      = 'curl_host_rsa_key';      # host private key file
+$hstpubkeyf      = 'curl_host_rsa_key.pub';  # host public key file
 $cliprvkeyf      = 'curl_client_key';        # client private key file
 $clipubkeyf      = 'curl_client_key.pub';    # client public key file
 
index d8c2d6f..b0c0229 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
@@ -371,12 +371,12 @@ if((! -e $hstprvkeyf) || (! -s $hstprvkeyf) ||
     # 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 ''") {
+    if(system "\"$sshkeygen\" -q -t rsa -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 ''") {
+    if(system "\"$sshkeygen\" -q -t rsa -f $cliprvkeyf -C 'curl test client' -N ''") {
         logmsg 'Could not generate client key';
         exit 1;
     }
@@ -729,11 +729,11 @@ if(system "\"$sshd\" -t -f $sshdconfig > $sshdlog 2>&1") {
 if((! -e $knownhosts) || (! -s $knownhosts)) {
     logmsg 'generating ssh client known hosts file...' if($verbose);
     unlink($knownhosts);
-    if(open(DSAKEYFILE, "<$hstpubkeyf")) {
-        my @dsahostkey = do { local $/ = ' '; <DSAKEYFILE> };
-        if(close(DSAKEYFILE)) {
+    if(open(RSAKEYFILE, "<$hstpubkeyf")) {
+        my @rsahostkey = do { local $/ = ' '; <RSAKEYFILE> };
+        if(close(RSAKEYFILE)) {
             if(open(KNOWNHOSTS, ">$knownhosts")) {
-                print KNOWNHOSTS "$listenaddr ssh-dss $dsahostkey[1]\n";
+                print KNOWNHOSTS "$listenaddr ssh-rsa $rsahostkey[1]\n";
                 if(!close(KNOWNHOSTS)) {
                     $error = "Error: cannot close file $knownhosts";
                 }
index 89f5eef..5d570d8 100644 (file)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
index ecea911..509f5dc 100644 (file)
@@ -9,7 +9,7 @@
 .\" *
 .\" * 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.
+.\" * are also available at https://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
@@ -32,7 +32,7 @@ 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/
+published on the curl site, at https://curl.haxx.se/auto/
 
 \fIoptions\fP may be omitted. See \fI--setup\fP for what happens then.
 
@@ -79,12 +79,12 @@ Specify your target environment. Recognized strings include 'vc', 'mingw32',
 .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):
+https://curl.haxx.se/auto/autocurl.txt):
 
 .nf
   $ mkdir daily-curl
   $ cd daily-curl
-  $ git clone git://github.com/bagder/curl.git
+  $ git clone git://github.com/curl/curl.git
 .fi
 
 With the curl sources checked out, or downloaded, you can start testing right
index 4a5853f..200b8fd 100644 (file)
@@ -4,15 +4,20 @@
 <title>testcurl.pl man page</title>
 <meta name="generator" content="roffit">
 <STYLE type="text/css">
-P.level0 {
+pre {
+  overflow: auto;
+  margin: 0;
+}
+
+P.level0, pre.level0 {
  padding-left: 2em;
 }
 
-P.level1 {
+P.level1, pre.level1 {
  padding-left: 4em;
 }
 
-P.level2 {
+P.level2, pre.level2 {
  padding-left: 6em;
 }
 
@@ -48,7 +53,7 @@ p.roffit {
 <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">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="https://curl.haxx.se/auto/">https://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>
@@ -75,41 +80,43 @@ p.roffit {
 <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">--email</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">First you make a checkout from git (or you write a script that downloads daily snapshots automatically, find inspiration at <a href="https://curl.haxx.se/auto/autocurl.txt):">https://curl.haxx.se/auto/autocurl.txt):</a> 
+<p class="level0"><pre class="level0">
+&nbsp; $ mkdir daily-curl
+&nbsp; $ cd daily-curl
+&nbsp; $ git clone git://github.com/curl/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"><pre 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"><pre class="level0">
+#35; 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">
+<p class="level0"><pre 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"
+&nbsp;
+&#35; run first test
+$testprog $opts1 | $mail
+&nbsp;
+&#35; 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>
index 993ee5c..1ded385 100644 (file)
Binary files a/tests/testcurl.pdf and b/tests/testcurl.pdf differ
index 8c804e4..dc35a02 100755 (executable)
@@ -6,11 +6,11 @@
 #                            | (__| |_| |  _ <| |___
 #                             \___|\___/|_| \_\_____|
 #
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+# Copyright (C) 1998 - 2015, 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.
+# are also available at https://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
@@ -32,7 +32,7 @@
 # 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/
+# be published on the curl site, at https://curl.haxx.se/auto/
 
 # USAGE:
 # testcurl.pl [options] [curl-daily-name] > output
@@ -46,6 +46,7 @@
 # --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
+# --notes=[notes]          More human-readable information about this configuration
 # --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
@@ -60,6 +61,7 @@
 use strict;
 
 use Cwd;
+use File::Spec;
 
 # Turn on warnings (equivalent to -w, which can't be used with /usr/bin/env)
 #BEGIN { $^W = 1; }
@@ -88,25 +90,28 @@ $setupfile = 'setup';
 $configurebuild = 1;
 while ($ARGV[0]) {
   if ($ARGV[0] =~ /--target=/) {
-    $targetos = (split(/=/, shift @ARGV))[1];
+    $targetos = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--setup=/) {
-    $setupfile = (split(/=/, shift @ARGV))[1];
+    $setupfile = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--extvercmd=/) {
-    $extvercmd = (split(/=/, shift @ARGV))[1];
+    $extvercmd = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--mktarball=/) {
-    $mktarball = (split(/=/, shift @ARGV))[1];
+    $mktarball = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--name=/) {
-    $name = (split(/=/, shift @ARGV))[1];
+    $name = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--email=/) {
-    $email = (split(/=/, shift @ARGV))[1];
+    $email = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--desc=/) {
-    $desc = (split(/=/, shift @ARGV))[1];
+    $desc = (split(/=/, shift @ARGV, 2))[1];
+  }
+  elsif ($ARGV[0] =~ /--notes=/) {
+    $notes = (split(/=/, shift @ARGV, 2))[1];
   }
   elsif ($ARGV[0] =~ /--configure=(.*)/) {
     $confopts = $1;
@@ -383,6 +388,10 @@ if (-d $CURLDIR) {
     mydie "$CURLDIR is not a daily source dir or checked out from git!"
   }
 }
+
+# make the path absolute so we can use it everywhere
+$CURLDIR = File::Spec->rel2abs("$CURLDIR");
+
 $build="build-$$";
 $buildlogname="buildlog-$$";
 $buildlog="$pwd/$buildlogname";
@@ -455,7 +464,7 @@ if ($git) {
       logit "  $_";
     }
 
-    chdir "$pwd/$CURLDIR";
+    chdir "$CURLDIR";
   }
 
   if($nobuildconf) {
@@ -554,7 +563,7 @@ chdir "$pwd/$build";
 
 if ($configurebuild) {
   # run configure script
-  print `../$CURLDIR/configure $confopts 2>&1`;
+  print `$CURLDIR/configure $confopts 2>&1`;
 
   if (-f "lib/Makefile") {
     logit "configure seems to have finished fine";
@@ -564,26 +573,26 @@ if ($configurebuild) {
 } else {
   logit "copying files to build dir ...";
   if (($^O eq 'MSWin32') && ($targetos !~ /netware/)) {
-    system("xcopy /s /q ..\\$CURLDIR .");
+    system("xcopy /s /q \"$CURLDIR\" .");
     system("buildconf.bat");
   }
   elsif ($targetos =~ /netware/) {
-    system("cp -afr ../$CURLDIR/* .");
-    system("cp -af ../$CURLDIR/Makefile.dist Makefile");
+    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") {
+    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("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");
+    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");
     }
   }
index 60fc32d..a4c4e47 100755 (executable)
@@ -10,7 +10,7 @@
 #
 # 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.
+# are also available at https://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
index 4b47f72..33af1ec 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index cd2ed53..e4d694b 100644 (file)
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# Makefile.in generated by automake 1.15 from Makefile.am.
 # @configure_input@
 
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
 
 # This Makefile.in is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # these files are used in every single unit test program
 
 VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
 am__make_running_with_option = \
   case $${target_option-} in \
       ?) ;; \
@@ -80,9 +90,6 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.inc $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(top_srcdir)/mkinstalldirs \
-       $(top_srcdir)/depcomp README
 @BUILD_UNITTESTS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_1)
 subdir = tests/unit
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -105,7 +112,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \
        $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
-mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \
        $(top_builddir)/include/curl/curlbuild.h
 CONFIG_CLEAN_FILES =
@@ -114,7 +122,9 @@ am__EXEEXT_1 = unit1300$(EXEEXT) unit1301$(EXEEXT) unit1302$(EXEEXT) \
        unit1303$(EXEEXT) unit1304$(EXEEXT) unit1305$(EXEEXT) \
        unit1307$(EXEEXT) unit1308$(EXEEXT) unit1309$(EXEEXT) \
        unit1330$(EXEEXT) unit1394$(EXEEXT) unit1395$(EXEEXT) \
-       unit1396$(EXEEXT) unit1397$(EXEEXT) unit1398$(EXEEXT)
+       unit1396$(EXEEXT) unit1397$(EXEEXT) unit1398$(EXEEXT) \
+       unit1600$(EXEEXT) unit1601$(EXEEXT) unit1602$(EXEEXT) \
+       unit1603$(EXEEXT) unit1604$(EXEEXT)
 PROGRAMS = $(noinst_PROGRAMS)
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = ../libtest/unit1300-first.$(OBJEXT)
@@ -212,6 +222,36 @@ unit1398_OBJECTS = $(am_unit1398_OBJECTS)
 unit1398_LDADD = $(LDADD)
 unit1398_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
        $(top_builddir)/lib/libcurlu.la
+am__objects_16 = ../libtest/unit1600-first.$(OBJEXT)
+am_unit1600_OBJECTS = unit1600-unit1600.$(OBJEXT) $(am__objects_16)
+unit1600_OBJECTS = $(am_unit1600_OBJECTS)
+unit1600_LDADD = $(LDADD)
+unit1600_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+       $(top_builddir)/lib/libcurlu.la
+am__objects_17 = ../libtest/unit1601-first.$(OBJEXT)
+am_unit1601_OBJECTS = unit1601-unit1601.$(OBJEXT) $(am__objects_17)
+unit1601_OBJECTS = $(am_unit1601_OBJECTS)
+unit1601_LDADD = $(LDADD)
+unit1601_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+       $(top_builddir)/lib/libcurlu.la
+am__objects_18 = ../libtest/unit1602-first.$(OBJEXT)
+am_unit1602_OBJECTS = unit1602-unit1602.$(OBJEXT) $(am__objects_18)
+unit1602_OBJECTS = $(am_unit1602_OBJECTS)
+unit1602_LDADD = $(LDADD)
+unit1602_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+       $(top_builddir)/lib/libcurlu.la
+am__objects_19 = ../libtest/unit1603-first.$(OBJEXT)
+am_unit1603_OBJECTS = unit1603-unit1603.$(OBJEXT) $(am__objects_19)
+unit1603_OBJECTS = $(am_unit1603_OBJECTS)
+unit1603_LDADD = $(LDADD)
+unit1603_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+       $(top_builddir)/lib/libcurlu.la
+am__objects_20 = ../libtest/unit1604-first.$(OBJEXT)
+am_unit1604_OBJECTS = unit1604-unit1604.$(OBJEXT) $(am__objects_20)
+unit1604_OBJECTS = $(am_unit1604_OBJECTS)
+unit1604_LDADD = $(LDADD)
+unit1604_DEPENDENCIES = $(top_builddir)/src/libcurltool.la \
+       $(top_builddir)/lib/libcurlu.la
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -250,13 +290,16 @@ SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) $(unit1302_SOURCES) \
        $(unit1303_SOURCES) $(unit1304_SOURCES) $(unit1305_SOURCES) \
        $(unit1307_SOURCES) $(unit1308_SOURCES) $(unit1309_SOURCES) \
        $(unit1330_SOURCES) $(unit1394_SOURCES) $(unit1395_SOURCES) \
-       $(unit1396_SOURCES) $(unit1397_SOURCES) $(unit1398_SOURCES)
+       $(unit1396_SOURCES) $(unit1397_SOURCES) $(unit1398_SOURCES) \
+       $(unit1600_SOURCES) $(unit1601_SOURCES) $(unit1602_SOURCES) \
+       $(unit1603_SOURCES) $(unit1604_SOURCES)
 DIST_SOURCES = $(unit1300_SOURCES) $(unit1301_SOURCES) \
        $(unit1302_SOURCES) $(unit1303_SOURCES) $(unit1304_SOURCES) \
        $(unit1305_SOURCES) $(unit1307_SOURCES) $(unit1308_SOURCES) \
        $(unit1309_SOURCES) $(unit1330_SOURCES) $(unit1394_SOURCES) \
        $(unit1395_SOURCES) $(unit1396_SOURCES) $(unit1397_SOURCES) \
-       $(unit1398_SOURCES)
+       $(unit1398_SOURCES) $(unit1600_SOURCES) $(unit1601_SOURCES) \
+       $(unit1602_SOURCES) $(unit1603_SOURCES) $(unit1604_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -281,6 +324,8 @@ am__define_uniq_tagged_files = \
   done | $(am__uniquify_input)`
 ETAGS = etags
 CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.inc \
+       $(top_srcdir)/depcomp README
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -339,7 +384,7 @@ GREP = @GREP@
 HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@
 HAVE_LDAP_SSL = @HAVE_LDAP_SSL@
 HAVE_LIBZ = @HAVE_LIBZ@
-HAVE_SSLEAY_SRP = @HAVE_SSLEAY_SRP@
+HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@
 IDN_ENABLED = @IDN_ENABLED@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
@@ -361,6 +406,7 @@ LIBTOOL = @LIBTOOL@
 LIPO = @LIPO@
 LN_S = @LN_S@
 LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -394,6 +440,7 @@ SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SSL_ENABLED = @SSL_ENABLED@
+SSL_LIBS = @SSL_LIBS@
 STRIP = @STRIP@
 SUPPORT_FEATURES = @SUPPORT_FEATURES@
 SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@
@@ -405,17 +452,18 @@ USE_GNUTLS = @USE_GNUTLS@
 USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@
 USE_LIBRTMP = @USE_LIBRTMP@
 USE_LIBSSH2 = @USE_LIBSSH2@
+USE_MBEDTLS = @USE_MBEDTLS@
 USE_NGHTTP2 = @USE_NGHTTP2@
 USE_NSS = @USE_NSS@
 USE_OPENLDAP = @USE_OPENLDAP@
 USE_POLARSSL = @USE_POLARSSL@
 USE_SCHANNEL = @USE_SCHANNEL@
-USE_SSLEAY = @USE_SSLEAY@
 USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@
 USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@
 VERSION = @VERSION@
 VERSIONNUM = @VERSIONNUM@
 ZLIB_LIBS = @ZLIB_LIBS@
+ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@
 abs_builddir = @abs_builddir@
 abs_srcdir = @abs_srcdir@
 abs_top_builddir = @abs_top_builddir@
@@ -461,6 +509,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -482,7 +531,7 @@ top_srcdir = @top_srcdir@
 #
 # 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.
+# are also available at https://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
@@ -538,8 +587,9 @@ UNITFILES = curlcheck.h \
 
 
 # These are all unit test programs
-UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
- unit1308 unit1309 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398
+UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307     \
+ unit1308 unit1309 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398       \
+ unit1600 unit1601 unit1602 unit1603 unit1604
 
 unit1300_SOURCES = unit1300.c $(UNITFILES)
 unit1300_CPPFLAGS = $(AM_CPPFLAGS)
@@ -574,6 +624,16 @@ unit1397_SOURCES = unit1397.c $(UNITFILES)
 unit1397_CPPFLAGS = $(AM_CPPFLAGS)
 unit1398_SOURCES = unit1398.c $(UNITFILES)
 unit1398_CPPFLAGS = $(AM_CPPFLAGS)
+unit1600_SOURCES = unit1600.c $(UNITFILES)
+unit1600_CPPFLAGS = $(AM_CPPFLAGS)
+unit1601_SOURCES = unit1601.c $(UNITFILES)
+unit1601_CPPFLAGS = $(AM_CPPFLAGS)
+unit1602_SOURCES = unit1602.c $(UNITFILES)
+unit1602_CPPFLAGS = $(AM_CPPFLAGS)
+unit1603_SOURCES = unit1603.c $(UNITFILES)
+unit1603_CPPFLAGS = $(AM_CPPFLAGS)
+unit1604_SOURCES = unit1604.c $(UNITFILES)
+unit1604_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
 all: all-am
 
 .SUFFIXES:
@@ -590,7 +650,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Ma
        echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/unit/Makefile'; \
        $(am__cd) $(top_srcdir) && \
          $(AUTOMAKE) --foreign tests/unit/Makefile
-.PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
        @case '$?' in \
          *config.status*) \
@@ -599,7 +658,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile.inc:
+$(srcdir)/Makefile.inc $(am__empty):
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -714,6 +773,36 @@ unit1397$(EXEEXT): $(unit1397_OBJECTS) $(unit1397_DEPENDENCIES) $(EXTRA_unit1397
 unit1398$(EXEEXT): $(unit1398_OBJECTS) $(unit1398_DEPENDENCIES) $(EXTRA_unit1398_DEPENDENCIES) 
        @rm -f unit1398$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(unit1398_OBJECTS) $(unit1398_LDADD) $(LIBS)
+../libtest/unit1600-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
+       ../libtest/$(DEPDIR)/$(am__dirstamp)
+
+unit1600$(EXEEXT): $(unit1600_OBJECTS) $(unit1600_DEPENDENCIES) $(EXTRA_unit1600_DEPENDENCIES) 
+       @rm -f unit1600$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unit1600_OBJECTS) $(unit1600_LDADD) $(LIBS)
+../libtest/unit1601-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
+       ../libtest/$(DEPDIR)/$(am__dirstamp)
+
+unit1601$(EXEEXT): $(unit1601_OBJECTS) $(unit1601_DEPENDENCIES) $(EXTRA_unit1601_DEPENDENCIES) 
+       @rm -f unit1601$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unit1601_OBJECTS) $(unit1601_LDADD) $(LIBS)
+../libtest/unit1602-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
+       ../libtest/$(DEPDIR)/$(am__dirstamp)
+
+unit1602$(EXEEXT): $(unit1602_OBJECTS) $(unit1602_DEPENDENCIES) $(EXTRA_unit1602_DEPENDENCIES) 
+       @rm -f unit1602$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unit1602_OBJECTS) $(unit1602_LDADD) $(LIBS)
+../libtest/unit1603-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
+       ../libtest/$(DEPDIR)/$(am__dirstamp)
+
+unit1603$(EXEEXT): $(unit1603_OBJECTS) $(unit1603_DEPENDENCIES) $(EXTRA_unit1603_DEPENDENCIES) 
+       @rm -f unit1603$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unit1603_OBJECTS) $(unit1603_LDADD) $(LIBS)
+../libtest/unit1604-first.$(OBJEXT): ../libtest/$(am__dirstamp) \
+       ../libtest/$(DEPDIR)/$(am__dirstamp)
+
+unit1604$(EXEEXT): $(unit1604_OBJECTS) $(unit1604_DEPENDENCIES) $(EXTRA_unit1604_DEPENDENCIES) 
+       @rm -f unit1604$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(unit1604_OBJECTS) $(unit1604_LDADD) $(LIBS)
 
 mostlyclean-compile:
        -rm -f *.$(OBJEXT)
@@ -737,6 +826,11 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1396-first.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1397-first.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1398-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1600-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1601-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1602-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1603-first.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@../libtest/$(DEPDIR)/unit1604-first.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1300-unit1300.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1301-unit1301.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1302-unit1302.Po@am__quote@
@@ -752,6 +846,11 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1396-unit1396.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1397-unit1397.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1398-unit1398.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1600-unit1600.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1601-unit1601.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1602-unit1602.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1603-unit1603.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit1604-unit1604.Po@am__quote@
 
 .c.o:
 @am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -1197,6 +1296,146 @@ unit1398-unit1398.obj: unit1398.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1398_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1398-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
 
+unit1600-unit1600.o: unit1600.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1600-unit1600.o -MD -MP -MF $(DEPDIR)/unit1600-unit1600.Tpo -c -o unit1600-unit1600.o `test -f 'unit1600.c' || echo '$(srcdir)/'`unit1600.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1600-unit1600.Tpo $(DEPDIR)/unit1600-unit1600.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1600.c' object='unit1600-unit1600.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1600-unit1600.o `test -f 'unit1600.c' || echo '$(srcdir)/'`unit1600.c
+
+unit1600-unit1600.obj: unit1600.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1600-unit1600.obj -MD -MP -MF $(DEPDIR)/unit1600-unit1600.Tpo -c -o unit1600-unit1600.obj `if test -f 'unit1600.c'; then $(CYGPATH_W) 'unit1600.c'; else $(CYGPATH_W) '$(srcdir)/unit1600.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1600-unit1600.Tpo $(DEPDIR)/unit1600-unit1600.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1600.c' object='unit1600-unit1600.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1600-unit1600.obj `if test -f 'unit1600.c'; then $(CYGPATH_W) 'unit1600.c'; else $(CYGPATH_W) '$(srcdir)/unit1600.c'; fi`
+
+../libtest/unit1600-first.o: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1600-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1600-first.Tpo -c -o ../libtest/unit1600-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1600-first.Tpo ../libtest/$(DEPDIR)/unit1600-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1600-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1600-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+
+../libtest/unit1600-first.obj: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1600-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1600-first.Tpo -c -o ../libtest/unit1600-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1600-first.Tpo ../libtest/$(DEPDIR)/unit1600-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1600-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1600_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1600-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+
+unit1601-unit1601.o: unit1601.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1601-unit1601.o -MD -MP -MF $(DEPDIR)/unit1601-unit1601.Tpo -c -o unit1601-unit1601.o `test -f 'unit1601.c' || echo '$(srcdir)/'`unit1601.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1601-unit1601.Tpo $(DEPDIR)/unit1601-unit1601.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1601.c' object='unit1601-unit1601.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1601-unit1601.o `test -f 'unit1601.c' || echo '$(srcdir)/'`unit1601.c
+
+unit1601-unit1601.obj: unit1601.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1601-unit1601.obj -MD -MP -MF $(DEPDIR)/unit1601-unit1601.Tpo -c -o unit1601-unit1601.obj `if test -f 'unit1601.c'; then $(CYGPATH_W) 'unit1601.c'; else $(CYGPATH_W) '$(srcdir)/unit1601.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1601-unit1601.Tpo $(DEPDIR)/unit1601-unit1601.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1601.c' object='unit1601-unit1601.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1601-unit1601.obj `if test -f 'unit1601.c'; then $(CYGPATH_W) 'unit1601.c'; else $(CYGPATH_W) '$(srcdir)/unit1601.c'; fi`
+
+../libtest/unit1601-first.o: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1601-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1601-first.Tpo -c -o ../libtest/unit1601-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1601-first.Tpo ../libtest/$(DEPDIR)/unit1601-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1601-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1601-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+
+../libtest/unit1601-first.obj: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1601-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1601-first.Tpo -c -o ../libtest/unit1601-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1601-first.Tpo ../libtest/$(DEPDIR)/unit1601-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1601-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1601_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1601-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+
+unit1602-unit1602.o: unit1602.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1602-unit1602.o -MD -MP -MF $(DEPDIR)/unit1602-unit1602.Tpo -c -o unit1602-unit1602.o `test -f 'unit1602.c' || echo '$(srcdir)/'`unit1602.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1602-unit1602.Tpo $(DEPDIR)/unit1602-unit1602.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1602.c' object='unit1602-unit1602.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1602-unit1602.o `test -f 'unit1602.c' || echo '$(srcdir)/'`unit1602.c
+
+unit1602-unit1602.obj: unit1602.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1602-unit1602.obj -MD -MP -MF $(DEPDIR)/unit1602-unit1602.Tpo -c -o unit1602-unit1602.obj `if test -f 'unit1602.c'; then $(CYGPATH_W) 'unit1602.c'; else $(CYGPATH_W) '$(srcdir)/unit1602.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1602-unit1602.Tpo $(DEPDIR)/unit1602-unit1602.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1602.c' object='unit1602-unit1602.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1602-unit1602.obj `if test -f 'unit1602.c'; then $(CYGPATH_W) 'unit1602.c'; else $(CYGPATH_W) '$(srcdir)/unit1602.c'; fi`
+
+../libtest/unit1602-first.o: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1602-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1602-first.Tpo -c -o ../libtest/unit1602-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1602-first.Tpo ../libtest/$(DEPDIR)/unit1602-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1602-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1602-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+
+../libtest/unit1602-first.obj: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1602-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1602-first.Tpo -c -o ../libtest/unit1602-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1602-first.Tpo ../libtest/$(DEPDIR)/unit1602-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1602-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1602_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1602-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+
+unit1603-unit1603.o: unit1603.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1603-unit1603.o -MD -MP -MF $(DEPDIR)/unit1603-unit1603.Tpo -c -o unit1603-unit1603.o `test -f 'unit1603.c' || echo '$(srcdir)/'`unit1603.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1603-unit1603.Tpo $(DEPDIR)/unit1603-unit1603.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1603.c' object='unit1603-unit1603.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1603-unit1603.o `test -f 'unit1603.c' || echo '$(srcdir)/'`unit1603.c
+
+unit1603-unit1603.obj: unit1603.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1603-unit1603.obj -MD -MP -MF $(DEPDIR)/unit1603-unit1603.Tpo -c -o unit1603-unit1603.obj `if test -f 'unit1603.c'; then $(CYGPATH_W) 'unit1603.c'; else $(CYGPATH_W) '$(srcdir)/unit1603.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1603-unit1603.Tpo $(DEPDIR)/unit1603-unit1603.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1603.c' object='unit1603-unit1603.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1603-unit1603.obj `if test -f 'unit1603.c'; then $(CYGPATH_W) 'unit1603.c'; else $(CYGPATH_W) '$(srcdir)/unit1603.c'; fi`
+
+../libtest/unit1603-first.o: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1603-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1603-first.Tpo -c -o ../libtest/unit1603-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1603-first.Tpo ../libtest/$(DEPDIR)/unit1603-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1603-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1603-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+
+../libtest/unit1603-first.obj: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1603-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1603-first.Tpo -c -o ../libtest/unit1603-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1603-first.Tpo ../libtest/$(DEPDIR)/unit1603-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1603-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1603_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1603-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+
+unit1604-unit1604.o: unit1604.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1604-unit1604.o -MD -MP -MF $(DEPDIR)/unit1604-unit1604.Tpo -c -o unit1604-unit1604.o `test -f 'unit1604.c' || echo '$(srcdir)/'`unit1604.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1604-unit1604.Tpo $(DEPDIR)/unit1604-unit1604.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1604.c' object='unit1604-unit1604.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1604-unit1604.o `test -f 'unit1604.c' || echo '$(srcdir)/'`unit1604.c
+
+unit1604-unit1604.obj: unit1604.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unit1604-unit1604.obj -MD -MP -MF $(DEPDIR)/unit1604-unit1604.Tpo -c -o unit1604-unit1604.obj `if test -f 'unit1604.c'; then $(CYGPATH_W) 'unit1604.c'; else $(CYGPATH_W) '$(srcdir)/unit1604.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/unit1604-unit1604.Tpo $(DEPDIR)/unit1604-unit1604.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='unit1604.c' object='unit1604-unit1604.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unit1604-unit1604.obj `if test -f 'unit1604.c'; then $(CYGPATH_W) 'unit1604.c'; else $(CYGPATH_W) '$(srcdir)/unit1604.c'; fi`
+
+../libtest/unit1604-first.o: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1604-first.o -MD -MP -MF ../libtest/$(DEPDIR)/unit1604-first.Tpo -c -o ../libtest/unit1604-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1604-first.Tpo ../libtest/$(DEPDIR)/unit1604-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1604-first.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1604-first.o `test -f '../libtest/first.c' || echo '$(srcdir)/'`../libtest/first.c
+
+../libtest/unit1604-first.obj: ../libtest/first.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../libtest/unit1604-first.obj -MD -MP -MF ../libtest/$(DEPDIR)/unit1604-first.Tpo -c -o ../libtest/unit1604-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) ../libtest/$(DEPDIR)/unit1604-first.Tpo ../libtest/$(DEPDIR)/unit1604-first.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='../libtest/first.c' object='../libtest/unit1604-first.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(unit1604_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../libtest/unit1604-first.obj `if test -f '../libtest/first.c'; then $(CYGPATH_W) '../libtest/first.c'; else $(CYGPATH_W) '$(srcdir)/../libtest/first.c'; fi`
+
 mostlyclean-libtool:
        -rm -f *.lo
 
@@ -1408,6 +1647,8 @@ uninstall-am:
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
        tags tags-am uninstall uninstall-am
 
+.PRECIOUS: Makefile
+
 
 # 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.
index 526ec1f..c5a1523 100644 (file)
@@ -5,8 +5,9 @@ UNITFILES = curlcheck.h \
  ../libtest/first.c
 
 # These are all unit test programs
-UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307 \
- unit1308 unit1309 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398
+UNITPROGS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305 unit1307     \
+ unit1308 unit1309 unit1330 unit1394 unit1395 unit1396 unit1397 unit1398       \
+ unit1600 unit1601 unit1602 unit1603 unit1604
 
 unit1300_SOURCES = unit1300.c $(UNITFILES)
 unit1300_CPPFLAGS = $(AM_CPPFLAGS)
@@ -56,3 +57,18 @@ unit1397_CPPFLAGS = $(AM_CPPFLAGS)
 unit1398_SOURCES = unit1398.c $(UNITFILES)
 unit1398_CPPFLAGS = $(AM_CPPFLAGS)
 
+unit1600_SOURCES = unit1600.c $(UNITFILES)
+unit1600_CPPFLAGS = $(AM_CPPFLAGS)
+
+unit1601_SOURCES = unit1601.c $(UNITFILES)
+unit1601_CPPFLAGS = $(AM_CPPFLAGS)
+
+unit1602_SOURCES = unit1602.c $(UNITFILES)
+unit1602_CPPFLAGS = $(AM_CPPFLAGS)
+
+unit1603_SOURCES = unit1603.c $(UNITFILES)
+unit1603_CPPFLAGS = $(AM_CPPFLAGS)
+
+unit1604_SOURCES = unit1604.c $(UNITFILES)
+unit1604_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS)
+
index 96203e0..22f05c1 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
     unitfail++;                                          \
   }
 
-#define verify_memory(dynamic, check, len)                              \
-  if(dynamic && memcmp(dynamic, check, len)) {                          \
-    fprintf(stderr, "%s:%d The dynamic string didn't match '%s'\n",     \
-            __FILE__, __LINE__, check);                                 \
-    unitfail++;                                                         \
+#define verify_memory(dynamic, check, len)                                  \
+  if(dynamic && memcmp(dynamic, check, len)) {                              \
+    fprintf(stderr, "%s:%d Memory buffer mismatch size %d. '%s' is not\n", \
+            __FILE__, __LINE__, len, hexdump((unsigned char *)check, len));      \
+    fprintf(stderr, "%s:%d the same as '%s'\n",                             \
+            __FILE__, __LINE__, hexdump((unsigned char *)dynamic, len));         \
+    unitfail++;                                                             \
   }
 
 /* fail() is for when the test case figured out by itself that a check
index 2b83416..2040f70 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 47df481..a50fc67 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 412a71f..165c708 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index b48a625..70be2a8 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 12b0273..8c306e4 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 91e3b0b..c99435d 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2015, 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.
+ * are also available at https://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
 #include "memdebug.h" /* LAST include file */
 
 static struct SessionHandle *data;
-static struct curl_hash *hp;
+static struct curl_hash hp;
 static char *data_key;
 static struct Curl_dns_entry *data_node;
 
 static CURLcode unit_setup( void )
 {
+  int rc;
   data = curl_easy_init();
   if (!data)
     return CURLE_OUT_OF_MEMORY;
 
-  hp = Curl_mk_dnscache();
-  if(!hp) {
+  rc = Curl_mk_dnscache(&hp);
+  if(rc) {
     curl_easy_cleanup(data);
     curl_global_cleanup();
     return CURLE_OUT_OF_MEMORY;
@@ -65,10 +66,8 @@ static void unit_stop( void )
     Curl_freeaddrinfo(data_node->addr);
     free(data_node);
   }
-  if (data_key)
-    free(data_key);
-
-  Curl_hash_destroy(hp);
+  free(data_key);
+  Curl_hash_destroy(&hp);
 
   curl_easy_cleanup(data);
   curl_global_cleanup();
@@ -130,12 +129,11 @@ UNITTEST_START
     abort_unless(rc == CURLE_OK, "data node creation failed");
     key_len = strlen(data_key);
 
-    nodep = Curl_hash_add(hp, data_key, key_len+1, data_node);
+    data_node->inuse = 1; /* hash will hold the reference */
+    nodep = Curl_hash_add(&hp, data_key, key_len+1, data_node);
     abort_unless(nodep, "insertion into hash failed");
     /* Freeing will now be done by Curl_hash_destroy */
     data_node = NULL;
-
-    /* To do: test retrieval, deletion, edge conditions */
   }
 
 UNITTEST_STOP
index c26e80c..89f4983 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 80e6c57..968bcff 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 1304ba1..3cf6eef 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 31caf30..e6431bb 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index a3ef8fa..3818016 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index 6f9fc8c..13f4641 100644 (file)
@@ -5,11 +5,11 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2016, 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.
+ * are also available at https://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
@@ -62,6 +62,9 @@ UNITTEST_START
     { "/../../moo?andnot/../yay", "/moo?andnot/../yay"},
     { "/123?foo=/./&bar=/../", "/123?foo=/./&bar=/../"},
     { "/../moo/..?what", "/?what" },
+    { "/", "/" },
+    { "", "" },
+    { "/.../", "/.../" },
   };
 
   for(i=0; i < sizeof(pairs)/sizeof(pairs[0]); i++) {
index b18d7a8..8a78c95 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
index fd60c23..c05c119 100644 (file)
@@ -15,7 +15,7 @@ static void unit_stop( void )
 UNITTEST_START
 
 /* only these backends define the tested functions */
-#if defined(USE_SSLEAY) || defined(USE_AXTLS) || defined(USE_GSKIT)
+#if defined(USE_OPENSSL) || defined(USE_AXTLS) || defined(USE_GSKIT)
 
   /* here you start doing things and checking that the results are good */
 
index e579a62..e9cc675 100644 (file)
@@ -9,7 +9,7 @@
  *
  * 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.
+ * are also available at https://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
diff --git a/tests/unit/unit1600.c b/tests/unit/unit1600.c
new file mode 100644 (file)
index 0000000..2769e90
--- /dev/null
@@ -0,0 +1,63 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 "curlcheck.h"
+
+#include "urldata.h"
+#include "curl_ntlm_core.h"
+
+CURL *easy;
+
+static CURLcode unit_setup(void)
+{
+  easy = curl_easy_init();
+  return CURLE_OK;
+}
+
+static void unit_stop(void)
+{
+  curl_easy_cleanup(easy);
+}
+
+UNITTEST_START
+
+#if defined(USE_NTLM) && (!defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO))
+  unsigned char output[21];
+  unsigned char *testp = output;
+  Curl_ntlm_core_mk_nt_hash(easy, "1", output);
+
+  verify_memory(testp,
+              "\x69\x94\x3c\x5e\x63\xb4\xd2\xc1\x04\xdb"
+              "\xbc\xc1\x51\x38\xb7\x2b\x00\x00\x00\x00\x00", 21);
+
+  Curl_ntlm_core_mk_nt_hash(easy, "hello-you-fool", output);
+
+  verify_memory(testp,
+              "\x39\xaf\x87\xa6\x75\x0a\x7a\x00\xba\xa0"
+              "\xd3\x4f\x04\x9e\xc1\xd0\x00\x00\x00\x00\x00", 21);
+
+  Curl_ntlm_core_mk_nt_hash(easy, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", output);
+
+  verify_memory(testp,
+                "\x36\x9d\xae\x06\x84\x7e\xe1\xc1\x4a\x94\x39\xea\x6f\x44\x8c\x65\x00\x00\x00\x00\x00", 21);
+#endif
+
+UNITTEST_STOP
diff --git a/tests/unit/unit1601.c b/tests/unit/unit1601.c
new file mode 100644 (file)
index 0000000..91c850c
--- /dev/null
@@ -0,0 +1,53 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2015, 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 https://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 "curlcheck.h"
+
+#include "curl_md5.h"
+
+static CURLcode unit_setup(void)
+{
+  return CURLE_OK;
+}
+
+static void unit_stop(void)
+{
+
+}
+
+UNITTEST_START
+
+#ifndef CURL_DISABLE_CRYPTO_AUTH
+  unsigned char output[16];
+  unsigned char *testp = output;
+  Curl_md5it(output, (const unsigned char *)"1");
+
+  verify_memory(testp,
+                "\xc4\xca\x42\x38\xa0\xb9\x23\x82\x0d\xcc\x50\x9a\x6f\x75\x84\x9b", 16);
+
+  Curl_md5it(output, (const unsigned char *)"hello-you-fool");
+
+  verify_memory(testp,
+                "\x88\x67\x0b\x6d\x5d\x74\x2f\xad\xa5\xcd\xf9\xb6\x82\x87\x5f\x22", 16);
+#endif
+
+
+UNITTEST_STOP
diff --git a/tests/unit/unit1602.c b/tests/unit/unit1602.c
new file mode 100644 (file)
index 0000000..6381555
--- /dev/null
@@ -0,0 +1,79 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2011, 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 https://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 "curlcheck.h"
+
+#define ENABLE_CURLX_PRINTF
+#include "curlx.h"
+
+#include "hash.h"
+
+#include "memdebug.h" /* LAST include file */
+
+static struct curl_hash hash_static;
+
+static void mydtor(void *p)
+{
+  int *ptr = (int*)p;
+  free(ptr);
+}
+
+static CURLcode unit_setup( void )
+{
+  return Curl_hash_init(&hash_static, 7, Curl_hash_str,
+                        Curl_str_key_compare, mydtor);
+}
+
+static void unit_stop( void )
+{
+  Curl_hash_destroy(&hash_static);
+}
+
+UNITTEST_START
+  int *value;
+  int *value2;
+  int *nodep;
+  size_t klen = sizeof(int);
+
+  int key = 20;
+  int key2 = 25;
+
+
+  value = malloc(sizeof(int));
+  abort_unless(value != NULL, "Out of memory");
+  *value = 199;
+  nodep = Curl_hash_add(&hash_static, &key, klen, value);
+  if(!nodep)
+    free(value);
+  abort_unless(nodep, "insertion into hash failed");
+  
+  Curl_hash_clean(&hash_static);
+
+  /* Attempt to add another key/value pair */
+  value2 = malloc(sizeof(int));
+  abort_unless(value2 != NULL, "Out of memory");
+  *value2 = 204;
+  nodep = Curl_hash_add(&hash_static, &key2, klen, value2);
+  if(!nodep)
+    free(value2);
+  abort_unless(nodep, "insertion into hash failed");
+
+UNITTEST_STOP
diff --git a/tests/unit/unit1603.c b/tests/unit/unit1603.c
new file mode 100644 (file)
index 0000000..ffcd756
--- /dev/null
@@ -0,0 +1,150 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 2015, 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 https://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 "curlcheck.h"
+
+#define ENABLE_CURLX_PRINTF
+#include "curlx.h"
+
+#include "hash.h"
+
+#include "memdebug.h" /* LAST include file */
+
+static struct curl_hash hash_static;
+static const int slots = 3;
+
+static void mydtor(void *p)
+{
+  /* Data are statically allocated */
+ (void)p; /* unused */
+}
+
+static CURLcode unit_setup( void )
+{
+  return Curl_hash_init(&hash_static, slots, Curl_hash_str,
+                        Curl_str_key_compare, mydtor);
+}
+
+static void unit_stop( void )
+{
+  Curl_hash_destroy(&hash_static);
+}
+
+UNITTEST_START
+  char key1[] = "key1";
+  char key2[] = "key2b";
+  char key3[] = "key3";
+  char key4[] = "key4";
+  char notakey[] = "notakey";
+  char *nodep;
+  int rc;
+
+  /* Ensure the key hashes are as expected in order to test both hash
+     collisions and a full table. Unfortunately, the hashes can vary
+     between architectures. */
+  if(Curl_hash_str(key1, strlen(key1), slots) != 1 ||
+     Curl_hash_str(key2, strlen(key2), slots) != 0 ||
+     Curl_hash_str(key3, strlen(key3), slots) != 2 ||
+     Curl_hash_str(key4, strlen(key4), slots) != 1)
+    fprintf(stderr, "Warning: hashes are not computed as expected on this "
+            "architecture; test coverage will be less comprehensive\n");
+
+  nodep = Curl_hash_add(&hash_static, &key1, strlen(key1), &key1);
+  fail_unless(nodep, "insertion into hash failed");
+  nodep = Curl_hash_pick(&hash_static, &key1, strlen(key1));
+  fail_unless(nodep == key1, "hash retrieval failed");
+
+  nodep = Curl_hash_add(&hash_static, &key2, strlen(key2), &key2);
+  fail_unless(nodep, "insertion into hash failed");
+  nodep = Curl_hash_pick(&hash_static, &key2, strlen(key2));
+  fail_unless(nodep == key2, "hash retrieval failed");
+
+  nodep = Curl_hash_add(&hash_static, &key3, strlen(key3), &key3);
+  fail_unless(nodep, "insertion into hash failed");
+  nodep = Curl_hash_pick(&hash_static, &key3, strlen(key3));
+  fail_unless(nodep == key3, "hash retrieval failed");
+
+  /* The fourth element exceeds the number of slots & collides */
+  nodep = Curl_hash_add(&hash_static, &key4, strlen(key4), &key4);
+  fail_unless(nodep, "insertion into hash failed");
+  nodep = Curl_hash_pick(&hash_static, &key4, strlen(key4));
+  fail_unless(nodep == key4, "hash retrieval failed");
+
+  /* Make sure all elements are still accessible */
+  nodep = Curl_hash_pick(&hash_static, &key1, strlen(key1));
+  fail_unless(nodep == key1, "hash retrieval failed");
+  nodep = Curl_hash_pick(&hash_static, &key2, strlen(key2));
+  fail_unless(nodep == key2, "hash retrieval failed");
+  nodep = Curl_hash_pick(&hash_static, &key3, strlen(key3));
+  fail_unless(nodep == key3, "hash retrieval failed");
+  nodep = Curl_hash_pick(&hash_static, &key4, strlen(key4));
+  fail_unless(nodep == key4, "hash retrieval failed");
+
+  /* Delete the second of two entries in a bucket */
+  rc = Curl_hash_delete(&hash_static, &key4, strlen(key4));
+  fail_unless(rc == 0, "hash delete failed");
+  nodep = Curl_hash_pick(&hash_static, &key1, strlen(key1));
+  fail_unless(nodep == key1, "hash retrieval failed");
+  nodep = Curl_hash_pick(&hash_static, &key4, strlen(key4));
+  fail_unless(!nodep, "hash retrieval should have failed");
+
+  /* Insert that deleted node again */
+  nodep = Curl_hash_add(&hash_static, &key4, strlen(key4), &key4);
+  fail_unless(nodep, "insertion into hash failed");
+  nodep = Curl_hash_pick(&hash_static, &key4, strlen(key4));
+  fail_unless(nodep == key4, "hash retrieval failed");
+
+  /* Delete the first of two entries in a bucket */
+  rc = Curl_hash_delete(&hash_static, &key1, strlen(key1));
+  fail_unless(rc == 0, "hash delete failed");
+  nodep = Curl_hash_pick(&hash_static, &key1, strlen(key1));
+  fail_unless(!nodep, "hash retrieval should have failed");
+  nodep = Curl_hash_pick(&hash_static, &key4, strlen(key4));
+  fail_unless(nodep == key4, "hash retrieval failed");
+
+  /* Delete the remaining one of two entries in a bucket */
+  rc = Curl_hash_delete(&hash_static, &key4, strlen(key4));
+  fail_unless(rc == 0, "hash delete failed");
+  nodep = Curl_hash_pick(&hash_static, &key1, strlen(key1));
+  fail_unless(!nodep, "hash retrieval should have failed");
+  nodep = Curl_hash_pick(&hash_static, &key4, strlen(key4));
+  fail_unless(!nodep, "hash retrieval should have failed");
+
+  /* Delete an already deleted node */
+  rc = Curl_hash_delete(&hash_static, &key4, strlen(key4));
+  fail_unless(rc, "hash delete should have failed");
+
+  /* Replace an existing node */
+  nodep = Curl_hash_add(&hash_static, &key1, strlen(key1), &notakey);
+  fail_unless(nodep, "insertion into hash failed");
+  nodep = Curl_hash_pick(&hash_static, &key1, strlen(key1));
+  fail_unless(nodep == notakey, "hash retrieval failed");
+
+  /* Make sure all remaining elements are still accessible */
+  nodep = Curl_hash_pick(&hash_static, &key2, strlen(key2));
+  fail_unless(nodep == key2, "hash retrieval failed");
+  nodep = Curl_hash_pick(&hash_static, &key3, strlen(key3));
+  fail_unless(nodep == key3, "hash retrieval failed");
+
+  /* Clean up */
+  Curl_hash_clean(&hash_static);
+
+UNITTEST_STOP
diff --git a/tests/unit/unit1604.c b/tests/unit/unit1604.c
new file mode 100644 (file)
index 0000000..c61f010
--- /dev/null
@@ -0,0 +1,346 @@
+/***************************************************************************
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
+ *                             \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) 1998 - 2016, 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 "curlcheck.h"
+
+#include "tool_cfgable.h"
+#include "tool_doswin.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "memdebug.h" /* LAST include file */
+
+static CURLcode unit_setup(void)
+{
+  return CURLE_OK;
+}
+
+static void unit_stop(void)
+{
+
+}
+
+#if defined(MSDOS) || defined(WIN32)
+
+static char *getflagstr(int flags) {
+  char *buf = malloc(256);
+  fail_unless(buf, "out of memory");
+  sprintf(buf, "%s,%s,%s,%s",
+    ((flags & SANITIZE_ALLOW_COLONS) ? "SANITIZE_ALLOW_COLONS" : ""),
+    ((flags & SANITIZE_ALLOW_PATH) ? "SANITIZE_ALLOW_PATH" : ""),
+    ((flags & SANITIZE_ALLOW_RESERVED) ? "SANITIZE_ALLOW_RESERVED" : ""),
+    ((flags & SANITIZE_ALLOW_TRUNCATE) ? "SANITIZE_ALLOW_TRUNCATE" : ""));
+  return buf;
+}
+
+static char *getcurlcodestr(int cc) {
+  char *buf = malloc(256);
+  fail_unless(buf, "out of memory");
+  sprintf(buf, "%s (%d)",
+    (cc == SANITIZE_ERR_OK ? "SANITIZE_ERR_OK" :
+     cc == SANITIZE_ERR_BAD_ARGUMENT ? "SANITIZE_ERR_BAD_ARGUMENT" :
+     cc == SANITIZE_ERR_INVALID_PATH ? "SANITIZE_ERR_INVALID_PATH" :
+     cc == SANITIZE_ERR_OUT_OF_MEMORY ? "SANITIZE_ERR_OUT_OF_MEMORY" :
+     "unexpected error code - add name"),
+    cc);
+  return buf;
+}
+
+struct data {
+  const char *input;
+  int flags;
+  const char *expected_output;
+  CURLcode expected_result;
+};
+
+UNITTEST_START
+
+{ /* START sanitize_file_name */
+  struct data data[] = {
+    { "", 0,
+      "", SANITIZE_ERR_OK
+    },
+    { "normal filename", 0,
+      "normal filename", SANITIZE_ERR_OK
+    },
+    { "control\tchar", 0,
+      "control_char", SANITIZE_ERR_OK
+    },
+    { "banned*char", 0,
+      "banned_char", SANITIZE_ERR_OK
+    },
+    { "f:foo", 0,
+      "f_foo", SANITIZE_ERR_OK
+    },
+    { "f:foo", SANITIZE_ALLOW_COLONS,
+      "f:foo", SANITIZE_ERR_OK
+    },
+    { "f:foo", SANITIZE_ALLOW_PATH,
+      "f:foo", SANITIZE_ERR_OK
+    },
+    { "f:\\foo", 0,
+      "f__foo", SANITIZE_ERR_OK
+    },
+    { "f:\\foo", SANITIZE_ALLOW_PATH,
+      "f:\\foo", SANITIZE_ERR_OK
+    },
+    { "f:/foo", 0,
+      "f__foo", SANITIZE_ERR_OK
+    },
+    { "f:/foo", SANITIZE_ALLOW_PATH,
+      "f:/foo", SANITIZE_ERR_OK
+    },
+#ifndef MSDOS
+    { "\\\\?\\C:\\foo", SANITIZE_ALLOW_PATH,
+      "\\\\?\\C:\\foo", SANITIZE_ERR_OK
+    },
+    { "\\\\?\\C:\\foo", 0,
+      "____C__foo", SANITIZE_ERR_OK
+    },
+#endif
+    { "foo:bar", 0,
+      "foo_bar", SANITIZE_ERR_OK
+    },
+    { "foo|<>/bar\\\":?*baz", 0,
+      "foo____bar_____baz", SANITIZE_ERR_OK
+    },
+    { "f:foo::$DATA", 0,
+      "f_foo__$DATA", SANITIZE_ERR_OK
+    },
+    { "con . air", 0,
+      "con _ air", SANITIZE_ERR_OK
+    },
+    { "con.air", 0,
+      "con_air", SANITIZE_ERR_OK
+    },
+    { "con:/x", 0,
+      "con__x", SANITIZE_ERR_OK
+    },
+    { "file . . . .  ..  .", 0,
+      "file", SANITIZE_ERR_OK
+    },
+    { "foo . . ? . . ", 0,
+      "foo . . _", SANITIZE_ERR_OK
+    },
+    { "com1", 0,
+      "_com1", SANITIZE_ERR_OK
+    },
+    { "com1", SANITIZE_ALLOW_RESERVED,
+      "com1", SANITIZE_ERR_OK
+    },
+    { "f:\\com1", 0,
+      "f__com1", SANITIZE_ERR_OK
+    },
+    { "f:\\com1", SANITIZE_ALLOW_PATH,
+      "f:\\_com1", SANITIZE_ERR_OK
+    },
+    { "f:\\com1", SANITIZE_ALLOW_RESERVED,
+      "f__com1", SANITIZE_ERR_OK
+    },
+    { "f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_COLONS,
+      "f:_com1", SANITIZE_ERR_OK
+    },
+    { "f:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
+      "f:\\com1", SANITIZE_ERR_OK
+    },
+    { "com1:\\com1", SANITIZE_ALLOW_PATH,
+      "_com1:\\_com1", SANITIZE_ERR_OK
+    },
+    { "com1:\\com1", SANITIZE_ALLOW_RESERVED | SANITIZE_ALLOW_PATH,
+      "com1:\\com1", SANITIZE_ERR_OK
+    },
+    { "com1:\\com1", SANITIZE_ALLOW_RESERVED,
+      "com1__com1", SANITIZE_ERR_OK
+    },
+#ifndef MSDOS
+    { "\\com1", SANITIZE_ALLOW_PATH,
+      "\\_com1", SANITIZE_ERR_OK
+    },
+    { "\\\\com1", SANITIZE_ALLOW_PATH,
+      "\\\\com1", SANITIZE_ERR_OK
+    },
+    { "\\\\?\\C:\\com1", SANITIZE_ALLOW_PATH,
+      "\\\\?\\C:\\com1", SANITIZE_ERR_OK
+    },
+#endif
+    { "CoM1", 0,
+      "_CoM1", SANITIZE_ERR_OK
+    },
+    { "CoM1", SANITIZE_ALLOW_RESERVED,
+      "CoM1", SANITIZE_ERR_OK
+    },
+    { "COM56", 0,
+      "COM56", SANITIZE_ERR_OK
+    },
+    /* At the moment we expect a maximum path length of 259. I assume MSDOS
+       has variable max path lengths depending on compiler that are shorter
+       so currently these "good" truncate tests won't run on MSDOS */
+#ifndef MSDOS
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE,
+      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFFFF", SANITIZE_ERR_OK
+    },
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
+      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFF\\FFFFF", SANITIZE_ERR_OK
+    },
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE,
+      "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFF_F", SANITIZE_ERR_OK
+    },
+#endif /* !MSDOS */
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+        0,
+      NULL, SANITIZE_ERR_INVALID_PATH
+    },
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFFF\\FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE,
+      NULL, SANITIZE_ERR_INVALID_PATH
+    },
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFFFFFFFFFFFFFFFFFFFFFFFF\\FFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
+      NULL, SANITIZE_ERR_INVALID_PATH
+    },
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FFF\\FFFFFFFFFFFFFFFFFFFFF:FFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
+      NULL, SANITIZE_ERR_INVALID_PATH
+    },
+    { "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+      "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+      "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"
+      "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"
+      "EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE"
+      "FF\\F:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
+        SANITIZE_ALLOW_TRUNCATE | SANITIZE_ALLOW_PATH,
+      NULL, SANITIZE_ERR_INVALID_PATH
+    },
+    { NULL, 0,
+      NULL, SANITIZE_ERR_BAD_ARGUMENT
+    },
+  };
+
+  size_t i;
+
+  for(i = 0; i < sizeof data / sizeof data[0]; ++i) {
+    char *output = NULL;
+    char *flagstr = NULL;
+    char *received_ccstr = NULL;
+    char *expected_ccstr = NULL;
+
+    CURLcode res = sanitize_file_name(&output, data[i].input, data[i].flags);
+
+    if(res == data[i].expected_result &&
+       ((!output && !data[i].expected_output) ||
+        (output && data[i].expected_output &&
+         !strcmp(output, data[i].expected_output)))) { /* OK */
+      free(output);
+      continue;
+    }
+
+    flagstr = getflagstr(data[i].flags);
+    received_ccstr = getcurlcodestr(res);
+    expected_ccstr = getcurlcodestr(data[i].expected_result);
+
+    unitfail++;
+    fprintf(stderr, "\n"
+            "%s:%d sanitize_file_name failed.\n"
+            "input: %s\n"
+            "flags: %s\n"
+            "output: %s\n"
+            "result: %s\n"
+            "expected output: %s\n"
+            "expected result: %s\n",
+            __FILE__, __LINE__,
+            data[i].input,
+            flagstr,
+            (output ? output : "(null)"),
+            received_ccstr,
+            (data[i].expected_output ? data[i].expected_output : "(null)"),
+            expected_ccstr);
+
+    free(output);
+    free(flagstr);
+    free(received_ccstr);
+    free(expected_ccstr);
+  }
+} /* END sanitize_file_name */
+
+#else
+UNITTEST_START
+
+{
+  fprintf(stderr, "Skipped test not for this platform\n");
+}
+#endif /* MSDOS || WIN32 */
+
+UNITTEST_STOP
index f811993..838183b 100644 (file)
@@ -9,7 +9,7 @@
 #
 # 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.
+# are also available at https://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
index 757c41f..0d60b96 100644 (file)
@@ -1,5 +1,5 @@
-Building with Visual C++, prerequises\r
-=====================================\r
+Building with Visual C++, prerequisites\r
+=======================================\r
 \r
    This document describes how to compile, build and install curl and libcurl\r
    from sources using the Visual C++ build tool. To build with VC++, you will\r
@@ -12,14 +12,14 @@ Building with Visual C++, prerequises
 \r
    The latest Platform SDK can be downloaded freely from:\r
 \r
-    http://msdn.microsoft.com/en-us/windows/bb980924\r
+    https://msdn.microsoft.com/en-us/windows/bb980924\r
 \r
    If you are building with VC6 then you will also need the February 2003\r
    Edition of the Platform SDK which can be downloaded from:\r
 \r
-    http://www.microsoft.com/en-us/download/details.aspx?id=12261\r
+    https://www.microsoft.com/en-us/download/details.aspx?id=12261\r
 \r
-   If you wish to support zlib, openssl, ssh2, you will have to download\r
+   If you wish to support zlib, openssl, c-ares, ssh2, you will have to download\r
    them separately and copy them to the deps directory as shown below:\r
    \r
    somedirectory\\r
@@ -58,20 +58,41 @@ a directory named using the options given to the nmake call.
 nmake /f Makefile.vc mode=<static or dll> <options>\r
 \r
 where <options> is one or many of:\r
-  VC=<6,7,8,9,10,11,12>        - VC versions\r
+  VC=<6,7,8,9,10,11,12,14>     - VC versions\r
   WITH_DEVEL=<path>            - Paths for the development files (SSL, zlib, etc.)\r
                                  Defaults to sibbling directory deps: ../deps\r
                                  Libraries can be fetched at http://windows.php.net/downloads/php-sdk/deps/\r
                                  Uncompress them into the deps folder.\r
   WITH_SSL=<dll or static>     - Enable OpenSSL support, DLL or static\r
+  WITH_CARES=<dll or static>   - Enable c-ares support, DLL or static\r
   WITH_ZLIB=<dll or static>    - Enable zlib support, DLL or static\r
   WITH_SSH2=<dll or static>    - Enable libSSH2 support, DLL or static\r
   ENABLE_SSPI=<yes or no>      - Enable SSPI support, defaults to yes\r
   ENABLE_IPV6=<yes or no>      - Enable IPv6, defaults to yes\r
   ENABLE_IDN=<yes or no>       - Enable use of Windows IDN APIs, defaults to yes\r
                                  Requires Windows Vista or later, or installation from:\r
-                                 http://www.microsoft.com/downloads/details.aspx?FamilyID=AD6158D7-DDBA-416A-9109-07607425A815\r
+                                 https://www.microsoft.com/downloads/details.aspx?FamilyID=AD6158D7-DDBA-416A-9109-07607425A815\r
   ENABLE_WINSSL=<yes or no>    - Enable native Windows SSL support, defaults to yes\r
   GEN_PDB=<yes or no>          - Generate Program Database (debug symbols for release build)\r
   DEBUG=<yes or no>            - Debug builds\r
   MACHINE=<x86 or x64>         - Target architecture (default is x86)\r
+\r
+Static linking of Microsoft's C RunTime (CRT):\r
+==============================================\r
+If you are using mode=static nmake will create and link to the static build of\r
+libcurl but *not* the static CRT. If you must you can force nmake to link in\r
+the static CRT by passing RTLIBCFG=static. Typically you shouldn't use that\r
+option, and nmake will default to the DLL CRT. RTLIBCFG is rarely used and\r
+therefore rarely tested. When passing RTLIBCFG for a configuration that was\r
+already built but not with that option, or if the option was specified\r
+differently, you must destroy the build directory containing the configuration\r
+so that nmake can build it from scratch.\r
+\r
+Legacy Windows and SSL\r
+======================\r
+When you build curl using the build files in this directory the default SSL\r
+backend will be WinSSL (Windows SSPI, more specifically Schannel), the native\r
+SSL library that comes with the Windows OS. WinSSL in Windows <= XP is not able\r
+to connect to servers that no longer support the legacy handshakes and\r
+algorithms used by those versions. If you will be using curl in one of those\r
+earlier versions of Windows you should choose another SSL backend like OpenSSL.\r
index 56c81ad..13eafac 100644 (file)
@@ -9,7 +9,7 @@
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
index 6dc58c4..5653232 100644 (file)
@@ -15,12 +15,13 @@ CFGSET=true
 \r
 !MESSAGE Usage: nmake /f Makefile.vc mode=<static or dll> <options>\r
 !MESSAGE where <options> is one or many of:\r
-!MESSAGE   VC=<6,7,8,9,10,11,12>        - VC versions\r
+!MESSAGE   VC=<6,7,8,9,10,11,12,14>     - VC versions\r
 !MESSAGE   WITH_DEVEL=<path>            - Paths for the development files (SSL, zlib, etc.)\r
 !MESSAGE                                  Defaults to sibbling directory deps: ../deps\r
 !MESSAGE                                  Libraries can be fetched at http://pecl2.php.net/downloads/php-windows-builds/\r
 !MESSAGE                                  Uncompress them into the deps folder.\r
 !MESSAGE   WITH_SSL=<dll or static>     - Enable OpenSSL support, DLL or static\r
+!MESSAGE   WITH_CARES=<dll or static>   - Enable c-ares support, DLL or static\r
 !MESSAGE   WITH_ZLIB=<dll or static>    - Enable zlib support, DLL or static\r
 !MESSAGE   WITH_SSH2=<dll or static>    - Enable libSSH2 support, DLL or static\r
 !MESSAGE   ENABLE_IDN=<yes or no>       - Enable use of Windows IDN APIs, defaults to yes\r
@@ -107,6 +108,14 @@ USE_SSL = true
 SSL     = static\r
 !ENDIF\r
 \r
+!IF "$(WITH_CARES)"=="dll"\r
+USE_CARES = true\r
+CARES     = dll\r
+!ELSEIF "$(WITH_CARES)"=="static"\r
+USE_CARES = true\r
+CARES     = static\r
+!ENDIF\r
+\r
 !IF "$(WITH_ZLIB)"=="dll"\r
 USE_ZLIB = true\r
 ZLIB     = dll\r
@@ -141,6 +150,10 @@ CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-static
 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-ssl-$(SSL)\r
 !ENDIF\r
 \r
+!IF "$(USE_CARES)"=="true"\r
+CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-cares-$(CARES)\r
+!ENDIF\r
+\r
 !IF "$(USE_ZLIB)"=="true"\r
 CONFIG_NAME_LIB = $(CONFIG_NAME_LIB)-zlib-$(ZLIB)\r
 !ENDIF\r
@@ -169,6 +182,9 @@ CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
 DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\\r
 \r
 $(MODE):\r
+       @IF NOT EXIST ..\include\curl\curlbuild.h ( \\r
+          CALL ..\buildconf.bat \\r
+       )\r
        @SET DIROBJ=$(LIBCURL_DIROBJ)\r
        @SET MACRO_NAME=LIBCURL_OBJS\r
        @SET OUTFILE=LIBCURL_OBJS.inc\r
index b9e150c..44076b9 100644 (file)
@@ -5,11 +5,11 @@
 #                            | (__| |_| |  _ <| |___\r
 #                             \___|\___/|_| \_\_____|\r
 #\r
-# Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.\r
+# Copyright (C) 1999 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.\r
 #\r
 # This software is licensed as described in the file COPYING, which\r
 # you should have received as part of this distribution. The terms\r
-# are also available at http://curl.haxx.se/docs/copyright.html.\r
+# are also available at https://curl.haxx.se/docs/copyright.html.\r
 #\r
 # You may opt to use, copy, modify, merge, publish, distribute and/or sell\r
 # copies of the Software, and permit persons to whom the Software is\r
@@ -22,7 +22,7 @@
 \r
 ###########################################################################\r
 #\r
-# Makefile for building libcurl with MSVC 6, 7, 8, 9, 10, 11 and 12\r
+# Makefile for building libcurl with MSVC 6, 7, 8, 9, 10, 11, 12 and 14\r
 #\r
 # Usage: see usage message below\r
 #        Should be invoked from winbuild directory\r
@@ -118,9 +118,30 @@ SSL          = static
 !ENDIF\r
 \r
 !IFDEF USE_SSL\r
-SSL_CFLAGS   = /DUSE_SSLEAY /I"$(DEVEL_INCLUDE)/openssl"\r
+SSL_CFLAGS   = /DUSE_OPENSSL /I"$(DEVEL_INCLUDE)/openssl"\r
 !ENDIF\r
 \r
+!IF "$(WITH_CARES)"=="dll"\r
+!IF "$(DEBUG)"=="yes"\r
+CARES_LIBS     = caresd.lib\r
+!ELSE\r
+CARES_LIBS     = cares.lib\r
+!ENDIF\r
+USE_CARES      = true\r
+CARES          = dll\r
+!ELSEIF "$(WITH_CARES)"=="static"\r
+!IF "$(DEBUG)"=="yes"\r
+CARES_LIBS     = libcaresd.lib\r
+!ELSE\r
+CARES_LIBS     = libcares.lib\r
+!ENDIF\r
+USE_CARES      = true\r
+CARES          = static\r
+!ENDIF\r
+\r
+!IFDEF USE_CARES\r
+CARES_CFLAGS   = /DUSE_ARES /I"$(DEVEL_INCLUDE)/cares"\r
+!ENDIF\r
 \r
 !IF "$(WITH_ZLIB)"=="dll"\r
 ZLIB_LIBS   = zlib.lib\r
@@ -297,6 +318,11 @@ CFLAGS = $(CFLAGS) $(SSL_CFLAGS)
 LFLAGS = $(LFLAGS) $(SSL_LFLAGS) $(SSL_LIBS)\r
 !ENDIF\r
 \r
+!IF "$(USE_CARES)"=="true"\r
+CFLAGS = $(CFLAGS) $(CARES_CFLAGS)\r
+LFLAGS = $(LFLAGS) $(CARES_LFLAGS) $(CARES_LIBS)\r
+!ENDIF\r
+\r
 !IF "$(USE_ZLIB)"=="true"\r
 CFLAGS = $(CFLAGS) $(ZLIB_CFLAGS)\r
 LFLAGS = $(LFLAGS) $(ZLIB_LFLAGS) $(ZLIB_LIBS)\r
@@ -376,6 +402,7 @@ package: $(TARGET)
 \r
 $(TARGET): $(LIB_OBJS) $(LIB_DIROBJ) $(DISTDIR)\r
        @echo Using SSL: $(USE_SSL)\r
+       @echo Using c-ares: $(USE_CARES)\r
        @echo Using SSH2: $(USE_SSH2)\r
        @echo Using ZLIB: $(USE_ZLIB)\r
        @echo Using IDN:  $(USE_IDN)\r